Merge changes from topic "b200269355_blockers_1"
* changes: New Pipeline: Fix some feature flagging New Pipeline: various migrations
This commit is contained in:
committed by
Android (Google) Code Review
commit
611280e6b7
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1043,6 +1043,11 @@ public class NotificationEntryManager implements
|
||||
mNotifCollectionListeners.add(listener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeCollectionListener(@NonNull NotifCollectionListener listener) {
|
||||
mNotifCollectionListeners.remove(listener);
|
||||
}
|
||||
|
||||
/*
|
||||
* End annexation
|
||||
* -----
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package com.android.systemui.statusbar.notification.collection
|
||||
|
||||
import com.android.systemui.dagger.SysUISingleton
|
||||
import com.android.systemui.statusbar.notification.NotifPipelineFlags
|
||||
import com.android.systemui.statusbar.notification.collection.listbuilder.OnAfterRenderEntryListener
|
||||
import com.android.systemui.statusbar.notification.collection.listbuilder.OnAfterRenderGroupListener
|
||||
import com.android.systemui.statusbar.notification.collection.listbuilder.OnAfterRenderListListener
|
||||
@@ -75,6 +76,7 @@ import javax.inject.Inject
|
||||
*/
|
||||
@SysUISingleton
|
||||
class NotifPipeline @Inject constructor(
|
||||
notifPipelineFlags: NotifPipelineFlags,
|
||||
private val mNotifCollection: NotifCollection,
|
||||
private val mShadeListBuilder: ShadeListBuilder,
|
||||
private val mRenderStageManager: RenderStageManager
|
||||
@@ -94,6 +96,10 @@ class NotifPipeline @Inject constructor(
|
||||
mNotifCollection.addCollectionListener(listener)
|
||||
}
|
||||
|
||||
override fun removeCollectionListener(listener: NotifCollectionListener) {
|
||||
mNotifCollection.removeCollectionListener(listener)
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the NotificationEntry associated with [key].
|
||||
*/
|
||||
@@ -101,6 +107,8 @@ class NotifPipeline @Inject constructor(
|
||||
return mNotifCollection.getEntry(key)
|
||||
}
|
||||
|
||||
val isNewPipelineEnabled: Boolean = notifPipelineFlags.isNewPipelineEnabled()
|
||||
|
||||
/**
|
||||
* Registers a lifetime extender. Lifetime extenders can cause notifications that have been
|
||||
* dismissed or retracted by system server to be temporarily retained in the collection.
|
||||
|
||||
@@ -150,6 +150,7 @@ public class ShadeListBuilder implements Dumpable {
|
||||
*/
|
||||
public void attach(NotifCollection collection) {
|
||||
Assert.isMainThread();
|
||||
collection.addCollectionListener(mInteractionTracker);
|
||||
collection.setBuildListener(mReadyForBuildListener);
|
||||
mChoreographer.addOnEvalListener(this::buildList);
|
||||
}
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
|
||||
package com.android.systemui.statusbar.notification.collection.coordinator;
|
||||
|
||||
import com.android.systemui.statusbar.notification.NotifPipelineFlags;
|
||||
import com.android.systemui.statusbar.notification.collection.NotifCollection;
|
||||
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
||||
@@ -58,7 +57,6 @@ import javax.inject.Inject;
|
||||
public class BubbleCoordinator implements Coordinator {
|
||||
private static final String TAG = "BubbleCoordinator";
|
||||
|
||||
private final NotifPipelineFlags mNotifPipelineFlags;
|
||||
private final Optional<BubblesManager> mBubblesManagerOptional;
|
||||
private final Optional<Bubbles> mBubblesOptional;
|
||||
private final NotifCollection mNotifCollection;
|
||||
@@ -68,11 +66,9 @@ public class BubbleCoordinator implements Coordinator {
|
||||
|
||||
@Inject
|
||||
public BubbleCoordinator(
|
||||
NotifPipelineFlags notifPipelineFlags,
|
||||
Optional<BubblesManager> bubblesManagerOptional,
|
||||
Optional<Bubbles> bubblesOptional,
|
||||
NotifCollection notifCollection) {
|
||||
mNotifPipelineFlags = notifPipelineFlags;
|
||||
mBubblesManagerOptional = bubblesManagerOptional;
|
||||
mBubblesOptional = bubblesOptional;
|
||||
mNotifCollection = notifCollection;
|
||||
@@ -131,7 +127,7 @@ public class BubbleCoordinator implements Coordinator {
|
||||
DismissedByUserStats dismissedByUserStats,
|
||||
int reason
|
||||
) {
|
||||
if (!mNotifPipelineFlags.isNewPipelineEnabled()) {
|
||||
if (!mNotifPipeline.isNewPipelineEnabled()) {
|
||||
// The `entry` will be from whichever pipeline is active, so if the old pipeline is
|
||||
// running, make sure that we use the new pipeline's entry (if it still exists).
|
||||
NotificationEntry newPipelineEntry = mNotifPipeline.getEntry(entry.getKey());
|
||||
|
||||
@@ -74,7 +74,9 @@ public class CommunalCoordinator implements Coordinator {
|
||||
public void attach(@NonNull NotifPipeline pipeline) {
|
||||
pipeline.addPreGroupFilter(mFilter);
|
||||
mCommunalStateController.addCallback(mStateCallback);
|
||||
mNotificationLockscreenUserManager.addKeyguardNotificationSuppressor(
|
||||
entry -> mCommunalStateController.getCommunalViewShowing());
|
||||
if (!pipeline.isNewPipelineEnabled()) {
|
||||
mNotificationLockscreenUserManager.addKeyguardNotificationSuppressor(
|
||||
entry -> mCommunalStateController.getCommunalViewShowing());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -65,9 +65,11 @@ class SmartspaceDedupingCoordinator @Inject constructor(
|
||||
statusBarStateController.addCallback(statusBarStateListener)
|
||||
smartspaceController.addListener(this::onNewSmartspaceTargets)
|
||||
|
||||
// TODO (b/173126564): Remove this once the old pipeline is no longer necessary
|
||||
notificationLockscreenUserManager.addKeyguardNotificationSuppressor { entry ->
|
||||
isDupedWithSmartspaceContent(entry)
|
||||
if (!pipeline.isNewPipelineEnabled) {
|
||||
// TODO (b/173126564): Remove this once the old pipeline is no longer necessary
|
||||
notificationLockscreenUserManager.addKeyguardNotificationSuppressor { entry ->
|
||||
isDupedWithSmartspaceContent(entry)
|
||||
}
|
||||
}
|
||||
|
||||
recordStatusBarState(statusBarStateController.state)
|
||||
|
||||
@@ -21,7 +21,6 @@ import com.android.internal.widget.MessagingMessage
|
||||
import com.android.keyguard.KeyguardUpdateMonitor
|
||||
import com.android.systemui.statusbar.NotificationLockscreenUserManager.UserChangedListener
|
||||
import com.android.systemui.statusbar.NotificationLockscreenUserManagerImpl
|
||||
import com.android.systemui.statusbar.notification.NotifPipelineFlags
|
||||
import com.android.systemui.statusbar.notification.collection.NotifPipeline
|
||||
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope
|
||||
import com.android.systemui.statusbar.notification.row.NotificationGutsManager
|
||||
@@ -35,9 +34,8 @@ import javax.inject.Inject
|
||||
*/
|
||||
@CoordinatorScope
|
||||
class ViewConfigCoordinator @Inject internal constructor(
|
||||
configurationController: ConfigurationController,
|
||||
lockscreenUserManager: NotificationLockscreenUserManagerImpl,
|
||||
notifPipelineFlags: NotifPipelineFlags,
|
||||
private val mConfigurationController: ConfigurationController,
|
||||
private val mLockscreenUserManager: NotificationLockscreenUserManagerImpl,
|
||||
private val mGutsManager: NotificationGutsManager,
|
||||
private val mKeyguardUpdateMonitor: KeyguardUpdateMonitor
|
||||
) : Coordinator, UserChangedListener, ConfigurationController.ConfigurationListener {
|
||||
@@ -46,15 +44,12 @@ class ViewConfigCoordinator @Inject internal constructor(
|
||||
private var mDispatchUiModeChangeOnUserSwitched = false
|
||||
private var mPipeline: NotifPipeline? = null
|
||||
|
||||
init {
|
||||
if (notifPipelineFlags.isNewPipelineEnabled()) {
|
||||
lockscreenUserManager.addUserChangedListener(this)
|
||||
configurationController.addCallback(this)
|
||||
}
|
||||
}
|
||||
|
||||
override fun attach(pipeline: NotifPipeline) {
|
||||
mPipeline = pipeline
|
||||
if (pipeline.isNewPipelineEnabled) {
|
||||
mLockscreenUserManager.addUserChangedListener(this)
|
||||
mConfigurationController.addCallback(this)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDensityOrFontScaleChanged() {
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -40,6 +40,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,
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
@@ -63,6 +63,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;
|
||||
@@ -202,12 +203,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,
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -16,9 +16,12 @@
|
||||
|
||||
package com.android.systemui.statusbar.notification.collection.coordinator;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.test.suitebuilder.annotation.SmallTest;
|
||||
|
||||
@@ -82,12 +85,13 @@ public class CommunalCoordinatorTest extends SysuiTestCase {
|
||||
final NotifFilter filter = filterCaptor.getValue();
|
||||
|
||||
// Verify that notifications are not filtered out by default.
|
||||
assert (!filter.shouldFilterOut(mNotificationEntry, 0));
|
||||
assertThat(filter.shouldFilterOut(mNotificationEntry, 0)).isFalse();
|
||||
|
||||
filter.setInvalidationListener(mFilterListener);
|
||||
|
||||
// Verify that notifications are filtered out when communal is showing and that the filter
|
||||
// pipeline is notified.
|
||||
when(mCommunalStateController.getCommunalViewShowing()).thenReturn(true);
|
||||
stateCallback.onCommunalViewShowingChanged();
|
||||
// Make sure callback depends on executor to run.
|
||||
verify(mFilterListener, never()).onPluggableInvalidated(any());
|
||||
@@ -97,7 +101,6 @@ public class CommunalCoordinatorTest extends SysuiTestCase {
|
||||
|
||||
verify(mFilterListener).onPluggableInvalidated(any());
|
||||
verify(mNotificationEntryManager).updateNotifications(any());
|
||||
assert (filter.shouldFilterOut(mNotificationEntry, 0));
|
||||
|
||||
assertThat(filter.shouldFilterOut(mNotificationEntry, 0)).isTrue();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user