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

Commit d7501aee authored by Isak Lilja's avatar Isak Lilja Committed by Jeff DeCew
Browse files

Show FSI when device is not provisioned

If device is not provisioned, dialer is not launched
when you get an incoming call.

Add a case for full screen intents handling case when
device is not yet provisioned.

Bug: 298584643
Test: atest NotificationInterruptStateProviderImplTest
Test: atest CentralSurfacesImplTest
Test: atest BubblesTest
(cherry picked from https://partner-android-review.googlesource.com/q/commit:a056191c9ead6f705e9f8df99195cd96460fc16e)
Change-Id: Ie9277d70195cc8bf9f4b1a9f7c52f968b6e2ebb9
parent 1559d46a
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -100,7 +100,11 @@ public interface NotificationInterruptStateProvider {
        /**
         * The notification is coming from a suspended packages, so FSI is suppressed.
         */
        NO_FSI_SUSPENDED(false);
        NO_FSI_SUSPENDED(false),
        /**
         * The device is not provisioned, launch FSI.
         */
        FSI_NOT_PROVISIONED(true);

        public final boolean shouldLaunch;

+11 −1
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.notification.NotifPipelineFlags;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.systemui.statusbar.policy.HeadsUpManager;
import com.android.systemui.statusbar.policy.KeyguardStateController;

@@ -75,6 +76,7 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter
    private final KeyguardNotificationVisibilityProvider mKeyguardNotificationVisibilityProvider;
    private final UiEventLogger mUiEventLogger;
    private final UserTracker mUserTracker;
    private final DeviceProvisionedController mDeviceProvisionedController;

    @VisibleForTesting
    protected boolean mUseHeadsUp = false;
@@ -121,7 +123,8 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter
            NotifPipelineFlags flags,
            KeyguardNotificationVisibilityProvider keyguardNotificationVisibilityProvider,
            UiEventLogger uiEventLogger,
            UserTracker userTracker) {
            UserTracker userTracker,
            DeviceProvisionedController deviceProvisionedController) {
        mContentResolver = contentResolver;
        mPowerManager = powerManager;
        mBatteryController = batteryController;
@@ -163,6 +166,7 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter
                    headsUpObserver);
        }
        headsUpObserver.onChange(true); // set up
        mDeviceProvisionedController = deviceProvisionedController;
    }

    @Override
@@ -334,6 +338,12 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter
            }
        }

        // The device is not provisioned, launch FSI.
        if (!mDeviceProvisionedController.isDeviceProvisioned()) {
            return getDecisionGivenSuppression(FullScreenIntentDecision.FSI_NOT_PROVISIONED,
                    suppressedByDND);
        }

        // Detect the case determined by b/231322873 to launch FSI while device is in use,
        // as blocked by the correct implementation, and report the event.
        return getDecisionGivenSuppression(FullScreenIntentDecision.NO_FSI_NO_HUN_OR_KEYGUARD,
+24 −1
Original line number Diff line number Diff line
@@ -71,6 +71,7 @@ import com.android.systemui.statusbar.notification.collection.NotificationEntryB
import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider.FullScreenIntentDecision;
import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProviderImpl.NotificationInterruptEvent;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.systemui.statusbar.policy.HeadsUpManager;
import com.android.systemui.statusbar.policy.KeyguardStateController;

@@ -117,6 +118,8 @@ public class NotificationInterruptStateProviderImplTest extends SysuiTestCase {
    PendingIntent mPendingIntent;
    @Mock
    UserTracker mUserTracker;
    @Mock
    DeviceProvisionedController mDeviceProvisionedController;

    private NotificationInterruptStateProviderImpl mNotifInterruptionStateProvider;

@@ -141,7 +144,8 @@ public class NotificationInterruptStateProviderImplTest extends SysuiTestCase {
                        mFlags,
                        mKeyguardNotificationVisibilityProvider,
                        mUiEventLoggerFake,
                        mUserTracker);
                        mUserTracker,
                        mDeviceProvisionedController);
        mNotifInterruptionStateProvider.mUseHeadsUp = true;
    }

@@ -693,6 +697,25 @@ public class NotificationInterruptStateProviderImplTest extends SysuiTestCase {
        verify(mLogger).logFullscreen(entry, "FSI_KEYGUARD_SHOWING");
    }

    @Test
    public void testShouldFullscreen_suppressedInterruptionsWhenNotProvisioned() {
        NotificationEntry entry = createFsiNotification(IMPORTANCE_HIGH, /* silenced */ false);
        when(mPowerManager.isInteractive()).thenReturn(true);
        when(mStatusBarStateController.getState()).thenReturn(SHADE);
        when(mStatusBarStateController.isDreaming()).thenReturn(false);
        when(mPowerManager.isScreenOn()).thenReturn(true);
        when(mDeviceProvisionedController.isDeviceProvisioned()).thenReturn(false);
        mNotifInterruptionStateProvider.addSuppressor(mSuppressInterruptions);

        assertThat(mNotifInterruptionStateProvider.getFullScreenIntentDecision(entry))
                .isEqualTo(FullScreenIntentDecision.FSI_NOT_PROVISIONED);
        assertThat(mNotifInterruptionStateProvider.shouldLaunchFullScreenIntentWhenAdded(entry))
                .isTrue();
        verify(mLogger, never()).logNoFullscreen(any(), any());
        verify(mLogger, never()).logNoFullscreenWarning(any(), any());
        verify(mLogger).logFullscreen(entry, "FSI_NOT_PROVISIONED");
    }

    @Test
    public void testShouldNotFullScreen_willHun() throws RemoteException {
        NotificationEntry entry = createFsiNotification(IMPORTANCE_HIGH, /* silenced */ false);
+6 −3
Original line number Diff line number Diff line
@@ -364,7 +364,8 @@ public class CentralSurfacesImplTest extends SysuiTestCase {
                        mock(NotifPipelineFlags.class),
                        mock(KeyguardNotificationVisibilityProvider.class),
                        mock(UiEventLogger.class),
                        mUserTracker);
                        mUserTracker,
                        mDeviceProvisionedController);

        mContext.addMockSystemService(TrustManager.class, mock(TrustManager.class));
        mContext.addMockSystemService(FingerprintManager.class, mock(FingerprintManager.class));
@@ -1169,7 +1170,8 @@ public class CentralSurfacesImplTest extends SysuiTestCase {
                NotifPipelineFlags flags,
                KeyguardNotificationVisibilityProvider keyguardNotificationVisibilityProvider,
                UiEventLogger uiEventLogger,
                UserTracker userTracker) {
                UserTracker userTracker,
                DeviceProvisionedController deviceProvisionedController) {
            super(
                    contentResolver,
                    powerManager,
@@ -1183,7 +1185,8 @@ public class CentralSurfacesImplTest extends SysuiTestCase {
                    flags,
                    keyguardNotificationVisibilityProvider,
                    uiEventLogger,
                    userTracker
                    userTracker,
                    deviceProvisionedController
            );
            mUseHeadsUp = true;
        }
+3 −1
Original line number Diff line number Diff line
@@ -126,6 +126,7 @@ import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.phone.ScreenOffAnimationController;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.systemui.statusbar.policy.HeadsUpManager;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.ZenModeController;
@@ -391,7 +392,8 @@ public class BubblesTest extends SysuiTestCase {
                        mock(NotifPipelineFlags.class),
                        mock(KeyguardNotificationVisibilityProvider.class),
                        mock(UiEventLogger.class),
                        mock(UserTracker.class)
                        mock(UserTracker.class),
                        mock(DeviceProvisionedController.class)
                );

        mShellTaskOrganizer = new ShellTaskOrganizer(mock(ShellInit.class),
Loading