Expand NotificationsModule
This CL is the 1st in the series of CLs which intend to "unbind" StatusBar on TV. In order to make StatusBar really optional and thus to allow us to unbind it, we also need to make some of the classes that depends on it optional as well. For all these cases we need to move from @Inject-annotated contructors to @Provides annotated methods. For this we are expanding NotificationsModule. Change-Id: Icccafd2170f2fdffb8412370056aab7042ffd580 Test: make SystemUI; make CarSystemUI; atest SystemUITests Bug: 146188087
This commit is contained in:
@@ -29,6 +29,7 @@ import com.android.systemui.stackdivider.Divider;
|
||||
import com.android.systemui.statusbar.car.CarStatusBar;
|
||||
import com.android.systemui.statusbar.car.CarStatusBarModule;
|
||||
import com.android.systemui.statusbar.notification.InstantAppNotifier;
|
||||
import com.android.systemui.statusbar.notification.dagger.NotificationsModule;
|
||||
import com.android.systemui.statusbar.phone.StatusBar;
|
||||
import com.android.systemui.statusbar.tv.TvStatusBar;
|
||||
import com.android.systemui.theme.ThemeOverlayController;
|
||||
@@ -42,7 +43,7 @@ import dagger.multibindings.ClassKey;
|
||||
import dagger.multibindings.IntoMap;
|
||||
|
||||
/** Binder for car specific {@link SystemUI} modules. */
|
||||
@Module(includes = {RecentsModule.class, CarStatusBarModule.class})
|
||||
@Module(includes = {RecentsModule.class, CarStatusBarModule.class, NotificationsModule.class})
|
||||
public abstract class CarSystemUIBinder {
|
||||
/** Inject into AuthController. */
|
||||
@Binds
|
||||
|
||||
@@ -33,6 +33,7 @@ import com.android.systemui.recents.RecentsModule;
|
||||
import com.android.systemui.shortcut.ShortcutKeyDispatcher;
|
||||
import com.android.systemui.stackdivider.Divider;
|
||||
import com.android.systemui.statusbar.notification.InstantAppNotifier;
|
||||
import com.android.systemui.statusbar.notification.dagger.NotificationsModule;
|
||||
import com.android.systemui.statusbar.phone.StatusBar;
|
||||
import com.android.systemui.statusbar.phone.StatusBarModule;
|
||||
import com.android.systemui.statusbar.tv.TvStatusBar;
|
||||
@@ -49,7 +50,7 @@ import dagger.multibindings.IntoMap;
|
||||
/**
|
||||
* SystemUI objects that are injectable should go here.
|
||||
*/
|
||||
@Module(includes = {RecentsModule.class, StatusBarModule.class})
|
||||
@Module(includes = {RecentsModule.class, StatusBarModule.class, NotificationsModule.class})
|
||||
public abstract class SystemUIBinder {
|
||||
/** Inject into AuthController. */
|
||||
@Binds
|
||||
|
||||
@@ -35,10 +35,8 @@ import com.android.systemui.statusbar.BlurUtils;
|
||||
import com.android.systemui.statusbar.CommandQueue;
|
||||
import com.android.systemui.statusbar.NotificationShadeWindowBlurController;
|
||||
import com.android.systemui.statusbar.SysuiStatusBarStateController;
|
||||
import com.android.systemui.statusbar.notification.NotificationEntryManager;
|
||||
import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinder;
|
||||
import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinderImpl;
|
||||
import com.android.systemui.statusbar.notification.dagger.NotificationsModule;
|
||||
import com.android.systemui.statusbar.notification.people.PeopleHubModule;
|
||||
import com.android.systemui.statusbar.notification.row.dagger.ExpandableNotificationRowComponent;
|
||||
import com.android.systemui.statusbar.notification.row.dagger.NotificationRowComponent;
|
||||
@@ -69,7 +67,6 @@ import dagger.Provides;
|
||||
AssistModule.class,
|
||||
ConcurrencyModule.class,
|
||||
LogModule.class,
|
||||
NotificationsModule.class,
|
||||
PeopleHubModule.class,
|
||||
},
|
||||
subcomponents = {StatusBarComponent.class,
|
||||
|
||||
@@ -28,13 +28,10 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.statusbar.NotificationListener;
|
||||
import com.android.systemui.statusbar.NotificationRemoteInputManager;
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
||||
import com.android.systemui.statusbar.notification.dagger.NotificationsModule;
|
||||
import com.android.systemui.statusbar.policy.HeadsUpManager;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
/** Handles heads-up and pulsing behavior driven by notification changes. */
|
||||
@Singleton
|
||||
public class NotificationAlertingManager {
|
||||
|
||||
private static final String TAG = "NotifAlertManager";
|
||||
@@ -47,7 +44,9 @@ public class NotificationAlertingManager {
|
||||
|
||||
private HeadsUpManager mHeadsUpManager;
|
||||
|
||||
@Inject
|
||||
/**
|
||||
* Injected constructor. See {@link NotificationsModule}.
|
||||
*/
|
||||
public NotificationAlertingManager(
|
||||
NotificationEntryManager notificationEntryManager,
|
||||
NotificationRemoteInputManager remoteInputManager,
|
||||
|
||||
@@ -47,6 +47,7 @@ import com.android.systemui.statusbar.notification.collection.NotificationRankin
|
||||
import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinder;
|
||||
import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
|
||||
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
|
||||
import com.android.systemui.statusbar.notification.dagger.NotificationsModule;
|
||||
import com.android.systemui.statusbar.notification.logging.NotificationLogger;
|
||||
import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
|
||||
import com.android.systemui.statusbar.phone.NotificationGroupManager;
|
||||
@@ -64,9 +65,6 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import dagger.Lazy;
|
||||
|
||||
/**
|
||||
@@ -94,7 +92,6 @@ import dagger.Lazy;
|
||||
* aware of
|
||||
* @see #getActiveNotificationsForCurrentUser() to see every notification that the current user owns
|
||||
*/
|
||||
@Singleton
|
||||
public class NotificationEntryManager implements
|
||||
CommonNotifCollection,
|
||||
Dumpable,
|
||||
@@ -181,7 +178,9 @@ public class NotificationEntryManager implements
|
||||
}
|
||||
}
|
||||
|
||||
@Inject
|
||||
/**
|
||||
* Injected constructor. See {@link NotificationsModule}.
|
||||
*/
|
||||
public NotificationEntryManager(
|
||||
NotificationEntryManagerLogger logger,
|
||||
NotificationGroupManager groupManager,
|
||||
|
||||
@@ -26,6 +26,7 @@ import com.android.systemui.Dumpable;
|
||||
import com.android.systemui.dagger.qualifiers.Main;
|
||||
import com.android.systemui.statusbar.NotificationPresenter;
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
||||
import com.android.systemui.statusbar.notification.dagger.NotificationsModule;
|
||||
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
|
||||
import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
|
||||
|
||||
@@ -33,14 +34,10 @@ import java.io.FileDescriptor;
|
||||
import java.io.PrintWriter;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
/**
|
||||
* A manager that ensures that notifications are visually stable. It will suppress reorderings
|
||||
* and reorder at the right time when they are out of view.
|
||||
*/
|
||||
@Singleton
|
||||
public class VisualStabilityManager implements OnHeadsUpChangedListener, Dumpable {
|
||||
|
||||
private static final long TEMPORARY_REORDERING_ALLOWED_DURATION = 1000;
|
||||
@@ -60,7 +57,9 @@ public class VisualStabilityManager implements OnHeadsUpChangedListener, Dumpabl
|
||||
private ArraySet<View> mAddedChildren = new ArraySet<>();
|
||||
private boolean mPulsing;
|
||||
|
||||
@Inject
|
||||
/**
|
||||
* Injected constructor. See {@link NotificationsModule}.
|
||||
*/
|
||||
public VisualStabilityManager(
|
||||
NotificationEntryManager notificationEntryManager, @Main Handler handler) {
|
||||
|
||||
|
||||
@@ -17,15 +17,39 @@
|
||||
package com.android.systemui.statusbar.notification.dagger;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Handler;
|
||||
import android.view.accessibility.AccessibilityManager;
|
||||
|
||||
import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.dagger.qualifiers.Main;
|
||||
import com.android.systemui.dagger.qualifiers.UiBackground;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.statusbar.FeatureFlags;
|
||||
import com.android.systemui.statusbar.NotificationListener;
|
||||
import com.android.systemui.statusbar.NotificationRemoteInputManager;
|
||||
import com.android.systemui.statusbar.notification.ForegroundServiceDismissalFeatureController;
|
||||
import com.android.systemui.statusbar.notification.NotificationAlertingManager;
|
||||
import com.android.systemui.statusbar.notification.NotificationEntryManager;
|
||||
import com.android.systemui.statusbar.notification.NotificationEntryManagerLogger;
|
||||
import com.android.systemui.statusbar.notification.NotificationInterruptionStateProvider;
|
||||
import com.android.systemui.statusbar.notification.VisualStabilityManager;
|
||||
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationRankingManager;
|
||||
import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinder;
|
||||
import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
|
||||
import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider;
|
||||
import com.android.systemui.statusbar.notification.init.NotificationsController;
|
||||
import com.android.systemui.statusbar.notification.init.NotificationsControllerImpl;
|
||||
import com.android.systemui.statusbar.notification.init.NotificationsControllerStub;
|
||||
import com.android.systemui.statusbar.notification.logging.NotificationLogger;
|
||||
import com.android.systemui.statusbar.notification.row.NotificationBlockingHelperManager;
|
||||
import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
|
||||
import com.android.systemui.statusbar.phone.NotificationGroupManager;
|
||||
import com.android.systemui.statusbar.phone.StatusBar;
|
||||
import com.android.systemui.util.leak.LeakDetector;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
@@ -33,9 +57,111 @@ import dagger.Lazy;
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
|
||||
/** Module for classes related to the notifications data pipeline */
|
||||
/**
|
||||
* Dagger Module for classes found within the com.android.systemui.statusbar.notification package.
|
||||
*/
|
||||
@Module
|
||||
public class NotificationsModule {
|
||||
public interface NotificationsModule {
|
||||
/** Provides an instance of {@link NotificationEntryManager} */
|
||||
@Singleton
|
||||
@Provides
|
||||
static NotificationEntryManager provideNotificationEntryManager(
|
||||
NotificationEntryManagerLogger logger,
|
||||
NotificationGroupManager groupManager,
|
||||
NotificationRankingManager rankingManager,
|
||||
NotificationEntryManager.KeyguardEnvironment keyguardEnvironment,
|
||||
FeatureFlags featureFlags,
|
||||
Lazy<NotificationRowBinder> notificationRowBinderLazy,
|
||||
Lazy<NotificationRemoteInputManager> notificationRemoteInputManagerLazy,
|
||||
LeakDetector leakDetector,
|
||||
ForegroundServiceDismissalFeatureController fgsFeatureController) {
|
||||
return new NotificationEntryManager(
|
||||
logger,
|
||||
groupManager,
|
||||
rankingManager,
|
||||
keyguardEnvironment,
|
||||
featureFlags,
|
||||
notificationRowBinderLazy,
|
||||
notificationRemoteInputManagerLazy,
|
||||
leakDetector,
|
||||
fgsFeatureController);
|
||||
}
|
||||
|
||||
/** Provides an instance of {@link NotificationGutsManager} */
|
||||
@Singleton
|
||||
@Provides
|
||||
static NotificationGutsManager provideNotificationGutsManager(
|
||||
Context context,
|
||||
VisualStabilityManager visualStabilityManager,
|
||||
Lazy<StatusBar> statusBarLazy,
|
||||
@Main Handler mainHandler,
|
||||
AccessibilityManager accessibilityManager,
|
||||
HighPriorityProvider highPriorityProvider) {
|
||||
return new NotificationGutsManager(
|
||||
context,
|
||||
visualStabilityManager,
|
||||
statusBarLazy,
|
||||
mainHandler,
|
||||
accessibilityManager,
|
||||
highPriorityProvider);
|
||||
}
|
||||
|
||||
/** Provides an instance of {@link VisualStabilityManager} */
|
||||
@Singleton
|
||||
@Provides
|
||||
static VisualStabilityManager provideVisualStabilityManager(
|
||||
NotificationEntryManager notificationEntryManager, Handler handler) {
|
||||
return new VisualStabilityManager(notificationEntryManager, handler);
|
||||
}
|
||||
|
||||
/** Provides an instance of {@link NotificationAlertingManager} */
|
||||
@Singleton
|
||||
@Provides
|
||||
static NotificationAlertingManager provideNotificationAlertingManager(
|
||||
NotificationEntryManager notificationEntryManager,
|
||||
NotificationRemoteInputManager remoteInputManager,
|
||||
VisualStabilityManager visualStabilityManager,
|
||||
StatusBarStateController statusBarStateController,
|
||||
NotificationInterruptionStateProvider notificationInterruptionStateProvider,
|
||||
NotificationListener notificationListener) {
|
||||
return new NotificationAlertingManager(
|
||||
notificationEntryManager,
|
||||
remoteInputManager,
|
||||
visualStabilityManager,
|
||||
statusBarStateController,
|
||||
notificationInterruptionStateProvider,
|
||||
notificationListener);
|
||||
}
|
||||
|
||||
/** Provides an instance of {@link NotificationLogger} */
|
||||
@Singleton
|
||||
@Provides
|
||||
static NotificationLogger provideNotificationLogger(
|
||||
NotificationListener notificationListener,
|
||||
@UiBackground Executor uiBgExecutor,
|
||||
NotificationEntryManager entryManager,
|
||||
StatusBarStateController statusBarStateController,
|
||||
NotificationLogger.ExpansionStateLogger expansionStateLogger) {
|
||||
return new NotificationLogger(
|
||||
notificationListener,
|
||||
uiBgExecutor,
|
||||
entryManager,
|
||||
statusBarStateController,
|
||||
expansionStateLogger);
|
||||
}
|
||||
|
||||
/** Provides an instance of {@link NotificationBlockingHelperManager} */
|
||||
@Singleton
|
||||
@Provides
|
||||
static NotificationBlockingHelperManager provideNotificationBlockingHelperManager(
|
||||
Context context,
|
||||
NotificationGutsManager notificationGutsManager,
|
||||
NotificationEntryManager notificationEntryManager,
|
||||
MetricsLogger metricsLogger) {
|
||||
return new NotificationBlockingHelperManager(
|
||||
context, notificationGutsManager, notificationEntryManager, metricsLogger);
|
||||
}
|
||||
|
||||
/** Initializes the notification data pipeline (can be disabled via config). */
|
||||
@Singleton
|
||||
@Provides
|
||||
@@ -55,7 +181,7 @@ public class NotificationsModule {
|
||||
*/
|
||||
@Provides
|
||||
@Singleton
|
||||
public CommonNotifCollection provideCommonNotifCollection(
|
||||
static CommonNotifCollection provideCommonNotifCollection(
|
||||
FeatureFlags featureFlags,
|
||||
Lazy<NotifPipeline> pipeline,
|
||||
NotificationEntryManager entryManager) {
|
||||
|
||||
@@ -39,6 +39,7 @@ import com.android.systemui.statusbar.NotificationListener;
|
||||
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.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;
|
||||
@@ -50,13 +51,11 @@ import java.util.Map;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
/**
|
||||
* Handles notification logging, in particular, logging which notifications are visible and which
|
||||
* are not.
|
||||
*/
|
||||
@Singleton
|
||||
public class NotificationLogger implements StateListener {
|
||||
private static final String TAG = "NotificationLogger";
|
||||
|
||||
@@ -192,7 +191,9 @@ public class NotificationLogger implements StateListener {
|
||||
}
|
||||
}
|
||||
|
||||
@Inject
|
||||
/**
|
||||
* Injected constructor. See {@link NotificationsModule}.
|
||||
*/
|
||||
public NotificationLogger(NotificationListener notificationListener,
|
||||
@UiBackground Executor uiBgExecutor,
|
||||
NotificationEntryManager entryManager,
|
||||
|
||||
@@ -16,8 +16,7 @@
|
||||
|
||||
package com.android.systemui.statusbar.notification.row;
|
||||
|
||||
import static android.service.notification.NotificationListenerService.Ranking
|
||||
.USER_SENTIMENT_NEGATIVE;
|
||||
import static android.service.notification.NotificationListenerService.Ranking.USER_SENTIMENT_NEGATIVE;
|
||||
|
||||
import android.content.Context;
|
||||
import android.metrics.LogMaker;
|
||||
@@ -27,29 +26,28 @@ import androidx.annotation.VisibleForTesting;
|
||||
|
||||
import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
||||
import com.android.systemui.Dependency;
|
||||
import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
|
||||
import com.android.systemui.statusbar.notification.NotificationEntryManager;
|
||||
import com.android.systemui.statusbar.notification.dagger.NotificationsModule;
|
||||
import com.android.systemui.statusbar.notification.logging.NotificationCounters;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
/**
|
||||
* Manager for the notification blocking helper - tracks and helps create the blocking helper
|
||||
* affordance.
|
||||
*/
|
||||
@Singleton
|
||||
public class NotificationBlockingHelperManager {
|
||||
/** Enables debug logging and always makes the blocking helper show up after a dismiss. */
|
||||
private static final boolean DEBUG = false;
|
||||
private static final String TAG = "BlockingHelper";
|
||||
|
||||
private final Context mContext;
|
||||
private final NotificationGutsManager mNotificationGutsManager;
|
||||
private final NotificationEntryManager mNotificationEntryManager;
|
||||
private final MetricsLogger mMetricsLogger;
|
||||
/** Row that the blocking helper will be shown in (via {@link NotificationGuts}. */
|
||||
private ExpandableNotificationRow mBlockingHelperRow;
|
||||
private Set<String> mNonBlockablePkgs;
|
||||
@@ -60,11 +58,18 @@ public class NotificationBlockingHelperManager {
|
||||
*/
|
||||
private boolean mIsShadeExpanded;
|
||||
|
||||
private MetricsLogger mMetricsLogger = new MetricsLogger();
|
||||
|
||||
@Inject
|
||||
public NotificationBlockingHelperManager(Context context) {
|
||||
/**
|
||||
* Injected constructor. See {@link NotificationsModule}.
|
||||
*/
|
||||
public NotificationBlockingHelperManager(
|
||||
Context context,
|
||||
NotificationGutsManager notificationGutsManager,
|
||||
NotificationEntryManager notificationEntryManager,
|
||||
MetricsLogger metricsLogger) {
|
||||
mContext = context;
|
||||
mNotificationGutsManager = notificationGutsManager;
|
||||
mNotificationEntryManager = notificationEntryManager;
|
||||
mMetricsLogger = metricsLogger;
|
||||
mNonBlockablePkgs = new HashSet<>();
|
||||
Collections.addAll(mNonBlockablePkgs, mContext.getResources().getStringArray(
|
||||
com.android.internal.R.array.config_nonBlockableNotificationPackages));
|
||||
@@ -99,7 +104,6 @@ public class NotificationBlockingHelperManager {
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, "Manager.perhapsShowBlockingHelper: Showing new blocking helper");
|
||||
}
|
||||
NotificationGutsManager manager = Dependency.get(NotificationGutsManager.class);
|
||||
|
||||
// Enable blocking helper on the row before moving forward so everything in the guts is
|
||||
// correctly prepped.
|
||||
@@ -113,10 +117,10 @@ public class NotificationBlockingHelperManager {
|
||||
|
||||
// We don't care about the touch origin (x, y) since we're opening guts without any
|
||||
// explicit user interaction.
|
||||
manager.openGuts(mBlockingHelperRow, 0, 0, menuRow.getLongpressMenuItem(mContext));
|
||||
mNotificationGutsManager.openGuts(
|
||||
mBlockingHelperRow, 0, 0, menuRow.getLongpressMenuItem(mContext));
|
||||
|
||||
Dependency.get(MetricsLogger.class)
|
||||
.count(NotificationCounters.BLOCKING_HELPER_SHOWN, 1);
|
||||
mMetricsLogger.count(NotificationCounters.BLOCKING_HELPER_SHOWN, 1);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -139,8 +143,7 @@ public class NotificationBlockingHelperManager {
|
||||
|
||||
mBlockingHelperRow.setBlockingHelperShowing(false);
|
||||
if (mBlockingHelperRow.isAttachedToWindow()) {
|
||||
Dependency.get(NotificationEntryManager.class).updateNotifications(
|
||||
"dismissCurrentBlockingHelper");
|
||||
mNotificationEntryManager.updateNotifications("dismissCurrentBlockingHelper");
|
||||
}
|
||||
mBlockingHelperRow = null;
|
||||
return true;
|
||||
|
||||
@@ -33,7 +33,6 @@ import android.widget.RemoteViews;
|
||||
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.internal.widget.ImageMessageConsumer;
|
||||
import com.android.systemui.Dependency;
|
||||
import com.android.systemui.statusbar.InflationTask;
|
||||
import com.android.systemui.statusbar.NotificationRemoteInputManager;
|
||||
import com.android.systemui.statusbar.SmartReplyController;
|
||||
@@ -53,6 +52,8 @@ import java.util.HashMap;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import dagger.Lazy;
|
||||
|
||||
/**
|
||||
* {@link NotificationContentInflater} binds content to a {@link ExpandableNotificationRow} by
|
||||
* asynchronously building the content's {@link RemoteViews} and applying it to the row.
|
||||
@@ -66,13 +67,19 @@ public class NotificationContentInflater implements NotificationRowContentBinder
|
||||
private boolean mInflateSynchronously = false;
|
||||
private final NotificationRemoteInputManager mRemoteInputManager;
|
||||
private final NotifRemoteViewCache mRemoteViewCache;
|
||||
private final Lazy<SmartReplyConstants> mSmartReplyConstants;
|
||||
private final Lazy<SmartReplyController> mSmartReplyController;
|
||||
|
||||
@Inject
|
||||
NotificationContentInflater(
|
||||
NotifRemoteViewCache remoteViewCache,
|
||||
NotificationRemoteInputManager remoteInputManager) {
|
||||
NotificationRemoteInputManager remoteInputManager,
|
||||
Lazy<SmartReplyConstants> smartReplyConstants,
|
||||
Lazy<SmartReplyController> smartReplyController) {
|
||||
mRemoteViewCache = remoteViewCache;
|
||||
mRemoteInputManager = remoteInputManager;
|
||||
mSmartReplyConstants = smartReplyConstants;
|
||||
mSmartReplyController = smartReplyController;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -104,6 +111,8 @@ public class NotificationContentInflater implements NotificationRowContentBinder
|
||||
contentToBind,
|
||||
mRemoteViewCache,
|
||||
entry,
|
||||
mSmartReplyConstants.get(),
|
||||
mSmartReplyController.get(),
|
||||
row,
|
||||
bindParams.isLowPriority,
|
||||
bindParams.isChildInGroup,
|
||||
@@ -136,6 +145,7 @@ public class NotificationContentInflater implements NotificationRowContentBinder
|
||||
packageContext);
|
||||
result = inflateSmartReplyViews(result, reInflateFlags, entry,
|
||||
row.getContext(), packageContext, row.getHeadsUpManager(),
|
||||
mSmartReplyConstants.get(), mSmartReplyController.get(),
|
||||
row.getExistingSmartRepliesAndActions());
|
||||
|
||||
apply(
|
||||
@@ -204,9 +214,8 @@ public class NotificationContentInflater implements NotificationRowContentBinder
|
||||
private static InflationProgress inflateSmartReplyViews(InflationProgress result,
|
||||
@InflationFlag int reInflateFlags, NotificationEntry entry, Context context,
|
||||
Context packageContext, HeadsUpManager headsUpManager,
|
||||
SmartReplyConstants smartReplyConstants, SmartReplyController smartReplyController,
|
||||
SmartRepliesAndActions previousSmartRepliesAndActions) {
|
||||
SmartReplyConstants smartReplyConstants = Dependency.get(SmartReplyConstants.class);
|
||||
SmartReplyController smartReplyController = Dependency.get(SmartReplyController.class);
|
||||
if ((reInflateFlags & FLAG_CONTENT_VIEW_EXPANDED) != 0 && result.newExpandedView != null) {
|
||||
result.expandedInflatedSmartReplies =
|
||||
InflatedSmartReplies.inflate(
|
||||
@@ -643,6 +652,8 @@ public class NotificationContentInflater implements NotificationRowContentBinder
|
||||
private final boolean mUsesIncreasedHeadsUpHeight;
|
||||
private final @InflationFlag int mReInflateFlags;
|
||||
private final NotifRemoteViewCache mRemoteViewCache;
|
||||
private final SmartReplyConstants mSmartReplyConstants;
|
||||
private final SmartReplyController mSmartReplyController;
|
||||
private ExpandableNotificationRow mRow;
|
||||
private Exception mError;
|
||||
private RemoteViews.OnClickHandler mRemoteViewClickHandler;
|
||||
@@ -653,6 +664,8 @@ public class NotificationContentInflater implements NotificationRowContentBinder
|
||||
@InflationFlag int reInflateFlags,
|
||||
NotifRemoteViewCache cache,
|
||||
NotificationEntry entry,
|
||||
SmartReplyConstants smartReplyConstants,
|
||||
SmartReplyController smartReplyController,
|
||||
ExpandableNotificationRow row,
|
||||
boolean isLowPriority,
|
||||
boolean isChildInGroup,
|
||||
@@ -662,6 +675,8 @@ public class NotificationContentInflater implements NotificationRowContentBinder
|
||||
RemoteViews.OnClickHandler remoteViewClickHandler) {
|
||||
mEntry = entry;
|
||||
mRow = row;
|
||||
mSmartReplyConstants = smartReplyConstants;
|
||||
mSmartReplyController = smartReplyController;
|
||||
mInflateSynchronously = inflateSynchronously;
|
||||
mReInflateFlags = reInflateFlags;
|
||||
mRemoteViewCache = cache;
|
||||
@@ -701,6 +716,7 @@ public class NotificationContentInflater implements NotificationRowContentBinder
|
||||
mUsesIncreasedHeadsUpHeight, packageContext);
|
||||
return inflateSmartReplyViews(inflationProgress, mReInflateFlags, mEntry,
|
||||
mRow.getContext(), packageContext, mRow.getHeadsUpManager(),
|
||||
mSmartReplyConstants, mSmartReplyController,
|
||||
mRow.getExistingSmartRepliesAndActions());
|
||||
} catch (Exception e) {
|
||||
mError = e;
|
||||
|
||||
@@ -56,25 +56,21 @@ import com.android.systemui.statusbar.notification.NotificationActivityStarter;
|
||||
import com.android.systemui.statusbar.notification.VisualStabilityManager;
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
||||
import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider;
|
||||
import com.android.systemui.statusbar.notification.dagger.NotificationsModule;
|
||||
import com.android.systemui.statusbar.notification.row.NotificationInfo.CheckSaveListener;
|
||||
import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
|
||||
import com.android.systemui.statusbar.phone.ShadeController;
|
||||
import com.android.systemui.statusbar.phone.StatusBar;
|
||||
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
|
||||
|
||||
import java.io.FileDescriptor;
|
||||
import java.io.PrintWriter;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import dagger.Lazy;
|
||||
|
||||
/**
|
||||
* Handles various NotificationGuts related tasks, such as binding guts to a row, opening and
|
||||
* closing guts, and keeping track of the currently exposed notification guts.
|
||||
*/
|
||||
@Singleton
|
||||
public class NotificationGutsManager implements Dumpable, NotificationLifetimeExtender {
|
||||
private static final String TAG = "NotificationGutsManager";
|
||||
|
||||
@@ -111,7 +107,9 @@ public class NotificationGutsManager implements Dumpable, NotificationLifetimeEx
|
||||
private final Handler mMainHandler;
|
||||
private Runnable mOpenRunnable;
|
||||
|
||||
@Inject
|
||||
/**
|
||||
* Injected constructor. See {@link NotificationsModule}.
|
||||
*/
|
||||
public NotificationGutsManager(Context context, VisualStabilityManager visualStabilityManager,
|
||||
Lazy<StatusBar> statusBarLazy, @Main Handler mainHandler,
|
||||
AccessibilityManager accessibilityManager,
|
||||
|
||||
@@ -28,6 +28,7 @@ import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.times;
|
||||
@@ -43,6 +44,7 @@ import android.view.View;
|
||||
import androidx.test.filters.FlakyTest;
|
||||
import androidx.test.filters.SmallTest;
|
||||
|
||||
import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.bubbles.BubbleController;
|
||||
import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
|
||||
@@ -83,13 +85,12 @@ public class NotificationBlockingHelperManagerTest extends SysuiTestCase {
|
||||
any(NotificationMenuRowPlugin.MenuItem.class)))
|
||||
.thenReturn(true);
|
||||
when(mMenuRow.getLongpressMenuItem(any(Context.class))).thenReturn(mMenuItem);
|
||||
mDependency.injectTestDependency(NotificationGutsManager.class, mGutsManager);
|
||||
mDependency.injectTestDependency(NotificationEntryManager.class, mEntryManager);
|
||||
mDependency.injectMockDependency(BubbleController.class);
|
||||
|
||||
mHelper = new NotificationTestHelper(mContext, mDependency);
|
||||
|
||||
mBlockingHelperManager = new NotificationBlockingHelperManager(mContext);
|
||||
mBlockingHelperManager = new NotificationBlockingHelperManager(
|
||||
mContext, mGutsManager, mEntryManager, mock(MetricsLogger.class));
|
||||
// By default, have the shade visible/expanded.
|
||||
mBlockingHelperManager.setNotificationShadeExpanded(1f);
|
||||
}
|
||||
|
||||
@@ -50,10 +50,12 @@ import androidx.test.filters.Suppress;
|
||||
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.statusbar.NotificationRemoteInputManager;
|
||||
import com.android.systemui.statusbar.SmartReplyController;
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
||||
import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.BindParams;
|
||||
import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.InflationCallback;
|
||||
import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.InflationFlag;
|
||||
import com.android.systemui.statusbar.policy.SmartReplyConstants;
|
||||
import com.android.systemui.tests.R;
|
||||
|
||||
import org.junit.Assert;
|
||||
@@ -92,9 +94,14 @@ public class NotificationContentInflaterTest extends SysuiTestCase {
|
||||
ExpandableNotificationRow row = new NotificationTestHelper(mContext, mDependency).createRow(
|
||||
mBuilder.build());
|
||||
mRow = spy(row);
|
||||
|
||||
final SmartReplyConstants smartReplyConstants = mock(SmartReplyConstants.class);
|
||||
final SmartReplyController smartReplyController = mock(SmartReplyController.class);
|
||||
mNotificationInflater = new NotificationContentInflater(
|
||||
mCache,
|
||||
mock(NotificationRemoteInputManager.class));
|
||||
mock(NotificationRemoteInputManager.class),
|
||||
() -> smartReplyConstants,
|
||||
() -> smartReplyController);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -60,6 +60,7 @@ import com.android.systemui.statusbar.phone.HeadsUpManagerPhone;
|
||||
import com.android.systemui.statusbar.phone.KeyguardBypassController;
|
||||
import com.android.systemui.statusbar.phone.NotificationGroupManager;
|
||||
import com.android.systemui.statusbar.phone.NotificationShadeWindowController;
|
||||
import com.android.systemui.statusbar.policy.SmartReplyConstants;
|
||||
import com.android.systemui.tests.R;
|
||||
|
||||
import org.mockito.ArgumentCaptor;
|
||||
@@ -98,7 +99,6 @@ public class NotificationTestHelper {
|
||||
dependency.injectMockDependency(NotificationMediaManager.class);
|
||||
dependency.injectMockDependency(BubbleController.class);
|
||||
dependency.injectMockDependency(NotificationShadeWindowController.class);
|
||||
dependency.injectMockDependency(SmartReplyController.class);
|
||||
mStatusBarStateController = mock(StatusBarStateController.class);
|
||||
mGroupManager = new NotificationGroupManager(mStatusBarStateController);
|
||||
mHeadsUpManager = new HeadsUpManagerPhone(mContext, mStatusBarStateController,
|
||||
@@ -106,10 +106,11 @@ public class NotificationTestHelper {
|
||||
mHeadsUpManager.setUp(null, mGroupManager, null, null);
|
||||
mGroupManager.setHeadsUpManager(mHeadsUpManager);
|
||||
|
||||
|
||||
NotificationContentInflater contentBinder = new NotificationContentInflater(
|
||||
mock(NotifRemoteViewCache.class),
|
||||
mock(NotificationRemoteInputManager.class));
|
||||
mock(NotificationRemoteInputManager.class),
|
||||
() -> mock(SmartReplyConstants.class),
|
||||
() -> mock(SmartReplyController.class));
|
||||
contentBinder.setInflateSynchronously(true);
|
||||
mBindStage = new RowContentBindStage(contentBinder,
|
||||
mock(NotifInflationErrorManager.class),
|
||||
|
||||
Reference in New Issue
Block a user