summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Gus Prevas <kprevas@google.com> 2018-10-26 15:40:27 -0400
committer Gus Prevas <kprevas@google.com> 2018-10-30 13:41:53 +0000
commit33619afa8b2c476fd331dd6d50b3757da58c0080 (patch)
tree6a24b67cc86b0c78b01be3c2a4daeb31f8d536fb
parent57405767161c91357bc8609e98e3874bcc96dcfb (diff)
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
-rw-r--r--packages/SystemUI/res/values/strings.xml3
-rw-r--r--packages/SystemUI/res/xml/tuner_prefs.xml5
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java23
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java52
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 @@
<item>Don\'t show this icon</item>
</string-array>
+ <!-- SysUI Tuner: Switch for showing low-priority notification icons in status bar [CHAR LIMIT=NONE] -->
+ <string name="tuner_low_priority">Show low-priority notification icons</string>
+
<!-- SysUI Tuner: Other section -->
<string name="other">Other</string>
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" />
+ <com.android.systemui.tuner.TunerSwitch
+ android:key="low_priority"
+ android:title="@string/tuner_low_priority"
+ sysui:defValue="false" />
+
</PreferenceScreen>
<PreferenceScreen
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 30d17017ca1c..936c2b879fa7 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
@@ -18,6 +18,7 @@ package com.android.systemui.statusbar.notification.stack;
import static com.android.systemui.statusbar.notification.ActivityLaunchAnimator
.ExpandAnimationParameters;
+import static com.android.systemui.statusbar.phone.NotificationIconAreaController.LOW_PRIORITY;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
@@ -27,6 +28,7 @@ import android.animation.TimeAnimator;
import android.animation.ValueAnimator;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.app.NotificationManager;
import android.app.WallpaperManager;
import android.content.Context;
import android.content.Intent;
@@ -127,6 +129,7 @@ import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;
import com.android.systemui.statusbar.policy.HeadsUpUtil;
import com.android.systemui.statusbar.policy.ScrollAdapter;
+import com.android.systemui.tuner.TunerService;
import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -159,6 +162,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements ScrollAd
private int mCurrentStackHeight = Integer.MAX_VALUE;
private final Paint mBackgroundPaint = new Paint();
private final boolean mShouldDrawNotificationBackground;
+ private boolean mLowPriorityBeforeSpeedBump;
private float mExpandedHeight;
private int mOwnScrollY;
@@ -515,6 +519,13 @@ public class NotificationStackScrollLayout extends ViewGroup implements ScrollAd
mDebugPaint.setStyle(Paint.Style.STROKE);
}
mClearAllEnabled = res.getBoolean(R.bool.config_enableNotificationsClearAll);
+
+ TunerService tunerService = Dependency.get(TunerService.class);
+ tunerService.addTunable((key, newValue) -> {
+ 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<NotificationData.Entry, StatusBarIconView> function,
- NotificationIconContainer hostLayout, boolean showAmbient, boolean hideDismissed,
- boolean hideRepliedMessages) {
+ NotificationIconContainer hostLayout, boolean showAmbient, boolean showLowPriority,
+ boolean hideDismissed, boolean hideRepliedMessages) {
ArrayList<StatusBarIconView> 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));
}