Continued the bypass experience
The lock icon now hides as soon as the notifications are showing to avoid the overlap introduced in the previous CL. We're also introducing a new listener that one can listen to for when the notifications are fully hidden. That same listener is now used to hide and show the aod icons Bug: 130327302 Change-Id: I5694a38e542b82bf2738d66bdff28d122a9f89e7
This commit is contained in:
@@ -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",
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -66,7 +66,9 @@ class NotificationWakeUpCoordinator @Inject constructor(
|
||||
private var mLinearVisibilityAmount = 0.0f
|
||||
private var mWakingUp = false
|
||||
private val mEntrySetToClearWhenFinished = mutableSetOf<NotificationEntry>()
|
||||
private val mDozeParameters: DozeParameters;
|
||||
private val mDozeParameters: DozeParameters
|
||||
private var pulseExpanding: Boolean = false
|
||||
private val wakeUpListeners = arrayListOf<WakeUpListener>()
|
||||
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) {}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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 {}
|
||||
|
||||
@@ -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<NotificationEntry, StatusBarIconView> function,
|
||||
NotificationIconContainer hostLayout, boolean showAmbient, boolean showLowPriority,
|
||||
boolean hideDismissed, boolean hideRepliedMessages, boolean hideCurrentMedia,
|
||||
boolean hideCenteredIcon) {
|
||||
boolean hideCenteredIcon, boolean hidePulsing) {
|
||||
ArrayList<StatusBarIconView> 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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 */);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user