From 5dcb275cc1f181d57fc1e1b115008be1ed9cff58 Mon Sep 17 00:00:00 2001 From: Chong Zhang Date: Tue, 18 Aug 2015 13:50:26 -0700 Subject: Restore recent task to freeform space when resizing bug: 22984782 Change-Id: I95b7b7b4871865102a279e529f068479e9b5df34 --- core/java/android/app/ActivityManager.java | 6 ++++++ .../android/server/am/ActivityStackSupervisor.java | 19 ++++++++++++++----- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index 8c25c58e4a71..aeaec745c176 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -404,6 +404,12 @@ public class ActivityManager { */ public static final int COMPAT_MODE_TOGGLE = 2; + /** + * Invalid stack ID. + * @hide + */ + public static final int INVALID_STACK_ID = -1; + /** * First static stack ID. * @hide diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index a449baf4ffd2..5503f5216a76 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -562,7 +562,7 @@ public final class ActivityStackSupervisor implements DisplayListener { return task; } - if (!restoreRecentTaskLocked(task)) { + if (!restoreRecentTaskLocked(task, INVALID_STACK_ID)) { if (DEBUG_RECENTS) Slog.w(TAG_RECENTS, "Couldn't restore task id=" + id + " found in recents"); return null; @@ -2956,7 +2956,7 @@ public final class ActivityStackSupervisor implements DisplayListener { task.mBounds = task.mLastNonFullscreenBounds = new Rect(bounds); if (task.stack != null && task.stack.mStackId != FREEFORM_WORKSPACE_STACK_ID) { // re-restore the task so it can have the proper stack association. - restoreRecentTaskLocked(task); + restoreRecentTaskLocked(task, FREEFORM_WORKSPACE_STACK_ID); } return; } @@ -3021,9 +3021,18 @@ public final class ActivityStackSupervisor implements DisplayListener { return mNextFreeStackId; } - private boolean restoreRecentTaskLocked(TaskRecord task) { - final int stackId = - mLeanbackOnlyDevice ? mHomeStack.mStackId : task.getLaunchStackId(mFocusedStack); + /** + * Restores a recent task to a stack + * @param task The recent task to be restored. + * @param stackId The stack to restore the task to (default launch stack will be used + * if stackId is invalid). + * @return true if the task has been restored successfully. + */ + private boolean restoreRecentTaskLocked(TaskRecord task, int stackId) { + if (stackId == INVALID_STACK_ID) { + stackId = mLeanbackOnlyDevice ? + mHomeStack.mStackId : task.getLaunchStackId(mFocusedStack); + } if (task.stack != null) { // Task has already been restored once. See if we need to do anything more if (task.stack.mStackId == stackId) { -- cgit v1.2.3-59-g8ed1b