summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jeff DeCew <jeffdq@google.com> 2022-02-06 13:36:23 +0000
committer Jeff DeCew <jeffdq@google.com> 2022-02-07 16:42:21 +0000
commita75676fdfb1befd1483381bbfecd213f315e3624 (patch)
treef84387018c89cc71d9c8f41e0b44938742464925
parentd0e75eb2c40d13d77a108c0dcee44e92256e3758 (diff)
New Pipeline: various migrations
Test: manual Fixes: 218105121 Fixes: 218095046 Fixes: 218095049 Bug: 218105118 Bug: 218105357 Bug: 218099854 Change-Id: I79023e91d4346579491fb8c8eb228998cb166927
-rw-r--r--packages/SystemUI/src/com/android/systemui/media/MediaCarouselController.kt22
-rw-r--r--packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java13
-rw-r--r--packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialogFactory.kt6
-rw-r--r--packages/SystemUI/src/com/android/systemui/people/widget/PeopleSpaceWidgetManager.java21
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/NotificationListener.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifPipeline.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java1
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinator.java11
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/legacy/VisualStabilityManager.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/CommonNotifCollection.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/provider/VisualStabilityProvider.kt27
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/people/PeopleHubNotificationListener.kt30
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/row/FeedbackInfo.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputUriController.java16
-rw-r--r--packages/SystemUI/src/com/android/systemui/tv/TvSystemUIModule.java4
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/media/MediaCarouselControllerTest.kt8
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java24
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/people/widget/PeopleSpaceWidgetManagerTest.java39
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/VisualStabilityManagerTest.java3
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorTest.java3
23 files changed, 149 insertions, 114 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaCarouselController.kt b/packages/SystemUI/src/com/android/systemui/media/MediaCarouselController.kt
index f893f363b4c8..ecaa142f8a09 100644
--- a/packages/SystemUI/src/com/android/systemui/media/MediaCarouselController.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/MediaCarouselController.kt
@@ -23,7 +23,8 @@ import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.plugins.FalsingManager
import com.android.systemui.qs.PageIndicator
import com.android.systemui.shared.system.SysUiStatsLog
-import com.android.systemui.statusbar.notification.collection.legacy.VisualStabilityManager
+import com.android.systemui.statusbar.notification.collection.provider.OnReorderingAllowedListener
+import com.android.systemui.statusbar.notification.collection.provider.VisualStabilityProvider
import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.util.Utils
import com.android.systemui.util.animation.UniqueObjectHostView
@@ -48,7 +49,7 @@ private val DEBUG = Log.isLoggable(TAG, Log.DEBUG)
class MediaCarouselController @Inject constructor(
private val context: Context,
private val mediaControlPanelFactory: Provider<MediaControlPanel>,
- private val visualStabilityManager: VisualStabilityManager,
+ private val visualStabilityProvider: VisualStabilityProvider,
private val mediaHostStatesManager: MediaHostStatesManager,
private val activityStarter: ActivityStarter,
private val systemClock: SystemClock,
@@ -121,7 +122,7 @@ class MediaCarouselController @Inject constructor(
private lateinit var settingsButton: View
private val mediaContent: ViewGroup
private val pageIndicator: PageIndicator
- private val visualStabilityCallback: VisualStabilityManager.Callback
+ private val visualStabilityCallback: OnReorderingAllowedListener
private var needsReordering: Boolean = false
private var keysNeedRemoval = mutableSetOf<String>()
private var bgColor = getBackgroundColor()
@@ -172,6 +173,9 @@ class MediaCarouselController @Inject constructor(
*/
lateinit var updateUserVisibility: () -> Unit
+ private val isReorderingAllowed: Boolean
+ get() = visualStabilityProvider.isReorderingAllowed
+
init {
dumpManager.registerDumpable(TAG, this)
mediaFrame = inflateMediaCarousel()
@@ -184,8 +188,7 @@ class MediaCarouselController @Inject constructor(
inflateSettingsButton()
mediaContent = mediaCarousel.requireViewById(R.id.media_carousel)
configurationController.addCallback(configListener)
- // TODO (b/162832756): remove visual stability manager when migrating to new pipeline
- visualStabilityCallback = VisualStabilityManager.Callback {
+ visualStabilityCallback = OnReorderingAllowedListener {
if (needsReordering) {
needsReordering = false
reorderAllPlayers(previousVisiblePlayerKey = null)
@@ -203,8 +206,7 @@ class MediaCarouselController @Inject constructor(
// Let's reset our scroll position
mediaCarouselScrollHandler.scrollToStart()
}
- visualStabilityManager.addReorderingAllowedCallback(visualStabilityCallback,
- true /* persistent */)
+ visualStabilityProvider.addPersistentReorderingAllowedListener(visualStabilityCallback)
mediaManager.addListener(object : MediaDataManager.Listener {
override fun onMediaDataLoaded(
key: String,
@@ -266,7 +268,7 @@ class MediaCarouselController @Inject constructor(
// This view isn't playing, let's remove this! This happens e.g when
// dismissing/timing out a view. We still have the data around because
// resumption could be on, but we should save the resources and release this.
- if (visualStabilityManager.isReorderingAllowed) {
+ if (isReorderingAllowed) {
onMediaDataRemoved(key)
} else {
keysNeedRemoval.add(key)
@@ -336,7 +338,7 @@ class MediaCarouselController @Inject constructor(
override fun onSmartspaceMediaDataRemoved(key: String, immediately: Boolean) {
if (DEBUG) Log.d(TAG, "My Smartspace media removal request is received")
- if (immediately || visualStabilityManager.isReorderingAllowed) {
+ if (immediately || isReorderingAllowed) {
onMediaDataRemoved(key)
} else {
keysNeedRemoval.add(key)
@@ -438,7 +440,7 @@ class MediaCarouselController @Inject constructor(
} else {
existingPlayer.bindPlayer(data, key)
MediaPlayerData.addMediaPlayer(key, data, existingPlayer, systemClock)
- if (visualStabilityManager.isReorderingAllowed || shouldScrollToActivePlayer) {
+ if (isReorderingAllowed || shouldScrollToActivePlayer) {
reorderAllPlayers(curVisibleMediaKey)
} else {
needsReordering = true
diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java
index 83d581fb7897..2caecf2aec91 100644
--- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java
+++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java
@@ -58,8 +58,8 @@ import com.android.settingslib.utils.ThreadUtils;
import com.android.systemui.R;
import com.android.systemui.animation.DialogLaunchAnimator;
import com.android.systemui.plugins.ActivityStarter;
-import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
+import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
import com.android.systemui.statusbar.phone.ShadeController;
import com.android.systemui.statusbar.phone.SystemUIDialogManager;
@@ -90,7 +90,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback {
private final List<MediaDevice> mGroupMediaDevices = new CopyOnWriteArrayList<>();
private final boolean mAboveStatusbar;
private final boolean mVolumeAdjustmentForRemoteGroupSessions;
- private final NotificationEntryManager mNotificationEntryManager;
+ private final CommonNotifCollection mNotifCollection;
@VisibleForTesting
final List<MediaDevice> mMediaDevices = new CopyOnWriteArrayList<>();
@@ -107,7 +107,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback {
public MediaOutputController(@NonNull Context context, String packageName,
boolean aboveStatusbar, MediaSessionManager mediaSessionManager, LocalBluetoothManager
lbm, ShadeController shadeController, ActivityStarter starter,
- NotificationEntryManager notificationEntryManager, UiEventLogger uiEventLogger,
+ CommonNotifCollection notifCollection, UiEventLogger uiEventLogger,
DialogLaunchAnimator dialogLaunchAnimator, SystemUIDialogManager dialogManager) {
mContext = context;
mPackageName = packageName;
@@ -116,7 +116,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback {
mShadeController = shadeController;
mActivityStarter = starter;
mAboveStatusbar = aboveStatusbar;
- mNotificationEntryManager = notificationEntryManager;
+ mNotifCollection = notifCollection;
InfoMediaManager imm = new InfoMediaManager(mContext, packageName, null, lbm);
mLocalMediaManager = new LocalMediaManager(mContext, lbm, imm, packageName);
mMetricLogger = new MediaOutputMetricLogger(mContext, mPackageName);
@@ -287,8 +287,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback {
if (TextUtils.isEmpty(mPackageName)) {
return null;
}
- for (NotificationEntry entry
- : mNotificationEntryManager.getActiveNotificationsForCurrentUser()) {
+ for (NotificationEntry entry : mNotifCollection.getAllNotifs()) {
final Notification notification = entry.getSbn().getNotification();
if (notification.isMediaNotification()
&& TextUtils.equals(entry.getSbn().getPackageName(), mPackageName)) {
@@ -523,7 +522,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback {
// We show the output group dialog from the output dialog.
MediaOutputController controller = new MediaOutputController(mContext, mPackageName,
mAboveStatusbar, mMediaSessionManager, mLocalBluetoothManager, mShadeController,
- mActivityStarter, mNotificationEntryManager, mUiEventLogger, mDialogLaunchAnimator,
+ mActivityStarter, mNotifCollection, mUiEventLogger, mDialogLaunchAnimator,
mDialogManager);
MediaOutputGroupDialog dialog = new MediaOutputGroupDialog(mContext, mAboveStatusbar,
controller, mDialogManager);
diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialogFactory.kt b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialogFactory.kt
index a7bc85256fcd..e1e7fa3ebbe0 100644
--- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialogFactory.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialogFactory.kt
@@ -23,7 +23,7 @@ import com.android.internal.logging.UiEventLogger
import com.android.settingslib.bluetooth.LocalBluetoothManager
import com.android.systemui.animation.DialogLaunchAnimator
import com.android.systemui.plugins.ActivityStarter
-import com.android.systemui.statusbar.notification.NotificationEntryManager
+import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection
import com.android.systemui.statusbar.phone.ShadeController
import com.android.systemui.statusbar.phone.SystemUIDialogManager
import javax.inject.Inject
@@ -37,7 +37,7 @@ class MediaOutputDialogFactory @Inject constructor(
private val lbm: LocalBluetoothManager?,
private val shadeController: ShadeController,
private val starter: ActivityStarter,
- private val notificationEntryManager: NotificationEntryManager,
+ private val notifCollection: CommonNotifCollection,
private val uiEventLogger: UiEventLogger,
private val dialogLaunchAnimator: DialogLaunchAnimator,
private val dialogManager: SystemUIDialogManager
@@ -52,7 +52,7 @@ class MediaOutputDialogFactory @Inject constructor(
mediaOutputDialog?.dismiss()
val controller = MediaOutputController(context, packageName, aboveStatusBar,
- mediaSessionManager, lbm, shadeController, starter, notificationEntryManager,
+ mediaSessionManager, lbm, shadeController, starter, notifCollection,
uiEventLogger, dialogLaunchAnimator, dialogManager)
val dialog = MediaOutputDialog(context, aboveStatusBar, controller, uiEventLogger,
dialogManager)
diff --git a/packages/SystemUI/src/com/android/systemui/people/widget/PeopleSpaceWidgetManager.java b/packages/SystemUI/src/com/android/systemui/people/widget/PeopleSpaceWidgetManager.java
index 82a5aa04a073..f6e1cd49eb40 100644
--- a/packages/SystemUI/src/com/android/systemui/people/widget/PeopleSpaceWidgetManager.java
+++ b/packages/SystemUI/src/com/android/systemui/people/widget/PeopleSpaceWidgetManager.java
@@ -95,12 +95,13 @@ import com.android.systemui.people.PeopleTileViewHelper;
import com.android.systemui.people.SharedPreferencesHelper;
import com.android.systemui.statusbar.NotificationListener;
import com.android.systemui.statusbar.NotificationListener.NotificationHandler;
-import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
+import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
import com.android.wm.shell.bubbles.Bubbles;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
@@ -129,7 +130,7 @@ public class PeopleSpaceWidgetManager {
private IPeopleManager mIPeopleManager;
private SharedPreferences mSharedPrefs;
private PeopleManager mPeopleManager;
- private NotificationEntryManager mNotificationEntryManager;
+ private CommonNotifCollection mNotifCollection;
private PackageManager mPackageManager;
private INotificationManager mINotificationManager;
private Optional<Bubbles> mBubblesOptional;
@@ -156,7 +157,7 @@ public class PeopleSpaceWidgetManager {
@Inject
public PeopleSpaceWidgetManager(Context context, LauncherApps launcherApps,
- NotificationEntryManager notificationEntryManager,
+ CommonNotifCollection notifCollection,
PackageManager packageManager, Optional<Bubbles> bubblesOptional,
UserManager userManager, NotificationManager notificationManager,
BroadcastDispatcher broadcastDispatcher, @Background Executor bgExecutor) {
@@ -168,7 +169,7 @@ public class PeopleSpaceWidgetManager {
mLauncherApps = launcherApps;
mSharedPrefs = PreferenceManager.getDefaultSharedPreferences(mContext);
mPeopleManager = context.getSystemService(PeopleManager.class);
- mNotificationEntryManager = notificationEntryManager;
+ mNotifCollection = notifCollection;
mPackageManager = packageManager;
mINotificationManager = INotificationManager.Stub.asInterface(
ServiceManager.getService(Context.NOTIFICATION_SERVICE));
@@ -235,7 +236,7 @@ public class PeopleSpaceWidgetManager {
PeopleSpaceWidgetManager(Context context,
AppWidgetManager appWidgetManager, IPeopleManager iPeopleManager,
PeopleManager peopleManager, LauncherApps launcherApps,
- NotificationEntryManager notificationEntryManager, PackageManager packageManager,
+ CommonNotifCollection notifCollection, PackageManager packageManager,
Optional<Bubbles> bubblesOptional, UserManager userManager, BackupManager backupManager,
INotificationManager iNotificationManager, NotificationManager notificationManager,
@Background Executor executor) {
@@ -244,7 +245,7 @@ public class PeopleSpaceWidgetManager {
mIPeopleManager = iPeopleManager;
mPeopleManager = peopleManager;
mLauncherApps = launcherApps;
- mNotificationEntryManager = notificationEntryManager;
+ mNotifCollection = notifCollection;
mPackageManager = packageManager;
mBubblesOptional = bubblesOptional;
mUserManager = userManager;
@@ -519,13 +520,7 @@ public class PeopleSpaceWidgetManager {
/** Returns active and pending notifications grouped by {@link PeopleTileKey}. */
public Map<PeopleTileKey, Set<NotificationEntry>> getGroupedConversationNotifications() {
- List<NotificationEntry> notifications =
- new ArrayList<>(mNotificationEntryManager.getVisibleNotifications());
- Iterable<NotificationEntry> pendingNotifications =
- mNotificationEntryManager.getPendingNotificationsIterator();
- for (NotificationEntry entry : pendingNotifications) {
- notifications.add(entry);
- }
+ Collection<NotificationEntry> notifications = mNotifCollection.getAllNotifs();
if (DEBUG) Log.d(TAG, "Number of total notifications: " + notifications.size());
Map<PeopleTileKey, Set<NotificationEntry>> groupedNotifications =
notifications
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationListener.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationListener.java
index d6125ce7aa65..e19fd7a44394 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationListener.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationListener.java
@@ -17,7 +17,6 @@
package com.android.systemui.statusbar;
import static com.android.systemui.statusbar.RemoteInputController.processForRemoteInput;
-import static com.android.systemui.statusbar.notification.NotificationEntryManager.UNDEFINED_DISMISS_REASON;
import android.annotation.NonNull;
import android.annotation.SuppressLint;
@@ -32,6 +31,7 @@ import android.util.Log;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.statusbar.dagger.StatusBarModule;
+import com.android.systemui.statusbar.notification.collection.NotifCollection;
import com.android.systemui.statusbar.phone.NotificationListenerWithPlugins;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.util.time.SystemClock;
@@ -155,7 +155,7 @@ public class NotificationListener extends NotificationListenerWithPlugins {
@Override
public void onNotificationRemoved(StatusBarNotification sbn, RankingMap rankingMap) {
- onNotificationRemoved(sbn, rankingMap, UNDEFINED_DISMISS_REASON);
+ onNotificationRemoved(sbn, rankingMap, NotifCollection.REASON_UNKNOWN);
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java
index ad9f12ec3bc0..f97b936605f6 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java
@@ -1043,6 +1043,11 @@ public class NotificationEntryManager implements
mNotifCollectionListeners.add(listener);
}
+ @Override
+ public void removeCollectionListener(@NonNull NotifCollectionListener listener) {
+ mNotifCollectionListeners.remove(listener);
+ }
+
/*
* End annexation
* -----
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java
index 2a2cc81c3223..9be032dc1240 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java
@@ -213,6 +213,12 @@ public class NotifCollection implements Dumpable {
mNotifCollectionListeners.add(listener);
}
+ /** @see NotifPipeline#removeCollectionListener(NotifCollectionListener) */
+ void removeCollectionListener(NotifCollectionListener listener) {
+ Assert.isMainThread();
+ mNotifCollectionListeners.remove(listener);
+ }
+
/** @see NotifPipeline#addNotificationLifetimeExtender(NotifLifetimeExtender) */
void addNotificationLifetimeExtender(NotifLifetimeExtender extender) {
Assert.isMainThread();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifPipeline.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifPipeline.kt
index 5ada7a82f8fe..2009b522482e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifPipeline.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifPipeline.kt
@@ -94,6 +94,10 @@ class NotifPipeline @Inject constructor(
mNotifCollection.addCollectionListener(listener)
}
+ override fun removeCollectionListener(listener: NotifCollectionListener) {
+ mNotifCollection.removeCollectionListener(listener)
+ }
+
/**
* Returns the NotificationEntry associated with [key].
*/
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java
index b328ae8cd0bb..c850a94dcd75 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java
@@ -147,6 +147,7 @@ public class ShadeListBuilder implements Dumpable {
*/
public void attach(NotifCollection collection) {
Assert.isMainThread();
+ collection.addCollectionListener(mInteractionTracker);
collection.setBuildListener(mReadyForBuildListener);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinator.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinator.java
index fcc2b266dce2..3aa3549a7c27 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinator.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinator.java
@@ -27,11 +27,11 @@ import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.keyguard.WakefulnessLifecycle;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.statusbar.NotificationViewHierarchyManager;
import com.android.systemui.statusbar.notification.collection.ListEntry;
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifStabilityManager;
+import com.android.systemui.statusbar.notification.collection.provider.VisualStabilityProvider;
import com.android.systemui.statusbar.notification.collection.render.NotifPanelEventSource;
import com.android.systemui.statusbar.policy.HeadsUpManager;
import com.android.systemui.util.concurrency.DelayableExecutor;
@@ -49,11 +49,6 @@ import javax.inject.Inject;
* Ensures that notifications are visually stable if the user is looking at the notifications.
* Group and section changes are re-allowed when the notification entries are no longer being
* viewed.
- *
- * Previously this was implemented in the view-layer {@link NotificationViewHierarchyManager} by
- * {@link com.android.systemui.statusbar.notification.collection.legacy.VisualStabilityManager}.
- * This is now integrated in the data-layer via
- * {@link com.android.systemui.statusbar.notification.collection.ShadeListBuilder}.
*/
// TODO(b/204468557): Move to @CoordinatorScope
@SysUISingleton
@@ -63,6 +58,7 @@ public class VisualStabilityCoordinator implements Coordinator, Dumpable,
private final HeadsUpManager mHeadsUpManager;
private final NotifPanelEventSource mNotifPanelEventSource;
private final StatusBarStateController mStatusBarStateController;
+ private final VisualStabilityProvider mVisualStabilityProvider;
private final WakefulnessLifecycle mWakefulnessLifecycle;
private boolean mScreenOn;
@@ -93,8 +89,10 @@ public class VisualStabilityCoordinator implements Coordinator, Dumpable,
HeadsUpManager headsUpManager,
NotifPanelEventSource notifPanelEventSource,
StatusBarStateController statusBarStateController,
+ VisualStabilityProvider visualStabilityProvider,
WakefulnessLifecycle wakefulnessLifecycle) {
mHeadsUpManager = headsUpManager;
+ mVisualStabilityProvider = visualStabilityProvider;
mWakefulnessLifecycle = wakefulnessLifecycle;
mStatusBarStateController = statusBarStateController;
mDelayableExecutor = delayableExecutor;
@@ -178,6 +176,7 @@ public class VisualStabilityCoordinator implements Coordinator, Dumpable,
|| mIsSuppressingEntryReorder))) {
mNotifStabilityManager.invalidateList();
}
+ mVisualStabilityProvider.setReorderingAllowed(mReorderingAllowed);
}
private boolean isSuppressingSectionChange() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/legacy/VisualStabilityManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/legacy/VisualStabilityManager.java
index 6e47c7bdf927..e921ea181f2e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/legacy/VisualStabilityManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/legacy/VisualStabilityManager.java
@@ -31,6 +31,7 @@ import com.android.systemui.statusbar.notification.NotificationEntryListener;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.VisibilityLocationProvider;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
+import com.android.systemui.statusbar.notification.collection.provider.VisualStabilityProvider;
import com.android.systemui.statusbar.notification.dagger.NotificationsModule;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
@@ -52,6 +53,7 @@ public class VisualStabilityManager implements OnHeadsUpChangedListener, Dumpabl
private final ArrayList<Callback> mGroupChangesAllowedCallbacks = new ArrayList<>();
private final ArraySet<Callback> mPersistentGroupCallbacks = new ArraySet<>();
private final Handler mHandler;
+ private final VisualStabilityProvider mVisualStabilityProvider;
private boolean mPanelExpanded;
private boolean mScreenOn;
@@ -70,11 +72,13 @@ public class VisualStabilityManager implements OnHeadsUpChangedListener, Dumpabl
*/
public VisualStabilityManager(
NotificationEntryManager notificationEntryManager,
+ VisualStabilityProvider visualStabilityProvider,
@Main Handler handler,
StatusBarStateController statusBarStateController,
WakefulnessLifecycle wakefulnessLifecycle,
DumpManager dumpManager) {
+ mVisualStabilityProvider = visualStabilityProvider;
mHandler = handler;
dumpManager.registerDumpable(this);
@@ -181,6 +185,7 @@ public class VisualStabilityManager implements OnHeadsUpChangedListener, Dumpabl
if (changedToTrue) {
notifyChangeAllowed(mReorderingAllowedCallbacks, mPersistentReorderingCallbacks);
}
+ mVisualStabilityProvider.setReorderingAllowed(reorderingAllowed);
boolean groupChangesAllowed = (!mScreenOn || !mPanelExpanded) && !mPulsing;
changedToTrue = groupChangesAllowed && !mGroupChangedAllowed;
mGroupChangedAllowed = groupChangesAllowed;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/CommonNotifCollection.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/CommonNotifCollection.java
index beaa1ba52ddf..4ff6a64e0df8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/CommonNotifCollection.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/CommonNotifCollection.java
@@ -41,6 +41,11 @@ public interface CommonNotifCollection {
void addCollectionListener(@NonNull NotifCollectionListener listener);
/**
+ * Unregisters a listener previously added with {@link #addCollectionListener}
+ */
+ void removeCollectionListener(@NonNull NotifCollectionListener listener);
+
+ /**
* Returns the list of all known notifications, i.e. the notifications that are currently posted
* to the phone. In general, this tracks closely to the list maintained by NotificationManager,
* but it can diverge slightly due to lifetime extenders.
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/provider/VisualStabilityProvider.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/provider/VisualStabilityProvider.kt
new file mode 100644
index 000000000000..3f866fe63f1d
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/provider/VisualStabilityProvider.kt
@@ -0,0 +1,27 @@
+package com.android.systemui.statusbar.notification.collection.provider
+
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.util.ListenerSet
+import javax.inject.Inject
+
+@SysUISingleton
+class VisualStabilityProvider @Inject constructor() {
+ private val listeners = ListenerSet<OnReorderingAllowedListener>()
+
+ var isReorderingAllowed = true
+ set(value) {
+ if (field != value) {
+ field = value
+ if (value) {
+ listeners.forEach(OnReorderingAllowedListener::onReorderingAllowed)
+ }
+ }
+ }
+
+ fun addPersistentReorderingAllowedListener(listener: OnReorderingAllowedListener) =
+ listeners.addIfAbsent(listener)
+}
+
+fun interface OnReorderingAllowedListener {
+ fun onReorderingAllowed()
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java
index 45a9092068e4..fedc858f407c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java
@@ -62,6 +62,7 @@ import com.android.systemui.statusbar.notification.collection.legacy.VisualStabi
import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider;
import com.android.systemui.statusbar.notification.collection.provider.NotificationVisibilityProviderImpl;
+import com.android.systemui.statusbar.notification.collection.provider.VisualStabilityProvider;
import com.android.systemui.statusbar.notification.collection.render.GroupExpansionManager;
import com.android.systemui.statusbar.notification.collection.render.GroupExpansionManagerImpl;
import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManager;
@@ -200,12 +201,14 @@ public interface NotificationsModule {
@Provides
static VisualStabilityManager provideVisualStabilityManager(
NotificationEntryManager notificationEntryManager,
+ VisualStabilityProvider visualStabilityProvider,
Handler handler,
StatusBarStateController statusBarStateController,
WakefulnessLifecycle wakefulnessLifecycle,
DumpManager dumpManager) {
return new VisualStabilityManager(
notificationEntryManager,
+ visualStabilityProvider,
handler,
statusBarStateController,
wakefulnessLifecycle,
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/people/PeopleHubNotificationListener.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/people/PeopleHubNotificationListener.kt
index cd9ba4e690e9..6062941d44a6 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/people/PeopleHubNotificationListener.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/people/PeopleHubNotificationListener.kt
@@ -31,7 +31,6 @@ import android.util.SparseArray
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
-import com.android.internal.statusbar.NotificationVisibility
import com.android.internal.widget.MessagingGroup
import com.android.settingslib.notification.ConversationIconFactory
import com.android.systemui.R
@@ -41,9 +40,9 @@ import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.plugins.NotificationPersonExtractorPlugin
import com.android.systemui.statusbar.NotificationListener
import com.android.systemui.statusbar.NotificationLockscreenUserManager
-import com.android.systemui.statusbar.notification.NotificationEntryListener
-import com.android.systemui.statusbar.notification.NotificationEntryManager
import com.android.systemui.statusbar.notification.collection.NotificationEntry
+import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection
+import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener
import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier.Companion.TYPE_NON_PERSON
import com.android.systemui.statusbar.policy.ExtensionController
import java.util.ArrayDeque
@@ -89,7 +88,7 @@ class NotificationPersonExtractorPluginBoundary @Inject constructor(
@SysUISingleton
class PeopleHubDataSourceImpl @Inject constructor(
- private val notificationEntryManager: NotificationEntryManager,
+ private val notifCollection: CommonNotifCollection,
private val extractor: NotificationPersonExtractor,
private val userManager: UserManager,
launcherApps: LauncherApps,
@@ -119,19 +118,11 @@ class PeopleHubDataSourceImpl @Inject constructor(
)
}
- private val notificationEntryListener = object : NotificationEntryListener {
- override fun onEntryInflated(entry: NotificationEntry) = addVisibleEntry(entry)
-
- override fun onEntryReinflated(entry: NotificationEntry) = addVisibleEntry(entry)
-
- override fun onPostEntryUpdated(entry: NotificationEntry) = addVisibleEntry(entry)
-
- override fun onEntryRemoved(
- entry: NotificationEntry,
- visibility: NotificationVisibility?,
- removedByUser: Boolean,
- reason: Int
- ) = removeVisibleEntry(entry, reason)
+ private val notifCollectionListener = object : NotifCollectionListener {
+ override fun onEntryAdded(entry: NotificationEntry) = addVisibleEntry(entry)
+ override fun onEntryUpdated(entry: NotificationEntry) = addVisibleEntry(entry)
+ override fun onEntryRemoved(entry: NotificationEntry, reason: Int) =
+ removeVisibleEntry(entry, reason)
}
private fun removeVisibleEntry(entry: NotificationEntry, reason: Int) {
@@ -179,7 +170,7 @@ class PeopleHubDataSourceImpl @Inject constructor(
currentProfiles: SparseArray<UserInfo>?
) = updateUi()
})
- notificationEntryManager.addNotificationEntryListener(notificationEntryListener)
+ notifCollection.addCollectionListener(notifCollectionListener)
} else {
getPeopleHubModelForCurrentUser()?.let(listener::onDataChanged)
}
@@ -189,8 +180,7 @@ class PeopleHubDataSourceImpl @Inject constructor(
if (dataListeners.isEmpty()) {
userChangeSubscription?.unsubscribe()
userChangeSubscription = null
- notificationEntryManager
- .removeNotificationEntryListener(notificationEntryListener)
+ notifCollection.removeCollectionListener(notifCollectionListener)
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/FeedbackInfo.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/FeedbackInfo.java
index 4893490b3e5c..2b782b6e3917 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/FeedbackInfo.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/FeedbackInfo.java
@@ -46,7 +46,6 @@ import com.android.systemui.Dependency;
import com.android.systemui.R;
import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
import com.android.systemui.statusbar.notification.AssistantFeedbackController;
-import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.util.Compile;
@@ -62,7 +61,6 @@ public class FeedbackInfo extends LinearLayout implements NotificationGuts.GutsC
private String mPkg;
private NotificationEntry mEntry;
- private NotificationEntryManager mNotificationEntryManager;
private IStatusBarService mStatusBarService;
private AssistantFeedbackController mFeedbackController;
private NotificationGutsManager mNotificationGutsManager;
@@ -86,7 +84,6 @@ public class FeedbackInfo extends LinearLayout implements NotificationGuts.GutsC
mRanking = entry.getRanking();
mFeedbackController = controller;
mAppName = mPkg;
- mNotificationEntryManager = Dependency.get(NotificationEntryManager.class);
mStatusBarService = Dependency.get(IStatusBarService.class);
mNotificationGutsManager = Dependency.get(NotificationGutsManager.class);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputUriController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputUriController.java
index 03b6122102c2..554dbfb411da 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputUriController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputUriController.java
@@ -21,12 +21,13 @@ import android.os.RemoteException;
import android.service.notification.StatusBarNotification;
import android.util.Log;
+import androidx.annotation.NonNull;
+
import com.android.internal.statusbar.IStatusBarService;
-import com.android.internal.statusbar.NotificationVisibility;
import com.android.systemui.dagger.SysUISingleton;
-import com.android.systemui.statusbar.notification.NotificationEntryListener;
-import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
+import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
+import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
import javax.inject.Inject;
@@ -49,8 +50,8 @@ public class RemoteInputUriController {
* that RemoteInput URI grants are cleaned up when the notification entry is removed from
* the shade.
*/
- public void attach(NotificationEntryManager manager) {
- manager.addNotificationEntryListener(mInlineUriListener);
+ public void attach(CommonNotifCollection manager) {
+ manager.addCollectionListener(mInlineUriListener);
}
/**
@@ -70,10 +71,9 @@ public class RemoteInputUriController {
* Ensures that inline URI permissions are cleared when notification entries are removed from
* the shade.
*/
- private final NotificationEntryListener mInlineUriListener = new NotificationEntryListener() {
+ private final NotifCollectionListener mInlineUriListener = new NotifCollectionListener() {
@Override
- public void onEntryRemoved(NotificationEntry entry, NotificationVisibility visibility,
- boolean removedByUser, int reason) {
+ public void onEntryRemoved(@NonNull NotificationEntry entry, int reason) {
try {
mStatusBarManagerService.clearInlineReplyUriPermissions(entry.getKey());
} catch (RemoteException ex) {
diff --git a/packages/SystemUI/src/com/android/systemui/tv/TvSystemUIModule.java b/packages/SystemUI/src/com/android/systemui/tv/TvSystemUIModule.java
index 65518d6b3e47..66fc9ac15857 100644
--- a/packages/SystemUI/src/com/android/systemui/tv/TvSystemUIModule.java
+++ b/packages/SystemUI/src/com/android/systemui/tv/TvSystemUIModule.java
@@ -50,7 +50,7 @@ import com.android.systemui.statusbar.NotificationLockscreenUserManager;
import com.android.systemui.statusbar.NotificationLockscreenUserManagerImpl;
import com.android.systemui.statusbar.NotificationShadeWindowController;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
-import com.android.systemui.statusbar.notification.collection.legacy.NotificationGroupManagerLegacy;
+import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManager;
import com.android.systemui.statusbar.phone.DozeServiceHost;
import com.android.systemui.statusbar.phone.HeadsUpManagerPhone;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
@@ -166,7 +166,7 @@ public abstract class TvSystemUIModule {
HeadsUpManagerLogger headsUpManagerLogger,
StatusBarStateController statusBarStateController,
KeyguardBypassController bypassController,
- NotificationGroupManagerLegacy groupManager,
+ GroupMembershipManager groupManager,
ConfigurationController configurationController) {
return new HeadsUpManagerPhone(
context,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/MediaCarouselControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/MediaCarouselControllerTest.kt
index d2be1f428a57..dcbe0ab96dac 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/MediaCarouselControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/MediaCarouselControllerTest.kt
@@ -25,7 +25,7 @@ import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.dump.DumpManager
import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.plugins.FalsingManager
-import com.android.systemui.statusbar.notification.collection.legacy.VisualStabilityManager
+import com.android.systemui.statusbar.notification.collection.provider.VisualStabilityProvider
import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.util.concurrency.DelayableExecutor
import com.android.systemui.util.time.FakeSystemClock
@@ -36,8 +36,8 @@ import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.MockitoAnnotations
-import org.mockito.Mockito.`when` as whenever
import javax.inject.Provider
+import org.mockito.Mockito.`when` as whenever
private val DATA = MediaData(
userId = -1,
@@ -66,7 +66,7 @@ class MediaCarouselControllerTest : SysuiTestCase() {
@Mock lateinit var mediaControlPanelFactory: Provider<MediaControlPanel>
@Mock lateinit var panel: MediaControlPanel
- @Mock lateinit var visualStabilityManager: VisualStabilityManager
+ @Mock lateinit var visualStabilityProvider: VisualStabilityProvider
@Mock lateinit var mediaHostStatesManager: MediaHostStatesManager
@Mock lateinit var activityStarter: ActivityStarter
@Mock @Main private lateinit var executor: DelayableExecutor
@@ -87,7 +87,7 @@ class MediaCarouselControllerTest : SysuiTestCase() {
mediaCarouselController = MediaCarouselController(
context,
mediaControlPanelFactory,
- visualStabilityManager,
+ visualStabilityProvider,
mediaHostStatesManager,
activityStarter,
clock,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java
index a84a8037d26d..05769875ae11 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java
@@ -52,8 +52,8 @@ import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.animation.DialogLaunchAnimator;
import com.android.systemui.plugins.ActivityStarter;
-import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
+import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
import com.android.systemui.statusbar.phone.ShadeController;
import com.android.systemui.statusbar.phone.SystemUIDialogManager;
@@ -91,8 +91,7 @@ public class MediaOutputControllerTest extends SysuiTestCase {
private RoutingSessionInfo mRemoteSessionInfo = mock(RoutingSessionInfo.class);
private ShadeController mShadeController = mock(ShadeController.class);
private ActivityStarter mStarter = mock(ActivityStarter.class);
- private NotificationEntryManager mNotificationEntryManager =
- mock(NotificationEntryManager.class);
+ private CommonNotifCollection mNotifCollection = mock(CommonNotifCollection.class);
private final UiEventLogger mUiEventLogger = mock(UiEventLogger.class);
private final DialogLaunchAnimator mDialogLaunchAnimator = mock(DialogLaunchAnimator.class);
private final SystemUIDialogManager mDialogManager = mock(SystemUIDialogManager.class);
@@ -118,7 +117,7 @@ public class MediaOutputControllerTest extends SysuiTestCase {
mMediaOutputController = new MediaOutputController(mSpyContext, TEST_PACKAGE_NAME, false,
mMediaSessionManager, mLocalBluetoothManager, mShadeController, mStarter,
- mNotificationEntryManager, mUiEventLogger, mDialogLaunchAnimator, mDialogManager);
+ mNotifCollection, mUiEventLogger, mDialogLaunchAnimator, mDialogManager);
mLocalMediaManager = spy(mMediaOutputController.mLocalMediaManager);
mMediaOutputController.mLocalMediaManager = mLocalMediaManager;
MediaDescription.Builder builder = new MediaDescription.Builder();
@@ -162,7 +161,7 @@ public class MediaOutputControllerTest extends SysuiTestCase {
public void start_withoutPackageName_verifyMediaControllerInit() {
mMediaOutputController = new MediaOutputController(mSpyContext, null, false,
mMediaSessionManager, mLocalBluetoothManager, mShadeController, mStarter,
- mNotificationEntryManager, mUiEventLogger, mDialogLaunchAnimator, mDialogManager);
+ mNotifCollection, mUiEventLogger, mDialogLaunchAnimator, mDialogManager);
mMediaOutputController.start(mCb);
@@ -183,7 +182,7 @@ public class MediaOutputControllerTest extends SysuiTestCase {
public void stop_withoutPackageName_verifyMediaControllerDeinit() {
mMediaOutputController = new MediaOutputController(mSpyContext, null, false,
mMediaSessionManager, mLocalBluetoothManager, mShadeController, mStarter,
- mNotificationEntryManager, mUiEventLogger, mDialogLaunchAnimator, mDialogManager);
+ mNotifCollection, mUiEventLogger, mDialogLaunchAnimator, mDialogManager);
mMediaOutputController.start(mCb);
@@ -454,7 +453,7 @@ public class MediaOutputControllerTest extends SysuiTestCase {
public void getNotificationLargeIcon_withoutPackageName_returnsNull() {
mMediaOutputController = new MediaOutputController(mSpyContext, null, false,
mMediaSessionManager, mLocalBluetoothManager, mShadeController, mStarter,
- mNotificationEntryManager, mUiEventLogger, mDialogLaunchAnimator, mDialogManager);
+ mNotifCollection, mUiEventLogger, mDialogLaunchAnimator, mDialogManager);
assertThat(mMediaOutputController.getNotificationIcon()).isNull();
}
@@ -467,8 +466,7 @@ public class MediaOutputControllerTest extends SysuiTestCase {
final Notification notification = mock(Notification.class);
entryList.add(entry);
- when(mNotificationEntryManager.getActiveNotificationsForCurrentUser())
- .thenReturn(entryList);
+ when(mNotifCollection.getAllNotifs()).thenReturn(entryList);
when(entry.getSbn()).thenReturn(sbn);
when(sbn.getNotification()).thenReturn(notification);
when(sbn.getPackageName()).thenReturn(TEST_PACKAGE_NAME);
@@ -487,15 +485,14 @@ public class MediaOutputControllerTest extends SysuiTestCase {
final Icon icon = mock(Icon.class);
entryList.add(entry);
- when(mNotificationEntryManager.getActiveNotificationsForCurrentUser())
- .thenReturn(entryList);
+ when(mNotifCollection.getAllNotifs()).thenReturn(entryList);
when(entry.getSbn()).thenReturn(sbn);
when(sbn.getNotification()).thenReturn(notification);
when(sbn.getPackageName()).thenReturn(TEST_PACKAGE_NAME);
when(notification.isMediaNotification()).thenReturn(true);
when(notification.getLargeIcon()).thenReturn(icon);
- assertThat(mMediaOutputController.getNotificationIcon() instanceof IconCompat).isTrue();
+ assertThat(mMediaOutputController.getNotificationIcon()).isInstanceOf(IconCompat.class);
}
@Test
@@ -507,8 +504,7 @@ public class MediaOutputControllerTest extends SysuiTestCase {
final Icon icon = mock(Icon.class);
entryList.add(entry);
- when(mNotificationEntryManager.getActiveNotificationsForCurrentUser())
- .thenReturn(entryList);
+ when(mNotifCollection.getAllNotifs()).thenReturn(entryList);
when(entry.getSbn()).thenReturn(sbn);
when(sbn.getNotification()).thenReturn(notification);
when(sbn.getPackageName()).thenReturn(TEST_PACKAGE_NAME);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/people/widget/PeopleSpaceWidgetManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/people/widget/PeopleSpaceWidgetManagerTest.java
index 24c189a85327..e0f27de1a6de 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/people/widget/PeopleSpaceWidgetManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/people/widget/PeopleSpaceWidgetManagerTest.java
@@ -109,11 +109,11 @@ import com.android.systemui.people.SharedPreferencesHelper;
import com.android.systemui.statusbar.NotificationListener;
import com.android.systemui.statusbar.NotificationListener.NotificationHandler;
import com.android.systemui.statusbar.SbnBuilder;
-import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.collection.NoManSimulator;
import com.android.systemui.statusbar.notification.collection.NoManSimulator.NotifEvent;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
+import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.time.FakeSystemClock;
import com.android.wm.shell.bubbles.Bubbles;
@@ -239,7 +239,7 @@ public class PeopleSpaceWidgetManagerTest extends SysuiTestCase {
@Mock
private LauncherApps mLauncherApps;
@Mock
- private NotificationEntryManager mNotificationEntryManager;
+ private CommonNotifCollection mNotifCollection;
@Mock
private PackageManager mPackageManager;
@Mock
@@ -269,9 +269,8 @@ public class PeopleSpaceWidgetManagerTest extends SysuiTestCase {
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
mLauncherApps = mock(LauncherApps.class);
- mDependency.injectTestDependency(NotificationEntryManager.class, mNotificationEntryManager);
mManager = new PeopleSpaceWidgetManager(mContext, mAppWidgetManager, mIPeopleManager,
- mPeopleManager, mLauncherApps, mNotificationEntryManager, mPackageManager,
+ mPeopleManager, mLauncherApps, mNotifCollection, mPackageManager,
Optional.of(mBubbles), mUserManager, mBackupManager, mINotificationManager,
mNotificationManager, mFakeExecutor);
mManager.attach(mListenerService);
@@ -633,7 +632,7 @@ public class PeopleSpaceWidgetManagerTest extends SysuiTestCase {
.setShortcutInfo(mShortcutInfo)
.setId(1);
NotificationEntry entry = builder.build();
- when(mNotificationEntryManager.getVisibleNotifications()).thenReturn(List.of(entry));
+ when(mNotifCollection.getAllNotifs()).thenReturn(List.of(entry));
NotifEvent notif1 = mNoMan.postNotif(builder);
mClock.advanceTime(MIN_LINGER_DURATION);
@@ -692,7 +691,7 @@ public class PeopleSpaceWidgetManagerTest extends SysuiTestCase {
.setShortcutInfo(mShortcutInfo)
.setId(1);
NotificationEntry entry = builder.build();
- when(mNotificationEntryManager.getVisibleNotifications()).thenReturn(List.of(entry));
+ when(mNotifCollection.getAllNotifs()).thenReturn(List.of(entry));
NotifEvent notif1 = mNoMan.postNotif(builder);
mClock.advanceTime(MIN_LINGER_DURATION);
@@ -716,7 +715,7 @@ public class PeopleSpaceWidgetManagerTest extends SysuiTestCase {
.setShortcutInfo(mShortcutInfo)
.setId(1);
NotificationEntry entry = builder.build();
- when(mNotificationEntryManager.getVisibleNotifications()).thenReturn(List.of(entry));
+ when(mNotifCollection.getAllNotifs()).thenReturn(List.of(entry));
NotifEvent notif1 = mNoMan.postNotif(builder);
mClock.advanceTime(MIN_LINGER_DURATION);
@@ -740,7 +739,7 @@ public class PeopleSpaceWidgetManagerTest extends SysuiTestCase {
.setShortcutInfo(mShortcutInfo)
.setId(1);
NotificationEntry entry = builder.build();
- when(mNotificationEntryManager.getVisibleNotifications()).thenReturn(List.of(entry));
+ when(mNotifCollection.getAllNotifs()).thenReturn(List.of(entry));
NotifEvent notif1 = mNoMan.postNotif(builder);
mClock.advanceTime(MIN_LINGER_DURATION);
@@ -771,12 +770,12 @@ public class PeopleSpaceWidgetManagerTest extends SysuiTestCase {
.setId(1);
NotificationEntry entry = builder.build();
- when(mNotificationEntryManager.getVisibleNotifications()).thenReturn(List.of(entry));
+ when(mNotifCollection.getAllNotifs()).thenReturn(List.of(entry));
NotifEvent notif1 = mNoMan.postNotif(builder);
mClock.advanceTime(MIN_LINGER_DURATION);
- when(mNotificationEntryManager.getVisibleNotifications()).thenReturn(List.of());
+ when(mNotifCollection.getAllNotifs()).thenReturn(List.of());
NotifEvent notif1b = mNoMan.retractNotif(notif1.sbn.cloneLight(), 0);
mClock.advanceTime(MIN_LINGER_DURATION);
@@ -814,7 +813,7 @@ public class PeopleSpaceWidgetManagerTest extends SysuiTestCase {
.setSbn(sbn)
.setId(1);
NotificationEntry entry = builder.build();
- when(mNotificationEntryManager.getVisibleNotifications()).thenReturn(List.of(entry));
+ when(mNotifCollection.getAllNotifs()).thenReturn(List.of(entry));
NotifEvent notif1 = mNoMan.postNotif(builder);
mClock.advanceTime(MIN_LINGER_DURATION);
@@ -858,7 +857,7 @@ public class PeopleSpaceWidgetManagerTest extends SysuiTestCase {
.setShortcutInfo(mShortcutInfo)
.setId(1);
NotificationEntry entry = builder.build();
- when(mNotificationEntryManager.getVisibleNotifications()).thenReturn(List.of(entry));
+ when(mNotifCollection.getAllNotifs()).thenReturn(List.of(entry));
NotifEvent notif1 = mNoMan.postNotif(builder);
@@ -891,7 +890,7 @@ public class PeopleSpaceWidgetManagerTest extends SysuiTestCase {
.setShortcutInfo(mShortcutInfo)
.setId(1);
NotificationEntry entry = builder.build();
- when(mNotificationEntryManager.getVisibleNotifications()).thenReturn(List.of(entry));
+ when(mNotifCollection.getAllNotifs()).thenReturn(List.of(entry));
NotifEvent notif1 = mNoMan.postNotif(builder);
mClock.advanceTime(MIN_LINGER_DURATION);
@@ -922,7 +921,7 @@ public class PeopleSpaceWidgetManagerTest extends SysuiTestCase {
.setShortcutInfo(mShortcutInfo)
.setId(1);
NotificationEntry entry = builder.build();
- when(mNotificationEntryManager.getVisibleNotifications()).thenReturn(List.of(entry));
+ when(mNotifCollection.getAllNotifs()).thenReturn(List.of(entry));
NotifEvent notif1 = mNoMan.postNotif(builder);
mClock.advanceTime(MIN_LINGER_DURATION);
@@ -1215,8 +1214,7 @@ public class PeopleSpaceWidgetManagerTest extends SysuiTestCase {
.setPackageName(TEST_PACKAGE_A)
.setUserHandle(new UserHandle(0))
.build();
- when(mNotificationEntryManager.getVisibleNotifications())
- .thenReturn(List.of(mNotificationEntry));
+ when(mNotifCollection.getAllNotifs()).thenReturn(List.of(mNotificationEntry));
PeopleSpaceTile actual =
mManager.augmentTileFromNotificationEntryManager(tile,
@@ -1224,8 +1222,7 @@ public class PeopleSpaceWidgetManagerTest extends SysuiTestCase {
assertThat(actual.getNotificationContent().toString()).isEqualTo(NOTIFICATION_CONTENT_1);
- verify(mNotificationEntryManager, times(1))
- .getVisibleNotifications();
+ verify(mNotifCollection, times(1)).getAllNotifs();
}
@Test
@@ -1237,8 +1234,7 @@ public class PeopleSpaceWidgetManagerTest extends SysuiTestCase {
.setPackageName(TEST_PACKAGE_A)
.setUserHandle(new UserHandle(0))
.build();
- when(mNotificationEntryManager.getVisibleNotifications())
- .thenReturn(List.of(mNotificationEntry));
+ when(mNotifCollection.getAllNotifs()).thenReturn(List.of(mNotificationEntry));
PeopleSpaceTile actual =
mManager.augmentTileFromNotificationEntryManager(tile,
@@ -1246,8 +1242,7 @@ public class PeopleSpaceWidgetManagerTest extends SysuiTestCase {
assertThat(TextUtils.isEmpty(actual.getNotificationContent())).isTrue();
- verify(mNotificationEntryManager, times(1))
- .getVisibleNotifications();
+ verify(mNotifCollection, times(1)).getAllNotifs();
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/VisualStabilityManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/VisualStabilityManagerTest.java
index a737ce5a2ae5..58abbf2ddef7 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/VisualStabilityManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/VisualStabilityManagerTest.java
@@ -38,6 +38,7 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
import com.android.systemui.statusbar.notification.collection.legacy.VisualStabilityManager;
+import com.android.systemui.statusbar.notification.collection.provider.VisualStabilityProvider;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import org.junit.Before;
@@ -53,6 +54,7 @@ public class VisualStabilityManagerTest extends SysuiTestCase {
private TestableLooper mTestableLooper;
private VisualStabilityManager mVisualStabilityManager;
+ private VisualStabilityProvider mVisualStabilityProvider = mock(VisualStabilityProvider.class);
private VisualStabilityManager.Callback mCallback = mock(VisualStabilityManager.Callback.class);
private VisibilityLocationProvider mLocationProvider = mock(VisibilityLocationProvider.class);
private ExpandableNotificationRow mRow = mock(ExpandableNotificationRow.class);
@@ -69,6 +71,7 @@ public class VisualStabilityManagerTest extends SysuiTestCase {
mTestableLooper = TestableLooper.get(this);
mVisualStabilityManager = new VisualStabilityManager(
mock(NotificationEntryManager.class),
+ mVisualStabilityProvider,
new Handler(mTestableLooper.getLooper()),
statusBarStateController,
wakefulnessLifecycle,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorTest.java
index 17b3b1ce2c3e..ee111715e5ea 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorTest.java
@@ -40,6 +40,7 @@ import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifStabilityManager;
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.Pluggable;
+import com.android.systemui.statusbar.notification.collection.provider.VisualStabilityProvider;
import com.android.systemui.statusbar.notification.collection.render.NotifPanelEventSource;
import com.android.systemui.statusbar.policy.HeadsUpManager;
import com.android.systemui.util.concurrency.FakeExecutor;
@@ -67,6 +68,7 @@ public class VisualStabilityCoordinatorTest extends SysuiTestCase {
@Mock private Pluggable.PluggableListener<NotifStabilityManager> mInvalidateListener;
@Mock private HeadsUpManager mHeadsUpManager;
@Mock private NotifPanelEventSource mNotifPanelEventSource;
+ @Mock private VisualStabilityProvider mVisualStabilityProvider;
@Captor private ArgumentCaptor<WakefulnessLifecycle.Observer> mWakefulnessObserverCaptor;
@Captor private ArgumentCaptor<StatusBarStateController.StateListener> mSBStateListenerCaptor;
@@ -92,6 +94,7 @@ public class VisualStabilityCoordinatorTest extends SysuiTestCase {
mHeadsUpManager,
mNotifPanelEventSource,
mStatusBarStateController,
+ mVisualStabilityProvider,
mWakefulnessLifecycle);
mCoordinator.attach(mNotifPipeline);