Merge "Clean up NotificationIconAreaController.shouldShowNotificationIcon() for new pipeline" into udc-dev

This commit is contained in:
Jeff DeCew
2023-02-23 17:31:20 +00:00
committed by Android (Google) Code Review
6 changed files with 50 additions and 27 deletions

View File

@@ -619,14 +619,6 @@ public final class NotificationEntry extends ListEntry {
return row.isMediaRow(); return row.isMediaRow();
} }
/**
* We are a top level child if our parent is the list of notifications duh
* @return {@code true} if we're a top level notification
*/
public boolean isTopLevelChild() {
return row != null && row.isTopLevelChild();
}
public void resetUserExpansion() { public void resetUserExpansion() {
if (row != null) row.resetUserExpansion(); if (row != null) row.resetUserExpansion();
} }

View File

@@ -34,6 +34,7 @@ import com.android.systemui.statusbar.notification.dagger.AlertingHeader;
import com.android.systemui.statusbar.notification.dagger.SilentHeader; import com.android.systemui.statusbar.notification.dagger.SilentHeader;
import com.android.systemui.statusbar.notification.stack.NotificationPriorityBucketKt; import com.android.systemui.statusbar.notification.stack.NotificationPriorityBucketKt;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@@ -78,6 +79,8 @@ public class RankingCoordinator implements Coordinator {
public void attach(NotifPipeline pipeline) { public void attach(NotifPipeline pipeline) {
mStatusBarStateController.addCallback(mStatusBarStateCallback); mStatusBarStateController.addCallback(mStatusBarStateCallback);
mSectionStyleProvider.setMinimizedSections(Collections.singleton(mMinimizedNotifSectioner)); mSectionStyleProvider.setMinimizedSections(Collections.singleton(mMinimizedNotifSectioner));
mSectionStyleProvider.setSilentSections(
Arrays.asList(mSilentNotifSectioner, mMinimizedNotifSectioner));
pipeline.addPreGroupFilter(mSuspendedFilter); pipeline.addPreGroupFilter(mSuspendedFilter);
pipeline.addPreGroupFilter(mDndVisualEffectsFilter); pipeline.addPreGroupFilter(mDndVisualEffectsFilter);

View File

@@ -17,6 +17,7 @@
package com.android.systemui.statusbar.notification.collection.provider package com.android.systemui.statusbar.notification.collection.provider
import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.statusbar.notification.collection.ListEntry
import com.android.systemui.statusbar.notification.collection.listbuilder.NotifSection import com.android.systemui.statusbar.notification.collection.listbuilder.NotifSection
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner
import javax.inject.Inject import javax.inject.Inject
@@ -27,6 +28,7 @@ import javax.inject.Inject
*/ */
@SysUISingleton @SysUISingleton
class SectionStyleProvider @Inject constructor() { class SectionStyleProvider @Inject constructor() {
private lateinit var silentSections: Set<NotifSectioner>
private lateinit var lowPrioritySections: Set<NotifSectioner> private lateinit var lowPrioritySections: Set<NotifSectioner>
/** /**
@@ -38,9 +40,42 @@ class SectionStyleProvider @Inject constructor() {
} }
/** /**
* Determine if the given section is minimized * Determine if the given section is minimized.
*/ */
fun isMinimizedSection(section: NotifSection): Boolean { fun isMinimizedSection(section: NotifSection): Boolean {
return lowPrioritySections.contains(section.sectioner) return lowPrioritySections.contains(section.sectioner)
} }
/**
* Determine if the given entry is minimized.
*/
@JvmOverloads
fun isMinimized(entry: ListEntry, ifNotInSection: Boolean = true): Boolean {
val section = entry.section ?: return ifNotInSection
return isMinimizedSection(section)
}
/**
* Feed the provider the information it needs about which sections are silent, so that it can
* calculate which entries are in a "silent" section.
*/
fun setSilentSections(sections: Collection<NotifSectioner>) {
silentSections = sections.toSet()
}
/**
* Determine if the given section is silent.
*/
fun isSilentSection(section: NotifSection): Boolean {
return silentSections.contains(section.sectioner)
}
/**
* Determine if the given entry is silent.
*/
@JvmOverloads
fun isSilent(entry: ListEntry, ifNotInSection: Boolean = true): Boolean {
val section = entry.section ?: return ifNotInSection
return isSilentSection(section)
}
} }

View File

@@ -110,7 +110,6 @@ import com.android.systemui.statusbar.notification.stack.AmbientState;
import com.android.systemui.statusbar.notification.stack.AnimationProperties; import com.android.systemui.statusbar.notification.stack.AnimationProperties;
import com.android.systemui.statusbar.notification.stack.ExpandableViewState; import com.android.systemui.statusbar.notification.stack.ExpandableViewState;
import com.android.systemui.statusbar.notification.stack.NotificationChildrenContainer; import com.android.systemui.statusbar.notification.stack.NotificationChildrenContainer;
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
import com.android.systemui.statusbar.notification.stack.SwipeableView; import com.android.systemui.statusbar.notification.stack.SwipeableView;
import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.policy.HeadsUpManager; import com.android.systemui.statusbar.policy.HeadsUpManager;
@@ -3587,10 +3586,6 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
return mEntry.getSbn().getNotification().isMediaNotification(); return mEntry.getSbn().getNotification().isMediaNotification();
} }
public boolean isTopLevelChild() {
return getParent() instanceof NotificationStackScrollLayout;
}
public boolean isGroupNotFullyVisible() { public boolean isGroupNotFullyVisible() {
return getClipTopAmount() > 0 || getTranslationY() < 0; return getClipTopAmount() > 0 || getTranslationY() < 0;
} }

View File

@@ -1,6 +1,5 @@
package com.android.systemui.statusbar.phone; package com.android.systemui.statusbar.phone;
import android.app.NotificationManager;
import android.content.Context; import android.content.Context;
import android.content.res.Resources; import android.content.res.Resources;
import android.graphics.Color; import android.graphics.Color;
@@ -39,6 +38,7 @@ import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator
import com.android.systemui.statusbar.notification.PropertyAnimator; import com.android.systemui.statusbar.notification.PropertyAnimator;
import com.android.systemui.statusbar.notification.collection.ListEntry; import com.android.systemui.statusbar.notification.collection.ListEntry;
import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.provider.SectionStyleProvider;
import com.android.systemui.statusbar.notification.stack.AnimationProperties; import com.android.systemui.statusbar.notification.stack.AnimationProperties;
import com.android.systemui.statusbar.window.StatusBarWindowController; import com.android.systemui.statusbar.window.StatusBarWindowController;
import com.android.wm.shell.bubbles.Bubbles; import com.android.wm.shell.bubbles.Bubbles;
@@ -73,6 +73,7 @@ public class NotificationIconAreaController implements
private final NotificationWakeUpCoordinator mWakeUpCoordinator; private final NotificationWakeUpCoordinator mWakeUpCoordinator;
private final KeyguardBypassController mBypassController; private final KeyguardBypassController mBypassController;
private final DozeParameters mDozeParameters; private final DozeParameters mDozeParameters;
private final SectionStyleProvider mSectionStyleProvider;
private final Optional<Bubbles> mBubblesOptional; private final Optional<Bubbles> mBubblesOptional;
private final StatusBarWindowController mStatusBarWindowController; private final StatusBarWindowController mStatusBarWindowController;
private final ScreenOffAnimationController mScreenOffAnimationController; private final ScreenOffAnimationController mScreenOffAnimationController;
@@ -117,6 +118,7 @@ public class NotificationIconAreaController implements
NotificationMediaManager notificationMediaManager, NotificationMediaManager notificationMediaManager,
NotificationListener notificationListener, NotificationListener notificationListener,
DozeParameters dozeParameters, DozeParameters dozeParameters,
SectionStyleProvider sectionStyleProvider,
Optional<Bubbles> bubblesOptional, Optional<Bubbles> bubblesOptional,
DemoModeController demoModeController, DemoModeController demoModeController,
DarkIconDispatcher darkIconDispatcher, DarkIconDispatcher darkIconDispatcher,
@@ -128,6 +130,7 @@ public class NotificationIconAreaController implements
mStatusBarStateController.addCallback(this); mStatusBarStateController.addCallback(this);
mMediaManager = notificationMediaManager; mMediaManager = notificationMediaManager;
mDozeParameters = dozeParameters; mDozeParameters = dozeParameters;
mSectionStyleProvider = sectionStyleProvider;
mWakeUpCoordinator = wakeUpCoordinator; mWakeUpCoordinator = wakeUpCoordinator;
wakeUpCoordinator.addListener(this); wakeUpCoordinator.addListener(this);
mBypassController = keyguardBypassController; mBypassController = keyguardBypassController;
@@ -260,19 +263,13 @@ public class NotificationIconAreaController implements
protected boolean shouldShowNotificationIcon(NotificationEntry entry, protected boolean shouldShowNotificationIcon(NotificationEntry entry,
boolean showAmbient, boolean showLowPriority, boolean hideDismissed, boolean showAmbient, boolean showLowPriority, boolean hideDismissed,
boolean hideRepliedMessages, boolean hideCurrentMedia, boolean hidePulsing) { boolean hideRepliedMessages, boolean hideCurrentMedia, boolean hidePulsing) {
if (entry.getRanking().isAmbient() && !showAmbient) { if (!showAmbient && mSectionStyleProvider.isMinimized(entry)) {
return false; return false;
} }
if (hideCurrentMedia && entry.getKey().equals(mMediaManager.getMediaNotificationKey())) { if (hideCurrentMedia && entry.getKey().equals(mMediaManager.getMediaNotificationKey())) {
return false; return false;
} }
if (!showLowPriority && entry.getImportance() < NotificationManager.IMPORTANCE_DEFAULT) { if (!showLowPriority && mSectionStyleProvider.isSilent(entry)) {
return false;
}
if (!entry.isTopLevelChild()) {
return false;
}
if (entry.getRow().getVisibility() == View.GONE) {
return false; return false;
} }
if (entry.isRowDismissed() && hideDismissed) { if (entry.isRowDismissed() && hideDismissed) {

View File

@@ -32,7 +32,7 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.NotificationListener; import com.android.systemui.statusbar.NotificationListener;
import com.android.systemui.statusbar.NotificationMediaManager; import com.android.systemui.statusbar.NotificationMediaManager;
import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator; import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection; import com.android.systemui.statusbar.notification.collection.provider.SectionStyleProvider;
import com.android.systemui.statusbar.window.StatusBarWindowController; import com.android.systemui.statusbar.window.StatusBarWindowController;
import com.android.wm.shell.bubbles.Bubbles; import com.android.wm.shell.bubbles.Bubbles;
@@ -62,7 +62,7 @@ public class NotificationIconAreaControllerTest extends SysuiTestCase {
@Mock @Mock
DozeParameters mDozeParameters; DozeParameters mDozeParameters;
@Mock @Mock
CommonNotifCollection mNotifCollection; SectionStyleProvider mSectionStyleProvider;
@Mock @Mock
DarkIconDispatcher mDarkIconDispatcher; DarkIconDispatcher mDarkIconDispatcher;
@Mock @Mock
@@ -87,6 +87,7 @@ public class NotificationIconAreaControllerTest extends SysuiTestCase {
mNotificationMediaManager, mNotificationMediaManager,
mListener, mListener,
mDozeParameters, mDozeParameters,
mSectionStyleProvider,
Optional.of(mBubbles), Optional.of(mBubbles),
mDemoModeController, mDemoModeController,
mDarkIconDispatcher, mDarkIconDispatcher,