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

Commit c9358c61 authored by András Kurucz's avatar András Kurucz Committed by Android (Google) Code Review
Browse files

Merge "make IStatusBarService:onNotificationClear calls async" into tm-qpr-dev

parents 59bf3478 a97c612f
Loading
Loading
Loading
Loading
+32 −24
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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;

@@ -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;

@@ -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;
@@ -91,6 +96,7 @@ public class LaunchConversationActivity extends Activity {
                mCommandQueue.removeCallback(this);
            }
        });
        mBgExecutor = bgExecutor;
    }

    @Override
@@ -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);
@@ -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
+19 −12
Original line number Diff line number Diff line
@@ -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;
@@ -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;

@@ -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 =
@@ -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;
@@ -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. */
@@ -566,6 +571,7 @@ public class NotificationEntryManager implements
    private void sendNotificationRemovalToServer(
            StatusBarNotification notification,
            DismissedByUserStats dismissedByUserStats) {
        mBgExecutor.execute(() -> {
            try {
                mStatusBarService.onNotificationClear(
                        notification.getPackageName(),
@@ -577,6 +583,7 @@ public class NotificationEntryManager implements
            } catch (RemoteException ex) {
                // system process is dead if we're here.
            }
        });
    }

    /**
+19 −12
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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;

@@ -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;
@@ -181,6 +185,7 @@ public class NotifCollection implements Dumpable {
        mNotifPipelineFlags = notifPipelineFlags;
        mLogger = logger;
        mMainHandler = mainHandler;
        mBgExecutor = bgExecutor;
        mEulogizer = logBufferEulogizer;
        mDumpManager = dumpManager;
    }
@@ -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(),
@@ -306,6 +312,7 @@ public class NotifCollection implements Dumpable {
                        // system process is dead if we're here.
                        mLogger.logRemoteExceptionOnNotificationClear(entry, e);
                    }
                });
            }
        }

+4 −2
Original line number Diff line number Diff line
@@ -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,
@@ -138,7 +139,8 @@ public interface NotificationsModule {
                leakDetector,
                statusBarService,
                notifLiveDataStore,
                dumpManager);
                dumpManager,
                bgExecutor);
    }

    /** Provides an instance of {@link NotificationGutsManager} */
+8 −1
Original line number Diff line number Diff line
@@ -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;

@@ -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);
@@ -114,7 +119,8 @@ public class LaunchConversationActivityTest extends SysuiTestCase {
                mNotifCollection,
                Optional.of(mBubblesManager),
                mUserManager,
                mCommandQueue
                mCommandQueue,
                mBgExecutor
        );
        verify(mCommandQueue, times(1)).addCallback(mCallbacksCaptor.capture());

@@ -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