summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RankingCoordinator.java18
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/RankingCoordinatorTest.java38
2 files changed, 55 insertions, 1 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RankingCoordinator.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RankingCoordinator.java
index 6c84fefe2d38..ea5cb308a2d0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RankingCoordinator.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RankingCoordinator.java
@@ -190,7 +190,9 @@ public class RankingCoordinator implements Coordinator {
"DndSuppressingVisualEffects") {
@Override
public boolean shouldFilterOut(NotificationEntry entry, long now) {
- if (mStatusBarStateController.isDozing() && entry.shouldSuppressAmbient()) {
+ if ((mStatusBarStateController.isDozing()
+ || mStatusBarStateController.getDozeAmount() == 1f)
+ && entry.shouldSuppressAmbient()) {
return true;
}
@@ -200,6 +202,20 @@ public class RankingCoordinator implements Coordinator {
private final StatusBarStateController.StateListener mStatusBarStateCallback =
new StatusBarStateController.StateListener() {
+ private boolean mPrevDozeAmountIsOne = false;
+
+ @Override
+ public void onDozeAmountChanged(float linear, float eased) {
+ StatusBarStateController.StateListener.super.onDozeAmountChanged(linear, eased);
+
+ boolean dozeAmountIsOne = linear == 1f;
+ if (mPrevDozeAmountIsOne != dozeAmountIsOne) {
+ mDndVisualEffectsFilter.invalidateList("dozeAmount changed to "
+ + (dozeAmountIsOne ? "one" : "not one"));
+ mPrevDozeAmountIsOne = dozeAmountIsOne;
+ }
+ }
+
@Override
public void onDozingChanged(boolean isDozing) {
mDndVisualEffectsFilter.invalidateList("onDozingChanged to " + isDozing);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/RankingCoordinatorTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/RankingCoordinatorTest.java
index 50b3fc7e1c42..d5c0c5564af6 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/RankingCoordinatorTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/RankingCoordinatorTest.java
@@ -25,6 +25,8 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -48,6 +50,7 @@ import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner;
+import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.Pluggable;
import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider;
import com.android.systemui.statusbar.notification.collection.provider.SectionStyleProvider;
import com.android.systemui.statusbar.notification.collection.render.NodeController;
@@ -75,12 +78,15 @@ public class RankingCoordinatorTest extends SysuiTestCase {
@Mock private NodeController mAlertingHeaderController;
@Mock private NodeController mSilentNodeController;
@Mock private SectionHeaderController mSilentHeaderController;
+ @Mock private Pluggable.PluggableListener<NotifFilter> mInvalidationListener;
@Captor private ArgumentCaptor<NotifFilter> mNotifFilterCaptor;
+ @Captor private ArgumentCaptor<StatusBarStateController.StateListener> mStateListenerCaptor;
private NotificationEntry mEntry;
private NotifFilter mCapturedSuspendedFilter;
private NotifFilter mCapturedDozingFilter;
+ private StatusBarStateController.StateListener mStatusBarStateCallback;
private RankingCoordinator mRankingCoordinator;
private NotifSectioner mAlertingSectioner;
@@ -106,6 +112,10 @@ public class RankingCoordinatorTest extends SysuiTestCase {
verify(mNotifPipeline, times(2)).addPreGroupFilter(mNotifFilterCaptor.capture());
mCapturedSuspendedFilter = mNotifFilterCaptor.getAllValues().get(0);
mCapturedDozingFilter = mNotifFilterCaptor.getAllValues().get(1);
+ mCapturedDozingFilter.setInvalidationListener(mInvalidationListener);
+
+ verify(mStatusBarStateController, times(1)).addCallback(mStateListenerCaptor.capture());
+ mStatusBarStateCallback = mStateListenerCaptor.getAllValues().get(0);
mAlertingSectioner = mRankingCoordinator.getAlertingSectioner();
mSilentSectioner = mRankingCoordinator.getSilentSectioner();
@@ -170,6 +180,13 @@ public class RankingCoordinatorTest extends SysuiTestCase {
// THEN don't filter out the notification
assertFalse(mCapturedDozingFilter.shouldFilterOut(mEntry, 0));
+
+ // WHEN it's not dozing and doze amount is 1
+ when(mStatusBarStateController.isDozing()).thenReturn(false);
+ when(mStatusBarStateController.getDozeAmount()).thenReturn(1f);
+
+ // THEN filter out the notification
+ assertTrue(mCapturedDozingFilter.shouldFilterOut(mEntry, 0));
}
@Test
@@ -267,6 +284,27 @@ public class RankingCoordinatorTest extends SysuiTestCase {
verify(mSilentHeaderController, times(2)).setClearSectionEnabled(eq(false));
}
+ @Test
+ public void statusBarStateCallbackTest() {
+ mStatusBarStateCallback.onDozeAmountChanged(1f, 1f);
+ verify(mInvalidationListener, times(1))
+ .onPluggableInvalidated(mCapturedDozingFilter, "dozeAmount changed to one");
+ reset(mInvalidationListener);
+
+ mStatusBarStateCallback.onDozeAmountChanged(1f, 1f);
+ verify(mInvalidationListener, never()).onPluggableInvalidated(any(), any());
+ reset(mInvalidationListener);
+
+ mStatusBarStateCallback.onDozeAmountChanged(0.6f, 0.6f);
+ verify(mInvalidationListener, times(1))
+ .onPluggableInvalidated(mCapturedDozingFilter, "dozeAmount changed to not one");
+ reset(mInvalidationListener);
+
+ mStatusBarStateCallback.onDozeAmountChanged(0f, 0f);
+ verify(mInvalidationListener, never()).onPluggableInvalidated(any(), any());
+ reset(mInvalidationListener);
+ }
+
private void assertInSection(NotificationEntry entry, NotifSectioner section) {
for (NotifSectioner current: mSections) {
if (current == section) {