Merge "Fix unminimizing dock stack for AppTask.moveToFront" into nyc-dev
am: 6321f42fbe

* commit '6321f42fbee425745de9636d45e4973fa6c470b9':
  Fix unminimizing dock stack for AppTask.moveToFront

Change-Id: I82b844611cb1761a681f91e2e26b25308202c6da
diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
index 8d6b7ee..1cf121c 100644
--- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
@@ -4404,6 +4404,12 @@
                     "startActivityFromRecentsInner: Task " + taskId + " not found.");
         }
 
+        // Since we don't have an actual source record here, we assume that the currently focused
+        // activity was the source.
+        final ActivityStack focusedStack = getFocusedStack();
+        final ActivityRecord sourceRecord =
+                focusedStack != null ? focusedStack.topActivity() : null;
+
         if (launchStackId != INVALID_STACK_ID) {
             if (task.stack.mStackId != launchStackId) {
                 moveTaskToStackLocked(
@@ -4428,6 +4434,11 @@
             if (launchStackId == DOCKED_STACK_ID) {
                 setResizingDuringAnimation(taskId);
             }
+
+            mService.mActivityStarter.postStartActivityUncheckedProcessing(task.getTopActivity(),
+                    ActivityManager.START_TASK_TO_FRONT,
+                    sourceRecord != null ? sourceRecord.task.stack.mStackId : INVALID_STACK_ID,
+                    sourceRecord, task.stack);
             return ActivityManager.START_TASK_TO_FRONT;
         }
         callingUid = task.mCallingUid;
diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java
index b8480ea..8dc13d4 100644
--- a/services/core/java/com/android/server/am/ActivityStarter.java
+++ b/services/core/java/com/android/server/am/ActivityStarter.java
@@ -540,12 +540,13 @@
         } finally {
             mService.mWindowManager.continueSurfaceLayout();
         }
-        postStartActivityUncheckedProcessing(r, err, stack.mStackId);
+        postStartActivityUncheckedProcessing(r, err, stack.mStackId, mSourceRecord, mTargetStack);
         return err;
     }
 
     void postStartActivityUncheckedProcessing(
-            ActivityRecord r, int result, int prevFocusedStackId) {
+            ActivityRecord r, int result, int prevFocusedStackId, ActivityRecord sourceRecord,
+            ActivityStack targetStack) {
 
         if (result < START_SUCCESS) {
             // If someone asked to have the keyguard dismissed on the next activity start,
@@ -559,7 +560,7 @@
         if (r.task != null && r.task.stack != null) {
             startedActivityStackId = r.task.stack.mStackId;
         } else if (mTargetStack != null) {
-            startedActivityStackId = mTargetStack.mStackId;
+            startedActivityStackId = targetStack.mStackId;
         }
 
         // If we launched the activity from a no display activity that was launched from the home
@@ -567,9 +568,9 @@
         // noDisplay activity will be finished shortly after.
         // TODO: We should prevent noDisplay activities from affecting task/stack ordering and
         // visibility instead of using this flag.
-        final boolean noDisplayActivityOverHome = mSourceRecord != null
-                && mSourceRecord.noDisplay
-                && mSourceRecord.task.getTaskToReturnTo() == HOME_ACTIVITY_TYPE;
+        final boolean noDisplayActivityOverHome = sourceRecord != null
+                && sourceRecord.noDisplay
+                && sourceRecord.task.getTaskToReturnTo() == HOME_ACTIVITY_TYPE;
         if (startedActivityStackId == DOCKED_STACK_ID
                 && (prevFocusedStackId == HOME_STACK_ID || noDisplayActivityOverHome)) {
             final ActivityStack homeStack = mSupervisor.getStack(HOME_STACK_ID);
@@ -1811,7 +1812,8 @@
                 final int result = startActivityUnchecked(
                         pal.r, pal.sourceRecord, null, null, pal.startFlags, resume, null, null);
                 postStartActivityUncheckedProcessing(
-                        pal.r, result, mSupervisor.mFocusedStack.mStackId);
+                        pal.r, result, mSupervisor.mFocusedStack.mStackId, mSourceRecord,
+                        mTargetStack);
             } catch (Exception e) {
                 Slog.e(TAG, "Exception during pending activity launch pal=" + pal, e);
                 pal.sendErrorResult(e.getMessage());