diff --git a/packages/SystemUI/Android.bp b/packages/SystemUI/Android.bp index 91a8ab5f692f1..4c52b13247813 100644 --- a/packages/SystemUI/Android.bp +++ b/packages/SystemUI/Android.bp @@ -75,6 +75,7 @@ android_library { "--extra-packages", "com.android.keyguard", ], + kotlincflags: ["-Xjvm-default=enable"], plugins: ["dagger2-compiler-2.19"], } @@ -128,6 +129,7 @@ android_library { "telephony-common", "android.test.base", ], + kotlincflags: ["-Xjvm-default=enable"], aaptflags: [ "--extra-packages", "com.android.keyguard:com.android.systemui", @@ -155,6 +157,8 @@ android_app { "telephony-common", ], + kotlincflags: ["-Xjvm-default=enable"], + dxflags: ["--multi-dex"], aaptflags: [ "--extra-packages", @@ -191,6 +195,8 @@ android_app { "telephony-common", ], + kotlincflags: ["-Xjvm-default=enable"], + srcs: [ "legacy/recents/src/**/*.java", "legacy/recents/src/**/I*.aidl", diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java b/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java index 34cc70c1c42dd..73b8c947f7202 100644 --- a/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java +++ b/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java @@ -48,9 +48,11 @@ import com.android.systemui.statusbar.NotificationMediaManager; import com.android.systemui.statusbar.ScrimView; import com.android.systemui.statusbar.notification.NotificationEntryManager; import com.android.systemui.statusbar.notification.NotificationInterruptionStateProvider; +import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator; import com.android.systemui.statusbar.notification.collection.NotificationData; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.phone.KeyguardBouncer; +import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.statusbar.phone.KeyguardEnvironmentImpl; import com.android.systemui.statusbar.phone.LockIcon; import com.android.systemui.statusbar.phone.LockscreenWallpaper; @@ -145,10 +147,14 @@ public class SystemUIFactory { } public NotificationIconAreaController createNotificationIconAreaController(Context context, - StatusBar statusBar, StatusBarStateController statusBarStateController, + StatusBar statusBar, + NotificationWakeUpCoordinator wakeUpCoordinator, + KeyguardBypassController keyguardBypassController, + StatusBarStateController statusBarStateController, NotificationListener listener) { return new NotificationIconAreaController(context, statusBar, statusBarStateController, - listener, Dependency.get(NotificationMediaManager.class)); + wakeUpCoordinator, keyguardBypassController, listener, + Dependency.get(NotificationMediaManager.class)); } public KeyguardIndicationController createKeyguardIndicationController(Context context, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/PulseExpansionHandler.kt b/packages/SystemUI/src/com/android/systemui/statusbar/PulseExpansionHandler.kt index 8ca744b579ed7..bdc4d2a386420 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/PulseExpansionHandler.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/PulseExpansionHandler.kt @@ -93,6 +93,7 @@ constructor(context: Context, get() = mFalsingManager.isFalseTouch var qsExpanded: Boolean = false var pulseExpandAbortListener: Runnable? = null + var bouncerShowing: Boolean = false init { mMinDragDistance = context.resources.getDimensionPixelSize( @@ -107,7 +108,8 @@ constructor(context: Context, } private fun maybeStartExpansion(event: MotionEvent): Boolean { - if (!wakeUpCoordinator.canShowPulsingHuns || qsExpanded) { + if (!wakeUpCoordinator.canShowPulsingHuns || qsExpanded + || bouncerShowing) { return false } if (velocityTracker == null) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationWakeUpCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationWakeUpCoordinator.kt index 389b0aa27ef35..95af9fde1e98a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationWakeUpCoordinator.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationWakeUpCoordinator.kt @@ -66,7 +66,9 @@ class NotificationWakeUpCoordinator @Inject constructor( private var mLinearVisibilityAmount = 0.0f private var mWakingUp = false private val mEntrySetToClearWhenFinished = mutableSetOf() - private val mDozeParameters: DozeParameters; + private val mDozeParameters: DozeParameters + private var pulseExpanding: Boolean = false + private val wakeUpListeners = arrayListOf() var fullyAwake: Boolean = false var willWakeUp = false @@ -89,6 +91,16 @@ class NotificationWakeUpCoordinator @Inject constructor( } } + var notificationsFullyHidden: Boolean = false + private set(value) { + if (field != value) { + field = value + for (listener in wakeUpListeners) { + listener.onFullyHiddenChanged(value) + } + } + } + /** * True if we can show pulsing heads up notifications */ @@ -104,7 +116,6 @@ class NotificationWakeUpCoordinator @Inject constructor( return canShow } - init { mHeadsUpManagerPhone.addListener(this) mStatusBarStateController.addCallback(this) @@ -113,8 +124,19 @@ class NotificationWakeUpCoordinator @Inject constructor( fun setStackScroller(stackScroller: NotificationStackScrollLayout) { mStackScroller = stackScroller + pulseExpanding = stackScroller.isPulseExpanding + stackScroller.setOnPulseHeightChangedListener { + val nowExpanding = isPulseExpanding() + val changed = nowExpanding != pulseExpanding + pulseExpanding = nowExpanding + for (listener in wakeUpListeners) { + listener.onPulseExpansionChanged(changed) + } + } } + fun isPulseExpanding(): Boolean = mStackScroller.isPulseExpanding + /** * @param visible should notifications be visible * @param animate should this change be animated @@ -132,6 +154,14 @@ class NotificationWakeUpCoordinator @Inject constructor( } } + fun addListener(listener: WakeUpListener) { + wakeUpListeners.add(listener); + } + + fun removeFullyHiddenChangedListener(listener: WakeUpListener) { + wakeUpListeners.remove(listener); + } + private fun updateNotificationVisibility(animate: Boolean, increaseSpeed: Boolean) { // TODO: handle Lockscreen wakeup for bypass when we're not pulsing anymore var visible = mNotificationsVisibleForExpansion || mHeadsUpManagerPhone.hasNotifications() @@ -244,7 +274,7 @@ class NotificationWakeUpCoordinator @Inject constructor( val linearAmount = Math.min(1.0f - mLinearVisibilityAmount, mLinearDozeAmount) val amount = Math.min(1.0f - mVisibilityAmount, mDozeAmount) mStackScroller.setHideAmount(linearAmount, amount) - iconAreaController.setFullyHidden(linearAmount == 1.0f); + notificationsFullyHidden = linearAmount == 1.0f; } private fun notifyAnimationStart(awake: Boolean) { @@ -300,4 +330,17 @@ class NotificationWakeUpCoordinator @Inject constructor( private fun shouldAnimateVisibility() = mDozeParameters.getAlwaysOn() && !mDozeParameters.getDisplayNeedsBlanking() + + interface WakeUpListener { + /** + * Called whenever the notifications are fully hidden or shown + */ + @JvmDefault fun onFullyHiddenChanged(isFullyHidden: Boolean) {} + + /** + * Called whenever the pulseExpansion changes + * @param expandingChanged if the user has started or stopped expanding + */ + @JvmDefault fun onPulseExpansionChanged(expandingChanged: Boolean) {} + } } \ No newline at end of file diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java index 3c21699b192d5..e76f752819aa6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java @@ -3278,7 +3278,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements ScrollAd @Override @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER) public void generateAddAnimation(ExpandableView child, boolean fromMoreCard) { - if (mIsExpanded && mAnimationsEnabled && !mChangePositionInProgress) { + if (mIsExpanded && mAnimationsEnabled && !mChangePositionInProgress && !isFullyHidden()) { // Generate Animations mChildrenToAddAnimated.add(child); if (fromMoreCard) { @@ -3286,7 +3286,8 @@ public class NotificationStackScrollLayout extends ViewGroup implements ScrollAd } mNeedsAnimation = true; } - if (isHeadsUp(child) && mAnimationsEnabled && !mChangePositionInProgress) { + if (isHeadsUp(child) && mAnimationsEnabled && !mChangePositionInProgress + && !isFullyHidden()) { mAddedHeadsUpChildren.add(child); mChildrenToAddAnimated.remove(child); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java index 07436f8c27fee..2eadd125bacea 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java @@ -47,6 +47,8 @@ import com.android.systemui.R; import com.android.systemui.dock.DockManager; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.KeyguardAffordanceView; +import com.android.systemui.statusbar.StatusBarState; +import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator; import com.android.systemui.statusbar.phone.ScrimController.ScrimVisibility; import com.android.systemui.statusbar.policy.AccessibilityController; import com.android.systemui.statusbar.policy.ConfigurationController; @@ -64,7 +66,8 @@ import javax.inject.Named; */ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChangedListener, StatusBarStateController.StateListener, ConfigurationController.ConfigurationListener, - UnlockMethodCache.OnUnlockMethodChangedListener { + UnlockMethodCache.OnUnlockMethodChangedListener, + NotificationWakeUpCoordinator.WakeUpListener { private static final int STATE_LOCKED = 0; private static final int STATE_LOCK_OPEN = 1; @@ -78,6 +81,8 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange private final DockManager mDockManager; private final Handler mMainHandler; private final KeyguardMonitor mKeyguardMonitor; + private final KeyguardBypassController mBypassController; + private final NotificationWakeUpCoordinator mWakeUpCoordinator; private int mLastState = 0; private boolean mTransientBiometricsError; @@ -92,6 +97,7 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange private int mIconColor; private float mDozeAmount; private int mIconRes; + private boolean mBouncerShowing; private boolean mWasPulsingOnThisFrame; private boolean mWakeAndUnlockRunning; private boolean mKeyguardShowing; @@ -150,6 +156,8 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange StatusBarStateController statusBarStateController, ConfigurationController configurationController, AccessibilityController accessibilityController, + KeyguardBypassController bypassController, + NotificationWakeUpCoordinator wakeUpCoordinator, KeyguardMonitor keyguardMonitor, @Nullable DockManager dockManager, @Named(MAIN_HANDLER_NAME) Handler mainHandler) { @@ -160,6 +168,8 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange mAccessibilityController = accessibilityController; mConfigurationController = configurationController; mStatusBarStateController = statusBarStateController; + mBypassController = bypassController; + mWakeUpCoordinator = wakeUpCoordinator; mKeyguardMonitor = keyguardMonitor; mDockManager = dockManager; mMainHandler = mainHandler; @@ -173,6 +183,7 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange mKeyguardMonitor.addCallback(mKeyguardMonitorCallback); mKeyguardUpdateMonitor.registerCallback(mUpdateMonitorCallback); mUnlockMethodCache.addListener(this); + mWakeUpCoordinator.addListener(this); mSimLocked = mKeyguardUpdateMonitor.isSimPinSecure(); if (mDockManager != null) { mDockManager.addListener(mDockEventListener); @@ -187,6 +198,7 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange mConfigurationController.removeCallback(this); mKeyguardUpdateMonitor.removeCallback(mUpdateMonitorCallback); mKeyguardMonitor.removeCallback(mKeyguardMonitorCallback); + mWakeUpCoordinator.removeFullyHiddenChangedListener(this); mUnlockMethodCache.removeListener(this); if (mDockManager != null) { mDockManager.removeListener(mDockEventListener); @@ -279,6 +291,12 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange boolean onAodNotPulsingOrDocked = mDozing && (!mPulsing || mDocked); boolean invisible = onAodNotPulsingOrDocked || mWakeAndUnlockRunning || mShowingLaunchAffordance; + if (mBypassController.getBypassEnabled() + && mStatusBarStateController.getState() == StatusBarState.KEYGUARD + && !mWakeUpCoordinator.getNotificationsFullyHidden() + && !mBouncerShowing) { + invisible = true; + } setVisibility(invisible ? INVISIBLE : VISIBLE); updateClickability(); } @@ -369,6 +387,20 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange return -1; } + @Override + public void onFullyHiddenChanged(boolean isFullyHidden) { + if (mBypassController.getBypassEnabled()) { + update(); + } + } + + public void setBouncerShowing(boolean bouncerShowing) { + mBouncerShowing = bouncerShowing; + if (mBypassController.getBypassEnabled()) { + update(); + } + } + @Retention(RetentionPolicy.SOURCE) @IntDef({ERROR, UNLOCK, LOCK, SCANNING, LOCK_IN}) @interface LockAnimIndex {} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java index 4fb5b98ec3adf..5310a5449cd7c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java @@ -29,6 +29,7 @@ import com.android.systemui.statusbar.StatusBarIconView; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.notification.NotificationEntryManager; import com.android.systemui.statusbar.notification.NotificationUtils; +import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; @@ -41,7 +42,8 @@ import java.util.function.Function; * normally reserved for notifications. */ public class NotificationIconAreaController implements DarkReceiver, - StatusBarStateController.StateListener { + StatusBarStateController.StateListener, + NotificationWakeUpCoordinator.WakeUpListener { public static final String HIGH_PRIORITY = "high_priority"; private static final long AOD_ICONS_APPEAR_DURATION = 200; @@ -51,6 +53,8 @@ public class NotificationIconAreaController implements DarkReceiver, private final Runnable mUpdateStatusBarIcons = this::updateStatusBarIcons; private final StatusBarStateController mStatusBarStateController; private final NotificationMediaManager mMediaManager; + private final NotificationWakeUpCoordinator mWakeUpCoordinator; + private final KeyguardBypassController mBypassController; private final DozeParameters mDozeParameters; @VisibleForTesting final NotificationListener.NotificationSettingsListener mSettingsListener = @@ -91,6 +95,8 @@ public class NotificationIconAreaController implements DarkReceiver, public NotificationIconAreaController(Context context, StatusBar statusBar, StatusBarStateController statusBarStateController, + NotificationWakeUpCoordinator wakeUpCoordinator, + KeyguardBypassController keyguardBypassController, NotificationListener notificationListener, NotificationMediaManager notificationMediaManager) { mStatusBar = statusBar; @@ -102,6 +108,9 @@ public class NotificationIconAreaController implements DarkReceiver, mMediaManager = notificationMediaManager; notificationListener.addNotificationSettingsListener(mSettingsListener); mDozeParameters = DozeParameters.getInstance(mContext); + mWakeUpCoordinator = wakeUpCoordinator; + wakeUpCoordinator.addListener(this); + mBypassController = keyguardBypassController; initializeNotificationAreaViews(context); reloadAodColor(); @@ -238,7 +247,8 @@ public class NotificationIconAreaController implements DarkReceiver, protected boolean shouldShowNotificationIcon(NotificationEntry entry, boolean showAmbient, boolean showLowPriority, boolean hideDismissed, - boolean hideRepliedMessages, boolean hideCurrentMedia, boolean hideCenteredIcon) { + boolean hideRepliedMessages, boolean hideCurrentMedia, boolean hideCenteredIcon, + boolean hidePulsing) { final boolean isCenteredNotificationIcon = entry.centeredIcon != null && Objects.equals(entry.centeredIcon, mCenteredIconView); @@ -270,6 +280,9 @@ public class NotificationIconAreaController implements DarkReceiver, if (!showAmbient && entry.shouldSuppressStatusBar()) { return false; } + if (hidePulsing && entry.showingPulsing()) { + return false; + } return true; } @@ -292,7 +305,8 @@ public class NotificationIconAreaController implements DarkReceiver, false /* hideDismissed */, false /* hideRepliedMessages */, false /* hideCurrentMedia */, - true /* hide centered icon */); + true /* hide centered icon */, + false /* hidePulsing */); } public void updateStatusBarIcons() { @@ -302,7 +316,8 @@ public class NotificationIconAreaController implements DarkReceiver, true /* hideDismissed */, true /* hideRepliedMessages */, false /* hideCurrentMedia */, - true /* hide centered icon */); + true /* hide centered icon */, + false /* hidePulsing */); } private void updateCenterIcon() { @@ -312,7 +327,8 @@ public class NotificationIconAreaController implements DarkReceiver, false /* hideDismissed */, false /* hideRepliedMessages */, false /* hideCurrentMedia */, - false /* hide centered icon */); + false /* hide centered icon */, + false /* hidePulsing */); } public void updateAodIcons() { @@ -322,7 +338,8 @@ public class NotificationIconAreaController implements DarkReceiver, true /* hideDismissed */, true /* hideRepliedMessages */, true /* hideCurrentMedia */, - true /* hide centered icon */); + true /* hide centered icon */, + mBypassController.getBypassEnabled() /* hidePulsing */); } @VisibleForTesting @@ -338,11 +355,12 @@ public class NotificationIconAreaController implements DarkReceiver, * @param showAmbient should ambient notification icons be shown * @param hideDismissed should dismissed icons be hidden * @param hideRepliedMessages should messages that have been replied to be hidden + * @param hidePulsing should pulsing notifications be hidden */ private void updateIconsForLayout(Function function, NotificationIconContainer hostLayout, boolean showAmbient, boolean showLowPriority, boolean hideDismissed, boolean hideRepliedMessages, boolean hideCurrentMedia, - boolean hideCenteredIcon) { + boolean hideCenteredIcon, boolean hidePulsing) { ArrayList toShow = new ArrayList<>( mNotificationScrollLayout.getChildCount()); @@ -352,7 +370,7 @@ public class NotificationIconAreaController implements DarkReceiver, if (view instanceof ExpandableNotificationRow) { NotificationEntry ent = ((ExpandableNotificationRow) view).getEntry(); if (shouldShowNotificationIcon(ent, showAmbient, showLowPriority, hideDismissed, - hideRepliedMessages, hideCurrentMedia, hideCenteredIcon)) { + hideRepliedMessages, hideCurrentMedia, hideCenteredIcon, hidePulsing)) { StatusBarIconView iconView = function.apply(ent); if (iconView != null) { toShow.add(iconView); @@ -514,6 +532,7 @@ public class NotificationIconAreaController implements DarkReceiver, @Override public void onStateChanged(int newState) { + updateAodIconsVisibility(); updateAnimations(); } @@ -562,17 +581,31 @@ public class NotificationIconAreaController implements DarkReceiver, } } - public void setFullyHidden(boolean fullyHidden) { - if (mFullyHidden != fullyHidden) { - mFullyHidden = fullyHidden; - if (fullyHidden) { - appearAodIcons(); - } + @Override + public void onFullyHiddenChanged(boolean fullyHidden) { + if (fullyHidden && !mBypassController.getBypassEnabled()) { + appearAodIcons(); + } + updateAodIconsVisibility(); + updateAodIcons(); + } + + @Override + public void onPulseExpansionChanged(boolean expandingChanged) { + if (expandingChanged) { updateAodIconsVisibility(); } } private void updateAodIconsVisibility() { - mAodIcons.setVisibility(mFullyHidden ? View.VISIBLE : View.INVISIBLE); + boolean visible = mBypassController.getBypassEnabled() + || mWakeUpCoordinator.getNotificationsFullyHidden(); + if (mStatusBarStateController.getState() != StatusBarState.KEYGUARD) { + visible = false; + } + if (visible && mWakeUpCoordinator.isPulseExpanding()) { + visible = false; + } + mAodIcons.setVisibility(visible ? View.VISIBLE : View.INVISIBLE); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java index fa401fee82400..e805575e38846 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java @@ -113,7 +113,8 @@ public class NotificationPanelView extends PanelView implements KeyguardAffordanceHelper.Callback, NotificationStackScrollLayout.OnEmptySpaceClickListener, OnHeadsUpChangedListener, QS.HeightListener, ZenModeController.Callback, ConfigurationController.ConfigurationListener, StateListener, - PulseExpansionHandler.ExpansionCallback, DynamicPrivacyController.Listener { + PulseExpansionHandler.ExpansionCallback, DynamicPrivacyController.Listener, + NotificationWakeUpCoordinator.WakeUpListener { private static final boolean DEBUG = false; @@ -429,16 +430,16 @@ public class NotificationPanelView extends PanelView implements mWakeUpCoordinator.setStackScroller(mNotificationStackScroller); mQsFrame = findViewById(R.id.qs_frame); mPulseExpansionHandler.setUp(mNotificationStackScroller, this, mShadeController); - - - mNotificationStackScroller.setOnPulseHeightChangedListener( - () -> { - if (mKeyguardBypassController.getBypassEnabled()) { - // Position the notifications while dragging down while pulsing - requestScrollerTopPaddingUpdate(false /* animate */); - updateQSPulseExpansion(); - } - }); + mWakeUpCoordinator.addListener(new NotificationWakeUpCoordinator.WakeUpListener() { + @Override + public void onPulseExpansionChanged(boolean expandingChanged) { + if (mKeyguardBypassController.getBypassEnabled()) { + // Position the notifications while dragging down while pulsing + requestScrollerTopPaddingUpdate(false /* animate */); + updateQSPulseExpansion(); + } + } + }); } @Override 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 2d4c1aa0e1791..96e7efe1335ba 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -799,6 +799,7 @@ public class StatusBar extends SystemUI implements DemoMode, mNotificationIconAreaController = SystemUIFactory.getInstance() .createNotificationIconAreaController(context, this, + mWakeUpCoordinator, mKeyguardBypassController, mStatusBarStateController, mNotificationListener); mWakeUpCoordinator.setIconAreaController(mNotificationIconAreaController); inflateShelf(); @@ -3572,6 +3573,8 @@ public class StatusBar extends SystemUI implements DemoMode, public void setBouncerShowing(boolean bouncerShowing) { mBouncerShowing = bouncerShowing; mKeyguardBypassController.setBouncerShowing(bouncerShowing); + mPulseExpansionHandler.setBouncerShowing(bouncerShowing); + mStatusBarWindow.setBouncerShowing(bouncerShowing); if (mStatusBarView != null) mStatusBarView.setBouncerShowing(bouncerShowing); updateHideIconsForBouncer(true /* animate */); mCommandQueue.recomputeDisableFlags(mDisplayId, true /* animate */); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java index 9417295b35214..a82e14efca2f1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java @@ -525,6 +525,12 @@ public class StatusBarWindowView extends FrameLayout { mBypassController = bypassController; } + public void setBouncerShowing(boolean bouncerShowing) { + if (mLockIcon != null) { + mLockIcon.setBouncerShowing(bouncerShowing); + } + } + public class LayoutParams extends FrameLayout.LayoutParams { public boolean ignoreRightInset; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationIconAreaControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationIconAreaControllerTest.java index 61b753079f0b7..b1d5d2672ca67 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationIconAreaControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationIconAreaControllerTest.java @@ -33,12 +33,12 @@ import com.android.systemui.SysuiTestCase; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.NotificationListener; import com.android.systemui.statusbar.NotificationMediaManager; +import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.Mockito; import org.mockito.MockitoAnnotations; @SmallTest @@ -57,6 +57,10 @@ public class NotificationIconAreaControllerTest extends SysuiTestCase { @Mock StatusBarStateController mStatusBarStateController; @Mock + NotificationWakeUpCoordinator mNotificationWakeUpCoordinator; + @Mock + KeyguardBypassController mBypassController; + @Mock private NotificationMediaManager mMediaManager; private NotificationIconAreaController mController; @@ -67,7 +71,8 @@ public class NotificationIconAreaControllerTest extends SysuiTestCase { when(mStatusBarWindowView.findViewById(R.id.clock_notification_icon_container)).thenReturn( mIconContainer); mController = new NotificationIconAreaController(mContext, mStatusBar, - mStatusBarStateController, mListener, mMediaManager); + mStatusBarStateController, mNotificationWakeUpCoordinator, mBypassController, + mListener, mMediaManager); } @Test