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
This commit is contained in:
Fiona Campbell
2022-08-19 14:49:40 +00:00
committed by Android (Google) Code Review
6 changed files with 55 additions and 43 deletions

View File

@@ -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 { public static class LayoutParams extends ViewGroup.LayoutParams implements Parcelable {
/** /**
* X position for this window. With the default gravity it is ignored. * X position for this window. With the default gravity it is ignored.

View File

@@ -170,9 +170,9 @@ public final class InlineTooltipUi extends PopupWindow implements AutoCloseable
int delayTimeMs = mShowDelayConfigMs; int delayTimeMs = mShowDelayConfigMs;
try { try {
final float scale = Settings.Global.getFloat( final float scale = WindowManager.fixScale(Settings.Global.getFloat(
anchor.getContext().getContentResolver(), anchor.getContext().getContentResolver(),
Settings.Global.ANIMATOR_DURATION_SCALE); Settings.Global.ANIMATOR_DURATION_SCALE));
delayTimeMs *= scale; delayTimeMs *= scale;
} catch (Settings.SettingNotFoundException e) { } catch (Settings.SettingNotFoundException e) {
// do nothing // do nothing

View File

@@ -26,6 +26,7 @@ import android.graphics.Rect;
import android.os.Handler; import android.os.Handler;
import android.provider.Settings; import android.provider.Settings;
import android.view.RemoteAnimationTarget; import android.view.RemoteAnimationTarget;
import android.view.WindowManager;
import android.view.animation.AlphaAnimation; import android.view.animation.AlphaAnimation;
import android.view.animation.Animation; import android.view.animation.Animation;
import android.view.animation.AnimationSet; import android.view.animation.AnimationSet;
@@ -68,10 +69,7 @@ class TaskFragmentAnimationSpec {
// The transition animation should be adjusted based on the developer option. // The transition animation should be adjusted based on the developer option.
final ContentResolver resolver = mContext.getContentResolver(); final ContentResolver resolver = mContext.getContentResolver();
mTransitionAnimationScaleSetting = Settings.Global.getFloat(resolver, mTransitionAnimationScaleSetting = getTransitionAnimationScaleSetting();
Settings.Global.TRANSITION_ANIMATION_SCALE,
mContext.getResources().getFloat(
R.dimen.config_appTransitionAnimationDurationScaleDefault));
resolver.registerContentObserver( resolver.registerContentObserver(
Settings.Global.getUriFor(Settings.Global.TRANSITION_ANIMATION_SCALE), false, Settings.Global.getUriFor(Settings.Global.TRANSITION_ANIMATION_SCALE), false,
new SettingsObserver(handler)); new SettingsObserver(handler));
@@ -223,6 +221,12 @@ class TaskFragmentAnimationSpec {
return animation; 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 { private class SettingsObserver extends ContentObserver {
SettingsObserver(@NonNull Handler handler) { SettingsObserver(@NonNull Handler handler) {
super(handler); super(handler);
@@ -230,9 +234,7 @@ class TaskFragmentAnimationSpec {
@Override @Override
public void onChange(boolean selfChange) { public void onChange(boolean selfChange) {
mTransitionAnimationScaleSetting = Settings.Global.getFloat( mTransitionAnimationScaleSetting = getTransitionAnimationScaleSetting();
mContext.getContentResolver(), Settings.Global.TRANSITION_ANIMATION_SCALE,
mTransitionAnimationScaleSetting);
} }
} }
} }

View File

@@ -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_OPEN;
import static android.view.WindowManager.TRANSIT_TO_BACK; import static android.view.WindowManager.TRANSIT_TO_BACK;
import static android.view.WindowManager.TRANSIT_TO_FRONT; 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_INPUT_METHOD;
import static android.window.TransitionInfo.FLAG_IS_WALLPAPER; import static android.window.TransitionInfo.FLAG_IS_WALLPAPER;
import static android.window.TransitionInfo.FLAG_STARTING_WINDOW_TRANSFER_RECIPIENT; 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"); ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "addHandler: Remote");
ContentResolver resolver = mContext.getContentResolver(); ContentResolver resolver = mContext.getContentResolver();
mTransitionAnimationScaleSetting = Settings.Global.getFloat(resolver, mTransitionAnimationScaleSetting = getTransitionAnimationScaleSetting();
Settings.Global.TRANSITION_ANIMATION_SCALE,
mContext.getResources().getFloat(
R.dimen.config_appTransitionAnimationDurationScaleDefault));
dispatchAnimScaleSetting(mTransitionAnimationScaleSetting); dispatchAnimScaleSetting(mTransitionAnimationScaleSetting);
resolver.registerContentObserver( 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() { public ShellTransitions asRemoteTransitions() {
return mImpl; return mImpl;
} }
@@ -963,9 +967,7 @@ public class Transitions implements RemoteCallable<Transitions> {
@Override @Override
public void onChange(boolean selfChange) { public void onChange(boolean selfChange) {
super.onChange(selfChange); super.onChange(selfChange);
mTransitionAnimationScaleSetting = Settings.Global.getFloat( mTransitionAnimationScaleSetting = getTransitionAnimationScaleSetting();
mContext.getContentResolver(), Settings.Global.TRANSITION_ANIMATION_SCALE,
mTransitionAnimationScaleSetting);
mMainExecutor.execute(() -> dispatchAnimScaleSetting(mTransitionAnimationScaleSetting)); mMainExecutor.execute(() -> dispatchAnimScaleSetting(mTransitionAnimationScaleSetting));
} }

View File

@@ -10,6 +10,7 @@ import android.os.PowerManager
import android.provider.Settings import android.provider.Settings
import android.view.Surface import android.view.Surface
import android.view.View import android.view.View
import android.view.WindowManager.fixScale
import com.android.internal.jank.InteractionJankMonitor import com.android.internal.jank.InteractionJankMonitor
import com.android.internal.jank.InteractionJankMonitor.CUJ_SCREEN_OFF import com.android.internal.jank.InteractionJankMonitor.CUJ_SCREEN_OFF
import com.android.internal.jank.InteractionJankMonitor.CUJ_SCREEN_OFF_SHOW_AOD import com.android.internal.jank.InteractionJankMonitor.CUJ_SCREEN_OFF_SHOW_AOD
@@ -138,8 +139,8 @@ class UnlockedScreenOffAnimationController @Inject constructor(
} }
fun updateAnimatorDurationScale() { fun updateAnimatorDurationScale() {
animatorDurationScale = animatorDurationScale = fixScale(
globalSettings.getFloat(Settings.Global.ANIMATOR_DURATION_SCALE, 1f) globalSettings.getFloat(Settings.Global.ANIMATOR_DURATION_SCALE, 1f))
} }
override fun shouldDelayKeyguardShow(): Boolean = override fun shouldDelayKeyguardShow(): Boolean =

View File

@@ -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.REMOVE_CONTENT_MODE_UNDEFINED;
import static android.view.WindowManager.TRANSIT_NONE; import static android.view.WindowManager.TRANSIT_NONE;
import static android.view.WindowManager.TRANSIT_RELAUNCH; 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.ADD_OKAY;
import static android.view.WindowManagerGlobal.RELAYOUT_RES_CANCEL_AND_REDRAW; import static android.view.WindowManagerGlobal.RELAYOUT_RES_CANCEL_AND_REDRAW;
import static android.view.WindowManagerGlobal.RELAYOUT_RES_SURFACE_CHANGED; import static android.view.WindowManagerGlobal.RELAYOUT_RES_SURFACE_CHANGED;
@@ -1323,15 +1324,10 @@ public class WindowManagerService extends IWindowManager.Stub
}, UserHandle.ALL, suspendPackagesFilter, null, null); }, UserHandle.ALL, suspendPackagesFilter, null, null);
// Get persisted window scale setting // Get persisted window scale setting
mWindowAnimationScaleSetting = Settings.Global.getFloat(resolver, mWindowAnimationScaleSetting = getWindowAnimationScaleSetting();
Settings.Global.WINDOW_ANIMATION_SCALE, mWindowAnimationScaleSetting); mTransitionAnimationScaleSetting = getTransitionAnimationScaleSetting();
mTransitionAnimationScaleSetting = Settings.Global.getFloat(resolver,
Settings.Global.TRANSITION_ANIMATION_SCALE,
context.getResources().getFloat(
R.dimen.config_appTransitionAnimationDurationScaleDefault));
setAnimatorDurationScale(Settings.Global.getFloat(resolver, setAnimatorDurationScale(getAnimatorDurationScaleSetting());
Settings.Global.ANIMATOR_DURATION_SCALE, mAnimatorDurationScaleSetting));
mForceDesktopModeOnExternalDisplays = Settings.Global.getInt(resolver, mForceDesktopModeOnExternalDisplays = Settings.Global.getInt(resolver,
DEVELOPMENT_FORCE_DESKTOP_MODE_ON_EXTERNAL_DISPLAYS, 0) != 0; DEVELOPMENT_FORCE_DESKTOP_MODE_ON_EXTERNAL_DISPLAYS, 0) != 0;
@@ -1405,6 +1401,22 @@ public class WindowManagerService extends IWindowManager.Stub
lightRadius); 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 * Called after all entities (such as the {@link ActivityManagerService}) have been set up and
* associated with the {@link WindowManagerService}. * 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 @Override
public void setAnimationScale(int which, float scale) { public void setAnimationScale(int which, float scale) {
@@ -5340,24 +5347,16 @@ public class WindowManagerService extends IWindowManager.Stub
final int mode = msg.arg1; final int mode = msg.arg1;
switch (mode) { switch (mode) {
case WINDOW_ANIMATION_SCALE: { case WINDOW_ANIMATION_SCALE: {
mWindowAnimationScaleSetting = Settings.Global.getFloat( mWindowAnimationScaleSetting = getWindowAnimationScaleSetting();
mContext.getContentResolver(),
Settings.Global.WINDOW_ANIMATION_SCALE,
mWindowAnimationScaleSetting);
break; break;
} }
case TRANSITION_ANIMATION_SCALE: { case TRANSITION_ANIMATION_SCALE: {
mTransitionAnimationScaleSetting = Settings.Global.getFloat( mTransitionAnimationScaleSetting =
mContext.getContentResolver(), getTransitionAnimationScaleSetting();
Settings.Global.TRANSITION_ANIMATION_SCALE,
mTransitionAnimationScaleSetting);
break; break;
} }
case ANIMATION_DURATION_SCALE: { case ANIMATION_DURATION_SCALE: {
mAnimatorDurationScaleSetting = Settings.Global.getFloat( mAnimatorDurationScaleSetting = getAnimatorDurationScaleSetting();
mContext.getContentResolver(),
Settings.Global.ANIMATOR_DURATION_SCALE,
mAnimatorDurationScaleSetting);
dispatchNewAnimatorScaleLocked(null); dispatchNewAnimatorScaleLocked(null);
break; break;
} }