Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f6b9c2ef authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

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

Merge "Inline notif pipeline flag into NotifMediaManager" into tm-qpr-dev am: 2f20aa96 am: 3c231ae9

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19110370



Change-Id: Ie7cd8a59fc1743d270e76bee42d9179daf9f07a4
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents ae2b467e 3c231ae9
Loading
Loading
Loading
Loading
+8 −121
Original line number Original line Diff line number Diff line
@@ -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()) {
            setupNEM();
            mUsingNotifPipeline = false;
        } else {
        setupNotifPipeline();
        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 */);
    }
    }


+0 −4
Original line number Original line Diff line number Diff line
@@ -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);