Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9b8e4b49 authored by Biswarup Pal's avatar Biswarup Pal Committed by Android (Google) Code Review
Browse files

Merge "Guard window and transition animation scales with a lock" into main

parents 30c31dce c3e1557d
Loading
Loading
Loading
Loading
+61 −18
Original line number Diff line number Diff line
@@ -1103,8 +1103,12 @@ public class WindowManagerService extends IWindowManager.Stub
        }
    }

    private float mWindowAnimationScaleSetting = 1.0f;
    private float mTransitionAnimationScaleSetting = 1.0f;
    private static final float DEFAULT_ANIMATION_SCALE = 1.0f;

    @GuardedBy("mGlobalLock")
    private float mWindowAnimationScaleSetting = DEFAULT_ANIMATION_SCALE;
    @GuardedBy("mGlobalLock")
    private float mTransitionAnimationScaleSetting = DEFAULT_ANIMATION_SCALE;
    boolean mPointerLocationEnabled = false;

    private final SharedMemoryBackedCurrentAnimatorScale mAnimatorScale =
@@ -1469,7 +1473,7 @@ public class WindowManagerService extends IWindowManager.Stub
        }, UserHandle.ALL, suspendPackagesFilter, null, null);

        // Get persisted window scale setting
        mWindowAnimationScaleSetting = getWindowAnimationScaleSetting();
        mWindowAnimationScaleSetting = getWindowAnimationScaleSetting(DEFAULT_ANIMATION_SCALE);
        mTransitionAnimationScaleSetting = getTransitionAnimationScaleSetting();

        setAnimatorDurationScale(getAnimatorDurationScaleSetting());
@@ -1575,9 +1579,9 @@ public class WindowManagerService extends IWindowManager.Stub
                Settings.Global.ANIMATOR_DURATION_SCALE, mAnimatorScale.getCurrentScale()));
    }

    private float getWindowAnimationScaleSetting() {
    private float getWindowAnimationScaleSetting(float defaultValue) {
        return fixScale(Settings.Global.getFloat(mContext.getContentResolver(),
                Settings.Global.WINDOW_ANIMATION_SCALE, mWindowAnimationScaleSetting));
                Settings.Global.WINDOW_ANIMATION_SCALE, defaultValue));
    }

    /**
@@ -3742,8 +3746,16 @@ public class WindowManagerService extends IWindowManager.Stub

        scale = fixScale(scale);
        switch (which) {
            case 0: mWindowAnimationScaleSetting = scale; break;
            case 1: mTransitionAnimationScaleSetting = scale; break;
            case 0:
                synchronized (mGlobalLock) {
                    mWindowAnimationScaleSetting = scale;
                }
                break;
            case 1:
                synchronized (mGlobalLock) {
                    mTransitionAnimationScaleSetting = scale;
                }
                break;
            case 2:
                mAnimatorScale.setCurrentScale(scale);
                break;
@@ -3762,11 +3774,15 @@ public class WindowManagerService extends IWindowManager.Stub

        if (scales != null) {
            if (scales.length >= 1) {
                synchronized (mGlobalLock) {
                    mWindowAnimationScaleSetting = fixScale(scales[0]);
                }
            }
            if (scales.length >= 2) {
                synchronized (mGlobalLock) {
                    mTransitionAnimationScaleSetting = fixScale(scales[1]);
                }
            }
            if (scales.length >= 3) {
                mAnimatorScale.setCurrentScale(fixScale(scales[2]));
                dispatchNewAnimatorScaleLocked(null);
@@ -3793,8 +3809,14 @@ public class WindowManagerService extends IWindowManager.Stub
    @Override
    public float getAnimationScale(int which) {
        switch (which) {
            case 0: return mWindowAnimationScaleSetting;
            case 1: return mTransitionAnimationScaleSetting;
            case 0:
                synchronized (mGlobalLock) {
                    return mWindowAnimationScaleSetting;
                }
            case 1:
                synchronized (mGlobalLock) {
                    return mTransitionAnimationScaleSetting;
                }
            case 2: return mAnimatorScale.getCurrentScale();
        }
        return 0;
@@ -3802,7 +3824,13 @@ public class WindowManagerService extends IWindowManager.Stub

    @Override
    public float[] getAnimationScales() {
        return new float[] { mWindowAnimationScaleSetting, mTransitionAnimationScaleSetting,
        float windowAnimationScale;
        float transitionAnimationScale;
        synchronized (mGlobalLock) {
            windowAnimationScale = mWindowAnimationScaleSetting;
            transitionAnimationScale = mTransitionAnimationScaleSetting;
        }
        return new float[] { windowAnimationScale, transitionAnimationScale,
                mAnimatorScale.getCurrentScale() };
    }

@@ -5960,11 +5988,16 @@ public class WindowManagerService extends IWindowManager.Stub
            }
            switch (msg.what) {
                case PERSIST_ANIMATION_SCALE: {
                    float windowAnimationScale;
                    float transitionAnimationScale;
                    synchronized (mGlobalLock) {
                        windowAnimationScale = mWindowAnimationScaleSetting;
                        transitionAnimationScale = mTransitionAnimationScaleSetting;
                    }
                    Settings.Global.putFloat(mContext.getContentResolver(),
                            Settings.Global.WINDOW_ANIMATION_SCALE, mWindowAnimationScaleSetting);
                            Settings.Global.WINDOW_ANIMATION_SCALE, windowAnimationScale);
                    Settings.Global.putFloat(mContext.getContentResolver(),
                            Settings.Global.TRANSITION_ANIMATION_SCALE,
                            mTransitionAnimationScaleSetting);
                            Settings.Global.TRANSITION_ANIMATION_SCALE, transitionAnimationScale);
                    Settings.Global.putFloat(mContext.getContentResolver(),
                            Settings.Global.ANIMATOR_DURATION_SCALE,
                            mAnimatorScale.getCurrentScale());
@@ -5976,12 +6009,22 @@ public class WindowManagerService extends IWindowManager.Stub
                    final int mode = msg.arg1;
                    switch (mode) {
                        case WINDOW_ANIMATION_SCALE: {
                            mWindowAnimationScaleSetting = getWindowAnimationScaleSetting();
                            float windowAnimationScale;
                            synchronized (mGlobalLock) {
                                windowAnimationScale = mWindowAnimationScaleSetting;
                            }
                            windowAnimationScale = getWindowAnimationScaleSetting(
                                    windowAnimationScale);
                            synchronized (mGlobalLock) {
                                mWindowAnimationScaleSetting = windowAnimationScale;
                            }
                            break;
                        }
                        case TRANSITION_ANIMATION_SCALE: {
                            mTransitionAnimationScaleSetting =
                                    getTransitionAnimationScaleSetting();
                            float transitionAnimationScale = getTransitionAnimationScaleSetting();
                            synchronized (mGlobalLock) {
                                mTransitionAnimationScaleSetting = transitionAnimationScale;
                            }
                            break;
                        }
                        case ANIMATION_DURATION_SCALE: {