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

Commit 4d7a3a04 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Move onNotificationClear back to NEM"

parents 7a058bf5 99c61e27
Loading
Loading
Loading
Loading
+53 −1
Original line number Diff line number Diff line
@@ -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;
@@ -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;

@@ -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;
@@ -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;
@@ -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;
@@ -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. */
@@ -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);
                }
@@ -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
+7 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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,
@@ -98,7 +101,9 @@ public interface NotificationsModule {
                notificationRowBinderLazy,
                notificationRemoteInputManagerLazy,
                leakDetector,
                fgsFeatureController);
                fgsFeatureController,
                headsUpManager,
                statusBarStateController);
    }

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

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

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