From c6976f0206a1b1c436a39a3d979b3355abb88fdb Mon Sep 17 00:00:00 2001 From: Jorim Jaggi Date: Wed, 18 Apr 2018 16:31:07 +0200 Subject: [PATCH] Disallow animating when opening home Since this might trigger a minimizing home animation, this is going to cause the stack clip to animate during the app transition, leading to an issue where the primary stack isn't cropped correctly in this transition. Test: go/wm-smoke Test: Split screen, go home, open assistant, do some action, press home Test: Same but open a 2ndary app that's not home Fixes: 77675425 Change-Id: I4ac92337fe2140406ba962f6b1da1f18de5d3a56 --- .../com/android/server/wm/AppWindowToken.java | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java index a701d42986e34..25882b56a6ff7 100644 --- a/services/core/java/com/android/server/wm/AppWindowToken.java +++ b/services/core/java/com/android/server/wm/AppWindowToken.java @@ -17,6 +17,7 @@ package com.android.server.wm; import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; +import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY; import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED; import static android.content.pm.ActivityInfo.CONFIG_ORIENTATION; import static android.content.pm.ActivityInfo.CONFIG_SCREEN_SIZE; @@ -31,9 +32,12 @@ import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING; import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION; +import static android.view.WindowManager.TRANSIT_DOCK_TASK_FROM_RECENTS; +import static android.view.WindowManager.TRANSIT_WALLPAPER_OPEN; import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_ANIM; import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER; import static android.view.WindowManager.TRANSIT_UNSET; +import static com.android.server.wm.AppTransition.isKeyguardGoingAwayTransit; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ADD_REMOVE; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ANIM; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_APP_TRANSITIONS; @@ -1680,12 +1684,24 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree } } + private boolean shouldAnimate(int transit) { + final boolean isSplitScreenPrimary = + getWindowingMode() == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY; + final boolean allowSplitScreenPrimaryAnimation = transit != TRANSIT_WALLPAPER_OPEN; + + // We animate always if it's not split screen primary, and only some special cases in split + // screen primary because it causes issues with stack clipping when we run an un-minimize + // animation at the same time. + return !isSplitScreenPrimary || allowSplitScreenPrimaryAnimation; + } + boolean applyAnimationLocked(WindowManager.LayoutParams lp, int transit, boolean enter, boolean isVoiceInteraction) { - if (mService.mDisableTransitionAnimation) { + if (mService.mDisableTransitionAnimation || !shouldAnimate(transit)) { if (DEBUG_APP_TRANSITIONS || DEBUG_ANIM) { - Slog.v(TAG_WM, "applyAnimation: transition animation is disabled. atoken=" + this); + Slog.v(TAG_WM, "applyAnimation: transition animation is disabled or skipped." + + " atoken=" + this); } cancelAnimation(); return false;