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

Commit a5a1993f authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Make DozeParameters responsible for setting...

Merge "Make DozeParameters responsible for setting PowerManager#setDozeAfterScreenOff." into sc-v2-dev am: a56af967

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16468915

Change-Id: I62f2ff63702f796564fe411fb18bc16ff39b2599
parents e15b1759 a56af967
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -40,7 +40,6 @@ public interface DozeHost {
    void extendPulse(int reason);

    void setAnimateWakeup(boolean animateWakeup);
    void setAnimateScreenOff(boolean animateScreenOff);

    /**
     * Reports that a tap event happend on the Sensors Low Power Island.
+2 −69
Original line number Diff line number Diff line
@@ -21,22 +21,17 @@ 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;
import android.text.format.Formatter;
import android.util.Log;

import com.android.internal.annotations.VisibleForTesting;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback;
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;

@@ -50,8 +45,7 @@ import dagger.Lazy;
 * The policy controlling doze.
 */
@DozeScope
public class DozeUi implements DozeMachine.Part, TunerService.Tunable,
        ConfigurationController.ConfigurationListener {
public class DozeUi implements DozeMachine.Part {
    // 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
@@ -65,18 +59,8 @@ public class DozeUi implements DozeMachine.Part, TunerService.Tunable,
    private final DozeParameters mDozeParameters;
    private final DozeLog mDozeLog;
    private final Lazy<StatusBarStateController> mStatusBarStateController;
    private final TunerService mTunerService;
    private final ConfigurationController mConfigurationController;

    private boolean mKeyguardShowing;
    private final KeyguardUpdateMonitorCallback mKeyguardVisibilityCallback =
            new KeyguardUpdateMonitorCallback() {
                @Override
                public void onKeyguardVisibilityChanged(boolean showing) {
                    mKeyguardShowing = showing;
                    updateAnimateScreenOff();
                }

                @Override
                public void onTimeChanged() {
                    if (BURN_IN_TESTING_ENABLED && mStatusBarStateController != null
@@ -88,11 +72,6 @@ public class DozeUi implements DozeMachine.Part, TunerService.Tunable,
                        mHandler.post(mWakeLock.wrap(() -> {}));
                    }
                }

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

    private long mLastTimeTickElapsed = 0;
@@ -101,9 +80,7 @@ public class DozeUi implements DozeMachine.Part, TunerService.Tunable,
    public DozeUi(Context context, AlarmManager alarmManager,
            WakeLock wakeLock, DozeHost host, @Main Handler handler,
            DozeParameters params, KeyguardUpdateMonitor keyguardUpdateMonitor,
            DozeLog dozeLog, TunerService tunerService,
            Lazy<StatusBarStateController> statusBarStateController,
            ConfigurationController configurationController) {
            DozeLog dozeLog, Lazy<StatusBarStateController> statusBarStateController) {
        mContext = context;
        mWakeLock = wakeLock;
        mHost = host;
@@ -113,19 +90,7 @@ public class DozeUi implements DozeMachine.Part, TunerService.Tunable,
        mTimeTicker = new AlarmTimeout(alarmManager, this::onTimeTick, "doze_time_tick", handler);
        keyguardUpdateMonitor.registerCallback(mKeyguardVisibilityCallback);
        mDozeLog = dozeLog;
        mTunerService = tunerService;
        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
@@ -133,21 +98,6 @@ public class DozeUi implements DozeMachine.Part, TunerService.Tunable,
        mMachine = dozeMachine;
    }

    /**
     * Decide if we're taking over the screen-off animation
     * when the device was configured to skip doze after screen off.
     */
    private void updateAnimateScreenOff() {
        if (mCanAnimateTransition) {
            final boolean controlScreenOff =
                    mDozeParameters.getAlwaysOn()
                    && (mKeyguardShowing || mDozeParameters.shouldControlUnlockedScreenOff())
                    && !mHost.isPowerSaveActive();
            mDozeParameters.setControlScreenOffAnimation(controlScreenOff);
            mHost.setAnimateScreenOff(controlScreenOff);
        }
    }

    private void pulseWhileDozing(int reason) {
        mHost.pulseWhileDozing(
                new DozeHost.PulseCallback() {
@@ -276,21 +226,4 @@ public class DozeUi implements DozeMachine.Part, TunerService.Tunable,

        scheduleTimeTick();
    }

    @VisibleForTesting
    KeyguardUpdateMonitorCallback getKeyguardCallback() {
        return mKeyguardVisibilityCallback;
    }

    @Override
    public void onTuningChanged(String key, String newValue) {
        if (key.equals(Settings.Secure.DOZE_ALWAYS_ON)) {
            updateAnimateScreenOff();
        }
    }

    @Override
    public void onConfigChanged(Configuration newConfig) {
        updateAnimateScreenOff();
    }
}
+63 −3
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.statusbar.phone;

import android.content.res.Configuration;
import android.content.res.Resources;
import android.hardware.display.AmbientDisplayConfiguration;
import android.os.PowerManager;
@@ -26,7 +27,10 @@ import android.util.Log;
import android.util.MathUtils;

import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;

import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.systemui.Dumpable;
import com.android.systemui.R;
import com.android.systemui.dagger.SysUISingleton;
@@ -35,7 +39,9 @@ import com.android.systemui.doze.AlwaysOnDisplayPolicy;
import com.android.systemui.doze.DozeScreenState;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.DevicePostureController;
import com.android.systemui.tuner.TunerService;

@@ -53,7 +59,8 @@ import javax.inject.Inject;
public class DozeParameters implements
        TunerService.Tunable,
        com.android.systemui.plugins.statusbar.DozeParameters,
        Dumpable {
        Dumpable, ConfigurationController.ConfigurationListener,
        StatusBarStateController.StateListener {
    private static final int MAX_DURATION = 60 * 1000;
    public static final boolean FORCE_NO_BLANKING =
            SystemProperties.getBoolean("debug.force_no_blanking", false);
@@ -74,6 +81,22 @@ public class DozeParameters implements
    private boolean mDozeAlwaysOn;
    private boolean mControlScreenOffAnimation;

    private boolean mKeyguardShowing;
    @VisibleForTesting
    final KeyguardUpdateMonitorCallback mKeyguardVisibilityCallback =
            new KeyguardUpdateMonitorCallback() {
                @Override
                public void onKeyguardVisibilityChanged(boolean showing) {
                    mKeyguardShowing = showing;
                    updateControlScreenOff();
                }

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

    @Inject
    protected DozeParameters(
            @Main Resources resources,
@@ -84,7 +107,10 @@ public class DozeParameters implements
            TunerService tunerService,
            DumpManager dumpManager,
            FeatureFlags featureFlags,
            UnlockedScreenOffAnimationController unlockedScreenOffAnimationController) {
            UnlockedScreenOffAnimationController unlockedScreenOffAnimationController,
            KeyguardUpdateMonitor keyguardUpdateMonitor,
            ConfigurationController configurationController,
            StatusBarStateController statusBarStateController) {
        mResources = resources;
        mAmbientDisplayConfiguration = ambientDisplayConfiguration;
        mAlwaysOnPolicy = alwaysOnDisplayPolicy;
@@ -97,10 +123,13 @@ public class DozeParameters implements
        mFeatureFlags = featureFlags;
        mUnlockedScreenOffAnimationController = unlockedScreenOffAnimationController;

        keyguardUpdateMonitor.registerCallback(mKeyguardVisibilityCallback);
        tunerService.addTunable(
                this,
                Settings.Secure.DOZE_ALWAYS_ON,
                Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED);
        configurationController.addCallback(this);
        statusBarStateController.addCallback(this);
    }

    public boolean getDisplayStateSupported() {
@@ -221,13 +250,29 @@ public class DozeParameters implements
        mPowerManager.setDozeAfterScreenOff(!controlScreenOffAnimation);
    }

    /**
     *
     */
    public void updateControlScreenOff() {
        if (!getDisplayNeedsBlanking()) {
            final boolean controlScreenOff =
                    getAlwaysOn() && (mKeyguardShowing || shouldControlUnlockedScreenOff());
            setControlScreenOffAnimation(controlScreenOff);
        }
    }

    /**
     * Whether we want to control the screen off animation when the device is unlocked. If we do,
     * we'll animate in AOD before turning off the screen, rather than simply fading to black and
     * then abruptly showing AOD.
     *
     * There are currently several reasons we might not want to control the screen off even if we
     * are able to, such as the shade being expanded, being in landscape, or having animations
     * disabled for a11y.
     */
    public boolean shouldControlUnlockedScreenOff() {
        return mUnlockedScreenOffAnimationController.shouldPlayUnlockedScreenOffAnimation();
        return canControlUnlockedScreenOff()
                && mUnlockedScreenOffAnimationController.shouldPlayUnlockedScreenOffAnimation();
    }

    /**
@@ -308,11 +353,26 @@ public class DozeParameters implements
    @Override
    public void onTuningChanged(String key, String newValue) {
        mDozeAlwaysOn = mAmbientDisplayConfiguration.alwaysOnEnabled(UserHandle.USER_CURRENT);

        if (key.equals(Settings.Secure.DOZE_ALWAYS_ON)) {
            updateControlScreenOff();
        }

        for (Callback callback : mCallbacks) {
            callback.onAlwaysOnChange();
        }
    }

    @Override
    public void onConfigChanged(Configuration newConfig) {
        updateControlScreenOff();
    }

    @Override
    public void onStatePostChange() {
        updateControlScreenOff();
    }

    @Override
    public void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter pw, @NonNull String[] args) {
        pw.print("getAlwaysOn(): "); pw.println(getAlwaysOn());
+0 −10
Original line number Diff line number Diff line
@@ -63,7 +63,6 @@ public final class DozeServiceHost implements DozeHost {
    private final DozeLog mDozeLog;
    private final PowerManager mPowerManager;
    private boolean mAnimateWakeup;
    private boolean mAnimateScreenOff;
    private boolean mIgnoreTouchWhilePulsing;
    private Runnable mPendingScreenOffCallback;
    @VisibleForTesting
@@ -356,11 +355,6 @@ public final class DozeServiceHost implements DozeHost {
        mAnimateWakeup = animateWakeup;
    }

    @Override
    public void setAnimateScreenOff(boolean animateScreenOff) {
        mAnimateScreenOff = animateScreenOff;
    }

    @Override
    public void onSlpiTap(float screenX, float screenY) {
        if (screenX > 0 && screenY > 0 && mAmbientIndicationContainer != null
@@ -440,10 +434,6 @@ public final class DozeServiceHost implements DozeHost {
        return mAnimateWakeup;
    }

    boolean shouldAnimateScreenOff() {
        return mAnimateScreenOff;
    }

    boolean getIgnoreTouchWhilePulsing() {
        return mIgnoreTouchWhilePulsing;
    }
+1 −1
Original line number Diff line number Diff line
@@ -3190,7 +3190,7 @@ public class StatusBar extends SystemUI implements
        boolean wakeAndUnlock = mBiometricUnlockController.getMode()
                == BiometricUnlockController.MODE_WAKE_AND_UNLOCK;
        boolean animate = (!mDozing && mDozeServiceHost.shouldAnimateWakeup() && !wakeAndUnlock)
                || (mDozing && mDozeServiceHost.shouldAnimateScreenOff()
                || (mDozing && mDozeParameters.shouldControlScreenOff()
                && visibleNotOccludedOrWillBe);

        mNotificationPanelViewController.setDozing(mDozing, animate, mWakeUpTouchLocation);
Loading