Merge changes from topic "b150393918-lock-icon-controller" into rvc-dev

* changes:
  Move DockEventListener from LockIcon to Controller
  Move KeyguardUpdateMonitorCallback from LockIcon to Controller.
  Remove OnHeadsUpChangedListener from LockIcon.
  Move WakeUpListener from LockIcon to Controller.
  Remove KeyguardStateController.Callback from LockIcon.
This commit is contained in:
Dave Mankoff
2020-03-06 15:35:53 +00:00
committed by Android (Google) Code Review
3 changed files with 94 additions and 71 deletions

View File

@@ -26,7 +26,6 @@ import android.graphics.Color;
import android.graphics.drawable.Animatable2; import android.graphics.drawable.Animatable2;
import android.graphics.drawable.AnimatedVectorDrawable; import android.graphics.drawable.AnimatedVectorDrawable;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.hardware.biometrics.BiometricSourceType;
import android.os.Trace; import android.os.Trace;
import android.provider.Settings; import android.provider.Settings;
import android.text.TextUtils; import android.text.TextUtils;
@@ -34,22 +33,17 @@ import android.util.AttributeSet;
import android.view.ViewTreeObserver; import android.view.ViewTreeObserver;
import android.view.accessibility.AccessibilityNodeInfo; import android.view.accessibility.AccessibilityNodeInfo;
import androidx.annotation.Nullable;
import com.android.internal.graphics.ColorUtils; import com.android.internal.graphics.ColorUtils;
import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.systemui.Dependency; import com.android.systemui.Dependency;
import com.android.systemui.Interpolators; import com.android.systemui.Interpolators;
import com.android.systemui.R; import com.android.systemui.R;
import com.android.systemui.dock.DockManager;
import com.android.systemui.statusbar.KeyguardAffordanceView; import com.android.systemui.statusbar.KeyguardAffordanceView;
import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator; import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
import com.android.systemui.statusbar.phone.ScrimController.ScrimVisibility; import com.android.systemui.statusbar.phone.ScrimController.ScrimVisibility;
import com.android.systemui.statusbar.policy.AccessibilityController; import com.android.systemui.statusbar.policy.AccessibilityController;
import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
@@ -61,8 +55,7 @@ import javax.inject.Named;
* Manages the different states and animations of the unlock icon. * Manages the different states and animations of the unlock icon.
*/ */
public class LockIcon extends KeyguardAffordanceView implements public class LockIcon extends KeyguardAffordanceView implements
KeyguardStateController.Callback, NotificationWakeUpCoordinator.WakeUpListener, ViewTreeObserver.OnPreDrawListener {
ViewTreeObserver.OnPreDrawListener, OnHeadsUpChangedListener {
private static final int STATE_LOCKED = 0; private static final int STATE_LOCKED = 0;
private static final int STATE_LOCK_OPEN = 1; private static final int STATE_LOCK_OPEN = 1;
@@ -70,7 +63,6 @@ public class LockIcon extends KeyguardAffordanceView implements
private static final int STATE_BIOMETRICS_ERROR = 3; private static final int STATE_BIOMETRICS_ERROR = 3;
private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
private final AccessibilityController mAccessibilityController; private final AccessibilityController mAccessibilityController;
private final DockManager mDockManager;
private final KeyguardStateController mKeyguardStateController; private final KeyguardStateController mKeyguardStateController;
private final KeyguardBypassController mBypassController; private final KeyguardBypassController mBypassController;
private final NotificationWakeUpCoordinator mWakeUpCoordinator; private final NotificationWakeUpCoordinator mWakeUpCoordinator;
@@ -130,43 +122,6 @@ public class LockIcon extends KeyguardAffordanceView implements
update(); update();
} }
}; };
private final DockManager.DockEventListener mDockEventListener =
new DockManager.DockEventListener() {
@Override
public void onEvent(int event) {
boolean docked = event == DockManager.STATE_DOCKED
|| event == DockManager.STATE_DOCKED_HIDE;
if (docked != mDocked) {
mDocked = docked;
update();
}
}
};
private final KeyguardUpdateMonitorCallback mUpdateMonitorCallback =
new KeyguardUpdateMonitorCallback() {
@Override
public void onSimStateChanged(int subId, int slotId, int simState) {
mSimLocked = mKeyguardUpdateMonitor.isSimPinSecure();
update();
}
@Override
public void onKeyguardVisibilityChanged(boolean showing) {
update();
}
@Override
public void onBiometricRunningStateChanged(boolean running,
BiometricSourceType biometricSourceType) {
update();
}
@Override
public void onStrongAuthStateChanged(int userId) {
update();
}
};
@Inject @Inject
public LockIcon(@Named(VIEW_CONTEXT) Context context, AttributeSet attrs, public LockIcon(@Named(VIEW_CONTEXT) Context context, AttributeSet attrs,
@@ -174,7 +129,6 @@ public class LockIcon extends KeyguardAffordanceView implements
KeyguardBypassController bypassController, KeyguardBypassController bypassController,
NotificationWakeUpCoordinator wakeUpCoordinator, NotificationWakeUpCoordinator wakeUpCoordinator,
KeyguardStateController keyguardStateController, KeyguardStateController keyguardStateController,
@Nullable DockManager dockManager,
HeadsUpManagerPhone headsUpManager) { HeadsUpManagerPhone headsUpManager) {
super(context, attrs); super(context, attrs);
mContext = context; mContext = context;
@@ -183,7 +137,6 @@ public class LockIcon extends KeyguardAffordanceView implements
mBypassController = bypassController; mBypassController = bypassController;
mWakeUpCoordinator = wakeUpCoordinator; mWakeUpCoordinator = wakeUpCoordinator;
mKeyguardStateController = keyguardStateController; mKeyguardStateController = keyguardStateController;
mDockManager = dockManager;
mHeadsUpManager = headsUpManager; mHeadsUpManager = headsUpManager;
} }
@@ -191,24 +144,14 @@ public class LockIcon extends KeyguardAffordanceView implements
protected void onAttachedToWindow() { protected void onAttachedToWindow() {
super.onAttachedToWindow(); super.onAttachedToWindow();
mKeyguardStateController.addCallback(mKeyguardMonitorCallback); mKeyguardStateController.addCallback(mKeyguardMonitorCallback);
mKeyguardUpdateMonitor.registerCallback(mUpdateMonitorCallback);
mWakeUpCoordinator.addListener(this);
mSimLocked = mKeyguardUpdateMonitor.isSimPinSecure(); mSimLocked = mKeyguardUpdateMonitor.isSimPinSecure();
if (mDockManager != null) {
mDockManager.addListener(mDockEventListener);
}
update(); update();
} }
@Override @Override
protected void onDetachedFromWindow() { protected void onDetachedFromWindow() {
super.onDetachedFromWindow(); super.onDetachedFromWindow();
mKeyguardUpdateMonitor.removeCallback(mUpdateMonitorCallback);
mKeyguardStateController.removeCallback(mKeyguardMonitorCallback); mKeyguardStateController.removeCallback(mKeyguardMonitorCallback);
mWakeUpCoordinator.removeListener(this);
if (mDockManager != null) {
mDockManager.removeListener(mDockEventListener);
}
} }
/** /**
@@ -306,7 +249,7 @@ public class LockIcon extends KeyguardAffordanceView implements
* Update the icon visibility * Update the icon visibility
* @return true if the visibility changed * @return true if the visibility changed
*/ */
private boolean updateIconVisibility() { boolean updateIconVisibility() {
boolean onAodNotPulsingOrDocked = mDozing && (!mPulsing || mDocked); boolean onAodNotPulsingOrDocked = mDozing && (!mPulsing || mDocked);
boolean invisible = onAodNotPulsingOrDocked || mWakeAndUnlockRunning boolean invisible = onAodNotPulsingOrDocked || mWakeAndUnlockRunning
|| mShowingLaunchAffordance; || mShowingLaunchAffordance;
@@ -424,16 +367,6 @@ public class LockIcon extends KeyguardAffordanceView implements
return -1; return -1;
} }
@Override
public void onFullyHiddenChanged(boolean isFullyHidden) {
if (mBypassController.getBypassEnabled()) {
boolean changed = updateIconVisibility();
if (changed) {
update();
}
}
}
public void setBouncerShowingScrimmed(boolean bouncerShowing) { public void setBouncerShowingScrimmed(boolean bouncerShowing) {
mBouncerShowingScrimmed = bouncerShowing; mBouncerShowingScrimmed = bouncerShowing;
if (mBypassController.getBypassEnabled()) { if (mBypassController.getBypassEnabled()) {
@@ -454,6 +387,18 @@ public class LockIcon extends KeyguardAffordanceView implements
updateDarkTint(); updateDarkTint();
} }
void setSimLocked(boolean simLocked) {
mSimLocked = simLocked;
}
/** Set if the device is docked. */
public void setDocked(boolean docked) {
if (mDocked != docked) {
mDocked = docked;
update();
}
}
@Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE)
@IntDef({ERROR, UNLOCK, LOCK, SCANNING}) @IntDef({ERROR, UNLOCK, LOCK, SCANNING})
@interface LockAnimIndex {} @interface LockAnimIndex {}

View File

@@ -18,20 +18,29 @@ package com.android.systemui.statusbar.phone;
import android.content.res.TypedArray; import android.content.res.TypedArray;
import android.graphics.Color; import android.graphics.Color;
import android.hardware.biometrics.BiometricSourceType;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import androidx.annotation.Nullable;
import com.android.internal.logging.nano.MetricsProto; import com.android.internal.logging.nano.MetricsProto;
import com.android.internal.widget.LockPatternUtils; import com.android.internal.widget.LockPatternUtils;
import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.systemui.R; import com.android.systemui.R;
import com.android.systemui.dock.DockManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.KeyguardIndicationController; import com.android.systemui.statusbar.KeyguardIndicationController;
import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator.WakeUpListener;
import com.android.systemui.statusbar.policy.AccessibilityController; import com.android.systemui.statusbar.policy.AccessibilityController;
import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener; import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;
import java.util.Optional;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
@@ -47,6 +56,9 @@ public class LockscreenLockIconController {
private final KeyguardIndicationController mKeyguardIndicationController; private final KeyguardIndicationController mKeyguardIndicationController;
private final StatusBarStateController mStatusBarStateController; private final StatusBarStateController mStatusBarStateController;
private final ConfigurationController mConfigurationController; private final ConfigurationController mConfigurationController;
private final NotificationWakeUpCoordinator mNotificationWakeUpCoordinator;
private final KeyguardBypassController mKeyguardBypassController;
private final Optional<DockManager> mDockManager;
private LockIcon mLockIcon; private LockIcon mLockIcon;
private View.OnAttachStateChangeListener mOnAttachStateChangeListener = private View.OnAttachStateChangeListener mOnAttachStateChangeListener =
@@ -55,6 +67,10 @@ public class LockscreenLockIconController {
public void onViewAttachedToWindow(View v) { public void onViewAttachedToWindow(View v) {
mStatusBarStateController.addCallback(mSBStateListener); mStatusBarStateController.addCallback(mSBStateListener);
mConfigurationController.addCallback(mConfigurationListener); mConfigurationController.addCallback(mConfigurationListener);
mNotificationWakeUpCoordinator.addListener(mWakeUpListener);
mKeyguardUpdateMonitor.registerCallback(mUpdateMonitorCallback);
mDockManager.ifPresent(dockManager -> dockManager.addListener(mDockEventListener));
mConfigurationListener.onThemeChanged(); mConfigurationListener.onThemeChanged();
} }
@@ -63,6 +79,11 @@ public class LockscreenLockIconController {
public void onViewDetachedFromWindow(View v) { public void onViewDetachedFromWindow(View v) {
mStatusBarStateController.removeCallback(mSBStateListener); mStatusBarStateController.removeCallback(mSBStateListener);
mConfigurationController.removeCallback(mConfigurationListener); mConfigurationController.removeCallback(mConfigurationListener);
mNotificationWakeUpCoordinator.removeListener(mWakeUpListener);
mKeyguardUpdateMonitor.removeCallback(mUpdateMonitorCallback);
mDockManager.ifPresent(dockManager -> dockManager.removeListener(mDockEventListener));
} }
}; };
@@ -115,6 +136,47 @@ public class LockscreenLockIconController {
} }
}; };
private final WakeUpListener mWakeUpListener = new WakeUpListener() {
@Override
public void onFullyHiddenChanged(boolean isFullyHidden) {
if (mKeyguardBypassController.getBypassEnabled()) {
boolean changed = mLockIcon.updateIconVisibility();
if (changed) {
mLockIcon.update();
}
}
}
};
private final KeyguardUpdateMonitorCallback mUpdateMonitorCallback =
new KeyguardUpdateMonitorCallback() {
@Override
public void onSimStateChanged(int subId, int slotId, int simState) {
mLockIcon.setSimLocked(mKeyguardUpdateMonitor.isSimPinSecure());
mLockIcon.update();
}
@Override
public void onKeyguardVisibilityChanged(boolean showing) {
mLockIcon.update();
}
@Override
public void onBiometricRunningStateChanged(boolean running,
BiometricSourceType biometricSourceType) {
mLockIcon.update();
}
@Override
public void onStrongAuthStateChanged(int userId) {
mLockIcon.update();
}
};
private final DockManager.DockEventListener mDockEventListener =
event -> mLockIcon.setDocked(event == DockManager.STATE_DOCKED
|| event == DockManager.STATE_DOCKED_HIDE);
@Inject @Inject
public LockscreenLockIconController(LockscreenGestureLogger lockscreenGestureLogger, public LockscreenLockIconController(LockscreenGestureLogger lockscreenGestureLogger,
KeyguardUpdateMonitor keyguardUpdateMonitor, KeyguardUpdateMonitor keyguardUpdateMonitor,
@@ -123,7 +185,10 @@ public class LockscreenLockIconController {
AccessibilityController accessibilityController, AccessibilityController accessibilityController,
KeyguardIndicationController keyguardIndicationController, KeyguardIndicationController keyguardIndicationController,
StatusBarStateController statusBarStateController, StatusBarStateController statusBarStateController,
ConfigurationController configurationController) { ConfigurationController configurationController,
NotificationWakeUpCoordinator notificationWakeUpCoordinator,
KeyguardBypassController keyguardBypassController,
@Nullable DockManager dockManager) {
mLockscreenGestureLogger = lockscreenGestureLogger; mLockscreenGestureLogger = lockscreenGestureLogger;
mKeyguardUpdateMonitor = keyguardUpdateMonitor; mKeyguardUpdateMonitor = keyguardUpdateMonitor;
mLockPatternUtils = lockPatternUtils; mLockPatternUtils = lockPatternUtils;
@@ -132,6 +197,9 @@ public class LockscreenLockIconController {
mKeyguardIndicationController = keyguardIndicationController; mKeyguardIndicationController = keyguardIndicationController;
mStatusBarStateController = statusBarStateController; mStatusBarStateController = statusBarStateController;
mConfigurationController = configurationController; mConfigurationController = configurationController;
mNotificationWakeUpCoordinator = notificationWakeUpCoordinator;
mKeyguardBypassController = keyguardBypassController;
mDockManager = dockManager == null ? Optional.empty() : Optional.of(dockManager);
mKeyguardIndicationController.setLockIconController(this); mKeyguardIndicationController.setLockIconController(this);
} }

View File

@@ -29,8 +29,10 @@ import androidx.test.runner.AndroidJUnit4;
import com.android.internal.widget.LockPatternUtils; import com.android.internal.widget.LockPatternUtils;
import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.SysuiTestCase; import com.android.systemui.SysuiTestCase;
import com.android.systemui.dock.DockManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.KeyguardIndicationController; import com.android.systemui.statusbar.KeyguardIndicationController;
import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
import com.android.systemui.statusbar.policy.AccessibilityController; import com.android.systemui.statusbar.policy.AccessibilityController;
import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController;
@@ -63,6 +65,13 @@ public class LockscreenIconControllerTest extends SysuiTestCase {
private StatusBarStateController mStatusBarStateController; private StatusBarStateController mStatusBarStateController;
@Mock @Mock
private ConfigurationController mConfigurationController; private ConfigurationController mConfigurationController;
@Mock
private NotificationWakeUpCoordinator mNotificationWakeUpCoordinator;
@Mock
private KeyguardBypassController mKeyguardBypassController;
@Mock
private DockManager mDockManager;
@Before @Before
public void setUp() { public void setUp() {
@@ -71,7 +80,8 @@ public class LockscreenIconControllerTest extends SysuiTestCase {
mLockIconController = new LockscreenLockIconController( mLockIconController = new LockscreenLockIconController(
mLockscreenGestureLogger, mKeyguardUpdateMonitor, mLockPatternUtils, mLockscreenGestureLogger, mKeyguardUpdateMonitor, mLockPatternUtils,
mShadeController, mAccessibilityController, mKeyguardIndicationController, mShadeController, mAccessibilityController, mKeyguardIndicationController,
mStatusBarStateController, mConfigurationController); mStatusBarStateController, mConfigurationController, mNotificationWakeUpCoordinator,
mKeyguardBypassController, mDockManager);
mLockIconController.attach(mLockIcon); mLockIconController.attach(mLockIcon);
} }