From f73a7285093565efcdd8bce37d5981cb510d771a Mon Sep 17 00:00:00 2001 From: Fiona Campbell Date: Mon, 15 Aug 2022 11:55:17 +0000 Subject: [PATCH] Add constraints to animation duration scales Ensure that all uses of ANIMATOR_DURATION_SCALE are bounded between 0 and 20. Bug: 238178261 Test: adb shell dumpsys window windows | grep "Animation setting" Change-Id: I1f3797c5cf708f5c02ba8644ea9f703244d229a9 --- .../internal/view/inline/InlineTooltipUi.java | 4 ++-- .../phone/UnlockedScreenOffAnimationController.kt | 5 +++-- .../com/android/server/wm/WindowManagerService.java | 13 +++++++------ 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/core/java/com/android/internal/view/inline/InlineTooltipUi.java b/core/java/com/android/internal/view/inline/InlineTooltipUi.java index 3eae89e350a0d..836786d7c5923 100644 --- a/core/java/com/android/internal/view/inline/InlineTooltipUi.java +++ b/core/java/com/android/internal/view/inline/InlineTooltipUi.java @@ -170,9 +170,9 @@ public final class InlineTooltipUi extends PopupWindow implements AutoCloseable int delayTimeMs = mShowDelayConfigMs; try { - final float scale = Settings.Global.getFloat( + final float scale = WindowManager.fixScale(Settings.Global.getFloat( anchor.getContext().getContentResolver(), - Settings.Global.ANIMATOR_DURATION_SCALE); + Settings.Global.ANIMATOR_DURATION_SCALE)); delayTimeMs *= scale; } catch (Settings.SettingNotFoundException e) { // do nothing diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationController.kt index d058b75fd1b11..53e08ea8e10d7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationController.kt @@ -10,6 +10,7 @@ import android.os.PowerManager import android.provider.Settings import android.view.Surface import android.view.View +import android.view.WindowManager.fixScale import com.android.internal.jank.InteractionJankMonitor import com.android.internal.jank.InteractionJankMonitor.CUJ_SCREEN_OFF import com.android.internal.jank.InteractionJankMonitor.CUJ_SCREEN_OFF_SHOW_AOD @@ -138,8 +139,8 @@ class UnlockedScreenOffAnimationController @Inject constructor( } fun updateAnimatorDurationScale() { - animatorDurationScale = - globalSettings.getFloat(Settings.Global.ANIMATOR_DURATION_SCALE, 1f) + animatorDurationScale = fixScale( + globalSettings.getFloat(Settings.Global.ANIMATOR_DURATION_SCALE, 1f)) } override fun shouldDelayKeyguardShow(): Boolean = diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 7cb8e9340b275..bd67f97611b4e 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -1328,8 +1328,7 @@ public class WindowManagerService extends IWindowManager.Stub Settings.Global.WINDOW_ANIMATION_SCALE, mWindowAnimationScaleSetting); mTransitionAnimationScaleSetting = getTransitionAnimationScaleSetting(); - setAnimatorDurationScale(Settings.Global.getFloat(resolver, - Settings.Global.ANIMATOR_DURATION_SCALE, mAnimatorDurationScaleSetting)); + setAnimatorDurationScale(getAnimatorDurationScaleSetting()); mForceDesktopModeOnExternalDisplays = Settings.Global.getInt(resolver, DEVELOPMENT_FORCE_DESKTOP_MODE_ON_EXTERNAL_DISPLAYS, 0) != 0; @@ -1409,6 +1408,11 @@ public class WindowManagerService extends IWindowManager.Stub R.dimen.config_appTransitionAnimationDurationScaleDefault))); } + private float getAnimatorDurationScaleSetting() { + return fixScale(Settings.Global.getFloat(mContext.getContentResolver(), + Settings.Global.ANIMATOR_DURATION_SCALE, mAnimatorDurationScaleSetting)); + } + /** * Called after all entities (such as the {@link ActivityManagerService}) have been set up and * associated with the {@link WindowManagerService}. @@ -5335,10 +5339,7 @@ public class WindowManagerService extends IWindowManager.Stub break; } case ANIMATION_DURATION_SCALE: { - mAnimatorDurationScaleSetting = Settings.Global.getFloat( - mContext.getContentResolver(), - Settings.Global.ANIMATOR_DURATION_SCALE, - mAnimatorDurationScaleSetting); + mAnimatorDurationScaleSetting = getAnimatorDurationScaleSetting(); dispatchNewAnimatorScaleLocked(null); break; }