From 33619afa8b2c476fd331dd6d50b3757da58c0080 Mon Sep 17 00:00:00 2001 From: Gus Prevas Date: Fri, 26 Oct 2018 15:40:27 -0400 Subject: Hides low-priority icons from status bar. This change modifies NotificationIconAreaController such that icons for low-priority notifications are not shown. This behavior is controlled by a new switch in the SystemUI Tuner. Test: manually Bug: 116622974 Change-Id: I7f1d5b6c5757936aba93da3d0e50ae1dd8434b33 --- packages/SystemUI/res/values/strings.xml | 3 ++ packages/SystemUI/res/xml/tuner_prefs.xml | 5 +++ .../stack/NotificationStackScrollLayout.java | 23 +++++++++- .../phone/NotificationIconAreaController.java | 52 ++++++++++++++++------ 4 files changed, 68 insertions(+), 15 deletions(-) diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index b92fcc6c1d31..3e928a4227cd 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -1851,6 +1851,9 @@ Don\'t show this icon + + Show low-priority notification icons + Other diff --git a/packages/SystemUI/res/xml/tuner_prefs.xml b/packages/SystemUI/res/xml/tuner_prefs.xml index 46ea4949512b..6eec5dc9e1c1 100644 --- a/packages/SystemUI/res/xml/tuner_prefs.xml +++ b/packages/SystemUI/res/xml/tuner_prefs.xml @@ -98,6 +98,11 @@ android:summary="%s" android:entries="@array/clock_options" /> + + { + if (key.equals(LOW_PRIORITY)) { + mLowPriorityBeforeSpeedBump = "1".equals(newValue); + } + }, LOW_PRIORITY); } @Override @@ -5087,8 +5098,16 @@ public class NotificationStackScrollLayout extends ViewGroup implements ScrollAd } ExpandableNotificationRow row = (ExpandableNotificationRow) view; currentIndex++; - if (!mEntryManager.getNotificationData().isAmbient( - row.getStatusBarNotification().getKey())) { + boolean beforeSpeedBump; + if (mLowPriorityBeforeSpeedBump) { + beforeSpeedBump = !mEntryManager.getNotificationData().isAmbient( + row.getStatusBarNotification().getKey()); + } else { + beforeSpeedBump = mEntryManager.getNotificationData().getImportance( + row.getStatusBarNotification().getKey()) + >= NotificationManager.IMPORTANCE_DEFAULT; + } + if (beforeSpeedBump) { speedBumpIndex = currentIndex; } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java index 21b98db11a36..5960b13e8e31 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java @@ -1,29 +1,31 @@ package com.android.systemui.statusbar.phone; +import android.app.NotificationManager; import android.content.Context; import android.content.res.Resources; import android.graphics.Color; import android.graphics.Rect; -import androidx.annotation.NonNull; -import androidx.collection.ArrayMap; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; +import androidx.annotation.NonNull; +import androidx.collection.ArrayMap; + import com.android.internal.statusbar.StatusBarIcon; import com.android.internal.util.ContrastColorUtil; import com.android.systemui.Dependency; import com.android.systemui.R; -import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; -import com.android.systemui.statusbar.notification.NotificationData; -import com.android.systemui.statusbar.notification.NotificationEntryManager; import com.android.systemui.statusbar.NotificationShelf; import com.android.systemui.statusbar.StatusBarIconView; +import com.android.systemui.statusbar.notification.NotificationData; +import com.android.systemui.statusbar.notification.NotificationEntryManager; import com.android.systemui.statusbar.notification.NotificationUtils; +import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; import com.android.systemui.statusbar.policy.DarkIconDispatcher; import com.android.systemui.statusbar.policy.DarkIconDispatcher.DarkReceiver; -import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout; +import com.android.systemui.tuner.TunerService; import java.util.ArrayList; import java.util.function.Function; @@ -33,9 +35,23 @@ import java.util.function.Function; * normally reserved for notifications. */ public class NotificationIconAreaController implements DarkReceiver { + + public static final String LOW_PRIORITY = "low_priority"; + private final ContrastColorUtil mContrastColorUtil; private final NotificationEntryManager mEntryManager; private final Runnable mUpdateStatusBarIcons = this::updateStatusBarIcons; + private final TunerService.Tunable mTunable = new TunerService.Tunable() { + @Override + public void onTuningChanged(String key, String newValue) { + if (key.equals(LOW_PRIORITY)) { + mShowLowPriority = "1".equals(newValue); + if (mNotificationScrollLayout != null) { + updateStatusBarIcons(); + } + } + } + }; private int mIconSize; private int mIconHPadding; @@ -49,6 +65,7 @@ public class NotificationIconAreaController implements DarkReceiver { private ViewGroup mNotificationScrollLayout; private Context mContext; private boolean mFullyDark; + private boolean mShowLowPriority; public NotificationIconAreaController(Context context, StatusBar statusBar) { mStatusBar = statusBar; @@ -56,6 +73,8 @@ public class NotificationIconAreaController implements DarkReceiver { mContext = context; mEntryManager = Dependency.get(NotificationEntryManager.class); + Dependency.get(TunerService.class).addTunable(mTunable, LOW_PRIORITY); + initializeNotificationAreaViews(context); } @@ -142,10 +161,16 @@ public class NotificationIconAreaController implements DarkReceiver { } protected boolean shouldShowNotificationIcon(NotificationData.Entry entry, - boolean showAmbient, boolean hideDismissed, boolean hideRepliedMessages) { + boolean showAmbient, boolean showLowPriority, boolean hideDismissed, + boolean hideRepliedMessages) { if (mEntryManager.getNotificationData().isAmbient(entry.key) && !showAmbient) { return false; } + if (!showLowPriority + && mEntryManager.getNotificationData().getImportance(entry.key) + < NotificationManager.IMPORTANCE_DEFAULT) { + return false; + } if (!StatusBar.isTopLevelChild(entry)) { return false; } @@ -181,13 +206,14 @@ public class NotificationIconAreaController implements DarkReceiver { private void updateShelfIcons() { updateIconsForLayout(entry -> entry.expandedIcon, mShelfIcons, - NotificationShelf.SHOW_AMBIENT_ICONS, false /* hideDismissed */, - mFullyDark /* hideRepliedMessages */); + NotificationShelf.SHOW_AMBIENT_ICONS, !mFullyDark /* showLowPriority */, + false /* hideDismissed */, mFullyDark /* hideRepliedMessages */); } public void updateStatusBarIcons() { updateIconsForLayout(entry -> entry.icon, mNotificationIcons, - false /* showAmbient */, true /* hideDismissed */, true /* hideRepliedMessages */); + false /* showAmbient */, false /* showLowPriority */, true /* hideDismissed */, + true /* hideRepliedMessages */); } /** @@ -200,8 +226,8 @@ public class NotificationIconAreaController implements DarkReceiver { * @param hideRepliedMessages should messages that have been replied to be hidden */ private void updateIconsForLayout(Function function, - NotificationIconContainer hostLayout, boolean showAmbient, boolean hideDismissed, - boolean hideRepliedMessages) { + NotificationIconContainer hostLayout, boolean showAmbient, boolean showLowPriority, + boolean hideDismissed, boolean hideRepliedMessages) { ArrayList toShow = new ArrayList<>( mNotificationScrollLayout.getChildCount()); @@ -210,7 +236,7 @@ public class NotificationIconAreaController implements DarkReceiver { View view = mNotificationScrollLayout.getChildAt(i); if (view instanceof ExpandableNotificationRow) { NotificationData.Entry ent = ((ExpandableNotificationRow) view).getEntry(); - if (shouldShowNotificationIcon(ent, showAmbient, hideDismissed, + if (shouldShowNotificationIcon(ent, showAmbient, showLowPriority, hideDismissed, hideRepliedMessages)) { toShow.add(function.apply(ent)); } -- cgit v1.2.3-59-g8ed1b