summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java80
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarDemoMode.java1
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeadsUpChangeListener.java133
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarComponent.java7
4 files changed, 151 insertions, 70 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
index 3b5d69da4c89..cfce7967e969 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -237,7 +237,6 @@ import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceP
import com.android.systemui.statusbar.policy.ExtensionController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.NetworkController;
-import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler;
import com.android.systemui.statusbar.policy.UserInfoControllerImpl;
import com.android.systemui.statusbar.policy.UserSwitcherController;
@@ -266,8 +265,8 @@ import dagger.Lazy;
/** */
public class StatusBar extends SystemUI implements
- ActivityStarter, KeyguardStateController.Callback,
- OnHeadsUpChangedListener, CommandQueue.Callbacks,
+ ActivityStarter,
+ CommandQueue.Callbacks,
ColorExtractor.OnColorsChangedListener, ConfigurationListener,
StatusBarStateController.StateListener,
LifecycleOwner, BatteryController.BatteryStateChangeCallback,
@@ -1039,7 +1038,13 @@ public class StatusBar extends SystemUI implements
// Lastly, call to the icon policy to install/update all the icons.
mIconPolicy.init();
- mKeyguardStateController.addCallback(this);
+ mKeyguardStateController.addCallback(new KeyguardStateController.Callback() {
+ @Override
+ public void onUnlockedChanged() {
+ updateKeyguardState();
+ logStateToEventlog();
+ }
+ });
startKeyguard();
mKeyguardUpdateMonitor.registerCallback(mUpdateCallback);
@@ -1215,7 +1220,6 @@ public class StatusBar extends SystemUI implements
mHeadsUpManager.setup(mVisualStabilityManager);
mStatusBarTouchableRegionManager.setup(this, mNotificationShadeWindowView);
- mHeadsUpManager.addListener(this);
mHeadsUpManager.addListener(mNotificationPanelViewController.getOnHeadsUpChangedListener());
mHeadsUpManager.addListener(mVisualStabilityManager);
mNotificationPanelViewController.setHeadsUpManager(mHeadsUpManager);
@@ -1596,6 +1600,8 @@ public class StatusBar extends SystemUI implements
mAuthRippleController = statusBarComponent.getAuthRippleController();
mAuthRippleController.init();
+ mHeadsUpManager.addListener(statusBarComponent.getStatusBarHeadsUpChangeListener());
+
// Listen for demo mode changes
mDemoModeController.addCallback(statusBarComponent.getStatusBarDemoMode());
}
@@ -1918,70 +1924,6 @@ public class StatusBar extends SystemUI implements
logStateToEventlog();
}
- @Override
- public void onUnlockedChanged() {
- updateKeyguardState();
- logStateToEventlog();
- }
-
- @Override
- public void onHeadsUpPinnedModeChanged(boolean inPinnedMode) {
- if (inPinnedMode) {
- mNotificationShadeWindowController.setHeadsUpShowing(true);
- mStatusBarWindowController.setForceStatusBarVisible(true);
- if (mNotificationPanelViewController.isFullyCollapsed()) {
- // We need to ensure that the touchable region is updated before the window will be
- // resized, in order to not catch any touches. A layout will ensure that
- // onComputeInternalInsets will be called and after that we can resize the layout. Let's
- // make sure that the window stays small for one frame until the touchableRegion is set.
- mNotificationPanelViewController.getView().requestLayout();
- mNotificationShadeWindowController.setForceWindowCollapsed(true);
- mNotificationPanelViewController.getView().post(() -> {
- mNotificationShadeWindowController.setForceWindowCollapsed(false);
- });
- }
- } else {
- boolean bypassKeyguard = mKeyguardBypassController.getBypassEnabled()
- && mState == StatusBarState.KEYGUARD;
- if (!mNotificationPanelViewController.isFullyCollapsed()
- || mNotificationPanelViewController.isTracking() || bypassKeyguard) {
- // We are currently tracking or is open and the shade doesn't need to be kept
- // open artificially.
- mNotificationShadeWindowController.setHeadsUpShowing(false);
- if (bypassKeyguard) {
- mStatusBarWindowController.setForceStatusBarVisible(false);
- }
- } else {
- // we need to keep the panel open artificially, let's wait until the animation
- // is finished.
- mHeadsUpManager.setHeadsUpGoingAway(true);
- mNotificationPanelViewController.runAfterAnimationFinished(() -> {
- if (!mHeadsUpManager.hasPinnedHeadsUp()) {
- mNotificationShadeWindowController.setHeadsUpShowing(false);
- mHeadsUpManager.setHeadsUpGoingAway(false);
- }
- mRemoteInputManager.onPanelCollapsed();
- });
- }
- }
- }
-
- @Override
- public void onHeadsUpStateChanged(NotificationEntry entry, boolean isHeadsUp) {
- mNotificationsController.requestNotificationUpdate("onHeadsUpStateChanged");
- if (mStatusBarStateController.isDozing() && isHeadsUp) {
- entry.setPulseSuppressed(false);
- mDozeServiceHost.fireNotificationPulse(entry);
- if (mDozeServiceHost.isPulsing()) {
- mDozeScrimController.cancelPendingPulseTimeout();
- }
- }
- if (!isHeadsUp && !mHeadsUpManager.hasNotifications()) {
- // There are no longer any notifications to show. We should end the pulse now.
- mDozeScrimController.pulseOutNow();
- }
- }
-
public void setPanelExpanded(boolean isExpanded) {
if (mPanelExpanded != isExpanded) {
mNotificationLogger.onPanelExpandedChanged(isExpanded);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarDemoMode.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarDemoMode.java
index 8938f9604d3e..e642b2e244e8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarDemoMode.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarDemoMode.java
@@ -113,7 +113,6 @@ public class StatusBarDemoMode implements DemoMode {
}
}
-
private void dispatchDemoModeStartedToView(int id) {
View statusBarView = mStatusBar.getStatusBarView();
if (statusBarView == null) return;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeadsUpChangeListener.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeadsUpChangeListener.java
new file mode 100644
index 000000000000..ca877af150da
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeadsUpChangeListener.java
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.phone;
+
+import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.statusbar.NotificationRemoteInputManager;
+import com.android.systemui.statusbar.NotificationShadeWindowController;
+import com.android.systemui.statusbar.StatusBarState;
+import com.android.systemui.statusbar.notification.collection.NotificationEntry;
+import com.android.systemui.statusbar.notification.init.NotificationsController;
+import com.android.systemui.statusbar.phone.dagger.StatusBarComponent;
+import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
+
+import javax.inject.Inject;
+
+/** Ties the {@link StatusBar} to {@link com.android.systemui.statusbar.policy.HeadsUpManager}. */
+@StatusBarComponent.StatusBarScope
+public class StatusBarHeadsUpChangeListener implements OnHeadsUpChangedListener {
+ private final NotificationShadeWindowController mNotificationShadeWindowController;
+ private final StatusBarWindowController mStatusBarWindowController;
+ private final NotificationPanelViewController mNotificationPanelViewController;
+ private final KeyguardBypassController mKeyguardBypassController;
+ private final HeadsUpManagerPhone mHeadsUpManager;
+ private final StatusBarStateController mStatusBarStateController;
+ private final NotificationRemoteInputManager mNotificationRemoteInputManager;
+ private final NotificationsController mNotificationsController;
+ private final DozeServiceHost mDozeServiceHost;
+ private final DozeScrimController mDozeScrimController;
+
+ @Inject
+ StatusBarHeadsUpChangeListener(
+ NotificationShadeWindowController notificationShadeWindowController,
+ StatusBarWindowController statusBarWindowController,
+ NotificationPanelViewController notificationPanelViewController,
+ KeyguardBypassController keyguardBypassController,
+ HeadsUpManagerPhone headsUpManager,
+ StatusBarStateController statusBarStateController,
+ NotificationRemoteInputManager notificationRemoteInputManager,
+ NotificationsController notificationsController,
+ DozeServiceHost dozeServiceHost,
+ DozeScrimController dozeScrimController) {
+
+ mNotificationShadeWindowController = notificationShadeWindowController;
+ mStatusBarWindowController = statusBarWindowController;
+ mNotificationPanelViewController = notificationPanelViewController;
+ mKeyguardBypassController = keyguardBypassController;
+ mHeadsUpManager = headsUpManager;
+ mStatusBarStateController = statusBarStateController;
+ mNotificationRemoteInputManager = notificationRemoteInputManager;
+ mNotificationsController = notificationsController;
+ mDozeServiceHost = dozeServiceHost;
+ mDozeScrimController = dozeScrimController;
+ }
+
+ @Override
+ public void onHeadsUpPinnedModeChanged(boolean inPinnedMode) {
+ if (inPinnedMode) {
+ mNotificationShadeWindowController.setHeadsUpShowing(true);
+ mStatusBarWindowController.setForceStatusBarVisible(true);
+ if (mNotificationPanelViewController.isFullyCollapsed()) {
+ // We need to ensure that the touchable region is updated before the
+ //window will be
+ // resized, in order to not catch any touches. A layout will ensure that
+ // onComputeInternalInsets will be called and after that we can
+ //resize the layout. Let's
+ // make sure that the window stays small for one frame until the
+ //touchableRegion is set.
+ mNotificationPanelViewController.getView().requestLayout();
+ mNotificationShadeWindowController.setForceWindowCollapsed(true);
+ mNotificationPanelViewController.getView().post(() -> {
+ mNotificationShadeWindowController.setForceWindowCollapsed(false);
+ });
+ }
+ } else {
+ boolean bypassKeyguard = mKeyguardBypassController.getBypassEnabled()
+ && mStatusBarStateController.getState() == StatusBarState.KEYGUARD;
+ if (!mNotificationPanelViewController.isFullyCollapsed()
+ || mNotificationPanelViewController.isTracking()
+ || bypassKeyguard) {
+ // We are currently tracking or is open and the shade doesn't need to
+ //be kept
+ // open artificially.
+ mNotificationShadeWindowController.setHeadsUpShowing(false);
+ if (bypassKeyguard) {
+ mStatusBarWindowController.setForceStatusBarVisible(false);
+ }
+ } else {
+ // we need to keep the panel open artificially, let's wait until the
+ //animation
+ // is finished.
+ mHeadsUpManager.setHeadsUpGoingAway(true);
+ mNotificationPanelViewController.runAfterAnimationFinished(() -> {
+ if (!mHeadsUpManager.hasPinnedHeadsUp()) {
+ mNotificationShadeWindowController.setHeadsUpShowing(false);
+ mHeadsUpManager.setHeadsUpGoingAway(false);
+ }
+ mNotificationRemoteInputManager.onPanelCollapsed();
+ });
+ }
+ }
+ }
+
+ @Override
+ public void onHeadsUpStateChanged(NotificationEntry entry, boolean isHeadsUp) {
+ mNotificationsController.requestNotificationUpdate("onHeadsUpStateChanged");
+ if (mStatusBarStateController.isDozing() && isHeadsUp) {
+ entry.setPulseSuppressed(false);
+ mDozeServiceHost.fireNotificationPulse(entry);
+ if (mDozeServiceHost.isPulsing()) {
+ mDozeScrimController.cancelPendingPulseTimeout();
+ }
+ }
+ if (!isHeadsUp && !mHeadsUpManager.hasNotifications()) {
+ // There are no longer any notifications to show. We should end the
+ //pulse now.
+ mDozeScrimController.pulseOutNow();
+ }
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarComponent.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarComponent.java
index a4063bb20c3c..d71fc9ea6b78 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarComponent.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarComponent.java
@@ -25,6 +25,7 @@ import com.android.systemui.statusbar.phone.NotificationShadeWindowView;
import com.android.systemui.statusbar.phone.NotificationShadeWindowViewController;
import com.android.systemui.statusbar.phone.SplitShadeHeaderController;
import com.android.systemui.statusbar.phone.StatusBarDemoMode;
+import com.android.systemui.statusbar.phone.StatusBarHeadsUpChangeListener;
import com.android.systemui.statusbar.phone.StatusBarWindowController;
import java.lang.annotation.Documented;
@@ -96,6 +97,12 @@ public interface StatusBarComponent {
StatusBarDemoMode getStatusBarDemoMode();
/**
+ * Creates a StatusBarHeadsUpChangeListener.
+ */
+ @StatusBarScope
+ StatusBarHeadsUpChangeListener getStatusBarHeadsUpChangeListener();
+
+ /**
* Creates a SplitShadeHeaderController.
*/
@StatusBarScope