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

Commit 6bc1bb75 authored by Julia Tuttle's avatar Julia Tuttle Committed by Android (Google) Code Review
Browse files

Merge "Add UiEvents for blocked full-screen intents" into tm-qpr-dev

parents d776e8d5 0ac2ace4
Loading
Loading
Loading
Loading
+31 −1
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
package com.android.systemui.statusbar.notification.interruption;

import static com.android.systemui.statusbar.StatusBarState.SHADE;
import static com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProviderImpl.NotificationInterruptEvent.FSI_SUPPRESSED_NO_HUN_OR_KEYGUARD;
import static com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProviderImpl.NotificationInterruptEvent.FSI_SUPPRESSED_SUPPRESSIVE_GROUP_ALERT_BEHAVIOR;

import android.app.NotificationManager;
import android.content.ContentResolver;
@@ -32,6 +34,8 @@ import android.service.notification.StatusBarNotification;
import android.util.Log;

import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.UiEvent;
import com.android.internal.logging.UiEventLogger;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
@@ -68,10 +72,30 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter
    private final NotificationInterruptLogger mLogger;
    private final NotifPipelineFlags mFlags;
    private final KeyguardNotificationVisibilityProvider mKeyguardNotificationVisibilityProvider;
    private final UiEventLogger mUiEventLogger;

    @VisibleForTesting
    protected boolean mUseHeadsUp = false;

    public enum NotificationInterruptEvent implements UiEventLogger.UiEventEnum {
        @UiEvent(doc = "FSI suppressed for suppressive GroupAlertBehavior")
        FSI_SUPPRESSED_SUPPRESSIVE_GROUP_ALERT_BEHAVIOR(1235),

        @UiEvent(doc = "FSI suppressed for requiring neither HUN nor keyguard")
        FSI_SUPPRESSED_NO_HUN_OR_KEYGUARD(1236);

        private final int mId;

        NotificationInterruptEvent(int id) {
            mId = id;
        }

        @Override
        public int getId() {
            return mId;
        }
    }

    @Inject
    public NotificationInterruptStateProviderImpl(
            ContentResolver contentResolver,
@@ -85,7 +109,8 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter
            NotificationInterruptLogger logger,
            @Main Handler mainHandler,
            NotifPipelineFlags flags,
            KeyguardNotificationVisibilityProvider keyguardNotificationVisibilityProvider) {
            KeyguardNotificationVisibilityProvider keyguardNotificationVisibilityProvider,
            UiEventLogger uiEventLogger) {
        mContentResolver = contentResolver;
        mPowerManager = powerManager;
        mDreamManager = dreamManager;
@@ -97,6 +122,7 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter
        mLogger = logger;
        mFlags = flags;
        mKeyguardNotificationVisibilityProvider = keyguardNotificationVisibilityProvider;
        mUiEventLogger = uiEventLogger;
        ContentObserver headsUpObserver = new ContentObserver(mainHandler) {
            @Override
            public void onChange(boolean selfChange) {
@@ -203,7 +229,9 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter
            // b/231322873: Detect and report an event when a notification has both an FSI and a
            // suppressive groupAlertBehavior, and now correctly block the FSI from firing.
            final int uid = entry.getSbn().getUid();
            final String packageName = entry.getSbn().getPackageName();
            android.util.EventLog.writeEvent(0x534e4554, "231322873", uid, "groupAlertBehavior");
            mUiEventLogger.log(FSI_SUPPRESSED_SUPPRESSIVE_GROUP_ALERT_BEHAVIOR, uid, packageName);
            mLogger.logNoFullscreenWarning(entry, "GroupAlertBehavior will prevent HUN");
            return false;
        }
@@ -249,7 +277,9 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter
            // 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.
            final int uid = entry.getSbn().getUid();
            final String packageName = entry.getSbn().getPackageName();
            android.util.EventLog.writeEvent(0x534e4554, "231322873", uid, "no hun or keyguard");
            mUiEventLogger.log(FSI_SUPPRESSED_NO_HUN_OR_KEYGUARD, uid, packageName);
            mLogger.logNoFullscreenWarning(entry, "Expected not to HUN while not on keyguard");
            return false;
        }
+21 −1
Original line number Diff line number Diff line
@@ -51,12 +51,14 @@ import android.testing.AndroidTestingRunner;

import androidx.test.filters.SmallTest;

import com.android.internal.logging.testing.UiEventLoggerFake;
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.notification.NotifPipelineFlags;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProviderImpl.NotificationInterruptEvent;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.HeadsUpManager;
import com.android.systemui.statusbar.policy.KeyguardStateController;
@@ -97,6 +99,7 @@ public class NotificationInterruptStateProviderImplTest extends SysuiTestCase {
    NotifPipelineFlags mFlags;
    @Mock
    KeyguardNotificationVisibilityProvider mKeyguardNotificationVisibilityProvider;
    UiEventLoggerFake mUiEventLoggerFake;
    @Mock
    PendingIntent mPendingIntent;

@@ -107,6 +110,8 @@ public class NotificationInterruptStateProviderImplTest extends SysuiTestCase {
        MockitoAnnotations.initMocks(this);
        when(mFlags.fullScreenIntentRequiresKeyguard()).thenReturn(false);

        mUiEventLoggerFake = new UiEventLoggerFake();

        mNotifInterruptionStateProvider =
                new NotificationInterruptStateProviderImpl(
                        mContext.getContentResolver(),
@@ -120,7 +125,8 @@ public class NotificationInterruptStateProviderImplTest extends SysuiTestCase {
                        mLogger,
                        mMockHandler,
                        mFlags,
                        mKeyguardNotificationVisibilityProvider);
                        mKeyguardNotificationVisibilityProvider,
                        mUiEventLoggerFake);
        mNotifInterruptionStateProvider.mUseHeadsUp = true;
    }

@@ -442,6 +448,13 @@ public class NotificationInterruptStateProviderImplTest extends SysuiTestCase {
        verify(mLogger, never()).logNoFullscreen(any(), any());
        verify(mLogger).logNoFullscreenWarning(entry, "GroupAlertBehavior will prevent HUN");
        verify(mLogger, never()).logFullscreen(any(), any());

        assertThat(mUiEventLoggerFake.numLogs()).isEqualTo(1);
        UiEventLoggerFake.FakeUiEvent fakeUiEvent = mUiEventLoggerFake.get(0);
        assertThat(fakeUiEvent.eventId).isEqualTo(
                NotificationInterruptEvent.FSI_SUPPRESSED_SUPPRESSIVE_GROUP_ALERT_BEHAVIOR.getId());
        assertThat(fakeUiEvent.uid).isEqualTo(entry.getSbn().getUid());
        assertThat(fakeUiEvent.packageName).isEqualTo(entry.getSbn().getPackageName());
    }

    @Test
@@ -600,6 +613,13 @@ public class NotificationInterruptStateProviderImplTest extends SysuiTestCase {
        verify(mLogger, never()).logNoFullscreen(any(), any());
        verify(mLogger).logNoFullscreenWarning(entry, "Expected not to HUN while not on keyguard");
        verify(mLogger, never()).logFullscreen(any(), any());

        assertThat(mUiEventLoggerFake.numLogs()).isEqualTo(1);
        UiEventLoggerFake.FakeUiEvent fakeUiEvent = mUiEventLoggerFake.get(0);
        assertThat(fakeUiEvent.eventId).isEqualTo(
                NotificationInterruptEvent.FSI_SUPPRESSED_NO_HUN_OR_KEYGUARD.getId());
        assertThat(fakeUiEvent.uid).isEqualTo(entry.getSbn().getUid());
        assertThat(fakeUiEvent.packageName).isEqualTo(entry.getSbn().getPackageName());
    }

    /**
+7 −3
Original line number Diff line number Diff line
@@ -80,6 +80,7 @@ import androidx.test.filters.SmallTest;

import com.android.internal.colorextraction.ColorExtractor;
import com.android.internal.jank.InteractionJankMonitor;
import com.android.internal.logging.UiEventLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.logging.testing.FakeMetricsLogger;
import com.android.internal.statusbar.IStatusBarService;
@@ -323,7 +324,8 @@ public class CentralSurfacesImplTest extends SysuiTestCase {
                        mock(NotificationInterruptLogger.class),
                        new Handler(TestableLooper.get(this).getLooper()),
                        mock(NotifPipelineFlags.class),
                        mock(KeyguardNotificationVisibilityProvider.class));
                        mock(KeyguardNotificationVisibilityProvider.class),
                        mock(UiEventLogger.class));

        mContext.addMockSystemService(TrustManager.class, mock(TrustManager.class));
        mContext.addMockSystemService(FingerprintManager.class, mock(FingerprintManager.class));
@@ -1157,7 +1159,8 @@ public class CentralSurfacesImplTest extends SysuiTestCase {
                NotificationInterruptLogger logger,
                Handler mainHandler,
                NotifPipelineFlags flags,
                KeyguardNotificationVisibilityProvider keyguardNotificationVisibilityProvider) {
                KeyguardNotificationVisibilityProvider keyguardNotificationVisibilityProvider,
                UiEventLogger uiEventLogger) {
            super(
                    contentResolver,
                    powerManager,
@@ -1170,7 +1173,8 @@ public class CentralSurfacesImplTest extends SysuiTestCase {
                    logger,
                    mainHandler,
                    flags,
                    keyguardNotificationVisibilityProvider
                    keyguardNotificationVisibilityProvider,
                    uiEventLogger
            );
            mUseHeadsUp = true;
        }
+3 −1
Original line number Diff line number Diff line
@@ -80,6 +80,7 @@ import android.view.WindowManager;
import androidx.test.filters.SmallTest;

import com.android.internal.colorextraction.ColorExtractor;
import com.android.internal.logging.UiEventLogger;
import com.android.internal.statusbar.IStatusBarService;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.biometrics.AuthController;
@@ -343,7 +344,8 @@ public class BubblesTest extends SysuiTestCase {
                        mock(NotificationInterruptLogger.class),
                        mock(Handler.class),
                        mock(NotifPipelineFlags.class),
                        mock(KeyguardNotificationVisibilityProvider.class)
                        mock(KeyguardNotificationVisibilityProvider.class),
                        mock(UiEventLogger.class)
                );
        when(mShellTaskOrganizer.getExecutor()).thenReturn(syncExecutor);
        mBubbleController = new TestableBubbleController(
+5 −2
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.os.Handler;
import android.os.PowerManager;
import android.service.dreams.IDreamManager;

import com.android.internal.logging.UiEventLogger;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.notification.NotifPipelineFlags;
import com.android.systemui.statusbar.notification.interruption.KeyguardNotificationVisibilityProvider;
@@ -46,7 +47,8 @@ public class TestableNotificationInterruptStateProviderImpl
            NotificationInterruptLogger logger,
            Handler mainHandler,
            NotifPipelineFlags flags,
            KeyguardNotificationVisibilityProvider keyguardNotificationVisibilityProvider) {
            KeyguardNotificationVisibilityProvider keyguardNotificationVisibilityProvider,
            UiEventLogger uiEventLogger) {
        super(contentResolver,
                powerManager,
                dreamManager,
@@ -58,7 +60,8 @@ public class TestableNotificationInterruptStateProviderImpl
                logger,
                mainHandler,
                flags,
                keyguardNotificationVisibilityProvider);
                keyguardNotificationVisibilityProvider,
                uiEventLogger);
        mUseHeadsUp = true;
    }
}