diff options
| author | 2018-12-04 13:24:29 -0800 | |
|---|---|---|
| committer | 2018-12-08 21:18:40 +0000 | |
| commit | 934420353154cb9e694f49dd1d5f5267d971e8dc (patch) | |
| tree | 2ac9f3b8c49df91726163c8ac4b20fde166f368c | |
| parent | e770d22dc90e7ae80d86d7c82503c330f2ad3ed4 (diff) | |
When creating a stack for the recents animation, ensure it is not top most
- When the avoidMoveToFront flag is set on the activity options (used only
for the recents animation), avoid creating a stack for the new recents
activity in the top, as this changes the visibility of the front most
task that we are animating from.
Bug: 119661847
Test: adb shell am force-stop com.google.android.apps.nexuslauncher
then try and swipe up
Change-Id: I06bcb304f5c4e7fd3a7b1d9b72d8e119b865f448
| -rw-r--r-- | services/core/java/com/android/server/wm/ActivityStarter.java | 3 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/RecentsAnimation.java | 17 |
2 files changed, 15 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java index bc2136ebcf15..c75a85fc586a 100644 --- a/services/core/java/com/android/server/wm/ActivityStarter.java +++ b/services/core/java/com/android/server/wm/ActivityStarter.java @@ -2506,8 +2506,9 @@ class ActivityStarter { // full resolution. mLaunchParams.mPreferredDisplayId = mPreferredDisplayId != DEFAULT_DISPLAY ? mPreferredDisplayId : INVALID_DISPLAY; + final boolean onTop = aOptions == null || !aOptions.getAvoidMoveToFront(); final ActivityStack stack = - mRootActivityContainer.getLaunchStack(r, aOptions, task, ON_TOP, mLaunchParams); + mRootActivityContainer.getLaunchStack(r, aOptions, task, onTop, mLaunchParams); mLaunchParams.mPreferredDisplayId = mPreferredDisplayId; return stack; } diff --git a/services/core/java/com/android/server/wm/RecentsAnimation.java b/services/core/java/com/android/server/wm/RecentsAnimation.java index 942218244505..7dcfa12ca88e 100644 --- a/services/core/java/com/android/server/wm/RecentsAnimation.java +++ b/services/core/java/com/android/server/wm/RecentsAnimation.java @@ -107,7 +107,7 @@ class RecentsAnimation implements RecentsAnimationCallbacks, && recentsComponent.equals(intent.getComponent()) ? ACTIVITY_TYPE_RECENTS : ACTIVITY_TYPE_HOME; - final ActivityStack targetStack = mDefaultDisplay.getStack(WINDOWING_MODE_UNDEFINED, + ActivityStack targetStack = mDefaultDisplay.getStack(WINDOWING_MODE_UNDEFINED, mTargetActivityType); ActivityRecord targetActivity = getTargetActivity(targetStack, intent.getComponent()); final boolean hasExistingActivity = targetActivity != null; @@ -153,7 +153,7 @@ class RecentsAnimation implements RecentsAnimationCallbacks, "startRecentsActivity"); } } else { - // No recents activity + // No recents activity, create the new recents activity bottom most ActivityOptions options = ActivityOptions.makeBasic(); options.setLaunchActivityType(mTargetActivityType); options.setAvoidMoveToFront(); @@ -166,11 +166,20 @@ class RecentsAnimation implements RecentsAnimationCallbacks, .setActivityOptions(SafeActivityOptions.fromBundle(options.toBundle())) .setMayWait(userId) .execute(); - mWindowManager.prepareAppTransition(TRANSIT_NONE, false); - mWindowManager.executeAppTransition(); + // Move the recents activity into place for the animation targetActivity = mDefaultDisplay.getStack(WINDOWING_MODE_UNDEFINED, mTargetActivityType).getTopActivity(); + targetStack = targetActivity.getActivityStack(); + mDefaultDisplay.moveStackBehindBottomMostVisibleStack(targetStack); + if (DEBUG) { + Slog.d(TAG, "Moved stack=" + targetStack + " behind stack=" + + mDefaultDisplay.getStackAbove(targetStack)); + } + + mWindowManager.prepareAppTransition(TRANSIT_NONE, false); + mWindowManager.executeAppTransition(); + // TODO: Maybe wait for app to draw in this particular case? |