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:
committed by
Android (Google) Code Review
commit
a01ccaae13
@@ -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.
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 =
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user