From a82aa09ba3b8cada49f0b20777e7502e86bb0248 Mon Sep 17 00:00:00 2001 From: Craig Mautner Date: Fri, 13 Sep 2013 15:34:08 -0700 Subject: [PATCH] When launching home activity, make sure it is top. Because recents sits on the same stack as launcher it can sometimes be above launcher. When we were launching home activity because the flag told us to we would sometimes launch recents instead. This fix makes sure that the home activity is on the top when it is supposed to be launched next. Previously this was fixed by having recents move itself to the back of the stack after it launched an activity (b/9750207 and ag/336019). But that solution caused the AppTransition to be set to TRANSIT_TASK_TO_BACK which left the SOFT_INPUT_IS_FORWARD_NAVIGATION flag unset. This in turn caused IMEs to remain unlaunched when returning from recents (b/10240567). Fixes bug 10240567. Change-Id: I35c6619af0e68d0e6d9ab87cad06ea7c27e11e27 --- .../android/systemui/recent/RecentsPanelView.java | 1 - .../java/com/android/server/am/ActivityStack.java | 13 +++++++++++++ .../android/server/am/ActivityStackSupervisor.java | 1 + services/java/com/android/server/am/TaskRecord.java | 4 ++++ 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java index 3946d1cb6cec9..ada30acc68cf2 100644 --- a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java @@ -354,7 +354,6 @@ public class RecentsPanelView extends FrameLayout implements OnItemClickListener if (mPopup != null) { mPopup.dismiss(); } - ((RecentsActivity) mContext).moveTaskToBack(true); } } diff --git a/services/java/com/android/server/am/ActivityStack.java b/services/java/com/android/server/am/ActivityStack.java index e994c23b35308..064b3a8cdedf7 100644 --- a/services/java/com/android/server/am/ActivityStack.java +++ b/services/java/com/android/server/am/ActivityStack.java @@ -2910,6 +2910,19 @@ final class ActivityStack { mWindowManager.prepareAppTransition(transit, false); } + void moveHomeTaskToTop() { + final int top = mTaskHistory.size() - 1; + for (int taskNdx = top; taskNdx >= 0; --taskNdx) { + final TaskRecord task = mTaskHistory.get(taskNdx); + if (task.isHomeTask()) { + mTaskHistory.remove(taskNdx); + mTaskHistory.add(top, task); + mWindowManager.moveTaskToTop(task.taskId); + return; + } + } + } + final boolean findTaskToMoveToFrontLocked(int taskId, int flags, Bundle options) { final TaskRecord task = taskForIdLocked(taskId); if (task != null) { diff --git a/services/java/com/android/server/am/ActivityStackSupervisor.java b/services/java/com/android/server/am/ActivityStackSupervisor.java index 3e0b5eb04ba76..e0eb2c431ce7e 100644 --- a/services/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/java/com/android/server/am/ActivityStackSupervisor.java @@ -284,6 +284,7 @@ public final class ActivityStackSupervisor { if (prev != null) { prev.mLaunchHomeTaskNext = false; } + mHomeStack.moveHomeTaskToTop(); ActivityRecord r = mHomeStack.topRunningActivityLocked(null); if (r != null) { mService.setFocusedActivityLocked(r); diff --git a/services/java/com/android/server/am/TaskRecord.java b/services/java/com/android/server/am/TaskRecord.java index 63793fa906fff..479665c973d3e 100644 --- a/services/java/com/android/server/am/TaskRecord.java +++ b/services/java/com/android/server/am/TaskRecord.java @@ -322,6 +322,10 @@ final class TaskRecord extends ThumbnailHolder { return subtask.activity; } + boolean isHomeTask() { + return mTaskType == ActivityRecord.HOME_ACTIVITY_TYPE; + } + boolean isApplicationTask() { return mTaskType == ActivityRecord.APPLICATION_ACTIVITY_TYPE; }