Merge "Combine AlertingManager and HeadsUpBindController" into rvc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
b99ef1b146
@@ -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.init.NotificationsController;
|
||||
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.NotificationInterruptSuppressor;
|
||||
import com.android.systemui.statusbar.notification.logging.NotificationLogger;
|
||||
@@ -170,7 +169,6 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
|
||||
NotificationInterruptStateProvider notificationInterruptStateProvider,
|
||||
NotificationViewHierarchyManager notificationViewHierarchyManager,
|
||||
KeyguardViewMediator keyguardViewMediator,
|
||||
NotificationAlertingManager notificationAlertingManager,
|
||||
DisplayMetrics displayMetrics,
|
||||
MetricsLogger metricsLogger,
|
||||
@UiBackground Executor uiBgExecutor,
|
||||
@@ -251,7 +249,6 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
|
||||
notificationInterruptStateProvider,
|
||||
notificationViewHierarchyManager,
|
||||
keyguardViewMediator,
|
||||
notificationAlertingManager,
|
||||
displayMetrics,
|
||||
metricsLogger,
|
||||
uiBgExecutor,
|
||||
|
||||
@@ -63,7 +63,6 @@ import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator
|
||||
import com.android.systemui.statusbar.notification.VisualStabilityManager;
|
||||
import com.android.systemui.statusbar.notification.init.NotificationsController;
|
||||
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.logging.NotificationLogger;
|
||||
import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
|
||||
@@ -145,7 +144,6 @@ public class CarStatusBarModule {
|
||||
NotificationInterruptStateProvider notificationInterruptionStateProvider,
|
||||
NotificationViewHierarchyManager notificationViewHierarchyManager,
|
||||
KeyguardViewMediator keyguardViewMediator,
|
||||
NotificationAlertingManager notificationAlertingManager,
|
||||
DisplayMetrics displayMetrics,
|
||||
MetricsLogger metricsLogger,
|
||||
@UiBackground Executor uiBgExecutor,
|
||||
@@ -225,7 +223,6 @@ public class CarStatusBarModule {
|
||||
notificationInterruptionStateProvider,
|
||||
notificationViewHierarchyManager,
|
||||
keyguardViewMediator,
|
||||
notificationAlertingManager,
|
||||
displayMetrics,
|
||||
metricsLogger,
|
||||
uiBgExecutor,
|
||||
|
||||
@@ -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.NotificationFilter;
|
||||
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.row.ChannelEditorDialogController;
|
||||
import com.android.systemui.statusbar.notification.row.NotificationBlockingHelperManager;
|
||||
@@ -293,8 +292,6 @@ public class Dependency {
|
||||
@Inject Lazy<RemoteInputQuickSettingsDisabler> mRemoteInputQuickSettingsDisabler;
|
||||
@Inject Lazy<BubbleController> mBubbleController;
|
||||
@Inject Lazy<NotificationEntryManager> mNotificationEntryManager;
|
||||
@Inject
|
||||
Lazy<NotificationAlertingManager> mNotificationAlertingManager;
|
||||
@Inject Lazy<SensorPrivacyManager> mSensorPrivacyManager;
|
||||
@Inject Lazy<AutoHideController> mAutoHideController;
|
||||
@Inject Lazy<ForegroundServiceNotificationListener> mForegroundServiceNotificationListener;
|
||||
@@ -493,7 +490,6 @@ public class Dependency {
|
||||
mRemoteInputQuickSettingsDisabler::get);
|
||||
mProviders.put(BubbleController.class, mBubbleController::get);
|
||||
mProviders.put(NotificationEntryManager.class, mNotificationEntryManager::get);
|
||||
mProviders.put(NotificationAlertingManager.class, mNotificationAlertingManager::get);
|
||||
mProviders.put(ForegroundServiceNotificationListener.class,
|
||||
mForegroundServiceNotificationListener::get);
|
||||
mProviders.put(ClockManager.class, mClockManager::get);
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
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.notification.interruption.NotificationAlertingManager.alertAgain;
|
||||
import static com.android.systemui.statusbar.notification.interruption.HeadsUpController.alertAgain;
|
||||
|
||||
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.notifcollection.NotifCollectionListener;
|
||||
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.policy.HeadsUpManager;
|
||||
import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
|
||||
|
||||
@@ -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.NotificationsControllerImpl;
|
||||
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.NotificationInterruptStateProviderImpl;
|
||||
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.phone.NotificationGroupManager;
|
||||
import com.android.systemui.statusbar.phone.StatusBar;
|
||||
import com.android.systemui.statusbar.policy.HeadsUpManager;
|
||||
import com.android.systemui.util.leak.LeakDetector;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
@@ -137,27 +135,6 @@ public interface NotificationsModule {
|
||||
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} */
|
||||
@Singleton
|
||||
@Provides
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -28,7 +28,7 @@ import com.android.systemui.statusbar.notification.NotificationEntryManager
|
||||
import com.android.systemui.statusbar.notification.NotificationListController
|
||||
import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinderImpl
|
||||
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.stack.NotificationListContainer
|
||||
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.policy.DeviceProvisionedController
|
||||
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 dagger.Lazy
|
||||
import java.io.FileDescriptor
|
||||
@@ -66,7 +66,7 @@ class NotificationsControllerImpl @Inject constructor(
|
||||
private val groupManager: NotificationGroupManager,
|
||||
private val groupAlertTransferHelper: NotificationGroupAlertTransferHelper,
|
||||
private val headsUpManager: HeadsUpManager,
|
||||
private val headsUpBindController: HeadsUpBindController,
|
||||
private val headsUpController: HeadsUpController,
|
||||
private val headsUpViewBinder: HeadsUpViewBinder
|
||||
) : NotificationsController {
|
||||
|
||||
@@ -112,7 +112,7 @@ class NotificationsControllerImpl @Inject constructor(
|
||||
groupAlertTransferHelper.bind(entryManager, groupManager)
|
||||
headsUpManager.addListener(groupManager)
|
||||
headsUpManager.addListener(groupAlertTransferHelper)
|
||||
headsUpBindController.attach(entryManager, headsUpManager)
|
||||
headsUpController.attach(entryManager, headsUpManager)
|
||||
groupManager.setHeadsUpManager(headsUpManager)
|
||||
groupAlertTransferHelper.setHeadsUpManager(headsUpManager)
|
||||
|
||||
|
||||
@@ -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");
|
||||
* 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.util.Log;
|
||||
|
||||
import com.android.internal.statusbar.NotificationVisibility;
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
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.NotificationEntryListener;
|
||||
import com.android.systemui.statusbar.notification.NotificationEntryManager;
|
||||
import com.android.systemui.statusbar.notification.VisualStabilityManager;
|
||||
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.OnHeadsUpChangedListener;
|
||||
|
||||
/** Handles heads-up and pulsing behavior driven by notification changes. */
|
||||
public class NotificationAlertingManager {
|
||||
|
||||
private static final String TAG = "NotifAlertManager";
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
/**
|
||||
* 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 VisualStabilityManager mVisualStabilityManager;
|
||||
private final StatusBarStateController mStatusBarStateController;
|
||||
private final NotificationInterruptStateProvider mNotificationInterruptStateProvider;
|
||||
private final NotificationListener mNotificationListener;
|
||||
private final HeadsUpManager mHeadsUpManager;
|
||||
|
||||
private HeadsUpManager mHeadsUpManager;
|
||||
|
||||
/**
|
||||
* Injected constructor. See {@link NotificationsModule}.
|
||||
*/
|
||||
public NotificationAlertingManager(
|
||||
NotificationEntryManager notificationEntryManager,
|
||||
@Inject
|
||||
HeadsUpController(
|
||||
HeadsUpViewBinder headsUpViewBinder,
|
||||
NotificationInterruptStateProvider notificationInterruptStateProvider,
|
||||
HeadsUpManager headsUpManager,
|
||||
NotificationRemoteInputManager remoteInputManager,
|
||||
VisualStabilityManager visualStabilityManager,
|
||||
StatusBarStateController statusBarStateController,
|
||||
NotificationInterruptStateProvider notificationInterruptionStateProvider,
|
||||
NotificationListener notificationListener,
|
||||
HeadsUpManager headsUpManager) {
|
||||
mRemoteInputManager = remoteInputManager;
|
||||
mVisualStabilityManager = visualStabilityManager;
|
||||
mStatusBarStateController = statusBarStateController;
|
||||
mNotificationInterruptStateProvider = notificationInterruptionStateProvider;
|
||||
mNotificationListener = notificationListener;
|
||||
VisualStabilityManager visualStabilityManager,
|
||||
NotificationListener notificationListener) {
|
||||
mHeadsUpViewBinder = headsUpViewBinder;
|
||||
mHeadsUpManager = headsUpManager;
|
||||
|
||||
notificationEntryManager.addNotificationEntryListener(new NotificationEntryListener() {
|
||||
@Override
|
||||
public void onEntryInflated(NotificationEntry entry) {
|
||||
showAlertingView(entry);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPreEntryUpdated(NotificationEntry entry) {
|
||||
updateAlertState(entry);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEntryRemoved(
|
||||
NotificationEntry entry,
|
||||
NotificationVisibility visibility,
|
||||
boolean removedByUser,
|
||||
int reason) {
|
||||
stopAlerting(entry.getKey());
|
||||
}
|
||||
});
|
||||
mInterruptStateProvider = notificationInterruptStateProvider;
|
||||
mRemoteInputManager = remoteInputManager;
|
||||
mStatusBarStateController = statusBarStateController;
|
||||
mVisualStabilityManager = visualStabilityManager;
|
||||
mNotificationListener = notificationListener;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the entry to the respective alerting manager if the content view was inflated and
|
||||
* the entry should still alert.
|
||||
* 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, 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) {
|
||||
// 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);
|
||||
if (!mStatusBarStateController.isDozing()) {
|
||||
// Mark as seen immediately
|
||||
setNotificationShown(entry.getSbn());
|
||||
}
|
||||
mHeadsUpManager.showNotification(entry);
|
||||
if (!mStatusBarStateController.isDozing()) {
|
||||
// Mark as seen immediately
|
||||
setNotificationShown(entry.getSbn());
|
||||
}
|
||||
}
|
||||
|
||||
private void updateAlertState(NotificationEntry entry) {
|
||||
boolean alertAgain = alertAgain(entry, entry.getSbn().getNotification());
|
||||
private void updateHunState(NotificationEntry entry) {
|
||||
boolean hunAgain = alertAgain(entry, entry.getSbn().getNotification());
|
||||
// includes check for whether this notification should be filtered:
|
||||
boolean shouldAlert = mNotificationInterruptStateProvider.shouldHeadsUp(entry);
|
||||
final boolean wasAlerting = mHeadsUpManager.isAlerting(entry.getKey());
|
||||
if (wasAlerting) {
|
||||
if (shouldAlert) {
|
||||
mHeadsUpManager.updateNotification(entry.getKey(), alertAgain);
|
||||
boolean shouldHeadsUp = mInterruptStateProvider.shouldHeadsUp(entry);
|
||||
final boolean wasHeadsUp = mHeadsUpManager.isAlerting(entry.getKey());
|
||||
if (wasHeadsUp) {
|
||||
if (shouldHeadsUp) {
|
||||
mHeadsUpManager.updateNotification(entry.getKey(), hunAgain);
|
||||
} else if (!mHeadsUpManager.isEntryAutoHeadsUpped(entry.getKey())) {
|
||||
// We don't want this to be interrupting anymore, let's remove it
|
||||
mHeadsUpManager.removeNotification(entry.getKey(), false /* removeImmediately */);
|
||||
}
|
||||
} else if (shouldAlert && alertAgain) {
|
||||
// This notification was updated to be alerting, show it!
|
||||
mHeadsUpManager.showNotification(entry);
|
||||
} else if (shouldHeadsUp && hunAgain) {
|
||||
mHeadsUpViewBinder.bindHeadsUpView(entry, mHeadsUpManager::showNotification);
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
private void setNotificationShown(StatusBarNotification n) {
|
||||
try {
|
||||
mNotificationListener.setNotificationsShown(new String[]{n.getKey()});
|
||||
} catch (RuntimeException e) {
|
||||
Log.d(TAG, "failed setNotificationsShown: ", e);
|
||||
private OnHeadsUpChangedListener mOnHeadsUpChangedListener = new OnHeadsUpChangedListener() {
|
||||
@Override
|
||||
public void onHeadsUpStateChanged(@NonNull NotificationEntry entry, boolean isHeadsUp) {
|
||||
if (!isHeadsUp) {
|
||||
mHeadsUpViewBinder.unbindHeadsUpView(entry);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private void stopAlerting(final String key) {
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
private static final String TAG = "HeadsUpBindController";
|
||||
}
|
||||
@@ -14,7 +14,7 @@
|
||||
* 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;
|
||||
|
||||
@@ -42,7 +42,7 @@ import javax.inject.Singleton;
|
||||
* content view.
|
||||
*
|
||||
* 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
|
||||
public class HeadsUpViewBinder {
|
||||
@@ -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.init.NotificationsController;
|
||||
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.logging.NotificationLogger;
|
||||
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
|
||||
@@ -623,7 +622,6 @@ public class StatusBar extends SystemUI implements DemoMode,
|
||||
NotificationInterruptStateProvider notificationInterruptStateProvider,
|
||||
NotificationViewHierarchyManager notificationViewHierarchyManager,
|
||||
KeyguardViewMediator keyguardViewMediator,
|
||||
NotificationAlertingManager notificationAlertingManager, // need to inject for now
|
||||
DisplayMetrics displayMetrics,
|
||||
MetricsLogger metricsLogger,
|
||||
@UiBackground Executor uiBgExecutor,
|
||||
|
||||
@@ -62,7 +62,6 @@ import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator
|
||||
import com.android.systemui.statusbar.notification.VisualStabilityManager;
|
||||
import com.android.systemui.statusbar.notification.init.NotificationsController;
|
||||
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.logging.NotificationLogger;
|
||||
import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
|
||||
@@ -143,7 +142,6 @@ public interface StatusBarPhoneModule {
|
||||
NotificationInterruptStateProvider notificationInterruptStateProvider,
|
||||
NotificationViewHierarchyManager notificationViewHierarchyManager,
|
||||
KeyguardViewMediator keyguardViewMediator,
|
||||
NotificationAlertingManager notificationAlertingManager,
|
||||
DisplayMetrics displayMetrics,
|
||||
MetricsLogger metricsLogger,
|
||||
@UiBackground Executor uiBgExecutor,
|
||||
@@ -223,7 +221,6 @@ public interface StatusBarPhoneModule {
|
||||
notificationInterruptStateProvider,
|
||||
notificationViewHierarchyManager,
|
||||
keyguardViewMediator,
|
||||
notificationAlertingManager,
|
||||
displayMetrics,
|
||||
metricsLogger,
|
||||
uiBgExecutor,
|
||||
|
||||
@@ -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.notifcollection.NotifCollectionListener;
|
||||
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.row.NotifBindPipeline.BindCallback;
|
||||
import com.android.systemui.statusbar.policy.HeadsUpManager;
|
||||
|
||||
@@ -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.init.NotificationsController;
|
||||
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.logging.NotificationLogger;
|
||||
import com.android.systemui.statusbar.notification.logging.NotificationPanelLoggerFake;
|
||||
@@ -193,7 +192,6 @@ public class StatusBarTest extends SysuiTestCase {
|
||||
@Mock private StatusBarNotificationPresenter mNotificationPresenter;
|
||||
@Mock private NotificationEntryListener mEntryListener;
|
||||
@Mock private NotificationFilter mNotificationFilter;
|
||||
@Mock private NotificationAlertingManager mNotificationAlertingManager;
|
||||
@Mock private AmbientDisplayConfiguration mAmbientDisplayConfiguration;
|
||||
@Mock private NotificationLogger.ExpansionStateLogger mExpansionStateLogger;
|
||||
@Mock private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
|
||||
@@ -352,7 +350,6 @@ public class StatusBarTest extends SysuiTestCase {
|
||||
mNotificationInterruptStateProvider,
|
||||
mNotificationViewHierarchyManager,
|
||||
mKeyguardViewMediator,
|
||||
mNotificationAlertingManager,
|
||||
new DisplayMetrics(),
|
||||
mMetricsLogger,
|
||||
mUiBgExecutor,
|
||||
|
||||
Reference in New Issue
Block a user