Merge "Add ContentObserver for animation scale changes" into nyc-dev
This commit is contained in:
@@ -18,6 +18,7 @@ package com.android.server.wm;
|
|||||||
|
|
||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
import android.animation.ValueAnimator;
|
import android.animation.ValueAnimator;
|
||||||
|
import android.annotation.IntDef;
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
import android.app.ActivityManagerInternal;
|
import android.app.ActivityManagerInternal;
|
||||||
@@ -153,6 +154,8 @@ import java.io.OutputStream;
|
|||||||
import java.io.OutputStreamWriter;
|
import java.io.OutputStreamWriter;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.io.StringWriter;
|
import java.io.StringWriter;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
import java.text.DateFormat;
|
import java.text.DateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -332,6 +335,14 @@ public class WindowManagerService extends IWindowManager.Stub
|
|||||||
|
|
||||||
private static final String PROPERTY_BUILD_DATE_UTC = "ro.build.date.utc";
|
private static final String PROPERTY_BUILD_DATE_UTC = "ro.build.date.utc";
|
||||||
|
|
||||||
|
// Enums for animation scale update types.
|
||||||
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
|
@IntDef({WINDOW_ANIMATION_SCALE, TRANSITION_ANIMATION_SCALE, ANIMATION_DURATION_SCALE})
|
||||||
|
private @interface UpdateAnimationScaleMode {};
|
||||||
|
private static final int WINDOW_ANIMATION_SCALE = 0;
|
||||||
|
private static final int TRANSITION_ANIMATION_SCALE = 1;
|
||||||
|
private static final int ANIMATION_DURATION_SCALE = 2;
|
||||||
|
|
||||||
final private KeyguardDisableHandler mKeyguardDisableHandler;
|
final private KeyguardDisableHandler mKeyguardDisableHandler;
|
||||||
|
|
||||||
final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
|
final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
|
||||||
@@ -613,18 +624,42 @@ public class WindowManagerService extends IWindowManager.Stub
|
|||||||
private final class SettingsObserver extends ContentObserver {
|
private final class SettingsObserver extends ContentObserver {
|
||||||
private final Uri mDisplayInversionEnabledUri =
|
private final Uri mDisplayInversionEnabledUri =
|
||||||
Settings.Secure.getUriFor(Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED);
|
Settings.Secure.getUriFor(Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED);
|
||||||
|
private final Uri mWindowAnimationScaleUri =
|
||||||
|
Settings.Global.getUriFor(Settings.Global.WINDOW_ANIMATION_SCALE);
|
||||||
|
private final Uri mTransitionAnimationScaleUri =
|
||||||
|
Settings.Global.getUriFor(Settings.Global.TRANSITION_ANIMATION_SCALE);
|
||||||
|
private final Uri mAnimationDurationScaleUri =
|
||||||
|
Settings.Global.getUriFor(Settings.Global.ANIMATOR_DURATION_SCALE);
|
||||||
|
|
||||||
public SettingsObserver() {
|
public SettingsObserver() {
|
||||||
super(new Handler());
|
super(new Handler());
|
||||||
ContentResolver resolver = mContext.getContentResolver();
|
ContentResolver resolver = mContext.getContentResolver();
|
||||||
resolver.registerContentObserver(mDisplayInversionEnabledUri, false, this,
|
resolver.registerContentObserver(mDisplayInversionEnabledUri, false, this,
|
||||||
UserHandle.USER_ALL);
|
UserHandle.USER_ALL);
|
||||||
|
resolver.registerContentObserver(mWindowAnimationScaleUri, false, this,
|
||||||
|
UserHandle.USER_ALL);
|
||||||
|
resolver.registerContentObserver(mTransitionAnimationScaleUri, false, this,
|
||||||
|
UserHandle.USER_ALL);
|
||||||
|
resolver.registerContentObserver(mAnimationDurationScaleUri, false, this,
|
||||||
|
UserHandle.USER_ALL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onChange(boolean selfChange, Uri uri) {
|
public void onChange(boolean selfChange, Uri uri) {
|
||||||
if (mDisplayInversionEnabledUri.equals(uri)) {
|
if (mDisplayInversionEnabledUri.equals(uri)) {
|
||||||
updateCircularDisplayMaskIfNeeded();
|
updateCircularDisplayMaskIfNeeded();
|
||||||
|
} else {
|
||||||
|
@UpdateAnimationScaleMode
|
||||||
|
final int mode;
|
||||||
|
if (uri.equals(mWindowAnimationScaleUri)) {
|
||||||
|
mode = WINDOW_ANIMATION_SCALE;
|
||||||
|
} else if (uri.equals(mTransitionAnimationScaleUri)) {
|
||||||
|
mode = TRANSITION_ANIMATION_SCALE;
|
||||||
|
} else { // uri.equals(mAnimationDurationScaleUri)
|
||||||
|
mode = ANIMATION_DURATION_SCALE;
|
||||||
|
}
|
||||||
|
Message m = mH.obtainMessage(H.UPDATE_ANIMATION_SCALE, mode, 0);
|
||||||
|
mH.sendMessage(m);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -7748,6 +7783,8 @@ public class WindowManagerService extends IWindowManager.Stub
|
|||||||
public static final int NOTIFY_APP_TRANSITION_FINISHED = 49;
|
public static final int NOTIFY_APP_TRANSITION_FINISHED = 49;
|
||||||
public static final int NOTIFY_STARTING_WINDOW_DRAWN = 50;
|
public static final int NOTIFY_STARTING_WINDOW_DRAWN = 50;
|
||||||
|
|
||||||
|
public static final int UPDATE_ANIMATION_SCALE = 51;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to denote that an integer field in a message will not be used.
|
* Used to denote that an integer field in a message will not be used.
|
||||||
*/
|
*/
|
||||||
@@ -8030,6 +8067,36 @@ public class WindowManagerService extends IWindowManager.Stub
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case UPDATE_ANIMATION_SCALE: {
|
||||||
|
@UpdateAnimationScaleMode
|
||||||
|
final int mode = msg.arg1;
|
||||||
|
switch (mode) {
|
||||||
|
case WINDOW_ANIMATION_SCALE: {
|
||||||
|
mWindowAnimationScaleSetting = Settings.Global.getFloat(
|
||||||
|
mContext.getContentResolver(),
|
||||||
|
Settings.Global.WINDOW_ANIMATION_SCALE,
|
||||||
|
mWindowAnimationScaleSetting);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case TRANSITION_ANIMATION_SCALE: {
|
||||||
|
mTransitionAnimationScaleSetting = Settings.Global.getFloat(
|
||||||
|
mContext.getContentResolver(),
|
||||||
|
Settings.Global.TRANSITION_ANIMATION_SCALE,
|
||||||
|
mTransitionAnimationScaleSetting);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ANIMATION_DURATION_SCALE: {
|
||||||
|
mAnimatorDurationScaleSetting = Settings.Global.getFloat(
|
||||||
|
mContext.getContentResolver(),
|
||||||
|
Settings.Global.ANIMATOR_DURATION_SCALE,
|
||||||
|
mAnimatorDurationScaleSetting);
|
||||||
|
dispatchNewAnimatorScaleLocked(null);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case FORCE_GC: {
|
case FORCE_GC: {
|
||||||
synchronized (mWindowMap) {
|
synchronized (mWindowMap) {
|
||||||
// Since we're holding both mWindowMap and mAnimator we don't need to
|
// Since we're holding both mWindowMap and mAnimator we don't need to
|
||||||
|
|||||||
Reference in New Issue
Block a user