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

Commit 77484f35 authored by Josh Tsuji's avatar Josh Tsuji
Browse files

Disable screen off animation in situations where it currently looks bad.

- Use DozeParameters as source of truth for whether we will control unlocked screen off.
- Update controlScreenOff when rotation/expansion change, not just when keyguard visibility changes.

Fixes: 190478850
Fixes: 189803757
Test: screen on/off with shade expanded/collapsed and in portrait/landscape
Change-Id: I89e3dc626090580a832af296bb6665a52980640c
parent 5d552869
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -249,6 +249,16 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
        public void onStateChanged(int newState) {
            mStatusBarState = newState;
        }

        @Override
        public void onExpandedChanged(boolean isExpanded) {
            for (int i = 0; i < mCallbacks.size(); i++) {
                KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
                if (cb != null) {
                    cb.onShadeExpandedChanged(isExpanded);
                }
            }
        }
    };

    HashMap<Integer, SimData> mSimDatas = new HashMap<>();
+4 −0
Original line number Diff line number Diff line
@@ -333,4 +333,8 @@ public class KeyguardUpdateMonitorCallback {
     */
    public void onRequireUnlockForNfc() { }

    /**
     * Called when the notification shade is expanded or collapsed.
     */
    public void onShadeExpandedChanged(boolean expanded) { }
}
+21 −2
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import static com.android.systemui.doze.DozeMachine.State.DOZE_AOD_PAUSED;

import android.app.AlarmManager;
import android.content.Context;
import android.content.res.Configuration;
import android.os.Handler;
import android.os.SystemClock;
import android.provider.Settings;
@@ -34,6 +35,7 @@ import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.doze.dagger.DozeScope;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.tuner.TunerService;
import com.android.systemui.util.AlarmTimeout;
import com.android.systemui.util.wakelock.WakeLock;
@@ -48,7 +50,8 @@ import dagger.Lazy;
 * The policy controlling doze.
 */
@DozeScope
public class DozeUi implements DozeMachine.Part, TunerService.Tunable {
public class DozeUi implements DozeMachine.Part, TunerService.Tunable,
        ConfigurationController.ConfigurationListener {
    // if enabled, calls dozeTimeTick() whenever the time changes:
    private static final boolean BURN_IN_TESTING_ENABLED = false;
    private static final long TIME_TICK_DEADLINE_MILLIS = 90 * 1000; // 1.5min
@@ -63,6 +66,7 @@ public class DozeUi implements DozeMachine.Part, TunerService.Tunable {
    private final DozeLog mDozeLog;
    private final Lazy<StatusBarStateController> mStatusBarStateController;
    private final TunerService mTunerService;
    private final ConfigurationController mConfigurationController;

    private boolean mKeyguardShowing;
    private final KeyguardUpdateMonitorCallback mKeyguardVisibilityCallback =
@@ -84,6 +88,11 @@ public class DozeUi implements DozeMachine.Part, TunerService.Tunable {
                        mHandler.post(mWakeLock.wrap(() -> {}));
                    }
                }

                @Override
                public void onShadeExpandedChanged(boolean expanded) {
                    updateAnimateScreenOff();
                }
            };

    private long mLastTimeTickElapsed = 0;
@@ -93,7 +102,8 @@ public class DozeUi implements DozeMachine.Part, TunerService.Tunable {
            WakeLock wakeLock, DozeHost host, @Main Handler handler,
            DozeParameters params, KeyguardUpdateMonitor keyguardUpdateMonitor,
            DozeLog dozeLog, TunerService tunerService,
            Lazy<StatusBarStateController> statusBarStateController) {
            Lazy<StatusBarStateController> statusBarStateController,
            ConfigurationController configurationController) {
        mContext = context;
        mWakeLock = wakeLock;
        mHost = host;
@@ -107,11 +117,15 @@ public class DozeUi implements DozeMachine.Part, TunerService.Tunable {
        mStatusBarStateController = statusBarStateController;

        mTunerService.addTunable(this, Settings.Secure.DOZE_ALWAYS_ON);

        mConfigurationController = configurationController;
        mConfigurationController.addCallback(this);
    }

    @Override
    public void destroy() {
        mTunerService.removeTunable(this);
        mConfigurationController.removeCallback(this);
    }

    @Override
@@ -274,4 +288,9 @@ public class DozeUi implements DozeMachine.Part, TunerService.Tunable {
            updateAnimateScreenOff();
        }
    }

    @Override
    public void onConfigChanged(Configuration newConfig) {
        updateAnimateScreenOff();
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -264,7 +264,7 @@ class NotificationWakeUpCoordinator @Inject constructor(
    }

    override fun onStateChanged(newState: Int) {
        if (unlockedScreenOffAnimationController.shouldPlayScreenOffAnimation()) {
        if (dozeParameters.shouldControlUnlockedScreenOff()) {
            if (unlockedScreenOffAnimationController.isScreenOffAnimationPlaying() &&
                    state == StatusBarState.KEYGUARD &&
                    newState == StatusBarState.SHADE) {
+6 −2
Original line number Diff line number Diff line
@@ -63,6 +63,7 @@ public class DozeParameters implements TunerService.Tunable,
    private final Resources mResources;
    private final BatteryController mBatteryController;
    private final FeatureFlags mFeatureFlags;
    private final UnlockedScreenOffAnimationController mUnlockedScreenOffAnimationController;

    private final Set<Callback> mCallbacks = new HashSet<>();

@@ -78,7 +79,8 @@ public class DozeParameters implements TunerService.Tunable,
            BatteryController batteryController,
            TunerService tunerService,
            DumpManager dumpManager,
            FeatureFlags featureFlags) {
            FeatureFlags featureFlags,
            UnlockedScreenOffAnimationController unlockedScreenOffAnimationController) {
        mResources = resources;
        mAmbientDisplayConfiguration = ambientDisplayConfiguration;
        mAlwaysOnPolicy = alwaysOnDisplayPolicy;
@@ -89,6 +91,7 @@ public class DozeParameters implements TunerService.Tunable,
        mPowerManager = powerManager;
        mPowerManager.setDozeAfterScreenOff(!mControlScreenOffAnimation);
        mFeatureFlags = featureFlags;
        mUnlockedScreenOffAnimationController = unlockedScreenOffAnimationController;

        tunerService.addTunable(
                this,
@@ -220,7 +223,8 @@ public class DozeParameters implements TunerService.Tunable,
     * then abruptly showing AOD.
     */
    public boolean shouldControlUnlockedScreenOff() {
        return getAlwaysOn() && mFeatureFlags.useNewLockscreenAnimations();
        return getAlwaysOn() && mFeatureFlags.useNewLockscreenAnimations()
                && mUnlockedScreenOffAnimationController.shouldPlayUnlockedScreenOffAnimation();
    }

    private boolean getBoolean(String propName, int resId) {
Loading