diff options
| author | 2022-08-19 14:49:40 +0000 | |
|---|---|---|
| committer | 2022-08-19 14:49:40 +0000 | |
| commit | a01ccaae137b0af94b1de9c65d5d5403cc27eb08 (patch) | |
| tree | 2d4ac5b2f026b86292cdcd8462e46ff0e0285338 | |
| parent | 2d7ea1445dafae751b747f702956e54525fa582b (diff) | |
| parent | ed28faef53a74414f213e9e9d1c524808bfc8aba (diff) | |
Merge changes I36ea0ffc,I1f3797c5,I01aeeedd into tm-qpr-dev
* changes:
Add constraints to window duration scale
Add constraints to animation duration scales
Ensure animation scales are within bounds
6 files changed, 56 insertions, 44 deletions
diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java index 67352c02ce18..2195b83933a5 100644 --- a/core/java/android/view/WindowManager.java +++ b/core/java/android/view/WindowManager.java @@ -1023,6 +1023,14 @@ public interface WindowManager extends ViewManager { } } + /** + * Ensure scales are between 0 and 20. + * @hide + */ + static float fixScale(float scale) { + return Math.max(Math.min(scale, 20), 0); + } + public static class LayoutParams extends ViewGroup.LayoutParams implements Parcelable { /** * X position for this window. With the default gravity it is ignored. diff --git a/core/java/com/android/internal/view/inline/InlineTooltipUi.java b/core/java/com/android/internal/view/inline/InlineTooltipUi.java index 3eae89e350a0..836786d7c592 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/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationSpec.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationSpec.java index 45e2cbe07a56..97d42391b6c4 100644 --- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationSpec.java +++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationSpec.java @@ -26,6 +26,7 @@ import android.graphics.Rect; import android.os.Handler; import android.provider.Settings; import android.view.RemoteAnimationTarget; +import android.view.WindowManager; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.AnimationSet; @@ -68,10 +69,7 @@ class TaskFragmentAnimationSpec { // The transition animation should be adjusted based on the developer option. final ContentResolver resolver = mContext.getContentResolver(); - mTransitionAnimationScaleSetting = Settings.Global.getFloat(resolver, - Settings.Global.TRANSITION_ANIMATION_SCALE, - mContext.getResources().getFloat( - R.dimen.config_appTransitionAnimationDurationScaleDefault)); + mTransitionAnimationScaleSetting = getTransitionAnimationScaleSetting(); resolver.registerContentObserver( Settings.Global.getUriFor(Settings.Global.TRANSITION_ANIMATION_SCALE), false, new SettingsObserver(handler)); @@ -223,6 +221,12 @@ class TaskFragmentAnimationSpec { return animation; } + private float getTransitionAnimationScaleSetting() { + return WindowManager.fixScale(Settings.Global.getFloat(mContext.getContentResolver(), + Settings.Global.TRANSITION_ANIMATION_SCALE, mContext.getResources().getFloat( + R.dimen.config_appTransitionAnimationDurationScaleDefault))); + } + private class SettingsObserver extends ContentObserver { SettingsObserver(@NonNull Handler handler) { super(handler); @@ -230,9 +234,7 @@ class TaskFragmentAnimationSpec { @Override public void onChange(boolean selfChange) { - mTransitionAnimationScaleSetting = Settings.Global.getFloat( - mContext.getContentResolver(), Settings.Global.TRANSITION_ANIMATION_SCALE, - mTransitionAnimationScaleSetting); + mTransitionAnimationScaleSetting = getTransitionAnimationScaleSetting(); } } } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java index 9335438cea50..26d0ec637ccf 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java @@ -23,6 +23,7 @@ import static android.view.WindowManager.TRANSIT_KEYGUARD_GOING_AWAY; import static android.view.WindowManager.TRANSIT_OPEN; import static android.view.WindowManager.TRANSIT_TO_BACK; import static android.view.WindowManager.TRANSIT_TO_FRONT; +import static android.view.WindowManager.fixScale; import static android.window.TransitionInfo.FLAG_IS_INPUT_METHOD; import static android.window.TransitionInfo.FLAG_IS_WALLPAPER; import static android.window.TransitionInfo.FLAG_STARTING_WINDOW_TRANSFER_RECIPIENT; @@ -167,10 +168,7 @@ public class Transitions implements RemoteCallable<Transitions> { ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "addHandler: Remote"); ContentResolver resolver = mContext.getContentResolver(); - mTransitionAnimationScaleSetting = Settings.Global.getFloat(resolver, - Settings.Global.TRANSITION_ANIMATION_SCALE, - mContext.getResources().getFloat( - R.dimen.config_appTransitionAnimationDurationScaleDefault)); + mTransitionAnimationScaleSetting = getTransitionAnimationScaleSetting(); dispatchAnimScaleSetting(mTransitionAnimationScaleSetting); resolver.registerContentObserver( @@ -185,6 +183,12 @@ public class Transitions implements RemoteCallable<Transitions> { } } + private float getTransitionAnimationScaleSetting() { + return fixScale(Settings.Global.getFloat(mContext.getContentResolver(), + Settings.Global.TRANSITION_ANIMATION_SCALE, mContext.getResources().getFloat( + R.dimen.config_appTransitionAnimationDurationScaleDefault))); + } + public ShellTransitions asRemoteTransitions() { return mImpl; } @@ -963,9 +967,7 @@ public class Transitions implements RemoteCallable<Transitions> { @Override public void onChange(boolean selfChange) { super.onChange(selfChange); - mTransitionAnimationScaleSetting = Settings.Global.getFloat( - mContext.getContentResolver(), Settings.Global.TRANSITION_ANIMATION_SCALE, - mTransitionAnimationScaleSetting); + mTransitionAnimationScaleSetting = getTransitionAnimationScaleSetting(); mMainExecutor.execute(() -> dispatchAnimScaleSetting(mTransitionAnimationScaleSetting)); } 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 d058b75fd1b1..53e08ea8e10d 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 6415918e2ecc..dce0fbe42f3c 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -89,6 +89,7 @@ import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER; import static android.view.WindowManager.REMOVE_CONTENT_MODE_UNDEFINED; import static android.view.WindowManager.TRANSIT_NONE; import static android.view.WindowManager.TRANSIT_RELAUNCH; +import static android.view.WindowManager.fixScale; import static android.view.WindowManagerGlobal.ADD_OKAY; import static android.view.WindowManagerGlobal.RELAYOUT_RES_CANCEL_AND_REDRAW; import static android.view.WindowManagerGlobal.RELAYOUT_RES_SURFACE_CHANGED; @@ -1323,15 +1324,10 @@ public class WindowManagerService extends IWindowManager.Stub }, UserHandle.ALL, suspendPackagesFilter, null, null); // Get persisted window scale setting - mWindowAnimationScaleSetting = Settings.Global.getFloat(resolver, - Settings.Global.WINDOW_ANIMATION_SCALE, mWindowAnimationScaleSetting); - mTransitionAnimationScaleSetting = Settings.Global.getFloat(resolver, - Settings.Global.TRANSITION_ANIMATION_SCALE, - context.getResources().getFloat( - R.dimen.config_appTransitionAnimationDurationScaleDefault)); - - setAnimatorDurationScale(Settings.Global.getFloat(resolver, - Settings.Global.ANIMATOR_DURATION_SCALE, mAnimatorDurationScaleSetting)); + mWindowAnimationScaleSetting = getWindowAnimationScaleSetting(); + mTransitionAnimationScaleSetting = getTransitionAnimationScaleSetting(); + + setAnimatorDurationScale(getAnimatorDurationScaleSetting()); mForceDesktopModeOnExternalDisplays = Settings.Global.getInt(resolver, DEVELOPMENT_FORCE_DESKTOP_MODE_ON_EXTERNAL_DISPLAYS, 0) != 0; @@ -1405,6 +1401,22 @@ public class WindowManagerService extends IWindowManager.Stub lightRadius); } + private float getTransitionAnimationScaleSetting() { + return fixScale(Settings.Global.getFloat(mContext.getContentResolver(), + Settings.Global.TRANSITION_ANIMATION_SCALE, mContext.getResources().getFloat( + R.dimen.config_appTransitionAnimationDurationScaleDefault))); + } + + private float getAnimatorDurationScaleSetting() { + return fixScale(Settings.Global.getFloat(mContext.getContentResolver(), + Settings.Global.ANIMATOR_DURATION_SCALE, mAnimatorDurationScaleSetting)); + } + + private float getWindowAnimationScaleSetting() { + return fixScale(Settings.Global.getFloat(mContext.getContentResolver(), + Settings.Global.WINDOW_ANIMATION_SCALE, mWindowAnimationScaleSetting)); + } + /** * Called after all entities (such as the {@link ActivityManagerService}) have been set up and * associated with the {@link WindowManagerService}. @@ -3411,11 +3423,6 @@ public class WindowManagerService extends IWindowManager.Stub } } - static float fixScale(float scale) { - if (scale < 0) scale = 0; - else if (scale > 20) scale = 20; - return Math.abs(scale); - } @Override public void setAnimationScale(int which, float scale) { @@ -5340,24 +5347,16 @@ public class WindowManagerService extends IWindowManager.Stub final int mode = msg.arg1; switch (mode) { case WINDOW_ANIMATION_SCALE: { - mWindowAnimationScaleSetting = Settings.Global.getFloat( - mContext.getContentResolver(), - Settings.Global.WINDOW_ANIMATION_SCALE, - mWindowAnimationScaleSetting); + mWindowAnimationScaleSetting = getWindowAnimationScaleSetting(); break; } case TRANSITION_ANIMATION_SCALE: { - mTransitionAnimationScaleSetting = Settings.Global.getFloat( - mContext.getContentResolver(), - Settings.Global.TRANSITION_ANIMATION_SCALE, - mTransitionAnimationScaleSetting); + mTransitionAnimationScaleSetting = + getTransitionAnimationScaleSetting(); break; } case ANIMATION_DURATION_SCALE: { - mAnimatorDurationScaleSetting = Settings.Global.getFloat( - mContext.getContentResolver(), - Settings.Global.ANIMATOR_DURATION_SCALE, - mAnimatorDurationScaleSetting); + mAnimatorDurationScaleSetting = getAnimatorDurationScaleSetting(); dispatchNewAnimatorScaleLocked(null); break; } |