diff options
| author | 2022-07-14 13:34:20 +0000 | |
|---|---|---|
| committer | 2022-07-14 13:34:20 +0000 | |
| commit | 65fa9cd02ffe340f83aabf56dec87f164b07254a (patch) | |
| tree | 25c7cb311ca445a4c6dd53ad7119e9b498d5ae6c | |
| parent | 6d097222e7a3753a8b8ff4ba80547b7ff14c3f1a (diff) | |
| parent | df9ec806d2b5c58210955462a254168c8f8618d3 (diff) | |
Merge "Inline notif pipeline flag in NotificationsModule" into tm-qpr-dev
6 files changed, 28 insertions, 308 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/OnUserInteractionCallbackImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/OnUserInteractionCallbackImpl.java index 7dd3672a6e30..a7719d3d82a4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/OnUserInteractionCallbackImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/OnUserInteractionCallbackImpl.java @@ -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, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/legacy/LegacyNotificationPresenterExtensions.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/legacy/LegacyNotificationPresenterExtensions.java deleted file mode 100644 index bdbb0eb48e8a..000000000000 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/legacy/LegacyNotificationPresenterExtensions.java +++ /dev/null @@ -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(); - } -} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/legacy/OnUserInteractionCallbackImplLegacy.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/legacy/OnUserInteractionCallbackImplLegacy.java deleted file mode 100644 index 103b14b09e9c..000000000000 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/legacy/OnUserInteractionCallbackImplLegacy.java +++ /dev/null @@ -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); - } -} - diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/provider/NotificationVisibilityProviderImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/provider/NotificationVisibilityProviderImpl.kt index 6a1e36f4f469..ec10aaf3cfe3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/provider/NotificationVisibilityProviderImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/provider/NotificationVisibilityProviderImpl.kt @@ -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 -}
\ No newline at end of file +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/GroupExpansionManagerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/GroupExpansionManagerImpl.java index a2cb9509a621..1b3f83d1892f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/GroupExpansionManagerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/GroupExpansionManagerImpl.java @@ -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; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java index 27a7cd779405..d838252aa362 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java @@ -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 |