Enforce Coordinator encapsulation w/ Dagger
This allows for marking Coordinators with @CoordinatorScope. Attempting to inject a Coordinator marked with this scope elsewhere in SysUI will result in a build error. This does *not* prevent marking Coordinators with @SysUISingleton, which would allow for injection elsewhere. Fixes: 204127880 Bug: 204468557 Test: mp droid Merged-In: Ie79d632eb150790e6a9580b2c955af861bb2d182 Change-Id: Ie79d632eb150790e6a9580b2c955af861bb2d182
This commit is contained in:
committed by
Jeff DeCew
parent
9a4112bfbb
commit
caeb5d278d
@@ -23,11 +23,11 @@ import android.service.notification.StatusBarNotification;
|
||||
|
||||
import com.android.systemui.ForegroundServiceController;
|
||||
import com.android.systemui.appops.AppOpsController;
|
||||
import com.android.systemui.dagger.SysUISingleton;
|
||||
import com.android.systemui.dagger.qualifiers.Main;
|
||||
import com.android.systemui.statusbar.notification.collection.ListEntry;
|
||||
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
||||
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope;
|
||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
|
||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner;
|
||||
import com.android.systemui.statusbar.notification.stack.NotificationPriorityBucketKt;
|
||||
@@ -48,7 +48,7 @@ import javax.inject.Inject;
|
||||
* frameworks/base/packages/SystemUI/src/com/android/systemui/ForegroundServiceNotificationListener
|
||||
* frameworks/base/packages/SystemUI/src/com/android/systemui/ForegroundServiceLifetimeExtender
|
||||
*/
|
||||
@SysUISingleton
|
||||
@CoordinatorScope
|
||||
public class AppOpsCoordinator implements Coordinator {
|
||||
private static final String TAG = "AppOpsCoordinator";
|
||||
|
||||
|
||||
@@ -16,10 +16,10 @@
|
||||
|
||||
package com.android.systemui.statusbar.notification.collection.coordinator;
|
||||
|
||||
import com.android.systemui.dagger.SysUISingleton;
|
||||
import com.android.systemui.statusbar.notification.collection.NotifCollection;
|
||||
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
||||
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope;
|
||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
|
||||
import com.android.systemui.statusbar.notification.collection.notifcollection.DismissedByUserStats;
|
||||
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifDismissInterceptor;
|
||||
@@ -53,7 +53,7 @@ import javax.inject.Inject;
|
||||
* respond to app-cancellations (ie: remove the bubble if the app cancels the notification).
|
||||
*
|
||||
*/
|
||||
@SysUISingleton
|
||||
@CoordinatorScope
|
||||
public class BubbleCoordinator implements Coordinator {
|
||||
private static final String TAG = "BubbleCoordinator";
|
||||
|
||||
|
||||
@@ -16,10 +16,10 @@
|
||||
|
||||
package com.android.systemui.statusbar.notification.collection.coordinator
|
||||
|
||||
import com.android.systemui.dagger.SysUISingleton
|
||||
import com.android.systemui.statusbar.notification.collection.ListEntry
|
||||
import com.android.systemui.statusbar.notification.collection.NotifPipeline
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry
|
||||
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope
|
||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifPromoter
|
||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner
|
||||
import com.android.systemui.statusbar.notification.collection.render.NodeController
|
||||
@@ -34,7 +34,7 @@ import javax.inject.Inject
|
||||
* - Elevates important conversation notifications
|
||||
* - Puts conversations into its own people section. @see [NotifCoordinators] for section ordering.
|
||||
*/
|
||||
@SysUISingleton
|
||||
@CoordinatorScope
|
||||
class ConversationCoordinator @Inject constructor(
|
||||
private val peopleNotificationIdentifier: PeopleNotificationIdentifier,
|
||||
@PeopleHeader peopleHeaderController: NodeController
|
||||
|
||||
@@ -23,9 +23,9 @@ import android.content.pm.PackageManager;
|
||||
import android.os.RemoteException;
|
||||
import android.service.notification.StatusBarNotification;
|
||||
|
||||
import com.android.systemui.dagger.SysUISingleton;
|
||||
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
||||
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope;
|
||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
|
||||
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
|
||||
|
||||
@@ -36,7 +36,7 @@ import javax.inject.Inject;
|
||||
* Special notifications with extra permissions and tags won't be filtered out even when the
|
||||
* device is unprovisioned.
|
||||
*/
|
||||
@SysUISingleton
|
||||
@CoordinatorScope
|
||||
public class DeviceProvisionedCoordinator implements Coordinator {
|
||||
private static final String TAG = "DeviceProvisionedCoordinator";
|
||||
|
||||
|
||||
@@ -17,17 +17,17 @@ package com.android.systemui.statusbar.notification.collection.coordinator
|
||||
|
||||
import android.util.ArraySet
|
||||
import com.android.systemui.Dumpable
|
||||
import com.android.systemui.dagger.SysUISingleton
|
||||
import com.android.systemui.dump.DumpManager
|
||||
import com.android.systemui.statusbar.notification.collection.ListEntry
|
||||
import com.android.systemui.statusbar.notification.collection.NotifPipeline
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry
|
||||
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope
|
||||
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifLifetimeExtender
|
||||
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifLifetimeExtender.OnEndLifetimeExtensionCallback
|
||||
import com.android.systemui.statusbar.notification.row.NotificationGuts
|
||||
import com.android.systemui.statusbar.notification.row.NotificationGutsManager
|
||||
import com.android.systemui.statusbar.notification.collection.render.NotifGutsViewListener
|
||||
import com.android.systemui.statusbar.notification.collection.render.NotifGutsViewManager
|
||||
import com.android.systemui.statusbar.notification.row.NotificationGuts
|
||||
import com.android.systemui.statusbar.notification.row.NotificationGutsManager
|
||||
import java.io.FileDescriptor
|
||||
import java.io.PrintWriter
|
||||
import javax.inject.Inject
|
||||
@@ -38,7 +38,7 @@ private const val TAG = "GutsCoordinator"
|
||||
* Coordinates the guts displayed by the [NotificationGutsManager] with the pipeline.
|
||||
* Specifically, this just adds the lifetime extension necessary to keep guts from disappearing.
|
||||
*/
|
||||
@SysUISingleton
|
||||
@CoordinatorScope
|
||||
class GutsCoordinator @Inject constructor(
|
||||
private val notifGutsViewManager: NotifGutsViewManager,
|
||||
private val logger: GutsCoordinatorLogger,
|
||||
|
||||
@@ -22,11 +22,11 @@ import static com.android.systemui.statusbar.notification.interruption.HeadsUpCo
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.systemui.dagger.SysUISingleton;
|
||||
import com.android.systemui.statusbar.NotificationRemoteInputManager;
|
||||
import com.android.systemui.statusbar.notification.collection.ListEntry;
|
||||
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
||||
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope;
|
||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifPromoter;
|
||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner;
|
||||
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
|
||||
@@ -57,7 +57,7 @@ import javax.inject.Inject;
|
||||
*
|
||||
* Note: The inflation callback in {@link PreparationCoordinator} handles showing HUNs.
|
||||
*/
|
||||
@SysUISingleton
|
||||
@CoordinatorScope
|
||||
public class HeadsUpCoordinator implements Coordinator {
|
||||
private static final String TAG = "HeadsUpCoordinator";
|
||||
|
||||
|
||||
@@ -20,13 +20,21 @@ import static com.android.systemui.statusbar.notification.collection.Notificatio
|
||||
|
||||
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
||||
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope;
|
||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
/**
|
||||
* Filters out notifications that have been dismissed locally (by the user) but that system server
|
||||
* hasn't yet confirmed the removal of.
|
||||
*/
|
||||
@CoordinatorScope
|
||||
public class HideLocallyDismissedNotifsCoordinator implements Coordinator {
|
||||
|
||||
@Inject
|
||||
HideLocallyDismissedNotifsCoordinator() { }
|
||||
|
||||
@Override
|
||||
public void attach(NotifPipeline pipeline) {
|
||||
pipeline.addPreGroupFilter(mFilter);
|
||||
|
||||
@@ -23,6 +23,7 @@ import com.android.systemui.statusbar.NotificationLockscreenUserManager;
|
||||
import com.android.systemui.statusbar.NotificationLockscreenUserManager.UserChangedListener;
|
||||
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
||||
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope;
|
||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@@ -37,6 +38,7 @@ import javax.inject.Inject;
|
||||
* TODO: The NotificationLockscreenUserManager currently maintains the list of active user profiles.
|
||||
* We should spin that off into a standalone section at some point.
|
||||
*/
|
||||
@CoordinatorScope
|
||||
public class HideNotifsForOtherUsersCoordinator implements Coordinator {
|
||||
private final NotificationLockscreenUserManager mLockscreenUserManager;
|
||||
private final SharedCoordinatorLogger mLogger;
|
||||
|
||||
@@ -34,13 +34,13 @@ import androidx.annotation.MainThread;
|
||||
import com.android.keyguard.KeyguardUpdateMonitor;
|
||||
import com.android.keyguard.KeyguardUpdateMonitorCallback;
|
||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
import com.android.systemui.dagger.SysUISingleton;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
|
||||
import com.android.systemui.statusbar.notification.collection.GroupEntry;
|
||||
import com.android.systemui.statusbar.notification.collection.ListEntry;
|
||||
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
||||
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope;
|
||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
|
||||
import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider;
|
||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||
@@ -50,7 +50,7 @@ import javax.inject.Inject;
|
||||
/**
|
||||
* Filters low priority and privacy-sensitive notifications from the lockscreen.
|
||||
*/
|
||||
@SysUISingleton
|
||||
@CoordinatorScope
|
||||
public class KeyguardCoordinator implements Coordinator {
|
||||
private static final String TAG = "KeyguardCoordinator";
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@ import static com.android.systemui.media.MediaDataManagerKt.isMediaNotification;
|
||||
import com.android.systemui.media.MediaFeatureFlag;
|
||||
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
||||
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope;
|
||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@@ -28,6 +29,7 @@ import javax.inject.Inject;
|
||||
/**
|
||||
* Coordinates hiding (filtering) of media notifications.
|
||||
*/
|
||||
@CoordinatorScope
|
||||
public class MediaCoordinator implements Coordinator {
|
||||
private static final String TAG = "MediaCoordinator";
|
||||
|
||||
|
||||
@@ -1,130 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2019 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.coordinator;
|
||||
|
||||
import com.android.systemui.Dumpable;
|
||||
import com.android.systemui.dagger.SysUISingleton;
|
||||
import com.android.systemui.dump.DumpManager;
|
||||
import com.android.systemui.flags.FeatureFlags;
|
||||
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
|
||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner;
|
||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.Pluggable;
|
||||
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
|
||||
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifLifetimeExtender;
|
||||
|
||||
import java.io.FileDescriptor;
|
||||
import java.io.PrintWriter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
/**
|
||||
* Handles the attachment of {@link Coordinator}s to the {@link NotifPipeline} so that the
|
||||
* Coordinators can register their respective callbacks.
|
||||
*/
|
||||
@SysUISingleton
|
||||
public class NotifCoordinators implements Dumpable {
|
||||
private static final String TAG = "NotifCoordinators";
|
||||
private final List<Coordinator> mCoordinators = new ArrayList<>();
|
||||
private final List<NotifSectioner> mOrderedSections = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* Creates all the coordinators.
|
||||
*/
|
||||
@Inject
|
||||
public NotifCoordinators(
|
||||
DumpManager dumpManager,
|
||||
FeatureFlags featureFlags,
|
||||
HideNotifsForOtherUsersCoordinator hideNotifsForOtherUsersCoordinator,
|
||||
KeyguardCoordinator keyguardCoordinator,
|
||||
RankingCoordinator rankingCoordinator,
|
||||
AppOpsCoordinator appOpsCoordinator,
|
||||
DeviceProvisionedCoordinator deviceProvisionedCoordinator,
|
||||
BubbleCoordinator bubbleCoordinator,
|
||||
HeadsUpCoordinator headsUpCoordinator,
|
||||
GutsCoordinator gutsCoordinator,
|
||||
ConversationCoordinator conversationCoordinator,
|
||||
PreparationCoordinator preparationCoordinator,
|
||||
MediaCoordinator mediaCoordinator,
|
||||
ShadeEventCoordinator shadeEventCoordinator,
|
||||
SmartspaceDedupingCoordinator smartspaceDedupingCoordinator,
|
||||
ViewConfigCoordinator viewConfigCoordinator,
|
||||
VisualStabilityCoordinator visualStabilityCoordinator,
|
||||
SensitiveContentCoordinator sensitiveContentCoordinator) {
|
||||
dumpManager.registerDumpable(TAG, this);
|
||||
|
||||
mCoordinators.add(new HideLocallyDismissedNotifsCoordinator());
|
||||
mCoordinators.add(hideNotifsForOtherUsersCoordinator);
|
||||
mCoordinators.add(keyguardCoordinator);
|
||||
mCoordinators.add(rankingCoordinator);
|
||||
mCoordinators.add(appOpsCoordinator);
|
||||
mCoordinators.add(deviceProvisionedCoordinator);
|
||||
mCoordinators.add(bubbleCoordinator);
|
||||
mCoordinators.add(conversationCoordinator);
|
||||
mCoordinators.add(mediaCoordinator);
|
||||
mCoordinators.add(shadeEventCoordinator);
|
||||
mCoordinators.add(viewConfigCoordinator);
|
||||
mCoordinators.add(visualStabilityCoordinator);
|
||||
mCoordinators.add(sensitiveContentCoordinator);
|
||||
|
||||
if (featureFlags.isSmartspaceDedupingEnabled()) {
|
||||
mCoordinators.add(smartspaceDedupingCoordinator);
|
||||
}
|
||||
|
||||
if (featureFlags.isNewNotifPipelineRenderingEnabled()) {
|
||||
mCoordinators.add(headsUpCoordinator);
|
||||
mCoordinators.add(gutsCoordinator);
|
||||
mCoordinators.add(preparationCoordinator);
|
||||
}
|
||||
|
||||
// Manually add Ordered Sections
|
||||
// HeadsUp > FGS > People > Alerting > Silent > Unknown/Default
|
||||
if (featureFlags.isNewNotifPipelineRenderingEnabled()) {
|
||||
mOrderedSections.add(headsUpCoordinator.getSectioner()); // HeadsUp
|
||||
}
|
||||
mOrderedSections.add(appOpsCoordinator.getSectioner()); // ForegroundService
|
||||
mOrderedSections.add(conversationCoordinator.getSectioner()); // People
|
||||
mOrderedSections.add(rankingCoordinator.getAlertingSectioner()); // Alerting
|
||||
mOrderedSections.add(rankingCoordinator.getSilentSectioner()); // Silent
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends the pipeline to each coordinator when the pipeline is ready to accept
|
||||
* {@link Pluggable}s, {@link NotifCollectionListener}s and {@link NotifLifetimeExtender}s.
|
||||
*/
|
||||
public void attach(NotifPipeline pipeline) {
|
||||
for (Coordinator c : mCoordinators) {
|
||||
c.attach(pipeline);
|
||||
}
|
||||
|
||||
pipeline.setSections(mOrderedSections);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
|
||||
pw.println();
|
||||
pw.println(TAG + ":");
|
||||
for (Coordinator c : mCoordinators) {
|
||||
pw.println("\t" + c.getClass());
|
||||
}
|
||||
|
||||
for (NotifSectioner s : mOrderedSections) {
|
||||
pw.println("\t" + s.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
/*
|
||||
* Copyright (C) 2019 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.coordinator
|
||||
|
||||
import com.android.systemui.Dumpable
|
||||
import com.android.systemui.dump.DumpManager
|
||||
import com.android.systemui.flags.FeatureFlags
|
||||
import com.android.systemui.statusbar.notification.collection.NotifPipeline
|
||||
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope
|
||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner
|
||||
import java.io.FileDescriptor
|
||||
import java.io.PrintWriter
|
||||
import java.util.ArrayList
|
||||
import javax.inject.Inject
|
||||
|
||||
/**
|
||||
* Handles the attachment of [Coordinator]s to the [NotifPipeline] so that the
|
||||
* Coordinators can register their respective callbacks.
|
||||
*/
|
||||
interface NotifCoordinators : Coordinator, Dumpable
|
||||
|
||||
@CoordinatorScope
|
||||
class NotifCoordinatorsImpl @Inject constructor(
|
||||
dumpManager: DumpManager,
|
||||
featureFlags: FeatureFlags,
|
||||
hideLocallyDismissedNotifsCoordinator: HideLocallyDismissedNotifsCoordinator,
|
||||
hideNotifsForOtherUsersCoordinator: HideNotifsForOtherUsersCoordinator,
|
||||
keyguardCoordinator: KeyguardCoordinator,
|
||||
rankingCoordinator: RankingCoordinator,
|
||||
appOpsCoordinator: AppOpsCoordinator,
|
||||
deviceProvisionedCoordinator: DeviceProvisionedCoordinator,
|
||||
bubbleCoordinator: BubbleCoordinator,
|
||||
headsUpCoordinator: HeadsUpCoordinator,
|
||||
gutsCoordinator: GutsCoordinator,
|
||||
conversationCoordinator: ConversationCoordinator,
|
||||
preparationCoordinator: PreparationCoordinator,
|
||||
mediaCoordinator: MediaCoordinator,
|
||||
shadeEventCoordinator: ShadeEventCoordinator,
|
||||
smartspaceDedupingCoordinator: SmartspaceDedupingCoordinator,
|
||||
viewConfigCoordinator: ViewConfigCoordinator,
|
||||
visualStabilityCoordinator: VisualStabilityCoordinator,
|
||||
sensitiveContentCoordinator: SensitiveContentCoordinator
|
||||
) : NotifCoordinators {
|
||||
|
||||
private val mCoordinators: MutableList<Coordinator> = ArrayList()
|
||||
private val mOrderedSections: MutableList<NotifSectioner> = ArrayList()
|
||||
|
||||
/**
|
||||
* Creates all the coordinators.
|
||||
*/
|
||||
init {
|
||||
dumpManager.registerDumpable(TAG, this)
|
||||
mCoordinators.add(hideLocallyDismissedNotifsCoordinator)
|
||||
mCoordinators.add(hideNotifsForOtherUsersCoordinator)
|
||||
mCoordinators.add(keyguardCoordinator)
|
||||
mCoordinators.add(rankingCoordinator)
|
||||
mCoordinators.add(appOpsCoordinator)
|
||||
mCoordinators.add(deviceProvisionedCoordinator)
|
||||
mCoordinators.add(bubbleCoordinator)
|
||||
mCoordinators.add(conversationCoordinator)
|
||||
mCoordinators.add(mediaCoordinator)
|
||||
mCoordinators.add(shadeEventCoordinator)
|
||||
mCoordinators.add(viewConfigCoordinator)
|
||||
mCoordinators.add(visualStabilityCoordinator)
|
||||
mCoordinators.add(sensitiveContentCoordinator)
|
||||
if (featureFlags.isSmartspaceDedupingEnabled) {
|
||||
mCoordinators.add(smartspaceDedupingCoordinator)
|
||||
}
|
||||
if (featureFlags.isNewNotifPipelineRenderingEnabled) {
|
||||
mCoordinators.add(headsUpCoordinator)
|
||||
mCoordinators.add(gutsCoordinator)
|
||||
mCoordinators.add(preparationCoordinator)
|
||||
}
|
||||
|
||||
// Manually add Ordered Sections
|
||||
// HeadsUp > FGS > People > Alerting > Silent > Unknown/Default
|
||||
if (featureFlags.isNewNotifPipelineRenderingEnabled) {
|
||||
mOrderedSections.add(headsUpCoordinator.sectioner) // HeadsUp
|
||||
}
|
||||
mOrderedSections.add(appOpsCoordinator.sectioner) // ForegroundService
|
||||
mOrderedSections.add(conversationCoordinator.sectioner) // People
|
||||
mOrderedSections.add(rankingCoordinator.alertingSectioner) // Alerting
|
||||
mOrderedSections.add(rankingCoordinator.silentSectioner) // Silent
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends the pipeline to each coordinator when the pipeline is ready to accept
|
||||
* [Pluggable]s, [NotifCollectionListener]s and [NotifLifetimeExtender]s.
|
||||
*/
|
||||
override fun attach(pipeline: NotifPipeline) {
|
||||
for (c in mCoordinators) {
|
||||
c.attach(pipeline)
|
||||
}
|
||||
pipeline.setSections(mOrderedSections)
|
||||
}
|
||||
|
||||
override fun dump(fd: FileDescriptor, pw: PrintWriter, args: Array<String>) {
|
||||
pw.println()
|
||||
pw.println("$TAG:")
|
||||
for (c in mCoordinators) {
|
||||
pw.println("\t${c.javaClass}")
|
||||
}
|
||||
for (s in mOrderedSections) {
|
||||
pw.println("\t${s.name}")
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val TAG = "NotifCoordinators"
|
||||
}
|
||||
}
|
||||
@@ -57,6 +57,7 @@ import javax.inject.Inject;
|
||||
* If a notification was uninflated, this coordinator will filter the notification out from the
|
||||
* {@link ShadeListBuilder} until it is inflated.
|
||||
*/
|
||||
// TODO(b/204468557): Move to @CoordinatorScope
|
||||
@SysUISingleton
|
||||
public class PreparationCoordinator implements Coordinator {
|
||||
private static final String TAG = "PreparationCoordinator";
|
||||
|
||||
@@ -19,11 +19,11 @@ package com.android.systemui.statusbar.notification.collection.coordinator;
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
|
||||
import com.android.systemui.dagger.SysUISingleton;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.statusbar.notification.collection.ListEntry;
|
||||
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
||||
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope;
|
||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
|
||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner;
|
||||
import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider;
|
||||
@@ -44,7 +44,7 @@ import javax.inject.Inject;
|
||||
* - whether the notification's app is suspended or hiding its notifications
|
||||
* - whether DND settings are hiding notifications from ambient display or the notification list
|
||||
*/
|
||||
@SysUISingleton
|
||||
@CoordinatorScope
|
||||
public class RankingCoordinator implements Coordinator {
|
||||
public static final boolean SHOW_ALL_SECTIONS = false;
|
||||
private final StatusBarStateController mStatusBarStateController;
|
||||
|
||||
@@ -17,13 +17,13 @@
|
||||
package com.android.systemui.statusbar.notification.collection.coordinator
|
||||
|
||||
import android.os.UserHandle
|
||||
import com.android.systemui.dagger.SysUISingleton
|
||||
import com.android.systemui.statusbar.NotificationLockscreenUserManager
|
||||
import com.android.systemui.statusbar.notification.DynamicPrivacyController
|
||||
import com.android.systemui.statusbar.notification.collection.GroupEntry
|
||||
import com.android.systemui.statusbar.notification.collection.ListEntry
|
||||
import com.android.systemui.statusbar.notification.collection.NotifPipeline
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry
|
||||
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope
|
||||
import com.android.systemui.statusbar.notification.collection.listbuilder.OnBeforeRenderListListener
|
||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.Invalidator
|
||||
import dagger.Module
|
||||
@@ -32,7 +32,7 @@ import dagger.Provides
|
||||
@Module
|
||||
object SensitiveContentCoordinatorModule {
|
||||
@Provides
|
||||
@SysUISingleton
|
||||
@CoordinatorScope
|
||||
fun provideCoordinator(
|
||||
dynamicPrivacyController: DynamicPrivacyController,
|
||||
lockscreenUserManager: NotificationLockscreenUserManager
|
||||
|
||||
@@ -29,6 +29,7 @@ import javax.inject.Inject
|
||||
* A coordinator which provides callbacks to a view surfaces for various events relevant to the
|
||||
* shade, such as when the user removes a notification, or when the shade is emptied.
|
||||
*/
|
||||
// TODO(b/204468557): Move to @CoordinatorScope
|
||||
@SysUISingleton
|
||||
class ShadeEventCoordinator @Inject internal constructor(
|
||||
private val mLogger: ShadeEventCoordinatorLogger
|
||||
|
||||
@@ -18,7 +18,6 @@ package com.android.systemui.statusbar.notification.collection.coordinator
|
||||
|
||||
import android.app.smartspace.SmartspaceTarget
|
||||
import android.os.Parcelable
|
||||
import com.android.systemui.dagger.SysUISingleton
|
||||
import com.android.systemui.dagger.qualifiers.Main
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController
|
||||
import com.android.systemui.statusbar.NotificationLockscreenUserManager
|
||||
@@ -28,6 +27,7 @@ import com.android.systemui.statusbar.lockscreen.LockscreenSmartspaceController
|
||||
import com.android.systemui.statusbar.notification.NotificationEntryManager
|
||||
import com.android.systemui.statusbar.notification.collection.NotifPipeline
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry
|
||||
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope
|
||||
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter
|
||||
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener
|
||||
import com.android.systemui.util.concurrency.DelayableExecutor
|
||||
@@ -45,7 +45,7 @@ import javax.inject.Inject
|
||||
*/
|
||||
// This class is a singleton so that the same instance can be accessed by both the old and new
|
||||
// pipelines
|
||||
@SysUISingleton
|
||||
@CoordinatorScope
|
||||
class SmartspaceDedupingCoordinator @Inject constructor(
|
||||
private val statusBarStateController: SysuiStatusBarStateController,
|
||||
private val smartspaceController: LockscreenSmartspaceController,
|
||||
|
||||
@@ -19,11 +19,11 @@ package com.android.systemui.statusbar.notification.collection.coordinator
|
||||
import com.android.internal.widget.MessagingGroup
|
||||
import com.android.internal.widget.MessagingMessage
|
||||
import com.android.keyguard.KeyguardUpdateMonitor
|
||||
import com.android.systemui.dagger.SysUISingleton
|
||||
import com.android.systemui.flags.FeatureFlags
|
||||
import com.android.systemui.statusbar.NotificationLockscreenUserManager.UserChangedListener
|
||||
import com.android.systemui.statusbar.NotificationLockscreenUserManagerImpl
|
||||
import com.android.systemui.statusbar.notification.collection.NotifPipeline
|
||||
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope
|
||||
import com.android.systemui.statusbar.notification.row.NotificationGutsManager
|
||||
import com.android.systemui.statusbar.policy.ConfigurationController
|
||||
import javax.inject.Inject
|
||||
@@ -33,7 +33,7 @@ import javax.inject.Inject
|
||||
* for the current uiMode and screen properties; additionally deferring those changes when a user
|
||||
* change is in progress until that process has completed.
|
||||
*/
|
||||
@SysUISingleton
|
||||
@CoordinatorScope
|
||||
class ViewConfigCoordinator @Inject internal constructor(
|
||||
configurationController: ConfigurationController,
|
||||
lockscreenUserManager: NotificationLockscreenUserManagerImpl,
|
||||
|
||||
@@ -50,6 +50,7 @@ import javax.inject.Inject;
|
||||
* This is now integrated in the data-layer via
|
||||
* {@link com.android.systemui.statusbar.notification.collection.ShadeListBuilder}.
|
||||
*/
|
||||
// TODO(b/204468557): Move to @CoordinatorScope
|
||||
@SysUISingleton
|
||||
public class VisualStabilityCoordinator implements Coordinator {
|
||||
private final DelayableExecutor mDelayableExecutor;
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
* Copyright (C) 2021 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.coordinator.dagger
|
||||
|
||||
import com.android.systemui.dagger.SysUISingleton
|
||||
import com.android.systemui.statusbar.notification.collection.coordinator.NotifCoordinators
|
||||
import com.android.systemui.statusbar.notification.collection.coordinator.NotifCoordinatorsImpl
|
||||
import com.android.systemui.statusbar.notification.collection.coordinator.SensitiveContentCoordinatorModule
|
||||
import dagger.Binds
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import dagger.Subcomponent
|
||||
import javax.inject.Qualifier
|
||||
import javax.inject.Scope
|
||||
|
||||
@Module(subcomponents = [CoordinatorsSubcomponent::class])
|
||||
object CoordinatorsModule {
|
||||
@SysUISingleton
|
||||
@Provides
|
||||
fun notifCoordinators(factory: CoordinatorsSubcomponent.Factory): NotifCoordinators =
|
||||
factory.create().notifCoordinators
|
||||
}
|
||||
|
||||
@CoordinatorScope
|
||||
@Subcomponent(modules = [InternalCoordinatorsModule::class])
|
||||
interface CoordinatorsSubcomponent {
|
||||
@get:Internal val notifCoordinators: NotifCoordinators
|
||||
|
||||
@Subcomponent.Factory
|
||||
interface Factory {
|
||||
fun create(): CoordinatorsSubcomponent
|
||||
}
|
||||
}
|
||||
|
||||
@Module(includes = [SensitiveContentCoordinatorModule::class])
|
||||
private abstract class InternalCoordinatorsModule {
|
||||
@Binds
|
||||
@Internal
|
||||
abstract fun bindNotifCoordinators(impl: NotifCoordinatorsImpl): NotifCoordinators
|
||||
}
|
||||
|
||||
@Qualifier
|
||||
@MustBeDocumented
|
||||
@Retention(AnnotationRetention.RUNTIME)
|
||||
private annotation class Internal
|
||||
|
||||
@Scope
|
||||
@MustBeDocumented
|
||||
@Retention(AnnotationRetention.RUNTIME)
|
||||
annotation class CoordinatorScope
|
||||
@@ -45,9 +45,9 @@ import com.android.systemui.statusbar.notification.NotificationEntryManagerLogge
|
||||
import com.android.systemui.statusbar.notification.collection.NotifCollection;
|
||||
import com.android.systemui.statusbar.notification.collection.NotifInflaterImpl;
|
||||
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
|
||||
import com.android.systemui.statusbar.notification.collection.coordinator.SensitiveContentCoordinatorModule;
|
||||
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.NotifInflater;
|
||||
import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinder;
|
||||
import com.android.systemui.statusbar.notification.collection.inflation.OnUserInteractionCallbackImpl;
|
||||
@@ -96,7 +96,7 @@ import dagger.Provides;
|
||||
*/
|
||||
@Module(includes = {
|
||||
NotificationSectionHeadersModule.class,
|
||||
SensitiveContentCoordinatorModule.class
|
||||
CoordinatorsModule.class
|
||||
})
|
||||
public interface NotificationsModule {
|
||||
@Binds
|
||||
|
||||
Reference in New Issue
Block a user