Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java +53 −1 Original line number Diff line number Diff line Loading @@ -24,18 +24,24 @@ import static com.android.systemui.statusbar.notification.row.NotificationRowCon import android.annotation.NonNull; import android.annotation.Nullable; import android.app.Notification; import android.content.Context; import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemClock; import android.service.notification.NotificationListenerService; import android.service.notification.NotificationListenerService.Ranking; import android.service.notification.NotificationListenerService.RankingMap; import android.service.notification.NotificationStats; import android.service.notification.StatusBarNotification; import android.util.ArrayMap; import android.util.ArraySet; import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.statusbar.IStatusBarService; import com.android.internal.statusbar.NotificationVisibility; import com.android.systemui.Dumpable; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.FeatureFlags; import com.android.systemui.statusbar.NotificationLifetimeExtender; import com.android.systemui.statusbar.NotificationListener; Loading @@ -52,6 +58,7 @@ import com.android.systemui.statusbar.notification.collection.notifcollection.No import com.android.systemui.statusbar.notification.dagger.NotificationsModule; import com.android.systemui.statusbar.notification.logging.NotificationLogger; import com.android.systemui.statusbar.phone.NotificationGroupManager; import com.android.systemui.statusbar.policy.HeadsUpManager; import com.android.systemui.util.Assert; import com.android.systemui.util.leak.LeakDetector; Loading Loading @@ -127,6 +134,8 @@ public class NotificationEntryManager implements private final NotificationEntryManagerLogger mLogger; private final IStatusBarService mStatusBarService; // Lazily retrieved dependencies private final Lazy<NotificationRowBinder> mNotificationRowBinderLazy; private final Lazy<NotificationRemoteInputManager> mRemoteInputManagerLazy; Loading @@ -138,6 +147,8 @@ public class NotificationEntryManager implements private final NotificationRankingManager mRankingManager; private final FeatureFlags mFeatureFlags; private final ForegroundServiceDismissalFeatureController mFgsFeatureController; private final HeadsUpManager mHeadsUpManager; private final StatusBarStateController mStatusBarStateController; private NotificationPresenter mPresenter; private RankingMap mLatestRankingMap; Loading Loading @@ -201,7 +212,10 @@ public class NotificationEntryManager implements Lazy<NotificationRowBinder> notificationRowBinderLazy, Lazy<NotificationRemoteInputManager> notificationRemoteInputManagerLazy, LeakDetector leakDetector, ForegroundServiceDismissalFeatureController fgsFeatureController) { ForegroundServiceDismissalFeatureController fgsFeatureController, HeadsUpManager headsUpManager, StatusBarStateController statusBarStateController ) { mLogger = logger; mGroupManager = groupManager; mRankingManager = rankingManager; Loading @@ -211,6 +225,11 @@ public class NotificationEntryManager implements mRemoteInputManagerLazy = notificationRemoteInputManagerLazy; mLeakDetector = leakDetector; mFgsFeatureController = fgsFeatureController; mHeadsUpManager = headsUpManager; mStatusBarStateController = statusBarStateController; mStatusBarService = IStatusBarService.Stub.asInterface( ServiceManager.checkService(Context.STATUS_BAR_SERVICE)); } /** Once called, the NEM will start processing notification events from system server. */ Loading Loading @@ -496,6 +515,9 @@ public class NotificationEntryManager implements removedByUser |= entryDismissed; mLogger.logNotifRemoved(entry.getKey(), removedByUser); if (removedByUser && visibility != null) { sendNotificationRemovalToServer(entry.getKey(), entry.getSbn(), visibility); } for (NotificationEntryListener listener : mNotificationEntryListeners) { listener.onEntryRemoved(entry, visibility, removedByUser, reason); } Loading @@ -511,6 +533,36 @@ public class NotificationEntryManager implements } } private void sendNotificationRemovalToServer( String key, StatusBarNotification notification, NotificationVisibility nv) { final String pkg = notification.getPackageName(); final String tag = notification.getTag(); final int id = notification.getId(); final int userId = notification.getUser().getIdentifier(); try { int dismissalSurface = NotificationStats.DISMISSAL_SHADE; if (mHeadsUpManager.isAlerting(key)) { dismissalSurface = NotificationStats.DISMISSAL_PEEK; } else if (mStatusBarStateController.isDozing()) { dismissalSurface = NotificationStats.DISMISSAL_AOD; } int dismissalSentiment = NotificationStats.DISMISS_SENTIMENT_NEUTRAL; mStatusBarService.onNotificationClear( pkg, tag, id, userId, notification.getKey(), dismissalSurface, dismissalSentiment, nv); } catch (RemoteException ex) { // system process is dead if we're here. } } /** * Ensures that the group children are cancelled immediately when the group summary is cancelled * instead of waiting for the notification manager to send all cancels. Otherwise this could Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java +7 −2 Original line number Diff line number Diff line Loading @@ -59,6 +59,7 @@ import com.android.systemui.statusbar.notification.row.NotificationGutsManager; import com.android.systemui.statusbar.notification.row.PriorityOnboardingDialogController; import com.android.systemui.statusbar.phone.NotificationGroupManager; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.policy.HeadsUpManager; import com.android.systemui.util.leak.LeakDetector; import java.util.concurrent.Executor; Loading Loading @@ -88,7 +89,9 @@ public interface NotificationsModule { Lazy<NotificationRowBinder> notificationRowBinderLazy, Lazy<NotificationRemoteInputManager> notificationRemoteInputManagerLazy, LeakDetector leakDetector, ForegroundServiceDismissalFeatureController fgsFeatureController) { ForegroundServiceDismissalFeatureController fgsFeatureController, HeadsUpManager headsUpManager, StatusBarStateController statusBarStateController) { return new NotificationEntryManager( logger, groupManager, Loading @@ -98,7 +101,9 @@ public interface NotificationsModule { notificationRowBinderLazy, notificationRemoteInputManagerLazy, leakDetector, fgsFeatureController); fgsFeatureController, headsUpManager, statusBarStateController); } /** Provides an instance of {@link NotificationGutsManager} */ Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java +0 −34 Original line number Diff line number Diff line Loading @@ -21,7 +21,6 @@ import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemClock; import android.service.notification.NotificationListenerService; import android.service.notification.NotificationStats; import android.service.notification.StatusBarNotification; import android.util.ArrayMap; import android.util.ArraySet; Loading @@ -44,7 +43,6 @@ import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.dagger.NotificationsModule; import com.android.systemui.statusbar.notification.stack.ExpandableViewState; import com.android.systemui.statusbar.notification.stack.NotificationListContainer; import com.android.systemui.statusbar.policy.HeadsUpManager; import java.util.Collection; import java.util.Collections; Loading Loading @@ -74,7 +72,6 @@ public class NotificationLogger implements StateListener { private final Executor mUiBgExecutor; private final NotificationEntryManager mEntryManager; private final NotificationPanelLogger mNotificationPanelLogger; private HeadsUpManager mHeadsUpManager; private final ExpansionStateLogger mExpansionStateLogger; protected Handler mHandler = new Handler(); Loading Loading @@ -226,9 +223,6 @@ public class NotificationLogger implements StateListener { NotificationVisibility visibility, boolean removedByUser, int reason) { if (removedByUser && visibility != null) { logNotificationClear(entry.getKey(), entry.getSbn(), visibility); } mExpansionStateLogger.onEntryRemoved(entry.getKey()); } Loading @@ -250,10 +244,6 @@ public class NotificationLogger implements StateListener { mListContainer = listContainer; } public void setHeadsUpManager(HeadsUpManager headsUpManager) { mHeadsUpManager = headsUpManager; } public void stopNotificationLogging() { if (mLogging) { mLogging = false; Loading Loading @@ -296,30 +286,6 @@ public class NotificationLogger implements StateListener { } } // TODO: This method has side effects, it is NOT just logging that a notification // was cleared, it also actually removes the notification private void logNotificationClear(String key, StatusBarNotification notification, NotificationVisibility nv) { final String pkg = notification.getPackageName(); final String tag = notification.getTag(); final int id = notification.getId(); final int userId = notification.getUserId(); try { int dismissalSurface = NotificationStats.DISMISSAL_SHADE; if (mHeadsUpManager.isAlerting(key)) { dismissalSurface = NotificationStats.DISMISSAL_PEEK; } else if (mListContainer.hasPulsingNotifications()) { dismissalSurface = NotificationStats.DISMISSAL_AOD; } int dismissalSentiment = NotificationStats.DISMISS_SENTIMENT_NEUTRAL; mBarService.onNotificationClear(pkg, tag, id, userId, notification.getKey(), dismissalSurface, dismissalSentiment, nv); } catch (RemoteException ex) { // system process is dead if we're here. } } /** * Logs Notification inflation error */ Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +0 −1 Original line number Diff line number Diff line Loading @@ -1101,7 +1101,6 @@ public class StatusBar extends SystemUI implements DemoMode, mHeadsUpManager.addListener(mNotificationPanelViewController.getOnHeadsUpChangedListener()); mHeadsUpManager.addListener(mVisualStabilityManager); mNotificationPanelViewController.setHeadsUpManager(mHeadsUpManager); mNotificationLogger.setHeadsUpManager(mHeadsUpManager); createNavigationBar(result); Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java +4 −1 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ import com.android.internal.statusbar.NotificationVisibility; import com.android.systemui.Dependency; import com.android.systemui.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.FeatureFlags; import com.android.systemui.statusbar.NotificationLifetimeExtender; import com.android.systemui.statusbar.NotificationMediaManager; Loading Loading @@ -200,7 +201,9 @@ public class NotificationEntryManagerTest extends SysuiTestCase { () -> mNotificationRowBinder, () -> mRemoteInputManager, mLeakDetector, mock(ForegroundServiceDismissalFeatureController.class) mock(ForegroundServiceDismissalFeatureController.class), mock(HeadsUpManager.class), mock(StatusBarStateController.class) ); mEntryManager.setUpWithPresenter(mPresenter); mEntryManager.addNotificationEntryListener(mEntryListener); Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java +53 −1 Original line number Diff line number Diff line Loading @@ -24,18 +24,24 @@ import static com.android.systemui.statusbar.notification.row.NotificationRowCon import android.annotation.NonNull; import android.annotation.Nullable; import android.app.Notification; import android.content.Context; import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemClock; import android.service.notification.NotificationListenerService; import android.service.notification.NotificationListenerService.Ranking; import android.service.notification.NotificationListenerService.RankingMap; import android.service.notification.NotificationStats; import android.service.notification.StatusBarNotification; import android.util.ArrayMap; import android.util.ArraySet; import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.statusbar.IStatusBarService; import com.android.internal.statusbar.NotificationVisibility; import com.android.systemui.Dumpable; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.FeatureFlags; import com.android.systemui.statusbar.NotificationLifetimeExtender; import com.android.systemui.statusbar.NotificationListener; Loading @@ -52,6 +58,7 @@ import com.android.systemui.statusbar.notification.collection.notifcollection.No import com.android.systemui.statusbar.notification.dagger.NotificationsModule; import com.android.systemui.statusbar.notification.logging.NotificationLogger; import com.android.systemui.statusbar.phone.NotificationGroupManager; import com.android.systemui.statusbar.policy.HeadsUpManager; import com.android.systemui.util.Assert; import com.android.systemui.util.leak.LeakDetector; Loading Loading @@ -127,6 +134,8 @@ public class NotificationEntryManager implements private final NotificationEntryManagerLogger mLogger; private final IStatusBarService mStatusBarService; // Lazily retrieved dependencies private final Lazy<NotificationRowBinder> mNotificationRowBinderLazy; private final Lazy<NotificationRemoteInputManager> mRemoteInputManagerLazy; Loading @@ -138,6 +147,8 @@ public class NotificationEntryManager implements private final NotificationRankingManager mRankingManager; private final FeatureFlags mFeatureFlags; private final ForegroundServiceDismissalFeatureController mFgsFeatureController; private final HeadsUpManager mHeadsUpManager; private final StatusBarStateController mStatusBarStateController; private NotificationPresenter mPresenter; private RankingMap mLatestRankingMap; Loading Loading @@ -201,7 +212,10 @@ public class NotificationEntryManager implements Lazy<NotificationRowBinder> notificationRowBinderLazy, Lazy<NotificationRemoteInputManager> notificationRemoteInputManagerLazy, LeakDetector leakDetector, ForegroundServiceDismissalFeatureController fgsFeatureController) { ForegroundServiceDismissalFeatureController fgsFeatureController, HeadsUpManager headsUpManager, StatusBarStateController statusBarStateController ) { mLogger = logger; mGroupManager = groupManager; mRankingManager = rankingManager; Loading @@ -211,6 +225,11 @@ public class NotificationEntryManager implements mRemoteInputManagerLazy = notificationRemoteInputManagerLazy; mLeakDetector = leakDetector; mFgsFeatureController = fgsFeatureController; mHeadsUpManager = headsUpManager; mStatusBarStateController = statusBarStateController; mStatusBarService = IStatusBarService.Stub.asInterface( ServiceManager.checkService(Context.STATUS_BAR_SERVICE)); } /** Once called, the NEM will start processing notification events from system server. */ Loading Loading @@ -496,6 +515,9 @@ public class NotificationEntryManager implements removedByUser |= entryDismissed; mLogger.logNotifRemoved(entry.getKey(), removedByUser); if (removedByUser && visibility != null) { sendNotificationRemovalToServer(entry.getKey(), entry.getSbn(), visibility); } for (NotificationEntryListener listener : mNotificationEntryListeners) { listener.onEntryRemoved(entry, visibility, removedByUser, reason); } Loading @@ -511,6 +533,36 @@ public class NotificationEntryManager implements } } private void sendNotificationRemovalToServer( String key, StatusBarNotification notification, NotificationVisibility nv) { final String pkg = notification.getPackageName(); final String tag = notification.getTag(); final int id = notification.getId(); final int userId = notification.getUser().getIdentifier(); try { int dismissalSurface = NotificationStats.DISMISSAL_SHADE; if (mHeadsUpManager.isAlerting(key)) { dismissalSurface = NotificationStats.DISMISSAL_PEEK; } else if (mStatusBarStateController.isDozing()) { dismissalSurface = NotificationStats.DISMISSAL_AOD; } int dismissalSentiment = NotificationStats.DISMISS_SENTIMENT_NEUTRAL; mStatusBarService.onNotificationClear( pkg, tag, id, userId, notification.getKey(), dismissalSurface, dismissalSentiment, nv); } catch (RemoteException ex) { // system process is dead if we're here. } } /** * Ensures that the group children are cancelled immediately when the group summary is cancelled * instead of waiting for the notification manager to send all cancels. Otherwise this could Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java +7 −2 Original line number Diff line number Diff line Loading @@ -59,6 +59,7 @@ import com.android.systemui.statusbar.notification.row.NotificationGutsManager; import com.android.systemui.statusbar.notification.row.PriorityOnboardingDialogController; import com.android.systemui.statusbar.phone.NotificationGroupManager; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.policy.HeadsUpManager; import com.android.systemui.util.leak.LeakDetector; import java.util.concurrent.Executor; Loading Loading @@ -88,7 +89,9 @@ public interface NotificationsModule { Lazy<NotificationRowBinder> notificationRowBinderLazy, Lazy<NotificationRemoteInputManager> notificationRemoteInputManagerLazy, LeakDetector leakDetector, ForegroundServiceDismissalFeatureController fgsFeatureController) { ForegroundServiceDismissalFeatureController fgsFeatureController, HeadsUpManager headsUpManager, StatusBarStateController statusBarStateController) { return new NotificationEntryManager( logger, groupManager, Loading @@ -98,7 +101,9 @@ public interface NotificationsModule { notificationRowBinderLazy, notificationRemoteInputManagerLazy, leakDetector, fgsFeatureController); fgsFeatureController, headsUpManager, statusBarStateController); } /** Provides an instance of {@link NotificationGutsManager} */ Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java +0 −34 Original line number Diff line number Diff line Loading @@ -21,7 +21,6 @@ import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemClock; import android.service.notification.NotificationListenerService; import android.service.notification.NotificationStats; import android.service.notification.StatusBarNotification; import android.util.ArrayMap; import android.util.ArraySet; Loading @@ -44,7 +43,6 @@ import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.dagger.NotificationsModule; import com.android.systemui.statusbar.notification.stack.ExpandableViewState; import com.android.systemui.statusbar.notification.stack.NotificationListContainer; import com.android.systemui.statusbar.policy.HeadsUpManager; import java.util.Collection; import java.util.Collections; Loading Loading @@ -74,7 +72,6 @@ public class NotificationLogger implements StateListener { private final Executor mUiBgExecutor; private final NotificationEntryManager mEntryManager; private final NotificationPanelLogger mNotificationPanelLogger; private HeadsUpManager mHeadsUpManager; private final ExpansionStateLogger mExpansionStateLogger; protected Handler mHandler = new Handler(); Loading Loading @@ -226,9 +223,6 @@ public class NotificationLogger implements StateListener { NotificationVisibility visibility, boolean removedByUser, int reason) { if (removedByUser && visibility != null) { logNotificationClear(entry.getKey(), entry.getSbn(), visibility); } mExpansionStateLogger.onEntryRemoved(entry.getKey()); } Loading @@ -250,10 +244,6 @@ public class NotificationLogger implements StateListener { mListContainer = listContainer; } public void setHeadsUpManager(HeadsUpManager headsUpManager) { mHeadsUpManager = headsUpManager; } public void stopNotificationLogging() { if (mLogging) { mLogging = false; Loading Loading @@ -296,30 +286,6 @@ public class NotificationLogger implements StateListener { } } // TODO: This method has side effects, it is NOT just logging that a notification // was cleared, it also actually removes the notification private void logNotificationClear(String key, StatusBarNotification notification, NotificationVisibility nv) { final String pkg = notification.getPackageName(); final String tag = notification.getTag(); final int id = notification.getId(); final int userId = notification.getUserId(); try { int dismissalSurface = NotificationStats.DISMISSAL_SHADE; if (mHeadsUpManager.isAlerting(key)) { dismissalSurface = NotificationStats.DISMISSAL_PEEK; } else if (mListContainer.hasPulsingNotifications()) { dismissalSurface = NotificationStats.DISMISSAL_AOD; } int dismissalSentiment = NotificationStats.DISMISS_SENTIMENT_NEUTRAL; mBarService.onNotificationClear(pkg, tag, id, userId, notification.getKey(), dismissalSurface, dismissalSentiment, nv); } catch (RemoteException ex) { // system process is dead if we're here. } } /** * Logs Notification inflation error */ Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +0 −1 Original line number Diff line number Diff line Loading @@ -1101,7 +1101,6 @@ public class StatusBar extends SystemUI implements DemoMode, mHeadsUpManager.addListener(mNotificationPanelViewController.getOnHeadsUpChangedListener()); mHeadsUpManager.addListener(mVisualStabilityManager); mNotificationPanelViewController.setHeadsUpManager(mHeadsUpManager); mNotificationLogger.setHeadsUpManager(mHeadsUpManager); createNavigationBar(result); Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java +4 −1 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ import com.android.internal.statusbar.NotificationVisibility; import com.android.systemui.Dependency; import com.android.systemui.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.FeatureFlags; import com.android.systemui.statusbar.NotificationLifetimeExtender; import com.android.systemui.statusbar.NotificationMediaManager; Loading Loading @@ -200,7 +201,9 @@ public class NotificationEntryManagerTest extends SysuiTestCase { () -> mNotificationRowBinder, () -> mRemoteInputManager, mLeakDetector, mock(ForegroundServiceDismissalFeatureController.class) mock(ForegroundServiceDismissalFeatureController.class), mock(HeadsUpManager.class), mock(StatusBarStateController.class) ); mEntryManager.setUpWithPresenter(mPresenter); mEntryManager.addNotificationEntryListener(mEntryListener); Loading