diff options
4 files changed, 60 insertions, 27 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java index 5646a4365aa1..5876831cf05d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java @@ -156,7 +156,6 @@ import com.android.systemui.statusbar.phone.ShadeController; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.policy.HeadsUpUtil; import com.android.systemui.statusbar.policy.ScrollAdapter; -import com.android.systemui.statusbar.policy.ZenModeController; import com.android.systemui.tuner.TunerService; import com.android.systemui.util.Assert; @@ -366,7 +365,6 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable private boolean mForceNoOverlappingRendering; private final ArrayList<Pair<ExpandableNotificationRow, Boolean>> mTmpList = new ArrayList<>(); private FalsingManager mFalsingManager; - private final ZenModeController mZenController; private boolean mAnimationRunning; private ViewTreeObserver.OnPreDrawListener mRunningAnimationUpdater = new ViewTreeObserver.OnPreDrawListener() { @@ -587,14 +585,13 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable AttributeSet attrs, NotificationRoundnessManager notificationRoundnessManager, DynamicPrivacyController dynamicPrivacyController, - SysuiStatusBarStateController statusBarStateController, + SysuiStatusBarStateController statusbarStateController, HeadsUpManagerPhone headsUpManager, KeyguardBypassController keyguardBypassController, KeyguardMediaController keyguardMediaController, FalsingManager falsingManager, NotificationLockscreenUserManager notificationLockscreenUserManager, NotificationGutsManager notificationGutsManager, - ZenModeController zenController, NotificationSectionsManager notificationSectionsManager, ForegroundServiceSectionController fgsSectionController, ForegroundServiceDismissalFeatureController fgsFeatureController, @@ -615,7 +612,6 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable mHeadsUpManager.setAnimationStateHandler(this::setHeadsUpGoingAwayAnimationsAllowed); mKeyguardBypassController = keyguardBypassController; mFalsingManager = falsingManager; - mZenController = zenController; mFgsSectionController = fgsSectionController; mSectionsManager = notificationSectionsManager; @@ -693,7 +689,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable } mDynamicPrivacyController = dynamicPrivacyController; - mStatusbarStateController = statusBarStateController; + mStatusbarStateController = statusbarStateController; initializeForegroundServiceSection(fgsFeatureController); mUiEventLogger = uiEventLogger; mColorExtractor.addOnColorsChangedListener(mOnColorsChangedListener); @@ -4996,11 +4992,11 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable } @ShadeViewRefactor(RefactorComponent.SHADE_VIEW) - void updateEmptyShadeView(boolean visible) { + void updateEmptyShadeView(boolean visible, boolean notifVisibleInShade) { mEmptyShadeView.setVisible(visible, mIsExpanded && mAnimationsEnabled); int oldTextRes = mEmptyShadeView.getTextResource(); - int newTextRes = mZenController.areNotificationsHiddenInShade() + int newTextRes = notifVisibleInShade ? R.string.dnd_suppressing_shade_text : R.string.empty_shade_text; if (oldTextRes != newTextRes) { mEmptyShadeView.setText(newTextRes); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java index 7c29ee2b5483..c63e77a514a7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java @@ -49,6 +49,7 @@ import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.dagger.StatusBarComponent; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener; +import com.android.systemui.statusbar.policy.ZenModeController; import com.android.systemui.tuner.TunerService; import java.util.function.BiConsumer; @@ -68,6 +69,7 @@ public class NotificationStackScrollLayoutController { private final TunerService mTunerService; private final DynamicPrivacyController mDynamicPrivacyController; private final ConfigurationController mConfigurationController; + private final ZenModeController mZenModeController; private final NotificationListContainerImpl mNotificationListContainer = new NotificationListContainerImpl(); private NotificationStackScrollLayout mView; @@ -130,7 +132,8 @@ public class NotificationStackScrollLayoutController { NotificationRoundnessManager notificationRoundnessManager, TunerService tunerService, DynamicPrivacyController dynamicPrivacyController, - ConfigurationController configurationController) { + ConfigurationController configurationController, + ZenModeController zenModeController) { mAllowLongPress = allowLongPress; mNotificationGutsManager = notificationGutsManager; mHeadsUpManager = headsUpManager; @@ -138,6 +141,7 @@ public class NotificationStackScrollLayoutController { mTunerService = tunerService; mDynamicPrivacyController = dynamicPrivacyController; mConfigurationController = configurationController; + mZenModeController = zenModeController; } public void attach(NotificationStackScrollLayout view) { @@ -484,7 +488,7 @@ public class NotificationStackScrollLayoutController { } public void updateEmptyShadeView(boolean visible) { - mView.updateEmptyShadeView(visible); + mView.updateEmptyShadeView(visible, mZenModeController.areNotificationsHiddenInShade()); } public void setHeadsUpAnimatingAway(boolean headsUpAnimatingAway) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java index 9a6674e165e4..bf9fd713255a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java @@ -94,6 +94,7 @@ import com.android.systemui.statusbar.phone.NotificationIconAreaController; import com.android.systemui.statusbar.phone.ScrimController; import com.android.systemui.statusbar.phone.ShadeController; import com.android.systemui.statusbar.phone.StatusBar; +import com.android.systemui.statusbar.policy.HeadsUpManager; import com.android.systemui.statusbar.policy.ZenModeController; import com.android.systemui.util.leak.LeakDetector; @@ -136,12 +137,12 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase { @Mock private MetricsLogger mMetricsLogger; @Mock private NotificationRoundnessManager mNotificationRoundnessManager; @Mock private KeyguardBypassController mKeyguardBypassController; - @Mock private KeyguardMediaController mKeyguardMediaController; - @Mock private ZenModeController mZenModeController; @Mock private NotificationSectionsManager mNotificationSectionsManager; @Mock private NotificationSection mNotificationSection; @Mock private NotificationLockscreenUserManager mLockscreenUserManager; @Mock private FeatureFlags mFeatureFlags; + @Mock private KeyguardMediaController mKeyguardMediaController; + @Mock private SysuiStatusBarStateController mStatusBarStateController; private UserChangedListener mUserChangedListener; private NotificationEntryManager mEntryManager; private int mOriginalInterruptionModelSetting; @@ -211,17 +212,18 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase { // which refer to members of NotificationStackScrollLayout. The spy // holds a copy of the CUT's instances of these KeyguardBypassController, so they still // refer to the CUT's member variables, not the spy's member variables. - mStackScrollerInternal = new NotificationStackScrollLayout(getContext(), null, + mStackScrollerInternal = new NotificationStackScrollLayout( + getContext(), + null, mNotificationRoundnessManager, mock(DynamicPrivacyController.class), - mock(SysuiStatusBarStateController.class), + mStatusBarStateController, mHeadsUpManager, mKeyguardBypassController, mKeyguardMediaController, new FalsingManagerFake(), mLockscreenUserManager, mock(NotificationGutsManager.class), - mZenModeController, mNotificationSectionsManager, mock(ForegroundServiceSectionController.class), mock(ForegroundServiceDismissalFeatureController.class), @@ -269,9 +271,8 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase { @Test public void updateEmptyView_dndSuppressing() { when(mEmptyShadeView.willBeGone()).thenReturn(true); - when(mZenModeController.areNotificationsHiddenInShade()).thenReturn(true); - mStackScroller.updateEmptyShadeView(true); + mStackScroller.updateEmptyShadeView(true, true); verify(mEmptyShadeView).setText(R.string.dnd_suppressing_shade_text); } @@ -280,9 +281,8 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase { public void updateEmptyView_dndNotSuppressing() { mStackScroller.setEmptyShadeView(mEmptyShadeView); when(mEmptyShadeView.willBeGone()).thenReturn(true); - when(mZenModeController.areNotificationsHiddenInShade()).thenReturn(false); - mStackScroller.updateEmptyShadeView(true); + mStackScroller.updateEmptyShadeView(true, false); verify(mEmptyShadeView).setText(R.string.empty_shade_text); } @@ -291,12 +291,10 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase { public void updateEmptyView_noNotificationsToDndSuppressing() { mStackScroller.setEmptyShadeView(mEmptyShadeView); when(mEmptyShadeView.willBeGone()).thenReturn(true); - when(mZenModeController.areNotificationsHiddenInShade()).thenReturn(false); - mStackScroller.updateEmptyShadeView(true); + mStackScroller.updateEmptyShadeView(true, false); verify(mEmptyShadeView).setText(R.string.empty_shade_text); - when(mZenModeController.areNotificationsHiddenInShade()).thenReturn(true); - mStackScroller.updateEmptyShadeView(true); + mStackScroller.updateEmptyShadeView(true, true); verify(mEmptyShadeView).setText(R.string.dnd_suppressing_shade_text); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollerControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollerControllerTest.java index e3acf0213725..dd8d0b422478 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollerControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollerControllerTest.java @@ -16,6 +16,8 @@ package com.android.systemui.statusbar.notification.stack; +import static com.android.systemui.statusbar.notification.ViewGroupFadeHelper.reset; + import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; @@ -26,11 +28,11 @@ import android.testing.AndroidTestingRunner; import androidx.test.filters.SmallTest; import com.android.systemui.SysuiTestCase; -import com.android.systemui.colorextraction.SysuiColorExtractor; import com.android.systemui.statusbar.notification.DynamicPrivacyController; import com.android.systemui.statusbar.notification.row.NotificationGutsManager; import com.android.systemui.statusbar.phone.HeadsUpManagerPhone; import com.android.systemui.statusbar.policy.ConfigurationController; +import com.android.systemui.statusbar.policy.ZenModeController; import com.android.systemui.tuner.TunerService; import org.junit.Before; @@ -55,13 +57,13 @@ public class NotificationStackScrollerControllerTest extends SysuiTestCase { @Mock private TunerService mTunerService; @Mock - private AmbientState mAmbientState; - @Mock private DynamicPrivacyController mDynamicPrivacyController; @Mock private ConfigurationController mConfigurationController; @Mock private NotificationStackScrollLayout mNotificationStackScrollLayout; + @Mock + private ZenModeController mZenModeController; NotificationStackScrollLayoutController mController; @@ -76,7 +78,8 @@ public class NotificationStackScrollerControllerTest extends SysuiTestCase { mNotificationRoundnessManager, mTunerService, mDynamicPrivacyController, - mConfigurationController + mConfigurationController, + mZenModeController ); when(mNotificationStackScrollLayout.isAttachedToWindow()).thenReturn(true); @@ -112,4 +115,36 @@ public class NotificationStackScrollerControllerTest extends SysuiTestCase { mController.mConfigurationListener.onDensityOrFontScaleChanged(); verify(mNotificationStackScrollLayout).reinflateViews(); } + + @Test + public void testUpdateEmptyShadeView_notificationsVisible() { + when(mZenModeController.areNotificationsHiddenInShade()).thenReturn(true); + mController.attach(mNotificationStackScrollLayout); + + mController.updateEmptyShadeView(true /* visible */); + verify(mNotificationStackScrollLayout).updateEmptyShadeView( + true /* visible */, + true /* notifVisibleInShade */); + reset(mNotificationStackScrollLayout); + mController.updateEmptyShadeView(false /* visible */); + verify(mNotificationStackScrollLayout).updateEmptyShadeView( + false /* visible */, + true /* notifVisibleInShade */); + } + + @Test + public void testUpdateEmptyShadeView_notificationsHidden() { + when(mZenModeController.areNotificationsHiddenInShade()).thenReturn(false); + mController.attach(mNotificationStackScrollLayout); + + mController.updateEmptyShadeView(true /* visible */); + verify(mNotificationStackScrollLayout).updateEmptyShadeView( + true /* visible */, + false /* notifVisibleInShade */); + reset(mNotificationStackScrollLayout); + mController.updateEmptyShadeView(false /* visible */); + verify(mNotificationStackScrollLayout).updateEmptyShadeView( + false /* visible */, + false /* notifVisibleInShade */); + } } |