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

Commit f4f0b069 authored by Gus Prevas's avatar Gus Prevas
Browse files

Checks keyguard earlier when blocking notifications.

This change modifies NotificationInfo to call the provided keyguard
callback when the "Stop notifications" button is tapped, rather than
when trying to save the new importance value after the undo timeout.

Test: updated test cases in NotificationInfoTest.
Bug: 111416533
Change-Id: I89b4715d0d41be4587753f554862e51c4e1d43c3
Merged-In: I89b4715d0d41be4587753f554862e51c4e1d43c3
(cherry picked from commit 533836ac)
parent 34c2fcff
Loading
Loading
Loading
Loading
+15 −11
Original line number Diff line number Diff line
@@ -102,9 +102,16 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G
    };

    private OnClickListener mOnStopOrMinimizeNotifications = v -> {
        Runnable saveImportance = () -> {
            mExitReason = NotificationCounters.BLOCKING_HELPER_STOP_NOTIFICATIONS;
            swapContent(false);
        };
        if (mCheckSaveListener != null) {
            mCheckSaveListener.checkSave(saveImportance, mSbn);
        } else {
            saveImportance.run();
        }
    };

    private OnClickListener mOnUndo = v -> {
        // Reset exit counter that we'll log and record an undo event separately (not an exit event)
@@ -300,17 +307,9 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G

    private void saveImportance() {
        if (!mIsNonblockable) {
            // Only go through the lock screen/bouncer if the user hit 'Stop notifications'.
            // Otherwise, update the importance immediately.
            if (mCheckSaveListener != null
                    && NotificationCounters.BLOCKING_HELPER_STOP_NOTIFICATIONS.equals(
                            mExitReason)) {
                mCheckSaveListener.checkSave(this::updateImportance, mSbn);
            } else {
            updateImportance();
        }
    }
    }

    /**
     * Commits the updated importance values on the background thread.
@@ -513,6 +512,11 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G
        return getHeight();
    }

    @VisibleForTesting
    public boolean isAnimating() {
        return mExpandAnimation != null && mExpandAnimation.isRunning();
    }

    /**
     * Runnable to either update the given channel (with a new importance value) or, if no channel
     * is provided, update notifications enabled state for the package.
+12 −6
Original line number Diff line number Diff line
@@ -158,6 +158,11 @@ public class NotificationInfoTest extends SysuiTestCase {
        PollingCheck.waitFor(1000,
                () -> VISIBLE == mNotificationInfo.findViewById(R.id.confirmation).getVisibility());
    }
    private void ensureNoUndoButton() {
        PollingCheck.waitFor(1000,
                () -> GONE == mNotificationInfo.findViewById(R.id.confirmation).getVisibility()
                        && !mNotificationInfo.isAnimating());
    }
    private void waitForStopButton() {
        PollingCheck.waitFor(1000,
                () -> VISIBLE == mNotificationInfo.findViewById(R.id.prompt).getVisibility());
@@ -567,9 +572,6 @@ public class NotificationInfoTest extends SysuiTestCase {
                true /* isUserSentimentNegative */);

        mNotificationInfo.findViewById(R.id.block).performClick();
        waitForUndoButton();
        mNotificationInfo.handleCloseControls(true /* save */, false /* force */);

        mTestableLooper.processAllMessages();
        verify(listener).checkSave(any(Runnable.class), eq(mSbn));
    }
@@ -787,7 +789,7 @@ public class NotificationInfoTest extends SysuiTestCase {
    }

    @Test
    public void testCloseControlsDoesNotUpdateIfCheckSaveListenerIsNoOp() throws Exception {
    public void testBlockDoesNothingIfCheckSaveListenerIsNoOp() throws Exception {
        mNotificationChannel.setImportance(IMPORTANCE_LOW);
        mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager,
                TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn,
@@ -795,10 +797,10 @@ public class NotificationInfoTest extends SysuiTestCase {
                }, null, null, true);

        mNotificationInfo.findViewById(R.id.block).performClick();
        waitForUndoButton();
        mTestableLooper.processAllMessages();
        ensureNoUndoButton();
        mNotificationInfo.handleCloseControls(true, false);

        mTestableLooper.processAllMessages();
        verify(mMockINotificationManager, never()).updateNotificationChannelForPackage(
                eq(TEST_PACKAGE_NAME), eq(TEST_UID), eq(mNotificationChannel));
    }
@@ -813,6 +815,10 @@ public class NotificationInfoTest extends SysuiTestCase {
                }, null, null, false);

        mNotificationInfo.findViewById(R.id.block).performClick();
        mTestableLooper.processAllMessages();
        verify(mMockINotificationManager, never()).updateNotificationChannelForPackage(
                eq(TEST_PACKAGE_NAME), eq(TEST_UID), eq(mNotificationChannel));

        waitForUndoButton();
        mNotificationInfo.handleCloseControls(true, false);