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
This commit is contained in:
@@ -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>
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user