Inline notif pipeline flag in NotificationsModule

This change is a no-op; the flag is now enabled-by-default, so all
removed code paths here are effectively dead.

Bug: 200269355
Test: atest SystemUITests
Change-Id: Iff34ab616876046adeb7bf567c7dbdd8f4d481c4
This commit is contained in:
Steve Elliott
2022-06-28 21:43:29 -04:00
parent 78212309fa
commit df9ec806d2
6 changed files with 28 additions and 308 deletions

View File

@@ -23,6 +23,7 @@ import android.service.notification.NotificationStats;
import androidx.annotation.NonNull;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.notification.collection.NotifCollection;
import com.android.systemui.statusbar.notification.collection.NotifCollection.CancellationReason;
@@ -33,10 +34,13 @@ import com.android.systemui.statusbar.notification.collection.render.Notificatio
import com.android.systemui.statusbar.notification.row.OnUserInteractionCallback;
import com.android.systemui.statusbar.policy.HeadsUpManager;
import javax.inject.Inject;
/**
* Callback for when a user interacts with a {@see ExpandableNotificationRow}. Sends relevant
* information about the interaction to the notification pipeline.
*/
@SysUISingleton
public class OnUserInteractionCallbackImpl implements OnUserInteractionCallback {
private final NotificationVisibilityProvider mVisibilityProvider;
private final NotifCollection mNotifCollection;
@@ -44,6 +48,7 @@ public class OnUserInteractionCallbackImpl implements OnUserInteractionCallback
private final StatusBarStateController mStatusBarStateController;
private final VisualStabilityCoordinator mVisualStabilityCoordinator;
@Inject
public OnUserInteractionCallbackImpl(
NotificationVisibilityProvider visibilityProvider,
NotifCollection notifCollection,

View File

@@ -1,100 +0,0 @@
/*
* Copyright (C) 2010 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.systemui.statusbar.notification.collection.legacy;
import static com.android.systemui.statusbar.phone.CentralSurfaces.SPEW;
import android.service.notification.StatusBarNotification;
import android.util.Log;
import androidx.annotation.NonNull;
import com.android.internal.statusbar.NotificationVisibility;
import com.android.systemui.statusbar.notification.NotificationEntryListener;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.render.NotifShadeEventSource;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
/**
* This is some logic extracted from the
* {@link com.android.systemui.statusbar.phone.StatusBarNotificationPresenter}
* into a class that implements a new-pipeline interface so that the new pipeline can implement it
* correctly.
*
* Specifically, this is the logic which updates notifications when uiMode and screen properties
* change, and which closes the shade when the last notification disappears.
*/
public class LegacyNotificationPresenterExtensions implements NotifShadeEventSource {
private static final String TAG = "LegacyNotifPresenter";
private final NotificationEntryManager mEntryManager;
private boolean mEntryListenerAdded;
private Runnable mShadeEmptiedCallback;
private Runnable mNotifRemovedByUserCallback;
@Inject
public LegacyNotificationPresenterExtensions(NotificationEntryManager entryManager) {
mEntryManager = entryManager;
}
private void ensureEntryListenerAdded() {
if (mEntryListenerAdded) return;
mEntryListenerAdded = true;
mEntryManager.addNotificationEntryListener(new NotificationEntryListener() {
@Override
public void onEntryRemoved(
@NotNull NotificationEntry entry,
NotificationVisibility visibility,
boolean removedByUser,
int reason) {
StatusBarNotification old = entry.getSbn();
if (SPEW) {
Log.d(TAG, "removeNotification key=" + entry.getKey()
+ " old=" + old + " reason=" + reason);
}
if (old != null && !mEntryManager.hasActiveNotifications()) {
if (mShadeEmptiedCallback != null) mShadeEmptiedCallback.run();
}
if (removedByUser) {
if (mNotifRemovedByUserCallback != null) mNotifRemovedByUserCallback.run();
}
}
});
}
@Override
public void setNotifRemovedByUserCallback(@NonNull Runnable callback) {
if (mNotifRemovedByUserCallback != null) {
throw new IllegalStateException("mNotifRemovedByUserCallback already set");
}
mNotifRemovedByUserCallback = callback;
ensureEntryListenerAdded();
}
@Override
public void setShadeEmptiedCallback(@NonNull Runnable callback) {
if (mShadeEmptiedCallback != null) {
throw new IllegalStateException("mShadeEmptiedCallback already set");
}
mShadeEmptiedCallback = callback;
ensureEntryListenerAdded();
}
}

View File

@@ -1,128 +0,0 @@
/*
* Copyright (C) 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.systemui.statusbar.notification.collection.legacy;
import static android.service.notification.NotificationStats.DISMISS_SENTIMENT_NEUTRAL;
import android.service.notification.NotificationListenerService;
import android.service.notification.NotificationStats;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.collection.NotifCollection.CancellationReason;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.notifcollection.DismissedByUserStats;
import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManager;
import com.android.systemui.statusbar.notification.collection.render.NotificationVisibilityProvider;
import com.android.systemui.statusbar.notification.row.OnUserInteractionCallback;
import com.android.systemui.statusbar.policy.HeadsUpManager;
/**
* Callback for when a user interacts with a {@see ExpandableNotificationRow}.
*/
public class OnUserInteractionCallbackImplLegacy implements OnUserInteractionCallback {
private final NotificationEntryManager mNotificationEntryManager;
private final NotificationVisibilityProvider mVisibilityProvider;
private final HeadsUpManager mHeadsUpManager;
private final StatusBarStateController mStatusBarStateController;
private final VisualStabilityManager mVisualStabilityManager;
private final GroupMembershipManager mGroupMembershipManager;
public OnUserInteractionCallbackImplLegacy(
NotificationEntryManager notificationEntryManager,
NotificationVisibilityProvider visibilityProvider,
HeadsUpManager headsUpManager,
StatusBarStateController statusBarStateController,
VisualStabilityManager visualStabilityManager,
GroupMembershipManager groupMembershipManager
) {
mNotificationEntryManager = notificationEntryManager;
mVisibilityProvider = visibilityProvider;
mHeadsUpManager = headsUpManager;
mStatusBarStateController = statusBarStateController;
mVisualStabilityManager = visualStabilityManager;
mGroupMembershipManager = groupMembershipManager;
}
/**
* Callback triggered when a user:
* 1. Manually dismisses a notification {@see ExpandableNotificationRow}.
* 2. Clicks on a notification with flag {@link android.app.Notification#FLAG_AUTO_CANCEL}.
* {@see StatusBarNotificationActivityStarter}
*
* @param groupSummaryToDismiss the group summary that should be dismissed
* along with this dismissal. If null, does not additionally
* dismiss any notifications.
*/
private void onDismiss(
NotificationEntry entry,
@NotificationListenerService.NotificationCancelReason int cancellationReason,
@Nullable NotificationEntry groupSummaryToDismiss
) {
int dismissalSurface = NotificationStats.DISMISSAL_SHADE;
if (mHeadsUpManager.isAlerting(entry.getKey())) {
dismissalSurface = NotificationStats.DISMISSAL_PEEK;
} else if (mStatusBarStateController.isDozing()) {
dismissalSurface = NotificationStats.DISMISSAL_AOD;
}
if (groupSummaryToDismiss != null) {
onDismiss(groupSummaryToDismiss, cancellationReason, null);
}
mNotificationEntryManager.performRemoveNotification(
entry.getSbn(),
new DismissedByUserStats(
dismissalSurface,
DISMISS_SENTIMENT_NEUTRAL,
mVisibilityProvider.obtain(entry, true)),
cancellationReason
);
}
@Override
public void onImportanceChanged(NotificationEntry entry) {
mVisualStabilityManager.temporarilyAllowReordering();
}
/**
* @param entry that is being dismissed
* @return the group summary to dismiss along with this entry if this is the last entry in
* the group. Else, returns null.
*/
@Nullable
private NotificationEntry getGroupSummaryToDismiss(NotificationEntry entry) {
if (mGroupMembershipManager.isOnlyChildInGroup(entry)) {
NotificationEntry groupSummary = mGroupMembershipManager.getLogicalGroupSummary(entry);
return groupSummary.isDismissable() ? groupSummary : null;
}
return null;
}
@Override
@NonNull
public Runnable registerFutureDismissal(@NonNull NotificationEntry entry,
@CancellationReason int cancellationReason) {
NotificationEntry groupSummaryToDismiss = getGroupSummaryToDismiss(entry);
return () -> onDismiss(entry, cancellationReason, groupSummaryToDismiss);
}
}

View File

@@ -17,6 +17,7 @@
package com.android.systemui.statusbar.notification.collection.provider
import com.android.internal.statusbar.NotificationVisibility
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.statusbar.notification.collection.NotifLiveDataStore
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection
@@ -25,6 +26,7 @@ import com.android.systemui.statusbar.notification.logging.NotificationLogger
import javax.inject.Inject
/** pipeline-agnostic implementation for getting [NotificationVisibility]. */
@SysUISingleton
class NotificationVisibilityProviderImpl @Inject constructor(
private val notifDataStore: NotifLiveDataStore,
private val notifCollection: CommonNotifCollection
@@ -46,4 +48,4 @@ class NotificationVisibilityProviderImpl @Inject constructor(
NotificationLogger.getNotificationLocation(notifCollection.getEntry(key))
private fun getCount() = notifDataStore.activeNotifCount.value
}
}

View File

@@ -16,6 +16,7 @@
package com.android.systemui.statusbar.notification.collection.render;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.statusbar.notification.collection.GroupEntry;
import com.android.systemui.statusbar.notification.collection.ListEntry;
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
@@ -28,10 +29,13 @@ import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import javax.inject.Inject;
/**
* Provides grouping information for notification entries including information about a group's
* expanded state.
*/
@SysUISingleton
public class GroupExpansionManagerImpl implements GroupExpansionManager, Coordinator {
private final GroupMembershipManager mGroupMembershipManager;
private final Set<OnGroupExpansionChangeListener> mOnGroupChangeListeners = new HashSet<>();
@@ -39,6 +43,7 @@ public class GroupExpansionManagerImpl implements GroupExpansionManager, Coordin
// Set of summary keys whose groups are expanded
private final Set<NotificationEntry> mExpandedGroups = new HashSet<>();
@Inject
public GroupExpansionManagerImpl(GroupMembershipManager groupMembershipManager) {
mGroupMembershipManager = groupMembershipManager;
}

View File

@@ -41,23 +41,19 @@ import com.android.systemui.statusbar.notification.AssistantFeedbackController;
import com.android.systemui.statusbar.notification.NotifPipelineFlags;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.NotificationEntryManagerLogger;
import com.android.systemui.statusbar.notification.collection.NotifCollection;
import com.android.systemui.statusbar.notification.collection.NotifInflaterImpl;
import com.android.systemui.statusbar.notification.collection.NotifLiveDataStore;
import com.android.systemui.statusbar.notification.collection.NotifLiveDataStoreImpl;
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
import com.android.systemui.statusbar.notification.collection.NotifPipelineChoreographerModule;
import com.android.systemui.statusbar.notification.collection.coordinator.ShadeEventCoordinator;
import com.android.systemui.statusbar.notification.collection.coordinator.VisualStabilityCoordinator;
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorsModule;
import com.android.systemui.statusbar.notification.collection.inflation.BindEventManager;
import com.android.systemui.statusbar.notification.collection.inflation.BindEventManagerImpl;
import com.android.systemui.statusbar.notification.collection.inflation.NotifInflater;
import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinder;
import com.android.systemui.statusbar.notification.collection.inflation.OnUserInteractionCallbackImpl;
import com.android.systemui.statusbar.notification.collection.legacy.LegacyNotificationPresenterExtensions;
import com.android.systemui.statusbar.notification.collection.legacy.NotificationGroupManagerLegacy;
import com.android.systemui.statusbar.notification.collection.legacy.OnUserInteractionCallbackImplLegacy;
import com.android.systemui.statusbar.notification.collection.legacy.VisualStabilityManager;
import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider;
@@ -90,7 +86,6 @@ import com.android.systemui.statusbar.phone.CentralSurfaces;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.phone.NotifPanelEventsModule;
import com.android.systemui.statusbar.phone.ShadeController;
import com.android.systemui.statusbar.policy.HeadsUpManager;
import com.android.systemui.util.leak.LeakDetector;
import com.android.systemui.wmshell.BubblesManager;
@@ -116,12 +111,10 @@ import dagger.Provides;
})
public interface NotificationsModule {
@Binds
StackScrollAlgorithm.SectionProvider bindSectionProvider(
NotificationSectionsManager impl);
StackScrollAlgorithm.SectionProvider bindSectionProvider(NotificationSectionsManager impl);
@Binds
StackScrollAlgorithm.BypassController bindBypassController(
KeyguardBypassController impl);
StackScrollAlgorithm.BypassController bindBypassController(KeyguardBypassController impl);
/** Provides an instance of {@link NotificationEntryManager} */
@SysUISingleton
@@ -194,12 +187,8 @@ public interface NotificationsModule {
}
/** Provides an instance of {@link NotifGutsViewManager} */
@SysUISingleton
@Provides
static NotifGutsViewManager provideNotifGutsViewManager(
NotificationGutsManager notificationGutsManager) {
return notificationGutsManager;
}
@Binds
NotifGutsViewManager bindNotifGutsViewManager(NotificationGutsManager notificationGutsManager);
/** Provides an instance of {@link VisualStabilityManager} */
@SysUISingleton
@@ -253,25 +242,13 @@ public interface NotificationsModule {
/** Provides an instance of {@link GroupMembershipManager} */
@SysUISingleton
@Provides
static GroupMembershipManager provideGroupMembershipManager(
NotifPipelineFlags notifPipelineFlags,
Lazy<NotificationGroupManagerLegacy> groupManagerLegacy) {
return notifPipelineFlags.isNewPipelineEnabled()
? new GroupMembershipManagerImpl()
: groupManagerLegacy.get();
static GroupMembershipManager provideGroupMembershipManager() {
return new GroupMembershipManagerImpl();
}
/** Provides an instance of {@link GroupExpansionManager} */
@SysUISingleton
@Provides
static GroupExpansionManager provideGroupExpansionManager(
NotifPipelineFlags notifPipelineFlags,
Lazy<GroupMembershipManager> groupMembershipManager,
Lazy<NotificationGroupManagerLegacy> groupManagerLegacy) {
return notifPipelineFlags.isNewPipelineEnabled()
? new GroupExpansionManagerImpl(groupMembershipManager.get())
: groupManagerLegacy.get();
}
@Binds
GroupExpansionManager provideGroupExpansionManager(GroupExpansionManagerImpl impl);
/** Initializes the notification data pipeline (can be disabled via config). */
@SysUISingleton
@@ -290,69 +267,28 @@ public interface NotificationsModule {
/**
* Provide the active notification collection managing the notifications to render.
*/
@Provides
@SysUISingleton
static CommonNotifCollection provideCommonNotifCollection(
NotifPipelineFlags notifPipelineFlags,
Lazy<NotifPipeline> pipeline,
NotificationEntryManager entryManager) {
return notifPipelineFlags.isNewPipelineEnabled()
? pipeline.get() : entryManager;
}
@Binds
CommonNotifCollection provideCommonNotifCollection(NotifPipeline pipeline);
/**
* Provide the object which can be used to obtain NotificationVisibility objects.
*/
@Binds
@SysUISingleton
NotificationVisibilityProvider provideNotificationVisibilityProvider(
NotificationVisibilityProviderImpl newProvider);
NotificationVisibilityProviderImpl impl);
/**
* Provide the active implementation for presenting notifications.
*/
@Provides
@SysUISingleton
static NotifShadeEventSource provideNotifShadeEventSource(
NotifPipelineFlags notifPipelineFlags,
Lazy<ShadeEventCoordinator> shadeEventCoordinatorLazy,
Lazy<LegacyNotificationPresenterExtensions> legacyNotificationPresenterExtensionsLazy) {
return notifPipelineFlags.isNewPipelineEnabled()
? shadeEventCoordinatorLazy.get()
: legacyNotificationPresenterExtensionsLazy.get();
}
@Binds
NotifShadeEventSource provideNotifShadeEventSource(ShadeEventCoordinator shadeEventCoordinator);
/**
* Provide a dismissal callback that's triggered when a user manually dismissed a notification
* from the notification shade or it gets auto-cancelled by click.
*/
@Provides
@SysUISingleton
static OnUserInteractionCallback provideOnUserInteractionCallback(
NotifPipelineFlags notifPipelineFlags,
HeadsUpManager headsUpManager,
StatusBarStateController statusBarStateController,
Lazy<NotifCollection> notifCollection,
Lazy<NotificationVisibilityProvider> visibilityProvider,
Lazy<VisualStabilityCoordinator> visualStabilityCoordinator,
NotificationEntryManager entryManager,
VisualStabilityManager visualStabilityManager,
Lazy<GroupMembershipManager> groupMembershipManagerLazy) {
return notifPipelineFlags.isNewPipelineEnabled()
? new OnUserInteractionCallbackImpl(
visibilityProvider.get(),
notifCollection.get(),
headsUpManager,
statusBarStateController,
visualStabilityCoordinator.get())
: new OnUserInteractionCallbackImplLegacy(
entryManager,
visibilityProvider.get(),
headsUpManager,
statusBarStateController,
visualStabilityManager,
groupMembershipManagerLazy.get());
}
@Binds
OnUserInteractionCallback provideOnUserInteractionCallback(OnUserInteractionCallbackImpl impl);
/** */
@Binds