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.AnimatedVectorDrawable;
import android.graphics.drawable.Drawable;
import android.hardware.biometrics.BiometricSourceType;
import android.os.Trace;
import android.provider.Settings;
import android.text.TextUtils;
@@ -34,22 +33,17 @@ import android.util.AttributeSet;
import android.view.ViewTreeObserver;
import android.view.accessibility.AccessibilityNodeInfo;
import androidx.annotation.Nullable;
import com.android.internal.graphics.ColorUtils;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.systemui.Dependency;
import com.android.systemui.Interpolators;
import com.android.systemui.R;
import com.android.systemui.dock.DockManager;
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.KeyguardStateController;
import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -61,8 +55,7 @@ import javax.inject.Named;
* Manages the different states and animations of the unlock icon.
*/
public class LockIcon extends KeyguardAffordanceView implements
KeyguardStateController.Callback, NotificationWakeUpCoordinator.WakeUpListener,
ViewTreeObserver.OnPreDrawListener, OnHeadsUpChangedListener {
ViewTreeObserver.OnPreDrawListener {
private static final int STATE_LOCKED = 0;
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 final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
private final AccessibilityController mAccessibilityController;
private final DockManager mDockManager;
private final KeyguardStateController mKeyguardStateController;
private final KeyguardBypassController mBypassController;
private final NotificationWakeUpCoordinator mWakeUpCoordinator;
@@ -130,43 +122,6 @@ public class LockIcon extends KeyguardAffordanceView implements
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
public LockIcon(@Named(VIEW_CONTEXT) Context context, AttributeSet attrs,
@@ -174,7 +129,6 @@ public class LockIcon extends KeyguardAffordanceView implements
KeyguardBypassController bypassController,
NotificationWakeUpCoordinator wakeUpCoordinator,
KeyguardStateController keyguardStateController,
@Nullable DockManager dockManager,
HeadsUpManagerPhone headsUpManager) {
super(context, attrs);
mContext = context;
@@ -183,7 +137,6 @@ public class LockIcon extends KeyguardAffordanceView implements
mBypassController = bypassController;
mWakeUpCoordinator = wakeUpCoordinator;
mKeyguardStateController = keyguardStateController;
mDockManager = dockManager;
mHeadsUpManager = headsUpManager;
}
@@ -191,24 +144,14 @@ public class LockIcon extends KeyguardAffordanceView implements
protected void onAttachedToWindow() {
super.onAttachedToWindow();
mKeyguardStateController.addCallback(mKeyguardMonitorCallback);
mKeyguardUpdateMonitor.registerCallback(mUpdateMonitorCallback);
mWakeUpCoordinator.addListener(this);
mSimLocked = mKeyguardUpdateMonitor.isSimPinSecure();
if (mDockManager != null) {
mDockManager.addListener(mDockEventListener);
}
update();
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
mKeyguardUpdateMonitor.removeCallback(mUpdateMonitorCallback);
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
* @return true if the visibility changed
*/
private boolean updateIconVisibility() {
boolean updateIconVisibility() {
boolean onAodNotPulsingOrDocked = mDozing && (!mPulsing || mDocked);
boolean invisible = onAodNotPulsingOrDocked || mWakeAndUnlockRunning
|| mShowingLaunchAffordance;
@@ -424,16 +367,6 @@ public class LockIcon extends KeyguardAffordanceView implements
return -1;
}
@Override
public void onFullyHiddenChanged(boolean isFullyHidden) {
if (mBypassController.getBypassEnabled()) {
boolean changed = updateIconVisibility();
if (changed) {
update();
}
}
}
public void setBouncerShowingScrimmed(boolean bouncerShowing) {
mBouncerShowingScrimmed = bouncerShowing;
if (mBypassController.getBypassEnabled()) {
@@ -454,6 +387,18 @@ public class LockIcon extends KeyguardAffordanceView implements
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)
@IntDef({ERROR, UNLOCK, LOCK, SCANNING})
@interface LockAnimIndex {}

View File

@@ -18,20 +18,29 @@ package com.android.systemui.statusbar.phone;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.hardware.biometrics.BiometricSourceType;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.Nullable;
import com.android.internal.logging.nano.MetricsProto;
import com.android.internal.widget.LockPatternUtils;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.systemui.R;
import com.android.systemui.dock.DockManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.CommandQueue;
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.ConfigurationController;
import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;
import java.util.Optional;
import javax.inject.Inject;
import javax.inject.Singleton;
@@ -47,6 +56,9 @@ public class LockscreenLockIconController {
private final KeyguardIndicationController mKeyguardIndicationController;
private final StatusBarStateController mStatusBarStateController;
private final ConfigurationController mConfigurationController;
private final NotificationWakeUpCoordinator mNotificationWakeUpCoordinator;
private final KeyguardBypassController mKeyguardBypassController;
private final Optional<DockManager> mDockManager;
private LockIcon mLockIcon;
private View.OnAttachStateChangeListener mOnAttachStateChangeListener =
@@ -55,6 +67,10 @@ public class LockscreenLockIconController {
public void onViewAttachedToWindow(View v) {
mStatusBarStateController.addCallback(mSBStateListener);
mConfigurationController.addCallback(mConfigurationListener);
mNotificationWakeUpCoordinator.addListener(mWakeUpListener);
mKeyguardUpdateMonitor.registerCallback(mUpdateMonitorCallback);
mDockManager.ifPresent(dockManager -> dockManager.addListener(mDockEventListener));
mConfigurationListener.onThemeChanged();
}
@@ -63,6 +79,11 @@ public class LockscreenLockIconController {
public void onViewDetachedFromWindow(View v) {
mStatusBarStateController.removeCallback(mSBStateListener);
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
public LockscreenLockIconController(LockscreenGestureLogger lockscreenGestureLogger,
KeyguardUpdateMonitor keyguardUpdateMonitor,
@@ -123,7 +185,10 @@ public class LockscreenLockIconController {
AccessibilityController accessibilityController,
KeyguardIndicationController keyguardIndicationController,
StatusBarStateController statusBarStateController,
ConfigurationController configurationController) {
ConfigurationController configurationController,
NotificationWakeUpCoordinator notificationWakeUpCoordinator,
KeyguardBypassController keyguardBypassController,
@Nullable DockManager dockManager) {
mLockscreenGestureLogger = lockscreenGestureLogger;
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
mLockPatternUtils = lockPatternUtils;
@@ -132,6 +197,9 @@ public class LockscreenLockIconController {
mKeyguardIndicationController = keyguardIndicationController;
mStatusBarStateController = statusBarStateController;
mConfigurationController = configurationController;
mNotificationWakeUpCoordinator = notificationWakeUpCoordinator;
mKeyguardBypassController = keyguardBypassController;
mDockManager = dockManager == null ? Optional.empty() : Optional.of(dockManager);
mKeyguardIndicationController.setLockIconController(this);
}

View File

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