Merge "Inline notif pipeline flag into NotifMediaManager" into tm-qpr-dev

This commit is contained in:
TreeHugger Robot
2022-06-30 23:56:33 +00:00
committed by Android (Google) Code Review
2 changed files with 8 additions and 125 deletions

View File

@@ -36,7 +36,6 @@ import android.media.session.MediaSession;
import android.media.session.PlaybackState; import android.media.session.PlaybackState;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.Trace; import android.os.Trace;
import android.service.notification.NotificationListenerService;
import android.service.notification.NotificationStats; import android.service.notification.NotificationStats;
import android.service.notification.StatusBarNotification; import android.service.notification.StatusBarNotification;
import android.util.ArraySet; import android.util.ArraySet;
@@ -44,7 +43,6 @@ import android.util.Log;
import android.view.View; import android.view.View;
import android.widget.ImageView; import android.widget.ImageView;
import com.android.internal.statusbar.NotificationVisibility;
import com.android.systemui.Dependency; import com.android.systemui.Dependency;
import com.android.systemui.Dumpable; import com.android.systemui.Dumpable;
import com.android.systemui.animation.Interpolators; import com.android.systemui.animation.Interpolators;
@@ -56,9 +54,6 @@ import com.android.systemui.media.MediaDataManager;
import com.android.systemui.media.SmartspaceMediaData; import com.android.systemui.media.SmartspaceMediaData;
import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.dagger.CentralSurfacesModule; import com.android.systemui.statusbar.dagger.CentralSurfacesModule;
import com.android.systemui.statusbar.notification.NotifPipelineFlags;
import com.android.systemui.statusbar.notification.NotificationEntryListener;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.collection.NotifCollection; import com.android.systemui.statusbar.notification.collection.NotifCollection;
import com.android.systemui.statusbar.notification.collection.NotifPipeline; import com.android.systemui.statusbar.notification.collection.NotifPipeline;
import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.NotificationEntry;
@@ -112,11 +107,9 @@ public class NotificationMediaManager implements Dumpable {
} }
private final NotificationVisibilityProvider mVisibilityProvider; private final NotificationVisibilityProvider mVisibilityProvider;
private final NotificationEntryManager mEntryManager;
private final MediaDataManager mMediaDataManager; private final MediaDataManager mMediaDataManager;
private final NotifPipeline mNotifPipeline; private final NotifPipeline mNotifPipeline;
private final NotifCollection mNotifCollection; private final NotifCollection mNotifCollection;
private final boolean mUsingNotifPipeline;
@Nullable @Nullable
private Lazy<NotificationShadeWindowController> mNotificationShadeWindowController; private Lazy<NotificationShadeWindowController> mNotificationShadeWindowController;
@@ -180,12 +173,10 @@ public class NotificationMediaManager implements Dumpable {
Lazy<Optional<CentralSurfaces>> centralSurfacesOptionalLazy, Lazy<Optional<CentralSurfaces>> centralSurfacesOptionalLazy,
Lazy<NotificationShadeWindowController> notificationShadeWindowController, Lazy<NotificationShadeWindowController> notificationShadeWindowController,
NotificationVisibilityProvider visibilityProvider, NotificationVisibilityProvider visibilityProvider,
NotificationEntryManager notificationEntryManager,
MediaArtworkProcessor mediaArtworkProcessor, MediaArtworkProcessor mediaArtworkProcessor,
KeyguardBypassController keyguardBypassController, KeyguardBypassController keyguardBypassController,
NotifPipeline notifPipeline, NotifPipeline notifPipeline,
NotifCollection notifCollection, NotifCollection notifCollection,
NotifPipelineFlags notifPipelineFlags,
@Main DelayableExecutor mainExecutor, @Main DelayableExecutor mainExecutor,
MediaDataManager mediaDataManager, MediaDataManager mediaDataManager,
DumpManager dumpManager) { DumpManager dumpManager) {
@@ -197,19 +188,12 @@ public class NotificationMediaManager implements Dumpable {
mCentralSurfacesOptionalLazy = centralSurfacesOptionalLazy; mCentralSurfacesOptionalLazy = centralSurfacesOptionalLazy;
mNotificationShadeWindowController = notificationShadeWindowController; mNotificationShadeWindowController = notificationShadeWindowController;
mVisibilityProvider = visibilityProvider; mVisibilityProvider = visibilityProvider;
mEntryManager = notificationEntryManager;
mMainExecutor = mainExecutor; mMainExecutor = mainExecutor;
mMediaDataManager = mediaDataManager; mMediaDataManager = mediaDataManager;
mNotifPipeline = notifPipeline; mNotifPipeline = notifPipeline;
mNotifCollection = notifCollection; mNotifCollection = notifCollection;
if (!notifPipelineFlags.isNewPipelineEnabled()) { setupNotifPipeline();
setupNEM();
mUsingNotifPipeline = false;
} else {
setupNotifPipeline();
mUsingNotifPipeline = true;
}
dumpManager.registerDumpable(this); dumpManager.registerDumpable(this);
} }
@@ -273,79 +257,6 @@ public class NotificationMediaManager implements Dumpable {
}); });
} }
private void setupNEM() {
mEntryManager.addNotificationEntryListener(new NotificationEntryListener() {
@Override
public void onPendingEntryAdded(NotificationEntry entry) {
mMediaDataManager.onNotificationAdded(entry.getKey(), entry.getSbn());
}
@Override
public void onPreEntryUpdated(NotificationEntry entry) {
mMediaDataManager.onNotificationAdded(entry.getKey(), entry.getSbn());
}
@Override
public void onEntryInflated(NotificationEntry entry) {
findAndUpdateMediaNotifications();
}
@Override
public void onEntryReinflated(NotificationEntry entry) {
findAndUpdateMediaNotifications();
}
@Override
public void onEntryRemoved(
@NonNull NotificationEntry entry,
@Nullable NotificationVisibility visibility,
boolean removedByUser,
int reason) {
removeEntry(entry);
}
});
// Pending entries are never inflated, and will never generate a call to onEntryRemoved().
// This can happen when notifications are added and canceled before inflation. Add this
// separate listener for cleanup, since media inflation occurs onPendingEntryAdded().
mEntryManager.addCollectionListener(new NotifCollectionListener() {
@Override
public void onEntryCleanUp(@NonNull NotificationEntry entry) {
removeEntry(entry);
}
});
mMediaDataManager.addListener(new MediaDataManager.Listener() {
@Override
public void onMediaDataLoaded(@NonNull String key,
@Nullable String oldKey, @NonNull MediaData data, boolean immediately,
int receivedSmartspaceCardLatency, boolean isSsReactivated) {
}
@Override
public void onSmartspaceMediaDataLoaded(@NonNull String key,
@NonNull SmartspaceMediaData data, boolean shouldPrioritize) {
}
@Override
public void onMediaDataRemoved(@NonNull String key) {
NotificationEntry entry = mEntryManager.getPendingOrActiveNotif(key);
if (entry != null) {
// TODO(b/160713608): "removing" this notification won't happen and
// won't send the 'deleteIntent' if the notification is ongoing.
mEntryManager.performRemoveNotification(entry.getSbn(),
getDismissedByUserStats(entry),
NotificationListenerService.REASON_CANCEL);
}
}
@Override
public void onSmartspaceMediaDataRemoved(@NonNull String key, boolean immediately) {}
});
}
private DismissedByUserStats getDismissedByUserStats(NotificationEntry entry) { private DismissedByUserStats getDismissedByUserStats(NotificationEntry entry) {
return new DismissedByUserStats( return new DismissedByUserStats(
NotificationStats.DISMISSAL_SHADE, // Add DISMISSAL_MEDIA? NotificationStats.DISMISSAL_SHADE, // Add DISMISSAL_MEDIA?
@@ -401,22 +312,10 @@ public class NotificationMediaManager implements Dumpable {
if (mMediaNotificationKey == null) { if (mMediaNotificationKey == null) {
return null; return null;
} }
if (mUsingNotifPipeline) { return Optional.ofNullable(mNotifPipeline.getEntry(mMediaNotificationKey))
return Optional.ofNullable(mNotifPipeline.getEntry(mMediaNotificationKey)) .map(entry -> entry.getIcons().getShelfIcon())
.map(entry -> entry.getIcons().getShelfIcon()) .map(StatusBarIconView::getSourceIcon)
.map(StatusBarIconView::getSourceIcon) .orElse(null);
.orElse(null);
} else {
synchronized (mEntryManager) {
NotificationEntry entry = mEntryManager
.getActiveNotificationUnfiltered(mMediaNotificationKey);
if (entry == null || entry.getIcons().getShelfIcon() == null) {
return null;
}
return entry.getIcons().getShelfIcon().getSourceIcon();
}
}
} }
public void addCallback(MediaListener callback) { public void addCallback(MediaListener callback) {
@@ -431,21 +330,9 @@ public class NotificationMediaManager implements Dumpable {
public void findAndUpdateMediaNotifications() { public void findAndUpdateMediaNotifications() {
boolean metaDataChanged; boolean metaDataChanged;
if (mUsingNotifPipeline) { // TODO(b/169655907): get the semi-filtered notifications for current user
// TODO(b/169655907): get the semi-filtered notifications for current user Collection<NotificationEntry> allNotifications = mNotifPipeline.getAllNotifs();
Collection<NotificationEntry> allNotifications = mNotifPipeline.getAllNotifs(); metaDataChanged = findPlayingMediaNotification(allNotifications);
metaDataChanged = findPlayingMediaNotification(allNotifications);
} else {
synchronized (mEntryManager) {
Collection<NotificationEntry> allNotifications = mEntryManager.getAllNotifs();
metaDataChanged = findPlayingMediaNotification(allNotifications);
}
if (metaDataChanged) {
mEntryManager.updateNotifications("NotificationMediaManager - metaDataChanged");
}
}
dispatchUpdateMediaMetaData(metaDataChanged, true /* allowEnterAnimation */); dispatchUpdateMediaMetaData(metaDataChanged, true /* allowEnterAnimation */);
} }

View File

@@ -139,12 +139,10 @@ public interface CentralSurfacesDependenciesModule {
Lazy<Optional<CentralSurfaces>> centralSurfacesOptionalLazy, Lazy<Optional<CentralSurfaces>> centralSurfacesOptionalLazy,
Lazy<NotificationShadeWindowController> notificationShadeWindowController, Lazy<NotificationShadeWindowController> notificationShadeWindowController,
NotificationVisibilityProvider visibilityProvider, NotificationVisibilityProvider visibilityProvider,
NotificationEntryManager notificationEntryManager,
MediaArtworkProcessor mediaArtworkProcessor, MediaArtworkProcessor mediaArtworkProcessor,
KeyguardBypassController keyguardBypassController, KeyguardBypassController keyguardBypassController,
NotifPipeline notifPipeline, NotifPipeline notifPipeline,
NotifCollection notifCollection, NotifCollection notifCollection,
NotifPipelineFlags notifPipelineFlags,
@Main DelayableExecutor mainExecutor, @Main DelayableExecutor mainExecutor,
MediaDataManager mediaDataManager, MediaDataManager mediaDataManager,
DumpManager dumpManager) { DumpManager dumpManager) {
@@ -153,12 +151,10 @@ public interface CentralSurfacesDependenciesModule {
centralSurfacesOptionalLazy, centralSurfacesOptionalLazy,
notificationShadeWindowController, notificationShadeWindowController,
visibilityProvider, visibilityProvider,
notificationEntryManager,
mediaArtworkProcessor, mediaArtworkProcessor,
keyguardBypassController, keyguardBypassController,
notifPipeline, notifPipeline,
notifCollection, notifCollection,
notifPipelineFlags,
mainExecutor, mainExecutor,
mediaDataManager, mediaDataManager,
dumpManager); dumpManager);