From 08a567fd359ffa3c1b73ead7ef7e9f7ca16ad65c Mon Sep 17 00:00:00 2001 From: Jeff DeCew Date: Wed, 2 Feb 2022 19:16:20 +0000 Subject: [PATCH] Don't query settings for the notification history state every time we update the footer. Bug: 217450249 Test: manual Change-Id: Ic8f22359574d7e7dee224bdfcdd772b18984f3b6 --- .../stack/NotificationStackScrollLayout.java | 13 ++++------ ...tificationStackScrollLayoutController.java | 22 ++++++++++++++--- .../NotificationStackScrollLayoutTest.java | 24 +++++++++++++------ 3 files changed, 41 insertions(+), 18 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 9655a9ce5e45d..55d66a3fbd844 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 @@ -43,7 +43,6 @@ import android.graphics.Path; import android.graphics.PointF; import android.graphics.Rect; import android.os.Bundle; -import android.os.UserHandle; import android.provider.Settings; import android.util.AttributeSet; import android.util.IndentingPrintWriter; @@ -696,8 +695,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable && mQsExpansionFraction != 1 && !mScreenOffAnimationController.shouldHideNotificationsFooter() && !mIsRemoteInputActive; - boolean showHistory = Settings.Secure.getIntForUser(mContext.getContentResolver(), - Settings.Secure.NOTIFICATION_HISTORY_ENABLED, 0, UserHandle.USER_CURRENT) == 1; + boolean showHistory = mController.isHistoryEnabled(); updateFooterView(showFooterView, showDismissView, showHistory); } @@ -5243,11 +5241,10 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable R.layout.status_bar_no_notifications, this, false); view.setText(R.string.empty_shade_text); view.setOnClickListener(v -> { - final boolean showHistory = Settings.Secure.getIntForUser(mContext.getContentResolver(), - Settings.Secure.NOTIFICATION_HISTORY_ENABLED, 0, UserHandle.USER_CURRENT) == 1; - Intent intent = showHistory ? new Intent( - Settings.ACTION_NOTIFICATION_HISTORY) : new Intent( - Settings.ACTION_NOTIFICATION_SETTINGS); + final boolean showHistory = mController.isHistoryEnabled(); + Intent intent = showHistory + ? new Intent(Settings.ACTION_NOTIFICATION_HISTORY) + : new Intent(Settings.ACTION_NOTIFICATION_SETTINGS); mStatusBar.startActivity(intent, true, true, Intent.FLAG_ACTIVITY_SINGLE_TOP); }); setEmptyShadeView(view); 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 c627a1e0d8015..96b1c7d7b97f0 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 @@ -36,6 +36,7 @@ import android.content.res.Resources; import android.graphics.Point; import android.graphics.PointF; import android.os.Trace; +import android.os.UserHandle; import android.provider.Settings; import android.service.notification.NotificationListenerService; import android.service.notification.StatusBarNotification; @@ -181,7 +182,6 @@ public class NotificationStackScrollLayoutController { private final NotificationLockscreenUserManager mLockscreenUserManager; // TODO: StatusBar should be encapsulated behind a Controller private final StatusBar mStatusBar; - private final NotificationGroupManagerLegacy mLegacyGroupManager; private final SectionHeaderController mSilentHeaderController; private final LockscreenShadeTransitionController mLockscreenShadeTransitionController; private final InteractionJankMonitor mJankMonitor; @@ -192,6 +192,7 @@ public class NotificationStackScrollLayoutController { private boolean mFadeNotificationsOnDismiss; private NotificationSwipeHelper mSwipeHelper; private boolean mShowEmptyShadeView; + @Nullable private Boolean mHistoryEnabled; private int mBarState; private HeadsUpAppearanceController mHeadsUpAppearanceController; @@ -341,6 +342,8 @@ public class NotificationStackScrollLayoutController { @Override public void onUserChanged(int userId) { mView.updateSensitiveness(false, mLockscreenUserManager.isAnyProfilePublicMode()); + mHistoryEnabled = null; + updateFooter(); } }; @@ -700,8 +703,6 @@ public class NotificationStackScrollLayoutController { } }); mNotifPipelineFlags = notifPipelineFlags; - mLegacyGroupManager = mNotifPipelineFlags.isNewPipelineEnabled() - ? null : legacyGroupManager; mSilentHeaderController = silentHeaderController; mNotifPipeline = notifPipeline; mNotifCollection = notifCollection; @@ -803,6 +804,7 @@ public class NotificationStackScrollLayoutController { (key, newValue) -> { switch (key) { case Settings.Secure.NOTIFICATION_HISTORY_ENABLED: + mHistoryEnabled = null; // invalidate updateFooter(); break; case HIGH_PRIORITY: @@ -1010,6 +1012,20 @@ public class NotificationStackScrollLayoutController { return mNotifStats.getNumActiveNotifs(); } + public boolean isHistoryEnabled() { + Boolean historyEnabled = mHistoryEnabled; + if (historyEnabled == null) { + if (mView == null || mView.getContext() == null) { + Log.wtf(TAG, "isHistoryEnabled failed to initialize its value"); + return false; + } + mHistoryEnabled = historyEnabled = + Settings.Secure.getIntForUser(mView.getContext().getContentResolver(), + Settings.Secure.NOTIFICATION_HISTORY_ENABLED, 0, UserHandle.USER_CURRENT) == 1; + } + return historyEnabled; + } + public int getIntrinsicContentHeight() { return mView.getIntrinsicContentHeight(); } 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 bdcbbbc99ea34..4f731ed5f72ce 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 @@ -16,7 +16,6 @@ package com.android.systemui.statusbar.notification.stack; -import static android.provider.Settings.Secure.NOTIFICATION_HISTORY_ENABLED; import static android.view.View.GONE; import static com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout.ROWS_ALL; @@ -41,8 +40,6 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import android.os.UserHandle; -import android.provider.Settings; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.util.MathUtils; @@ -112,10 +109,6 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase { public void setUp() throws Exception { allowTestableLooperAsMainThread(); - Settings.Secure.putIntForUser(mContext.getContentResolver(), NOTIFICATION_HISTORY_ENABLED, - 1, UserHandle.USER_CURRENT); - - // Interact with real instance of AmbientState. mAmbientState = new AmbientState(mContext, mNotificationSectionsManager, mBypassController); @@ -150,6 +143,7 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase { mStackScroller.setShelfController(notificationShelfController); mStackScroller.setStatusBar(mBar); mStackScroller.setEmptyShadeView(mEmptyShadeView); + when(mStackScrollLayoutController.isHistoryEnabled()).thenReturn(true); when(mStackScrollLayoutController.getNoticationRoundessManager()) .thenReturn(mNotificationRoundnessManager); mStackScroller.setController(mStackScrollLayoutController); @@ -403,6 +397,22 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase { verify(mStackScroller).updateFooterView(true, true, true); } + @Test + public void testUpdateFooter_withoutHistory() { + setBarStateForTest(StatusBarState.SHADE); + mStackScroller.setCurrentUserSetup(true); + + when(mStackScrollLayoutController.isHistoryEnabled()).thenReturn(false); + when(mStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(1); + when(mStackScrollLayoutController.hasActiveClearableNotifications(eq(ROWS_ALL))) + .thenReturn(true); + + FooterView view = mock(FooterView.class); + mStackScroller.setFooterView(view); + mStackScroller.updateFooter(); + verify(mStackScroller).updateFooterView(true, true, false); + } + @Test public void testUpdateFooter_oneClearableNotification_beforeUserSetup() { setBarStateForTest(StatusBarState.SHADE);