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

Commit 7b41d7e1 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Show notifications when dreaming with overlay only" into main

parents 49c5605a 405eaddc
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -309,7 +309,7 @@ public class KeyguardNotificationVisibilityProviderTest extends SysuiTestCase {

    @EnableFlags(OngoingActivityChipsOnDream.FLAG_NAME)
    @Test
    public void dreaming_flagEnabled_doNotHideNotifications() {
    public void dreamingWithOverlay_flagEnabled_showNotifications() {
        when(mStatusBarStateController.getCurrentOrUpcomingState()).thenReturn(KEYGUARD);
        mSecureSettings.putBool(Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, true);
        mSecureSettings.putBool(Settings.Secure.LOCK_SCREEN_SHOW_SILENT_NOTIFICATIONS, false);
@@ -318,13 +318,13 @@ public class KeyguardNotificationVisibilityProviderTest extends SysuiTestCase {
                .setImportance(IMPORTANCE_LOW)
                .build();
        when(mHighPriorityProvider.isExplicitlyHighPriority(any())).thenReturn(false);
        when(mKeyguardUpdateMonitor.isDreaming()).thenReturn(true);
        when(mKeyguardUpdateMonitor.isDreamingWithOverlay()).thenReturn(true);
        assertFalse(mKeyguardNotificationVisibilityProvider.shouldHideNotification(mEntry));
    }

    @DisableFlags(OngoingActivityChipsOnDream.FLAG_NAME)
    @Test
    public void dreaming_flagDisabled_hideNotifications() {
    public void dreamingWithOverlay_flagDisabled_hideNotifications() {
        when(mStatusBarStateController.getCurrentOrUpcomingState()).thenReturn(KEYGUARD);
        mSecureSettings.putBool(Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, true);
        mSecureSettings.putBool(Settings.Secure.LOCK_SCREEN_SHOW_SILENT_NOTIFICATIONS, false);
@@ -333,7 +333,7 @@ public class KeyguardNotificationVisibilityProviderTest extends SysuiTestCase {
                .setImportance(IMPORTANCE_LOW)
                .build();
        when(mHighPriorityProvider.isExplicitlyHighPriority(any())).thenReturn(false);
        when(mKeyguardUpdateMonitor.isDreaming()).thenReturn(true);
        when(mKeyguardUpdateMonitor.isDreamingWithOverlay()).thenReturn(true);
        assertTrue(mKeyguardNotificationVisibilityProvider.shouldHideNotification(mEntry));
    }

+30 −0
Original line number Diff line number Diff line
@@ -123,6 +123,7 @@ import com.android.settingslib.WirelessUtils;
import com.android.settingslib.fuelgauge.BatteryStatus;
import com.android.systemui.CoreStartable;
import com.android.systemui.Flags;
import com.android.systemui.ambient.statusbar.shared.flag.OngoingActivityChipsOnDream;
import com.android.systemui.biometrics.AuthController;
import com.android.systemui.biometrics.FingerprintInteractiveToAuthProvider;
import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor;
@@ -141,6 +142,7 @@ import com.android.systemui.deviceentry.shared.model.FaceDetectionStatus;
import com.android.systemui.deviceentry.shared.model.FailedFaceAuthenticationStatus;
import com.android.systemui.deviceentry.shared.model.HelpFaceAuthenticationStatus;
import com.android.systemui.deviceentry.shared.model.SuccessFaceAuthenticationStatus;
import com.android.systemui.dreams.DreamOverlayCallbackController;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.dump.DumpsysTableLogger;
import com.android.systemui.keyguard.KeyguardWmStateRefactor;
@@ -377,6 +379,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, CoreSt
    private final SensorPrivacyManager mSensorPrivacyManager;
    private final ActiveUnlockConfig mActiveUnlockConfig;
    private final IDreamManager mDreamManager;
    private final DreamOverlayCallbackController mDreamOverlayCallbackController;
    private final TelephonyManager mTelephonyManager;
    @Nullable
    private final FingerprintManager mFpm;
@@ -405,6 +408,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, CoreSt
    protected int mFingerprintRunningState = BIOMETRIC_STATE_STOPPED;
    private boolean mFingerprintDetectRunning;
    private boolean mIsDreaming;
    private boolean mIsDreamingWithOverlay = false;
    private boolean mCommunalShowing;
    private int mActiveMobileDataSubscription = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
    private final FingerprintInteractiveToAuthProvider mFingerprintInteractiveToAuthProvider;
@@ -857,6 +861,13 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, CoreSt
        return mIsDreaming;
    }

    /**
     * @return whether the device is currently dreaming with overlay (not doze).
     */
    public boolean isDreamingWithOverlay() {
        return mIsDreamingWithOverlay;
    }

    /**
     * If the device is dreaming, awakens the device
     */
@@ -2194,6 +2205,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, CoreSt
            SubscriptionManager subscriptionManager,
            UserManager userManager,
            IDreamManager dreamManager,
            DreamOverlayCallbackController dreamOverlayCallbackController,
            DevicePolicyManager devicePolicyManager,
            SensorPrivacyManager sensorPrivacyManager,
            TelephonyManager telephonyManager,
@@ -2238,6 +2250,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, CoreSt
        mTrustManager = trustManager;
        mUserManager = userManager;
        mDreamManager = dreamManager;
        mDreamOverlayCallbackController = dreamOverlayCallbackController;
        mTelephonyManager = telephonyManager;
        mDevicePolicyManager = devicePolicyManager;
        mPackageManager = packageManager;
@@ -2387,6 +2400,19 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, CoreSt
        };
    }

    private final DreamOverlayCallbackController.Callback mDreamOverlayCallback =
            new DreamOverlayCallbackController.Callback() {
                @Override
                public void onWakeUp() {
                    mIsDreamingWithOverlay = false;
                }

                @Override
                public void onStartDream() {
                    mIsDreamingWithOverlay = true;
                }
            };

    @Override
    public void start() {
        // Since device can't be un-provisioned, we only need to register a content observer
@@ -2551,6 +2577,10 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, CoreSt
            );
        }

        if (OngoingActivityChipsOnDream.isEnabled()) {
            mDreamOverlayCallbackController.addCallback(mDreamOverlayCallback);
        }

        if (glanceableHubV2()) {
            mJavaAdapter.get().alwaysCollectFlow(
                    mCommunalSceneInteractor.get().isCommunalVisible(),
+3 −2
Original line number Diff line number Diff line
@@ -199,9 +199,10 @@ constructor(

    override fun shouldHideNotification(entry: NotificationEntry): VisState =
        when {
            // Don't hide notifications if we're in a dream. The dream status bar needs
            // Show notifications if we're in a dream with overlay. The dream status bar needs
            // notifications to render ongoing call chip.
            OngoingActivityChipsOnDream.isEnabled && keyguardUpdateMonitor.isDreaming -> SHOW
            OngoingActivityChipsOnDream.isEnabled && keyguardUpdateMonitor.isDreamingWithOverlay ->
                SHOW
            // Keyguard state doesn't matter if the keyguard is not showing.
            !isLockedOrLocking -> SHOW
            // Notifications not allowed on the lockscreen, always hide.
+23 −1
Original line number Diff line number Diff line
@@ -134,6 +134,7 @@ import com.android.keyguard.logging.SimLogger;
import com.android.settingslib.fuelgauge.BatteryStatus;
import com.android.systemui.Flags;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.ambient.statusbar.shared.flag.OngoingActivityChipsOnDream;
import com.android.systemui.biometrics.AuthController;
import com.android.systemui.biometrics.FingerprintInteractiveToAuthProvider;
import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor;
@@ -146,6 +147,7 @@ import com.android.systemui.deviceentry.domain.interactor.FaceAuthenticationList
import com.android.systemui.deviceentry.shared.model.ErrorFaceAuthenticationStatus;
import com.android.systemui.deviceentry.shared.model.FaceDetectionStatus;
import com.android.systemui.deviceentry.shared.model.FailedFaceAuthenticationStatus;
import com.android.systemui.dreams.DreamOverlayCallbackController;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.flags.SceneContainerFlagParameterizationKt;
import com.android.systemui.keyguard.domain.interactor.KeyguardServiceShowLockscreenInteractor;
@@ -252,6 +254,8 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
    @Mock
    private IDreamManager mDreamManager;
    @Mock
    private DreamOverlayCallbackController mDreamOverlayCallbackController;
    @Mock
    private KeyguardBypassController mKeyguardBypassController;
    @Mock
    private SubscriptionManager mSubscriptionManager;
@@ -321,6 +325,8 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
    @Captor
    private ArgumentCaptor<IBiometricEnabledOnKeyguardCallback>
            mBiometricEnabledCallbackArgCaptor;
    @Captor
    private ArgumentCaptor<DreamOverlayCallbackController.Callback> mDreamOverlayCallbackCaptor;

    // Direct executor
    private final Executor mBackgroundExecutor = Runnable::run;
@@ -2477,6 +2483,21 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
        Assert.assertFalse(mKeyguardUpdateMonitor.forceIsDismissibleIsKeepingDeviceUnlocked());
    }

    @EnableFlags(OngoingActivityChipsOnDream.FLAG_NAME)
    @Test
    public void isDreamingWithOverlay() {
        assertThat(mKeyguardUpdateMonitor.isDreamingWithOverlay()).isFalse();

        verify(mDreamOverlayCallbackController).addCallback(mDreamOverlayCallbackCaptor.capture());
        final DreamOverlayCallbackController.Callback callback =
                mDreamOverlayCallbackCaptor.getValue();
        callback.onStartDream();
        assertThat(mKeyguardUpdateMonitor.isDreamingWithOverlay()).isTrue();

        callback.onWakeUp();
        assertThat(mKeyguardUpdateMonitor.isDreamingWithOverlay()).isFalse();
    }

    private Intent defaultSimStateChangedIntent() {
        Intent intent = new Intent(TelephonyIntents.ACTION_SIM_STATE_CHANGED);
        intent.putExtra(SubscriptionManager.EXTRA_SLOT_INDEX, 0);
@@ -2686,7 +2707,8 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
                    mInteractionJankMonitor, mLatencyTracker, mActiveUnlockConfig,
                    mKeyguardUpdateMonitorLogger, mSimLogger, mUiEventLogger, () -> mSessionTracker,
                    mTrustManager, mSubscriptionManager, mUserManager,
                    mDreamManager, mDevicePolicyManager, mSensorPrivacyManager, mTelephonyManager,
                    mDreamManager, mDreamOverlayCallbackController, mDevicePolicyManager,
                    mSensorPrivacyManager, mTelephonyManager,
                    mPackageManager, mFingerprintManager, mBiometricManager,
                    mFaceWakeUpTriggersConfig, mDevicePostureController,
                    Optional.of(mInteractiveToAuthProvider),