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

Commit 325fbdcf authored by Rohan Shah's avatar Rohan Shah Committed by android-build-merger
Browse files

Merge "Allow keep showing to bypass bouncer" into pi-dev

am: 26f9e7a5

Change-Id: I2cf179e66be7a67852bdf391931068156e9305ca
parents 399a7e99 26f9e7a5
Loading
Loading
Loading
Loading
+11 −7
Original line number Original line Diff line number Diff line
@@ -91,22 +91,24 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G
    private boolean mIsForBlockingHelper;
    private boolean mIsForBlockingHelper;
    private boolean mNegativeUserSentiment;
    private boolean mNegativeUserSentiment;


    /** Counter tag that describes how the user exit or quit out of this view. */
    /**
    private String mExitReasonCounter = NotificationCounters.BLOCKING_HELPER_DISMISSED;
     * String that describes how the user exit or quit out of this view, also used as a counter tag.
     */
    private String mExitReason = NotificationCounters.BLOCKING_HELPER_DISMISSED;


    private OnClickListener mOnKeepShowing = v -> {
    private OnClickListener mOnKeepShowing = v -> {
        mExitReasonCounter = NotificationCounters.BLOCKING_HELPER_KEEP_SHOWING;
        mExitReason = NotificationCounters.BLOCKING_HELPER_KEEP_SHOWING;
        closeControls(v);
        closeControls(v);
    };
    };


    private OnClickListener mOnStopOrMinimizeNotifications = v -> {
    private OnClickListener mOnStopOrMinimizeNotifications = v -> {
        mExitReasonCounter = NotificationCounters.BLOCKING_HELPER_STOP_NOTIFICATIONS;
        mExitReason = NotificationCounters.BLOCKING_HELPER_STOP_NOTIFICATIONS;
        swapContent(false);
        swapContent(false);
    };
    };


    private OnClickListener mOnUndo = v -> {
    private OnClickListener mOnUndo = v -> {
        // Reset exit counter that we'll log and record an undo event separately (not an exit event)
        // Reset exit counter that we'll log and record an undo event separately (not an exit event)
        mExitReasonCounter = NotificationCounters.BLOCKING_HELPER_DISMISSED;
        mExitReason = NotificationCounters.BLOCKING_HELPER_DISMISSED;
        logBlockingHelperCounter(NotificationCounters.BLOCKING_HELPER_UNDO);
        logBlockingHelperCounter(NotificationCounters.BLOCKING_HELPER_UNDO);
        swapContent(true);
        swapContent(true);
    };
    };
@@ -300,7 +302,9 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G


    private void saveImportance() {
    private void saveImportance() {
        if (!mIsNonblockable) {
        if (!mIsNonblockable) {
            if (mCheckSaveListener != null) {
            // Only go through the lock screen/bouncer if the user didn't hit 'Keep showing'.
            if (mCheckSaveListener != null
                    && !NotificationCounters.BLOCKING_HELPER_KEEP_SHOWING.equals(mExitReason)) {
                mCheckSaveListener.checkSave(this::updateImportance, mSbn);
                mCheckSaveListener.checkSave(this::updateImportance, mSbn);
            } else {
            } else {
                updateImportance();
                updateImportance();
@@ -495,7 +499,7 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G
        if (save) {
        if (save) {
            saveImportance();
            saveImportance();
        }
        }
        logBlockingHelperCounter(mExitReasonCounter);
        logBlockingHelperCounter(mExitReason);
        return false;
        return false;
    }
    }


+30 −0
Original line number Original line Diff line number Diff line
@@ -509,6 +509,36 @@ public class NotificationInfoTest extends SysuiTestCase {
                        anyString(), eq(TEST_UID), eq(true));
                        anyString(), eq(TEST_UID), eq(true));
    }
    }



    @Test
    public void testCloseControls_nonNullCheckSaveListenerDoesntDelayKeepShowing()
            throws Exception {
        NotificationInfo.CheckSaveListener listener =
                mock(NotificationInfo.CheckSaveListener.class);
        mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
                TEST_PACKAGE_NAME, mNotificationChannel /* notificationChannel */,
                10 /* numUniqueChannelsInRow */, mSbn, listener /* checkSaveListener */,
                null /* onSettingsClick */, null /* onAppSettingsClick */ ,
                false /* isNonblockable */, true /* isForBlockingHelper */,
                true /* isUserSentimentNegative */);

        NotificationGuts guts = spy(new NotificationGuts(mContext, null));
        when(guts.getWindowToken()).thenReturn(mock(IBinder.class));
        doNothing().when(guts).animateClose(anyInt(), anyInt(), anyBoolean());
        doNothing().when(guts).setExposed(anyBoolean(), anyBoolean());
        guts.setGutsContent(mNotificationInfo);
        mNotificationInfo.setGutsParent(guts);

        mNotificationInfo.findViewById(R.id.keep).performClick();

        verify(mBlockingHelperManager).dismissCurrentBlockingHelper();
        mTestableLooper.processAllMessages();
        verify(mMockINotificationManager, times(1))
                .setNotificationsEnabledWithImportanceLockForPackage(
                        anyString(), eq(TEST_UID), eq(true));
    }


    @Test
    @Test
    public void testCloseControls_blockingHelperDismissedIfShown() throws Exception {
    public void testCloseControls_blockingHelperDismissedIfShown() throws Exception {
        mNotificationInfo.bindNotification(
        mNotificationInfo.bindNotification(