summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Rohan Shah <shahrk@google.com> 2018-05-09 20:32:15 -0700
committer Rohan Shah <shahrk@google.com> 2018-05-09 20:43:33 -0700
commitdd588c76e3efda37419c557426ab6b6ac7c5e3fc (patch)
treebbb4f5945ab6aa13458ec67a519aad47e5b4419e
parent8ca46fc4aceeec572d75b37303fc95cca72a64f9 (diff)
Allow keep showing to bypass bouncer
User experience improvement that alleviates the current bouncer bug with the blocking helper (where users can't swipe after interacting with the blocking helper). Bug: 78222122 Test: Added test case, verified on device with lock screen pin + helper Change-Id: I54806df8b960ea305b120aef6217a6b90f30590b
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java18
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationInfoTest.java30
2 files changed, 41 insertions, 7 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java
index ec49f436b7d0..be5e3f4bce92 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java
@@ -91,22 +91,24 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G
private boolean mIsForBlockingHelper;
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 -> {
- mExitReasonCounter = NotificationCounters.BLOCKING_HELPER_KEEP_SHOWING;
+ mExitReason = NotificationCounters.BLOCKING_HELPER_KEEP_SHOWING;
closeControls(v);
};
private OnClickListener mOnStopOrMinimizeNotifications = v -> {
- mExitReasonCounter = NotificationCounters.BLOCKING_HELPER_STOP_NOTIFICATIONS;
+ mExitReason = NotificationCounters.BLOCKING_HELPER_STOP_NOTIFICATIONS;
swapContent(false);
};
private OnClickListener mOnUndo = v -> {
// 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);
swapContent(true);
};
@@ -300,7 +302,9 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G
private void saveImportance() {
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);
} else {
updateImportance();
@@ -495,7 +499,7 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G
if (save) {
saveImportance();
}
- logBlockingHelperCounter(mExitReasonCounter);
+ logBlockingHelperCounter(mExitReason);
return false;
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationInfoTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationInfoTest.java
index 65fd7f5f3651..cb509e0984ba 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationInfoTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationInfoTest.java
@@ -509,6 +509,36 @@ public class NotificationInfoTest extends SysuiTestCase {
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
public void testCloseControls_blockingHelperDismissedIfShown() throws Exception {
mNotificationInfo.bindNotification(