Loading packages/SystemUI/src/com/android/systemui/people/widget/LaunchConversationActivity.java +32 −24 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.content.Context; import android.content.Intent; import android.content.pm.LauncherApps; import android.os.Bundle; import android.os.RemoteException; import android.os.ServiceManager; import android.os.UserHandle; import android.os.UserManager; Loading @@ -34,6 +35,7 @@ import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.UiEventLoggerImpl; import com.android.internal.statusbar.IStatusBarService; import com.android.internal.statusbar.NotificationVisibility; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.people.PeopleSpaceUtils; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.notification.collection.NotificationEntry; Loading @@ -43,6 +45,7 @@ import com.android.systemui.wmshell.BubblesManager; import com.android.wm.shell.bubbles.Bubble; import java.util.Optional; import java.util.concurrent.Executor; import javax.inject.Inject; Loading @@ -58,6 +61,7 @@ public class LaunchConversationActivity extends Activity { private boolean mIsForTesting; private IStatusBarService mIStatusBarService; private CommandQueue mCommandQueue; private Executor mBgExecutor; private Bubble mBubble; private NotificationEntry mEntryToBubble; Loading @@ -67,7 +71,8 @@ public class LaunchConversationActivity extends Activity { CommonNotifCollection commonNotifCollection, Optional<BubblesManager> bubblesManagerOptional, UserManager userManager, CommandQueue commandQueue CommandQueue commandQueue, @Background Executor bgExecutor ) { super(); mVisibilityProvider = visibilityProvider; Loading @@ -91,6 +96,7 @@ public class LaunchConversationActivity extends Activity { mCommandQueue.removeCallback(this); } }); mBgExecutor = bgExecutor; } @Override Loading Loading @@ -172,7 +178,6 @@ public class LaunchConversationActivity extends Activity { return; } try { if (mIStatusBarService == null || mCommonNotifCollection == null) { if (DEBUG) { Log.d(TAG, "Skipping clear notification: null services, key: " + notifKey); Loading @@ -193,13 +198,16 @@ public class LaunchConversationActivity extends Activity { int rank = notifVisibility.rank; if (DEBUG) Log.d(TAG, "Clearing notification, key: " + notifKey + ", rank: " + rank); mBgExecutor.execute(() -> { try { mIStatusBarService.onNotificationClear( packageName, userHandle.getIdentifier(), notifKey, NotificationStats.DISMISSAL_OTHER, NotificationStats.DISMISS_SENTIMENT_POSITIVE, notifVisibility); } catch (Exception e) { } catch (RemoteException e) { Log.e(TAG, "Exception cancelling notification:" + e); } }); } @VisibleForTesting Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java +19 −12 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ 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.dagger.qualifiers.Background; import com.android.systemui.dump.DumpManager; import com.android.systemui.statusbar.NotificationLifetimeExtender; import com.android.systemui.statusbar.NotificationListener; Loading Loading @@ -73,6 +74,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.Executor; import dagger.Lazy; Loading Loading @@ -113,6 +115,7 @@ public class NotificationEntryManager implements private final IStatusBarService mStatusBarService; private final NotifLiveDataStoreImpl mNotifLiveDataStore; private final DumpManager mDumpManager; private final Executor mBgExecutor; private final Set<NotificationEntry> mAllNotifications = new ArraySet<>(); private final Set<NotificationEntry> mReadOnlyAllNotifications = Loading Loading @@ -159,7 +162,8 @@ public class NotificationEntryManager implements LeakDetector leakDetector, IStatusBarService statusBarService, NotifLiveDataStoreImpl notifLiveDataStore, DumpManager dumpManager DumpManager dumpManager, @Background Executor bgExecutor ) { mLogger = logger; mGroupManager = groupManager; Loading @@ -170,6 +174,7 @@ public class NotificationEntryManager implements mStatusBarService = statusBarService; mNotifLiveDataStore = notifLiveDataStore; mDumpManager = dumpManager; mBgExecutor = bgExecutor; } /** Once called, the NEM will start processing notification events from system server. */ Loading Loading @@ -566,6 +571,7 @@ public class NotificationEntryManager implements private void sendNotificationRemovalToServer( StatusBarNotification notification, DismissedByUserStats dismissedByUserStats) { mBgExecutor.execute(() -> { try { mStatusBarService.onNotificationClear( notification.getPackageName(), Loading @@ -577,6 +583,7 @@ public class NotificationEntryManager implements } catch (RemoteException ex) { // system process is dead if we're here. } }); } /** Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java +19 −12 Original line number Diff line number Diff line Loading @@ -70,6 +70,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.statusbar.IStatusBarService; import com.android.systemui.Dumpable; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dump.DumpManager; import com.android.systemui.dump.LogBufferEulogizer; Loading Loading @@ -112,6 +113,7 @@ import java.util.Map; import java.util.Objects; import java.util.Queue; import java.util.Set; import java.util.concurrent.Executor; import java.util.concurrent.TimeUnit; import javax.inject.Inject; Loading Loading @@ -146,6 +148,7 @@ public class NotifCollection implements Dumpable { private final NotifPipelineFlags mNotifPipelineFlags; private final NotifCollectionLogger mLogger; private final Handler mMainHandler; private final Executor mBgExecutor; private final LogBufferEulogizer mEulogizer; private final DumpManager mDumpManager; Loading Loading @@ -174,6 +177,7 @@ public class NotifCollection implements Dumpable { NotifPipelineFlags notifPipelineFlags, NotifCollectionLogger logger, @Main Handler mainHandler, @Background Executor bgExecutor, LogBufferEulogizer logBufferEulogizer, DumpManager dumpManager) { mStatusBarService = statusBarService; Loading @@ -181,6 +185,7 @@ public class NotifCollection implements Dumpable { mNotifPipelineFlags = notifPipelineFlags; mLogger = logger; mMainHandler = mainHandler; mBgExecutor = bgExecutor; mEulogizer = logBufferEulogizer; mDumpManager = dumpManager; } Loading Loading @@ -294,6 +299,7 @@ public class NotifCollection implements Dumpable { entriesToLocallyDismiss.add(entry); if (!isCanceled(entry)) { // send message to system server if this notification hasn't already been cancelled mBgExecutor.execute(() -> { try { mStatusBarService.onNotificationClear( entry.getSbn().getPackageName(), Loading @@ -306,6 +312,7 @@ public class NotifCollection implements Dumpable { // system process is dead if we're here. mLogger.logRemoteExceptionOnNotificationClear(entry, e); } }); } } Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java +4 −2 Original line number Diff line number Diff line Loading @@ -128,7 +128,8 @@ public interface NotificationsModule { LeakDetector leakDetector, IStatusBarService statusBarService, NotifLiveDataStoreImpl notifLiveDataStore, DumpManager dumpManager) { DumpManager dumpManager, @Background Executor bgExecutor) { return new NotificationEntryManager( logger, groupManager, Loading @@ -138,7 +139,8 @@ public interface NotificationsModule { leakDetector, statusBarService, notifLiveDataStore, dumpManager); dumpManager, bgExecutor); } /** Provides an instance of {@link NotificationGutsManager} */ Loading packages/SystemUI/tests/src/com/android/systemui/people/widget/LaunchConversationActivityTest.java +8 −1 Original line number Diff line number Diff line Loading @@ -48,6 +48,8 @@ import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection; import com.android.systemui.statusbar.notification.collection.render.NotificationVisibilityProvider; import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.time.FakeSystemClock; import com.android.systemui.wmshell.BubblesManager; import com.android.wm.shell.bubbles.Bubble; Loading Loading @@ -106,6 +108,9 @@ public class LaunchConversationActivityTest extends SysuiTestCase { private Intent mIntent; private FakeSystemClock mFakeSystemClock = new FakeSystemClock(); private FakeExecutor mBgExecutor = new FakeExecutor(mFakeSystemClock); @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); Loading @@ -114,7 +119,8 @@ public class LaunchConversationActivityTest extends SysuiTestCase { mNotifCollection, Optional.of(mBubblesManager), mUserManager, mCommandQueue mCommandQueue, mBgExecutor ); verify(mCommandQueue, times(1)).addCallback(mCallbacksCaptor.capture()); Loading Loading @@ -193,6 +199,7 @@ public class LaunchConversationActivityTest extends SysuiTestCase { // Ensure callback removed verify(mCommandQueue).removeCallback(any()); // Clear the notification for bubbles. FakeExecutor.exhaustExecutors(mBgExecutor); verify(mIStatusBarService, times(1)).onNotificationClear(any(), anyInt(), any(), anyInt(), anyInt(), mNotificationVisibilityCaptor.capture()); // Do not select the bubble. Loading Loading
packages/SystemUI/src/com/android/systemui/people/widget/LaunchConversationActivity.java +32 −24 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.content.Context; import android.content.Intent; import android.content.pm.LauncherApps; import android.os.Bundle; import android.os.RemoteException; import android.os.ServiceManager; import android.os.UserHandle; import android.os.UserManager; Loading @@ -34,6 +35,7 @@ import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.UiEventLoggerImpl; import com.android.internal.statusbar.IStatusBarService; import com.android.internal.statusbar.NotificationVisibility; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.people.PeopleSpaceUtils; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.notification.collection.NotificationEntry; Loading @@ -43,6 +45,7 @@ import com.android.systemui.wmshell.BubblesManager; import com.android.wm.shell.bubbles.Bubble; import java.util.Optional; import java.util.concurrent.Executor; import javax.inject.Inject; Loading @@ -58,6 +61,7 @@ public class LaunchConversationActivity extends Activity { private boolean mIsForTesting; private IStatusBarService mIStatusBarService; private CommandQueue mCommandQueue; private Executor mBgExecutor; private Bubble mBubble; private NotificationEntry mEntryToBubble; Loading @@ -67,7 +71,8 @@ public class LaunchConversationActivity extends Activity { CommonNotifCollection commonNotifCollection, Optional<BubblesManager> bubblesManagerOptional, UserManager userManager, CommandQueue commandQueue CommandQueue commandQueue, @Background Executor bgExecutor ) { super(); mVisibilityProvider = visibilityProvider; Loading @@ -91,6 +96,7 @@ public class LaunchConversationActivity extends Activity { mCommandQueue.removeCallback(this); } }); mBgExecutor = bgExecutor; } @Override Loading Loading @@ -172,7 +178,6 @@ public class LaunchConversationActivity extends Activity { return; } try { if (mIStatusBarService == null || mCommonNotifCollection == null) { if (DEBUG) { Log.d(TAG, "Skipping clear notification: null services, key: " + notifKey); Loading @@ -193,13 +198,16 @@ public class LaunchConversationActivity extends Activity { int rank = notifVisibility.rank; if (DEBUG) Log.d(TAG, "Clearing notification, key: " + notifKey + ", rank: " + rank); mBgExecutor.execute(() -> { try { mIStatusBarService.onNotificationClear( packageName, userHandle.getIdentifier(), notifKey, NotificationStats.DISMISSAL_OTHER, NotificationStats.DISMISS_SENTIMENT_POSITIVE, notifVisibility); } catch (Exception e) { } catch (RemoteException e) { Log.e(TAG, "Exception cancelling notification:" + e); } }); } @VisibleForTesting Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java +19 −12 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ 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.dagger.qualifiers.Background; import com.android.systemui.dump.DumpManager; import com.android.systemui.statusbar.NotificationLifetimeExtender; import com.android.systemui.statusbar.NotificationListener; Loading Loading @@ -73,6 +74,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.Executor; import dagger.Lazy; Loading Loading @@ -113,6 +115,7 @@ public class NotificationEntryManager implements private final IStatusBarService mStatusBarService; private final NotifLiveDataStoreImpl mNotifLiveDataStore; private final DumpManager mDumpManager; private final Executor mBgExecutor; private final Set<NotificationEntry> mAllNotifications = new ArraySet<>(); private final Set<NotificationEntry> mReadOnlyAllNotifications = Loading Loading @@ -159,7 +162,8 @@ public class NotificationEntryManager implements LeakDetector leakDetector, IStatusBarService statusBarService, NotifLiveDataStoreImpl notifLiveDataStore, DumpManager dumpManager DumpManager dumpManager, @Background Executor bgExecutor ) { mLogger = logger; mGroupManager = groupManager; Loading @@ -170,6 +174,7 @@ public class NotificationEntryManager implements mStatusBarService = statusBarService; mNotifLiveDataStore = notifLiveDataStore; mDumpManager = dumpManager; mBgExecutor = bgExecutor; } /** Once called, the NEM will start processing notification events from system server. */ Loading Loading @@ -566,6 +571,7 @@ public class NotificationEntryManager implements private void sendNotificationRemovalToServer( StatusBarNotification notification, DismissedByUserStats dismissedByUserStats) { mBgExecutor.execute(() -> { try { mStatusBarService.onNotificationClear( notification.getPackageName(), Loading @@ -577,6 +583,7 @@ public class NotificationEntryManager implements } catch (RemoteException ex) { // system process is dead if we're here. } }); } /** Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java +19 −12 Original line number Diff line number Diff line Loading @@ -70,6 +70,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.statusbar.IStatusBarService; import com.android.systemui.Dumpable; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dump.DumpManager; import com.android.systemui.dump.LogBufferEulogizer; Loading Loading @@ -112,6 +113,7 @@ import java.util.Map; import java.util.Objects; import java.util.Queue; import java.util.Set; import java.util.concurrent.Executor; import java.util.concurrent.TimeUnit; import javax.inject.Inject; Loading Loading @@ -146,6 +148,7 @@ public class NotifCollection implements Dumpable { private final NotifPipelineFlags mNotifPipelineFlags; private final NotifCollectionLogger mLogger; private final Handler mMainHandler; private final Executor mBgExecutor; private final LogBufferEulogizer mEulogizer; private final DumpManager mDumpManager; Loading Loading @@ -174,6 +177,7 @@ public class NotifCollection implements Dumpable { NotifPipelineFlags notifPipelineFlags, NotifCollectionLogger logger, @Main Handler mainHandler, @Background Executor bgExecutor, LogBufferEulogizer logBufferEulogizer, DumpManager dumpManager) { mStatusBarService = statusBarService; Loading @@ -181,6 +185,7 @@ public class NotifCollection implements Dumpable { mNotifPipelineFlags = notifPipelineFlags; mLogger = logger; mMainHandler = mainHandler; mBgExecutor = bgExecutor; mEulogizer = logBufferEulogizer; mDumpManager = dumpManager; } Loading Loading @@ -294,6 +299,7 @@ public class NotifCollection implements Dumpable { entriesToLocallyDismiss.add(entry); if (!isCanceled(entry)) { // send message to system server if this notification hasn't already been cancelled mBgExecutor.execute(() -> { try { mStatusBarService.onNotificationClear( entry.getSbn().getPackageName(), Loading @@ -306,6 +312,7 @@ public class NotifCollection implements Dumpable { // system process is dead if we're here. mLogger.logRemoteExceptionOnNotificationClear(entry, e); } }); } } Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java +4 −2 Original line number Diff line number Diff line Loading @@ -128,7 +128,8 @@ public interface NotificationsModule { LeakDetector leakDetector, IStatusBarService statusBarService, NotifLiveDataStoreImpl notifLiveDataStore, DumpManager dumpManager) { DumpManager dumpManager, @Background Executor bgExecutor) { return new NotificationEntryManager( logger, groupManager, Loading @@ -138,7 +139,8 @@ public interface NotificationsModule { leakDetector, statusBarService, notifLiveDataStore, dumpManager); dumpManager, bgExecutor); } /** Provides an instance of {@link NotificationGutsManager} */ Loading
packages/SystemUI/tests/src/com/android/systemui/people/widget/LaunchConversationActivityTest.java +8 −1 Original line number Diff line number Diff line Loading @@ -48,6 +48,8 @@ import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection; import com.android.systemui.statusbar.notification.collection.render.NotificationVisibilityProvider; import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.time.FakeSystemClock; import com.android.systemui.wmshell.BubblesManager; import com.android.wm.shell.bubbles.Bubble; Loading Loading @@ -106,6 +108,9 @@ public class LaunchConversationActivityTest extends SysuiTestCase { private Intent mIntent; private FakeSystemClock mFakeSystemClock = new FakeSystemClock(); private FakeExecutor mBgExecutor = new FakeExecutor(mFakeSystemClock); @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); Loading @@ -114,7 +119,8 @@ public class LaunchConversationActivityTest extends SysuiTestCase { mNotifCollection, Optional.of(mBubblesManager), mUserManager, mCommandQueue mCommandQueue, mBgExecutor ); verify(mCommandQueue, times(1)).addCallback(mCallbacksCaptor.capture()); Loading Loading @@ -193,6 +199,7 @@ public class LaunchConversationActivityTest extends SysuiTestCase { // Ensure callback removed verify(mCommandQueue).removeCallback(any()); // Clear the notification for bubbles. FakeExecutor.exhaustExecutors(mBgExecutor); verify(mIStatusBarService, times(1)).onNotificationClear(any(), anyInt(), any(), anyInt(), anyInt(), mNotificationVisibilityCaptor.capture()); // Do not select the bubble. Loading