Merge "Combine AlertingManager and HeadsUpBindController" into rvc-dev

This commit is contained in:
TreeHugger Robot
2020-04-16 21:14:13 +00:00
committed by Android (Google) Code Review
13 changed files with 122 additions and 233 deletions

View File

@@ -77,7 +77,6 @@ import com.android.systemui.statusbar.notification.VisualStabilityManager;
import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.init.NotificationsController; import com.android.systemui.statusbar.notification.init.NotificationsController;
import com.android.systemui.statusbar.notification.interruption.BypassHeadsUpNotifier; import com.android.systemui.statusbar.notification.interruption.BypassHeadsUpNotifier;
import com.android.systemui.statusbar.notification.interruption.NotificationAlertingManager;
import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider; import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider;
import com.android.systemui.statusbar.notification.interruption.NotificationInterruptSuppressor; import com.android.systemui.statusbar.notification.interruption.NotificationInterruptSuppressor;
import com.android.systemui.statusbar.notification.logging.NotificationLogger; import com.android.systemui.statusbar.notification.logging.NotificationLogger;
@@ -170,7 +169,6 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
NotificationInterruptStateProvider notificationInterruptStateProvider, NotificationInterruptStateProvider notificationInterruptStateProvider,
NotificationViewHierarchyManager notificationViewHierarchyManager, NotificationViewHierarchyManager notificationViewHierarchyManager,
KeyguardViewMediator keyguardViewMediator, KeyguardViewMediator keyguardViewMediator,
NotificationAlertingManager notificationAlertingManager,
DisplayMetrics displayMetrics, DisplayMetrics displayMetrics,
MetricsLogger metricsLogger, MetricsLogger metricsLogger,
@UiBackground Executor uiBgExecutor, @UiBackground Executor uiBgExecutor,
@@ -251,7 +249,6 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
notificationInterruptStateProvider, notificationInterruptStateProvider,
notificationViewHierarchyManager, notificationViewHierarchyManager,
keyguardViewMediator, keyguardViewMediator,
notificationAlertingManager,
displayMetrics, displayMetrics,
metricsLogger, metricsLogger,
uiBgExecutor, uiBgExecutor,

View File

@@ -63,7 +63,6 @@ import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator
import com.android.systemui.statusbar.notification.VisualStabilityManager; import com.android.systemui.statusbar.notification.VisualStabilityManager;
import com.android.systemui.statusbar.notification.init.NotificationsController; import com.android.systemui.statusbar.notification.init.NotificationsController;
import com.android.systemui.statusbar.notification.interruption.BypassHeadsUpNotifier; import com.android.systemui.statusbar.notification.interruption.BypassHeadsUpNotifier;
import com.android.systemui.statusbar.notification.interruption.NotificationAlertingManager;
import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider; import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider;
import com.android.systemui.statusbar.notification.logging.NotificationLogger; import com.android.systemui.statusbar.notification.logging.NotificationLogger;
import com.android.systemui.statusbar.notification.row.NotificationGutsManager; import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
@@ -145,7 +144,6 @@ public class CarStatusBarModule {
NotificationInterruptStateProvider notificationInterruptionStateProvider, NotificationInterruptStateProvider notificationInterruptionStateProvider,
NotificationViewHierarchyManager notificationViewHierarchyManager, NotificationViewHierarchyManager notificationViewHierarchyManager,
KeyguardViewMediator keyguardViewMediator, KeyguardViewMediator keyguardViewMediator,
NotificationAlertingManager notificationAlertingManager,
DisplayMetrics displayMetrics, DisplayMetrics displayMetrics,
MetricsLogger metricsLogger, MetricsLogger metricsLogger,
@UiBackground Executor uiBgExecutor, @UiBackground Executor uiBgExecutor,
@@ -225,7 +223,6 @@ public class CarStatusBarModule {
notificationInterruptionStateProvider, notificationInterruptionStateProvider,
notificationViewHierarchyManager, notificationViewHierarchyManager,
keyguardViewMediator, keyguardViewMediator,
notificationAlertingManager,
displayMetrics, displayMetrics,
metricsLogger, metricsLogger,
uiBgExecutor, uiBgExecutor,

View File

@@ -75,7 +75,6 @@ import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.NotificationEntryManager.KeyguardEnvironment; import com.android.systemui.statusbar.notification.NotificationEntryManager.KeyguardEnvironment;
import com.android.systemui.statusbar.notification.NotificationFilter; import com.android.systemui.statusbar.notification.NotificationFilter;
import com.android.systemui.statusbar.notification.VisualStabilityManager; import com.android.systemui.statusbar.notification.VisualStabilityManager;
import com.android.systemui.statusbar.notification.interruption.NotificationAlertingManager;
import com.android.systemui.statusbar.notification.logging.NotificationLogger; import com.android.systemui.statusbar.notification.logging.NotificationLogger;
import com.android.systemui.statusbar.notification.row.ChannelEditorDialogController; import com.android.systemui.statusbar.notification.row.ChannelEditorDialogController;
import com.android.systemui.statusbar.notification.row.NotificationBlockingHelperManager; import com.android.systemui.statusbar.notification.row.NotificationBlockingHelperManager;
@@ -293,8 +292,6 @@ public class Dependency {
@Inject Lazy<RemoteInputQuickSettingsDisabler> mRemoteInputQuickSettingsDisabler; @Inject Lazy<RemoteInputQuickSettingsDisabler> mRemoteInputQuickSettingsDisabler;
@Inject Lazy<BubbleController> mBubbleController; @Inject Lazy<BubbleController> mBubbleController;
@Inject Lazy<NotificationEntryManager> mNotificationEntryManager; @Inject Lazy<NotificationEntryManager> mNotificationEntryManager;
@Inject
Lazy<NotificationAlertingManager> mNotificationAlertingManager;
@Inject Lazy<SensorPrivacyManager> mSensorPrivacyManager; @Inject Lazy<SensorPrivacyManager> mSensorPrivacyManager;
@Inject Lazy<AutoHideController> mAutoHideController; @Inject Lazy<AutoHideController> mAutoHideController;
@Inject Lazy<ForegroundServiceNotificationListener> mForegroundServiceNotificationListener; @Inject Lazy<ForegroundServiceNotificationListener> mForegroundServiceNotificationListener;
@@ -493,7 +490,6 @@ public class Dependency {
mRemoteInputQuickSettingsDisabler::get); mRemoteInputQuickSettingsDisabler::get);
mProviders.put(BubbleController.class, mBubbleController::get); mProviders.put(BubbleController.class, mBubbleController::get);
mProviders.put(NotificationEntryManager.class, mNotificationEntryManager::get); mProviders.put(NotificationEntryManager.class, mNotificationEntryManager::get);
mProviders.put(NotificationAlertingManager.class, mNotificationAlertingManager::get);
mProviders.put(ForegroundServiceNotificationListener.class, mProviders.put(ForegroundServiceNotificationListener.class,
mForegroundServiceNotificationListener::get); mForegroundServiceNotificationListener::get);
mProviders.put(ClockManager.class, mClockManager::get); mProviders.put(ClockManager.class, mClockManager::get);

View File

@@ -17,7 +17,7 @@
package com.android.systemui.statusbar.notification.collection.coordinator; package com.android.systemui.statusbar.notification.collection.coordinator;
import static com.android.systemui.statusbar.NotificationRemoteInputManager.FORCE_REMOTE_INPUT_HISTORY; import static com.android.systemui.statusbar.NotificationRemoteInputManager.FORCE_REMOTE_INPUT_HISTORY;
import static com.android.systemui.statusbar.notification.interruption.NotificationAlertingManager.alertAgain; import static com.android.systemui.statusbar.notification.interruption.HeadsUpController.alertAgain;
import android.annotation.Nullable; import android.annotation.Nullable;
@@ -29,7 +29,7 @@ import com.android.systemui.statusbar.notification.collection.listbuilder.plugga
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSection; import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSection;
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener; import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifLifetimeExtender; import com.android.systemui.statusbar.notification.collection.notifcollection.NotifLifetimeExtender;
import com.android.systemui.statusbar.notification.headsup.HeadsUpViewBinder; import com.android.systemui.statusbar.notification.interruption.HeadsUpViewBinder;
import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider; import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider;
import com.android.systemui.statusbar.policy.HeadsUpManager; import com.android.systemui.statusbar.policy.HeadsUpManager;
import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener; import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;

View File

@@ -46,7 +46,6 @@ import com.android.systemui.statusbar.notification.collection.provider.HighPrior
import com.android.systemui.statusbar.notification.init.NotificationsController; import com.android.systemui.statusbar.notification.init.NotificationsController;
import com.android.systemui.statusbar.notification.init.NotificationsControllerImpl; import com.android.systemui.statusbar.notification.init.NotificationsControllerImpl;
import com.android.systemui.statusbar.notification.init.NotificationsControllerStub; import com.android.systemui.statusbar.notification.init.NotificationsControllerStub;
import com.android.systemui.statusbar.notification.interruption.NotificationAlertingManager;
import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider; import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider;
import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProviderImpl; import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProviderImpl;
import com.android.systemui.statusbar.notification.logging.NotificationLogger; import com.android.systemui.statusbar.notification.logging.NotificationLogger;
@@ -57,7 +56,6 @@ import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
import com.android.systemui.statusbar.notification.row.PriorityOnboardingDialogController; import com.android.systemui.statusbar.notification.row.PriorityOnboardingDialogController;
import com.android.systemui.statusbar.phone.NotificationGroupManager; import com.android.systemui.statusbar.phone.NotificationGroupManager;
import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.policy.HeadsUpManager;
import com.android.systemui.util.leak.LeakDetector; import com.android.systemui.util.leak.LeakDetector;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
@@ -137,27 +135,6 @@ public interface NotificationsModule {
return new VisualStabilityManager(notificationEntryManager, 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,
NotificationInterruptStateProvider notificationInterruptStateProvider,
NotificationListener notificationListener,
HeadsUpManager headsUpManager) {
return new NotificationAlertingManager(
notificationEntryManager,
remoteInputManager,
visualStabilityManager,
statusBarStateController,
notificationInterruptStateProvider,
notificationListener,
headsUpManager);
}
/** Provides an instance of {@link NotificationLogger} */ /** Provides an instance of {@link NotificationLogger} */
@Singleton @Singleton
@Provides @Provides

View File

@@ -1,95 +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.headsup;
import androidx.annotation.NonNull;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.coordinator.HeadsUpCoordinator;
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
import com.android.systemui.statusbar.notification.interruption.NotificationAlertingManager;
import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider;
import com.android.systemui.statusbar.policy.HeadsUpManager;
import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
import javax.inject.Inject;
import javax.inject.Singleton;
/**
* Controller class for old pipeline heads up view binding. It listens to
* {@link NotificationEntryManager} entry events and appropriately binds or unbinds the heads up
* view.
*
* This has a subtle contract with {@link NotificationAlertingManager} where this controller handles
* the heads up binding, but {@link NotificationAlertingManager} listens for general inflation
* events to actually mark it heads up/update. In the new pipeline, we combine the classes.
* See {@link HeadsUpCoordinator}.
*/
@Singleton
public class HeadsUpBindController {
private final HeadsUpViewBinder mHeadsUpViewBinder;
private final NotificationInterruptStateProvider mInterruptStateProvider;
@Inject
HeadsUpBindController(
HeadsUpViewBinder headsUpViewBinder,
NotificationInterruptStateProvider notificationInterruptStateProvider) {
mInterruptStateProvider = notificationInterruptStateProvider;
mHeadsUpViewBinder = headsUpViewBinder;
}
/**
* Attach this controller and add its listeners.
*/
public void attach(
NotificationEntryManager entryManager,
HeadsUpManager headsUpManager) {
entryManager.addCollectionListener(mCollectionListener);
headsUpManager.addListener(mOnHeadsUpChangedListener);
}
private NotifCollectionListener mCollectionListener = new NotifCollectionListener() {
@Override
public void onEntryAdded(NotificationEntry entry) {
if (mInterruptStateProvider.shouldHeadsUp(entry)) {
mHeadsUpViewBinder.bindHeadsUpView(entry, null);
}
}
@Override
public void onEntryUpdated(NotificationEntry entry) {
if (mInterruptStateProvider.shouldHeadsUp(entry)) {
mHeadsUpViewBinder.bindHeadsUpView(entry, null);
}
}
@Override
public void onEntryCleanUp(NotificationEntry entry) {
mHeadsUpViewBinder.abortBindCallback(entry);
}
};
private OnHeadsUpChangedListener mOnHeadsUpChangedListener = new OnHeadsUpChangedListener() {
@Override
public void onHeadsUpStateChanged(@NonNull NotificationEntry entry, boolean isHeadsUp) {
if (!isHeadsUp) {
mHeadsUpViewBinder.unbindHeadsUpView(entry);
}
}
};
}

View File

@@ -28,7 +28,7 @@ import com.android.systemui.statusbar.notification.NotificationEntryManager
import com.android.systemui.statusbar.notification.NotificationListController import com.android.systemui.statusbar.notification.NotificationListController
import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinderImpl import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinderImpl
import com.android.systemui.statusbar.notification.collection.init.NotifPipelineInitializer import com.android.systemui.statusbar.notification.collection.init.NotifPipelineInitializer
import com.android.systemui.statusbar.notification.headsup.HeadsUpBindController import com.android.systemui.statusbar.notification.interruption.HeadsUpController
import com.android.systemui.statusbar.notification.row.NotifBindPipelineInitializer import com.android.systemui.statusbar.notification.row.NotifBindPipelineInitializer
import com.android.systemui.statusbar.notification.stack.NotificationListContainer import com.android.systemui.statusbar.notification.stack.NotificationListContainer
import com.android.systemui.statusbar.phone.NotificationGroupAlertTransferHelper import com.android.systemui.statusbar.phone.NotificationGroupAlertTransferHelper
@@ -36,7 +36,7 @@ import com.android.systemui.statusbar.phone.NotificationGroupManager
import com.android.systemui.statusbar.phone.StatusBar import com.android.systemui.statusbar.phone.StatusBar
import com.android.systemui.statusbar.policy.DeviceProvisionedController import com.android.systemui.statusbar.policy.DeviceProvisionedController
import com.android.systemui.statusbar.policy.HeadsUpManager import com.android.systemui.statusbar.policy.HeadsUpManager
import com.android.systemui.statusbar.notification.headsup.HeadsUpViewBinder import com.android.systemui.statusbar.notification.interruption.HeadsUpViewBinder
import com.android.systemui.statusbar.policy.RemoteInputUriController import com.android.systemui.statusbar.policy.RemoteInputUriController
import dagger.Lazy import dagger.Lazy
import java.io.FileDescriptor import java.io.FileDescriptor
@@ -66,7 +66,7 @@ class NotificationsControllerImpl @Inject constructor(
private val groupManager: NotificationGroupManager, private val groupManager: NotificationGroupManager,
private val groupAlertTransferHelper: NotificationGroupAlertTransferHelper, private val groupAlertTransferHelper: NotificationGroupAlertTransferHelper,
private val headsUpManager: HeadsUpManager, private val headsUpManager: HeadsUpManager,
private val headsUpBindController: HeadsUpBindController, private val headsUpController: HeadsUpController,
private val headsUpViewBinder: HeadsUpViewBinder private val headsUpViewBinder: HeadsUpViewBinder
) : NotificationsController { ) : NotificationsController {
@@ -112,7 +112,7 @@ class NotificationsControllerImpl @Inject constructor(
groupAlertTransferHelper.bind(entryManager, groupManager) groupAlertTransferHelper.bind(entryManager, groupManager)
headsUpManager.addListener(groupManager) headsUpManager.addListener(groupManager)
headsUpManager.addListener(groupAlertTransferHelper) headsUpManager.addListener(groupAlertTransferHelper)
headsUpBindController.attach(entryManager, headsUpManager) headsUpController.attach(entryManager, headsUpManager)
groupManager.setHeadsUpManager(headsUpManager) groupManager.setHeadsUpManager(headsUpManager)
groupAlertTransferHelper.setHeadsUpManager(headsUpManager) groupAlertTransferHelper.setHeadsUpManager(headsUpManager)

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2018 The Android Open Source Project * Copyright (C) 2020 The Android Open Source Project
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -22,101 +22,140 @@ import android.app.Notification;
import android.service.notification.StatusBarNotification; import android.service.notification.StatusBarNotification;
import android.util.Log; import android.util.Log;
import com.android.internal.statusbar.NotificationVisibility; import androidx.annotation.NonNull;
import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.NotificationListener; import com.android.systemui.statusbar.NotificationListener;
import com.android.systemui.statusbar.NotificationRemoteInputManager; import com.android.systemui.statusbar.NotificationRemoteInputManager;
import com.android.systemui.statusbar.notification.NotificationEntryListener;
import com.android.systemui.statusbar.notification.NotificationEntryManager; import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.VisualStabilityManager; import com.android.systemui.statusbar.notification.VisualStabilityManager;
import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.dagger.NotificationsModule; import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
import com.android.systemui.statusbar.policy.HeadsUpManager; import com.android.systemui.statusbar.policy.HeadsUpManager;
import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
/** Handles heads-up and pulsing behavior driven by notification changes. */ import javax.inject.Inject;
public class NotificationAlertingManager { import javax.inject.Singleton;
private static final String TAG = "NotifAlertManager";
/**
* Controller class for old pipeline heads up logic. It listens to {@link NotificationEntryManager}
* entry events and appropriately binds or unbinds the heads up view and promotes it to the top
* of the screen.
*/
@Singleton
public class HeadsUpController {
private final HeadsUpViewBinder mHeadsUpViewBinder;
private final NotificationInterruptStateProvider mInterruptStateProvider;
private final NotificationRemoteInputManager mRemoteInputManager; private final NotificationRemoteInputManager mRemoteInputManager;
private final VisualStabilityManager mVisualStabilityManager; private final VisualStabilityManager mVisualStabilityManager;
private final StatusBarStateController mStatusBarStateController; private final StatusBarStateController mStatusBarStateController;
private final NotificationInterruptStateProvider mNotificationInterruptStateProvider;
private final NotificationListener mNotificationListener; private final NotificationListener mNotificationListener;
private final HeadsUpManager mHeadsUpManager;
private HeadsUpManager mHeadsUpManager; @Inject
HeadsUpController(
/** HeadsUpViewBinder headsUpViewBinder,
* Injected constructor. See {@link NotificationsModule}. NotificationInterruptStateProvider notificationInterruptStateProvider,
*/ HeadsUpManager headsUpManager,
public NotificationAlertingManager(
NotificationEntryManager notificationEntryManager,
NotificationRemoteInputManager remoteInputManager, NotificationRemoteInputManager remoteInputManager,
VisualStabilityManager visualStabilityManager,
StatusBarStateController statusBarStateController, StatusBarStateController statusBarStateController,
NotificationInterruptStateProvider notificationInterruptionStateProvider, VisualStabilityManager visualStabilityManager,
NotificationListener notificationListener, NotificationListener notificationListener) {
HeadsUpManager headsUpManager) { mHeadsUpViewBinder = headsUpViewBinder;
mRemoteInputManager = remoteInputManager;
mVisualStabilityManager = visualStabilityManager;
mStatusBarStateController = statusBarStateController;
mNotificationInterruptStateProvider = notificationInterruptionStateProvider;
mNotificationListener = notificationListener;
mHeadsUpManager = headsUpManager; mHeadsUpManager = headsUpManager;
mInterruptStateProvider = notificationInterruptStateProvider;
notificationEntryManager.addNotificationEntryListener(new NotificationEntryListener() { mRemoteInputManager = remoteInputManager;
@Override mStatusBarStateController = statusBarStateController;
public void onEntryInflated(NotificationEntry entry) { mVisualStabilityManager = visualStabilityManager;
showAlertingView(entry); mNotificationListener = notificationListener;
}
@Override
public void onPreEntryUpdated(NotificationEntry entry) {
updateAlertState(entry);
}
@Override
public void onEntryRemoved(
NotificationEntry entry,
NotificationVisibility visibility,
boolean removedByUser,
int reason) {
stopAlerting(entry.getKey());
}
});
} }
/** /**
* Adds the entry to the respective alerting manager if the content view was inflated and * Attach this controller and add its listeners.
* the entry should still alert. */
public void attach(
NotificationEntryManager entryManager,
HeadsUpManager headsUpManager) {
entryManager.addCollectionListener(mCollectionListener);
headsUpManager.addListener(mOnHeadsUpChangedListener);
}
private NotifCollectionListener mCollectionListener = new NotifCollectionListener() {
@Override
public void onEntryAdded(NotificationEntry entry) {
if (mInterruptStateProvider.shouldHeadsUp(entry)) {
mHeadsUpViewBinder.bindHeadsUpView(
entry, HeadsUpController.this::showAlertingView);
}
}
@Override
public void onEntryUpdated(NotificationEntry entry) {
updateHunState(entry);
}
@Override
public void onEntryRemoved(NotificationEntry entry, int reason) {
stopAlerting(entry);
}
@Override
public void onEntryCleanUp(NotificationEntry entry) {
mHeadsUpViewBinder.abortBindCallback(entry);
}
};
/**
* Adds the entry to the HUN manager and show it for the first time.
*/ */
private void showAlertingView(NotificationEntry entry) { private void showAlertingView(NotificationEntry entry) {
// TODO: Instead of this back and forth, we should listen to changes in heads up and
// cancel on-going heads up view inflation using the bind pipeline.
if (entry.getRow().getPrivateLayout().getHeadsUpChild() != null) {
mHeadsUpManager.showNotification(entry); mHeadsUpManager.showNotification(entry);
if (!mStatusBarStateController.isDozing()) { if (!mStatusBarStateController.isDozing()) {
// Mark as seen immediately // Mark as seen immediately
setNotificationShown(entry.getSbn()); setNotificationShown(entry.getSbn());
} }
} }
}
private void updateAlertState(NotificationEntry entry) { private void updateHunState(NotificationEntry entry) {
boolean alertAgain = alertAgain(entry, entry.getSbn().getNotification()); boolean hunAgain = alertAgain(entry, entry.getSbn().getNotification());
// includes check for whether this notification should be filtered: // includes check for whether this notification should be filtered:
boolean shouldAlert = mNotificationInterruptStateProvider.shouldHeadsUp(entry); boolean shouldHeadsUp = mInterruptStateProvider.shouldHeadsUp(entry);
final boolean wasAlerting = mHeadsUpManager.isAlerting(entry.getKey()); final boolean wasHeadsUp = mHeadsUpManager.isAlerting(entry.getKey());
if (wasAlerting) { if (wasHeadsUp) {
if (shouldAlert) { if (shouldHeadsUp) {
mHeadsUpManager.updateNotification(entry.getKey(), alertAgain); mHeadsUpManager.updateNotification(entry.getKey(), hunAgain);
} else if (!mHeadsUpManager.isEntryAutoHeadsUpped(entry.getKey())) { } else if (!mHeadsUpManager.isEntryAutoHeadsUpped(entry.getKey())) {
// We don't want this to be interrupting anymore, let's remove it // We don't want this to be interrupting anymore, let's remove it
mHeadsUpManager.removeNotification(entry.getKey(), false /* removeImmediately */); mHeadsUpManager.removeNotification(entry.getKey(), false /* removeImmediately */);
} }
} else if (shouldAlert && alertAgain) { } else if (shouldHeadsUp && hunAgain) {
// This notification was updated to be alerting, show it! mHeadsUpViewBinder.bindHeadsUpView(entry, mHeadsUpManager::showNotification);
mHeadsUpManager.showNotification(entry); }
}
private void setNotificationShown(StatusBarNotification n) {
try {
mNotificationListener.setNotificationsShown(new String[]{n.getKey()});
} catch (RuntimeException e) {
Log.d(TAG, "failed setNotificationsShown: ", e);
}
}
private void stopAlerting(NotificationEntry entry) {
// Attempt to remove notifications from their HUN manager.
// Though the remove itself may fail, it lets the manager know to remove as soon as
// possible.
String key = entry.getKey();
if (mHeadsUpManager.isAlerting(key)) {
// A cancel() in response to a remote input shouldn't be delayed, as it makes the
// sending look longer than it takes.
// Also we should not defer the removal if reordering isn't allowed since otherwise
// some notifications can't disappear before the panel is closed.
boolean ignoreEarliestRemovalTime =
mRemoteInputManager.getController().isSpinning(key)
&& !FORCE_REMOTE_INPUT_HISTORY
|| !mVisualStabilityManager.isReorderingAllowed();
mHeadsUpManager.removeNotification(key, ignoreEarliestRemovalTime);
} }
} }
@@ -133,28 +172,14 @@ public class NotificationAlertingManager {
|| (newNotification.flags & Notification.FLAG_ONLY_ALERT_ONCE) == 0; || (newNotification.flags & Notification.FLAG_ONLY_ALERT_ONCE) == 0;
} }
private void setNotificationShown(StatusBarNotification n) { private OnHeadsUpChangedListener mOnHeadsUpChangedListener = new OnHeadsUpChangedListener() {
try { @Override
mNotificationListener.setNotificationsShown(new String[]{n.getKey()}); public void onHeadsUpStateChanged(@NonNull NotificationEntry entry, boolean isHeadsUp) {
} catch (RuntimeException e) { if (!isHeadsUp) {
Log.d(TAG, "failed setNotificationsShown: ", e); mHeadsUpViewBinder.unbindHeadsUpView(entry);
} }
} }
};
private void stopAlerting(final String key) { private static final String TAG = "HeadsUpBindController";
// Attempt to remove notifications from their alert manager.
// Though the remove itself may fail, it lets the manager know to remove as soon as
// possible.
if (mHeadsUpManager.isAlerting(key)) {
// A cancel() in response to a remote input shouldn't be delayed, as it makes the
// sending look longer than it takes.
// Also we should not defer the removal if reordering isn't allowed since otherwise
// some notifications can't disappear before the panel is closed.
boolean ignoreEarliestRemovalTime =
mRemoteInputManager.getController().isSpinning(key)
&& !FORCE_REMOTE_INPUT_HISTORY
|| !mVisualStabilityManager.isReorderingAllowed();
mHeadsUpManager.removeNotification(key, ignoreEarliestRemovalTime);
}
}
} }

View File

@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package com.android.systemui.statusbar.notification.headsup; package com.android.systemui.statusbar.notification.interruption;
import static com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.FLAG_CONTENT_VIEW_HEADS_UP; import static com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.FLAG_CONTENT_VIEW_HEADS_UP;
@@ -42,7 +42,7 @@ import javax.inject.Singleton;
* content view. * content view.
* *
* TODO: This should be moved into {@link HeadsUpCoordinator} when the old pipeline is deprecated * TODO: This should be moved into {@link HeadsUpCoordinator} when the old pipeline is deprecated
* (i.e. when {@link HeadsUpBindController} is removed). * (i.e. when {@link HeadsUpController} is removed).
*/ */
@Singleton @Singleton
public class HeadsUpViewBinder { public class HeadsUpViewBinder {

View File

@@ -193,7 +193,6 @@ import com.android.systemui.statusbar.notification.VisualStabilityManager;
import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.init.NotificationsController; import com.android.systemui.statusbar.notification.init.NotificationsController;
import com.android.systemui.statusbar.notification.interruption.BypassHeadsUpNotifier; import com.android.systemui.statusbar.notification.interruption.BypassHeadsUpNotifier;
import com.android.systemui.statusbar.notification.interruption.NotificationAlertingManager;
import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider; import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider;
import com.android.systemui.statusbar.notification.logging.NotificationLogger; import com.android.systemui.statusbar.notification.logging.NotificationLogger;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
@@ -623,7 +622,6 @@ public class StatusBar extends SystemUI implements DemoMode,
NotificationInterruptStateProvider notificationInterruptStateProvider, NotificationInterruptStateProvider notificationInterruptStateProvider,
NotificationViewHierarchyManager notificationViewHierarchyManager, NotificationViewHierarchyManager notificationViewHierarchyManager,
KeyguardViewMediator keyguardViewMediator, KeyguardViewMediator keyguardViewMediator,
NotificationAlertingManager notificationAlertingManager, // need to inject for now
DisplayMetrics displayMetrics, DisplayMetrics displayMetrics,
MetricsLogger metricsLogger, MetricsLogger metricsLogger,
@UiBackground Executor uiBgExecutor, @UiBackground Executor uiBgExecutor,

View File

@@ -62,7 +62,6 @@ import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator
import com.android.systemui.statusbar.notification.VisualStabilityManager; import com.android.systemui.statusbar.notification.VisualStabilityManager;
import com.android.systemui.statusbar.notification.init.NotificationsController; import com.android.systemui.statusbar.notification.init.NotificationsController;
import com.android.systemui.statusbar.notification.interruption.BypassHeadsUpNotifier; import com.android.systemui.statusbar.notification.interruption.BypassHeadsUpNotifier;
import com.android.systemui.statusbar.notification.interruption.NotificationAlertingManager;
import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider; import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider;
import com.android.systemui.statusbar.notification.logging.NotificationLogger; import com.android.systemui.statusbar.notification.logging.NotificationLogger;
import com.android.systemui.statusbar.notification.row.NotificationGutsManager; import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
@@ -143,7 +142,6 @@ public interface StatusBarPhoneModule {
NotificationInterruptStateProvider notificationInterruptStateProvider, NotificationInterruptStateProvider notificationInterruptStateProvider,
NotificationViewHierarchyManager notificationViewHierarchyManager, NotificationViewHierarchyManager notificationViewHierarchyManager,
KeyguardViewMediator keyguardViewMediator, KeyguardViewMediator keyguardViewMediator,
NotificationAlertingManager notificationAlertingManager,
DisplayMetrics displayMetrics, DisplayMetrics displayMetrics,
MetricsLogger metricsLogger, MetricsLogger metricsLogger,
@UiBackground Executor uiBgExecutor, @UiBackground Executor uiBgExecutor,
@@ -223,7 +221,6 @@ public interface StatusBarPhoneModule {
notificationInterruptStateProvider, notificationInterruptStateProvider,
notificationViewHierarchyManager, notificationViewHierarchyManager,
keyguardViewMediator, keyguardViewMediator,
notificationAlertingManager,
displayMetrics, displayMetrics,
metricsLogger, metricsLogger,
uiBgExecutor, uiBgExecutor,

View File

@@ -39,7 +39,7 @@ import com.android.systemui.statusbar.notification.collection.listbuilder.plugga
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSection; import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSection;
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener; import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifLifetimeExtender; import com.android.systemui.statusbar.notification.collection.notifcollection.NotifLifetimeExtender;
import com.android.systemui.statusbar.notification.headsup.HeadsUpViewBinder; import com.android.systemui.statusbar.notification.interruption.HeadsUpViewBinder;
import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider; import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider;
import com.android.systemui.statusbar.notification.row.NotifBindPipeline.BindCallback; import com.android.systemui.statusbar.notification.row.NotifBindPipeline.BindCallback;
import com.android.systemui.statusbar.policy.HeadsUpManager; import com.android.systemui.statusbar.policy.HeadsUpManager;

View File

@@ -120,7 +120,6 @@ import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder; import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
import com.android.systemui.statusbar.notification.init.NotificationsController; import com.android.systemui.statusbar.notification.init.NotificationsController;
import com.android.systemui.statusbar.notification.interruption.BypassHeadsUpNotifier; import com.android.systemui.statusbar.notification.interruption.BypassHeadsUpNotifier;
import com.android.systemui.statusbar.notification.interruption.NotificationAlertingManager;
import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProviderImpl; import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProviderImpl;
import com.android.systemui.statusbar.notification.logging.NotificationLogger; import com.android.systemui.statusbar.notification.logging.NotificationLogger;
import com.android.systemui.statusbar.notification.logging.NotificationPanelLoggerFake; import com.android.systemui.statusbar.notification.logging.NotificationPanelLoggerFake;
@@ -193,7 +192,6 @@ public class StatusBarTest extends SysuiTestCase {
@Mock private StatusBarNotificationPresenter mNotificationPresenter; @Mock private StatusBarNotificationPresenter mNotificationPresenter;
@Mock private NotificationEntryListener mEntryListener; @Mock private NotificationEntryListener mEntryListener;
@Mock private NotificationFilter mNotificationFilter; @Mock private NotificationFilter mNotificationFilter;
@Mock private NotificationAlertingManager mNotificationAlertingManager;
@Mock private AmbientDisplayConfiguration mAmbientDisplayConfiguration; @Mock private AmbientDisplayConfiguration mAmbientDisplayConfiguration;
@Mock private NotificationLogger.ExpansionStateLogger mExpansionStateLogger; @Mock private NotificationLogger.ExpansionStateLogger mExpansionStateLogger;
@Mock private KeyguardUpdateMonitor mKeyguardUpdateMonitor; @Mock private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
@@ -352,7 +350,6 @@ public class StatusBarTest extends SysuiTestCase {
mNotificationInterruptStateProvider, mNotificationInterruptStateProvider,
mNotificationViewHierarchyManager, mNotificationViewHierarchyManager,
mKeyguardViewMediator, mKeyguardViewMediator,
mNotificationAlertingManager,
new DisplayMetrics(), new DisplayMetrics(),
mMetricsLogger, mMetricsLogger,
mUiBgExecutor, mUiBgExecutor,