From 5995d8acd1b3c31f8bc7fb617c1220fe46449a74 Mon Sep 17 00:00:00 2001 From: Tiger Date: Thu, 27 Oct 2022 19:37:11 +0800 Subject: [PATCH] Don't play or cancel window animations of controllable insets sources All the animations should be controlled by the client. This CL also removes the redundant logic about selecting the window animation for the system bar. Fix: 255273300 Test: Rotate screen while playing a video in Photos in immersive mode. See if system bars stay invisible as expected. Change-Id: I9b2bb73ce898b4753aef8dae6685f67d935d0648 --- .../com/android/server/wm/DisplayPolicy.java | 88 ------------------- .../server/wm/WindowStateAnimator.java | 20 +++-- 2 files changed, 11 insertions(+), 97 deletions(-) diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java index 42a3ec6abbc59..2688ff757f64a 100644 --- a/services/core/java/com/android/server/wm/DisplayPolicy.java +++ b/services/core/java/com/android/server/wm/DisplayPolicy.java @@ -81,11 +81,7 @@ import static android.window.DisplayAreaOrganizer.FEATURE_UNDEFINED; import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_ANIM; import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_SCREEN_ON; import static com.android.server.policy.PhoneWindowManager.TOAST_WINDOW_TIMEOUT; -import static com.android.server.policy.WindowManagerPolicy.TRANSIT_ENTER; -import static com.android.server.policy.WindowManagerPolicy.TRANSIT_EXIT; -import static com.android.server.policy.WindowManagerPolicy.TRANSIT_HIDE; import static com.android.server.policy.WindowManagerPolicy.TRANSIT_PREVIEW_DONE; -import static com.android.server.policy.WindowManagerPolicy.TRANSIT_SHOW; import static com.android.server.policy.WindowManagerPolicy.WindowManagerFuncs.LID_ABSENT; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_LAYOUT; import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME; @@ -1439,90 +1435,6 @@ public class DisplayPolicy { */ int selectAnimation(WindowState win, int transit) { ProtoLog.i(WM_DEBUG_ANIM, "selectAnimation in %s: transit=%d", win, transit); - if (win == mStatusBar) { - if (transit == TRANSIT_EXIT - || transit == TRANSIT_HIDE) { - return R.anim.dock_top_exit; - } else if (transit == TRANSIT_ENTER - || transit == TRANSIT_SHOW) { - return R.anim.dock_top_enter; - } - } else if (win == mNavigationBar) { - if (win.getAttrs().windowAnimations != 0) { - return ANIMATION_STYLEABLE; - } - // This can be on either the bottom or the right or the left. - if (mNavigationBarPosition == NAV_BAR_BOTTOM) { - if (transit == TRANSIT_EXIT - || transit == TRANSIT_HIDE) { - if (mService.mPolicy.isKeyguardShowingAndNotOccluded()) { - return R.anim.dock_bottom_exit_keyguard; - } else { - return R.anim.dock_bottom_exit; - } - } else if (transit == TRANSIT_ENTER - || transit == TRANSIT_SHOW) { - return R.anim.dock_bottom_enter; - } - } else if (mNavigationBarPosition == NAV_BAR_RIGHT) { - if (transit == TRANSIT_EXIT - || transit == TRANSIT_HIDE) { - return R.anim.dock_right_exit; - } else if (transit == TRANSIT_ENTER - || transit == TRANSIT_SHOW) { - return R.anim.dock_right_enter; - } - } else if (mNavigationBarPosition == NAV_BAR_LEFT) { - if (transit == TRANSIT_EXIT - || transit == TRANSIT_HIDE) { - return R.anim.dock_left_exit; - } else if (transit == TRANSIT_ENTER - || transit == TRANSIT_SHOW) { - return R.anim.dock_left_enter; - } - } - } else if (win == mStatusBarAlt || win == mNavigationBarAlt || win == mClimateBarAlt - || win == mExtraNavBarAlt) { - if (win.getAttrs().windowAnimations != 0) { - return ANIMATION_STYLEABLE; - } - - int pos = (win == mStatusBarAlt) ? mStatusBarAltPosition : mNavigationBarAltPosition; - - boolean isExitOrHide = transit == TRANSIT_EXIT || transit == TRANSIT_HIDE; - boolean isEnterOrShow = transit == TRANSIT_ENTER || transit == TRANSIT_SHOW; - - switch (pos) { - case ALT_BAR_LEFT: - if (isExitOrHide) { - return R.anim.dock_left_exit; - } else if (isEnterOrShow) { - return R.anim.dock_left_enter; - } - break; - case ALT_BAR_RIGHT: - if (isExitOrHide) { - return R.anim.dock_right_exit; - } else if (isEnterOrShow) { - return R.anim.dock_right_enter; - } - break; - case ALT_BAR_BOTTOM: - if (isExitOrHide) { - return R.anim.dock_bottom_exit; - } else if (isEnterOrShow) { - return R.anim.dock_bottom_enter; - } - break; - case ALT_BAR_TOP: - if (isExitOrHide) { - return R.anim.dock_top_exit; - } else if (isEnterOrShow) { - return R.anim.dock_top_enter; - } - break; - } - } if (transit == TRANSIT_PREVIEW_DONE) { if (win.hasAppShownWindows()) { diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java index 5c0557f2d1f45..6e16b5de1d85e 100644 --- a/services/core/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java @@ -602,11 +602,17 @@ class WindowStateAnimator { return true; } - final boolean isImeWindow = mWin.mAttrs.type == TYPE_INPUT_METHOD; - if (isEntrance && isImeWindow) { + if (mWin.mAttrs.type == TYPE_INPUT_METHOD) { mWin.getDisplayContent().adjustForImeIfNeeded(); - mWin.setDisplayLayoutNeeded(); - mService.mWindowPlacerLocked.requestTraversal(); + if (isEntrance) { + mWin.setDisplayLayoutNeeded(); + mService.mWindowPlacerLocked.requestTraversal(); + } + } + + if (mWin.mControllableInsetProvider != null) { + // All our animations should be driven by the insets control target. + return false; } // Only apply an animation if the display isn't frozen. If it is @@ -654,14 +660,10 @@ class WindowStateAnimator { Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER); mAnimationIsEntrance = isEntrance; } - } else if (!isImeWindow) { + } else { mWin.cancelAnimation(); } - if (!isEntrance && isImeWindow) { - mWin.getDisplayContent().adjustForImeIfNeeded(); - } - return mWin.isAnimating(0 /* flags */, ANIMATION_TYPE_WINDOW_ANIMATION); }