Move SB.StateListener from LockIcon to Controller.

Remove StatusBarStateController from LockIcon constructor.

Bug: 150393918
Test: atest SystemUITests
Change-Id: I43579f0a1d32b1dc9d8cdd06f59878081d456013
This commit is contained in:
Dave Mankoff
2020-02-27 17:57:26 -05:00
parent e8c6f05e69
commit eba1eba35b
3 changed files with 116 additions and 61 deletions

View File

@@ -22,7 +22,6 @@ import android.annotation.IntDef;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.graphics.drawable.Animatable2;
import android.graphics.drawable.AnimatedVectorDrawable;
@@ -32,7 +31,6 @@ import android.os.Trace;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.accessibility.AccessibilityNodeInfo;
@@ -45,13 +43,11 @@ 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.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;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
@@ -65,7 +61,6 @@ import javax.inject.Named;
* Manages the different states and animations of the unlock icon.
*/
public class LockIcon extends KeyguardAffordanceView implements
StatusBarStateController.StateListener, ConfigurationController.ConfigurationListener,
KeyguardStateController.Callback, NotificationWakeUpCoordinator.WakeUpListener,
ViewTreeObserver.OnPreDrawListener, OnHeadsUpChangedListener {
@@ -73,8 +68,6 @@ public class LockIcon extends KeyguardAffordanceView implements
private static final int STATE_LOCK_OPEN = 1;
private static final int STATE_SCANNING_FACE = 2;
private static final int STATE_BIOMETRICS_ERROR = 3;
private final ConfigurationController mConfigurationController;
private final StatusBarStateController mStatusBarStateController;
private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
private final AccessibilityController mAccessibilityController;
private final DockManager mDockManager;
@@ -102,6 +95,7 @@ public class LockIcon extends KeyguardAffordanceView implements
private boolean mKeyguardJustShown;
private boolean mUpdatePending;
private boolean mBouncerPreHideAnimation;
private int mStatusBarState = StatusBarState.SHADE;
private final KeyguardStateController.Callback mKeyguardMonitorCallback =
new KeyguardStateController.Callback() {
@@ -176,8 +170,6 @@ public class LockIcon extends KeyguardAffordanceView implements
@Inject
public LockIcon(@Named(VIEW_CONTEXT) Context context, AttributeSet attrs,
StatusBarStateController statusBarStateController,
ConfigurationController configurationController,
AccessibilityController accessibilityController,
KeyguardBypassController bypassController,
NotificationWakeUpCoordinator wakeUpCoordinator,
@@ -188,8 +180,6 @@ public class LockIcon extends KeyguardAffordanceView implements
mContext = context;
mKeyguardUpdateMonitor = Dependency.get(KeyguardUpdateMonitor.class);
mAccessibilityController = accessibilityController;
mConfigurationController = configurationController;
mStatusBarStateController = statusBarStateController;
mBypassController = bypassController;
mWakeUpCoordinator = wakeUpCoordinator;
mKeyguardStateController = keyguardStateController;
@@ -200,8 +190,6 @@ public class LockIcon extends KeyguardAffordanceView implements
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
mStatusBarStateController.addCallback(this);
mConfigurationController.addCallback(this);
mKeyguardStateController.addCallback(mKeyguardMonitorCallback);
mKeyguardUpdateMonitor.registerCallback(mUpdateMonitorCallback);
mWakeUpCoordinator.addListener(this);
@@ -209,15 +197,12 @@ public class LockIcon extends KeyguardAffordanceView implements
if (mDockManager != null) {
mDockManager.addListener(mDockEventListener);
}
onThemeChanged();
update();
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
mStatusBarStateController.removeCallback(this);
mConfigurationController.removeCallback(this);
mKeyguardUpdateMonitor.removeCallback(mUpdateMonitorCallback);
mKeyguardStateController.removeCallback(mKeyguardMonitorCallback);
mWakeUpCoordinator.removeListener(this);
@@ -226,15 +211,6 @@ public class LockIcon extends KeyguardAffordanceView implements
}
}
@Override
public void onThemeChanged() {
TypedArray typedArray = mContext.getTheme().obtainStyledAttributes(
null, new int[]{ R.attr.wallpaperTextColor }, 0, 0);
mIconColor = typedArray.getColor(0, Color.WHITE);
typedArray.recycle();
updateDarkTint();
}
/**
* If we're currently presenting an authentication error message.
*/
@@ -336,7 +312,7 @@ public class LockIcon extends KeyguardAffordanceView implements
|| mShowingLaunchAffordance;
if (mBypassController.getBypassEnabled() && !mBouncerShowingScrimmed) {
if ((mHeadsUpManager.isHeadsUpGoingAway() || mHeadsUpManager.hasPinnedHeadsUp()
|| mStatusBarStateController.getState() == StatusBarState.KEYGUARD)
|| mStatusBarState == StatusBarState.KEYGUARD)
&& !mWakeUpCoordinator.getNotificationsFullyHidden()) {
invisible = true;
}
@@ -473,6 +449,11 @@ public class LockIcon extends KeyguardAffordanceView implements
update();
}
void setIconColor(int iconColor) {
mIconColor = iconColor;
updateDarkTint();
}
@Retention(RetentionPolicy.SOURCE)
@IntDef({ERROR, UNLOCK, LOCK, SCANNING})
@interface LockAnimIndex {}
@@ -532,12 +513,6 @@ public class LockIcon extends KeyguardAffordanceView implements
}
}
@Override
public void onDozeAmountChanged(float linear, float eased) {
mDozeAmount = eased;
updateDarkTint();
}
/**
* When keyguard is in pulsing (AOD2) state.
* @param pulsing {@code true} when pulsing.
@@ -547,38 +522,11 @@ public class LockIcon extends KeyguardAffordanceView implements
update();
}
/**
* Sets the dozing state of the keyguard.
*/
@Override
public void onDozingChanged(boolean dozing) {
mDozing = dozing;
update();
}
private void updateDarkTint() {
int color = ColorUtils.blendARGB(mIconColor, Color.WHITE, mDozeAmount);
setImageTintList(ColorStateList.valueOf(color));
}
@Override
public void onDensityOrFontScaleChanged() {
ViewGroup.LayoutParams lp = getLayoutParams();
if (lp == null) {
return;
}
lp.width = getResources().getDimensionPixelSize(R.dimen.keyguard_lock_width);
lp.height = getResources().getDimensionPixelSize(R.dimen.keyguard_lock_height);
setLayoutParams(lp);
update(true /* force */);
}
@Override
public void onLocaleListChanged() {
setContentDescription(getContext().getText(R.string.accessibility_unlock_button));
update(true /* force */);
}
/**
* We need to hide the lock whenever there's a fingerprint unlock, otherwise you'll see the
* icon on top of the black front scrim.
@@ -614,4 +562,20 @@ public class LockIcon extends KeyguardAffordanceView implements
update();
}
}
void setDozing(boolean dozing) {
mDozing = dozing;
update();
}
void setDozeAmount(float dozeAmount) {
mDozeAmount = dozeAmount;
updateDarkTint();
}
/** Set the StatusBarState. */
public void setStatusBarState(int statusBarState) {
mStatusBarState = statusBarState;
updateIconVisibility();
}
}

View File

@@ -16,15 +16,21 @@
package com.android.systemui.statusbar.phone;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
import com.android.internal.logging.nano.MetricsProto;
import com.android.internal.widget.LockPatternUtils;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.R;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.KeyguardIndicationController;
import com.android.systemui.statusbar.policy.AccessibilityController;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;
import javax.inject.Inject;
import javax.inject.Singleton;
@@ -39,21 +45,93 @@ public class LockscreenLockIconController {
private final ShadeController mShadeController;
private final AccessibilityController mAccessibilityController;
private final KeyguardIndicationController mKeyguardIndicationController;
private final StatusBarStateController mStatusBarStateController;
private final ConfigurationController mConfigurationController;
private LockIcon mLockIcon;
private View.OnAttachStateChangeListener mOnAttachStateChangeListener =
new View.OnAttachStateChangeListener() {
@Override
public void onViewAttachedToWindow(View v) {
mStatusBarStateController.addCallback(mSBStateListener);
mConfigurationController.addCallback(mConfigurationListener);
mConfigurationListener.onThemeChanged();
}
@Override
public void onViewDetachedFromWindow(View v) {
mStatusBarStateController.removeCallback(mSBStateListener);
mConfigurationController.removeCallback(mConfigurationListener);
}
};
private final StatusBarStateController.StateListener mSBStateListener =
new StatusBarStateController.StateListener() {
@Override
public void onDozingChanged(boolean isDozing) {
mLockIcon.setDozing(isDozing);
}
@Override
public void onDozeAmountChanged(float linear, float eased) {
mLockIcon.setDozeAmount(eased);
}
@Override
public void onStateChanged(int newState) {
mLockIcon.setStatusBarState(newState);
}
};
private final ConfigurationListener mConfigurationListener = new ConfigurationListener() {
@Override
public void onThemeChanged() {
TypedArray typedArray = mLockIcon.getContext().getTheme().obtainStyledAttributes(
null, new int[]{ R.attr.wallpaperTextColor }, 0, 0);
int iconColor = typedArray.getColor(0, Color.WHITE);
typedArray.recycle();
mLockIcon.setIconColor(iconColor);
}
@Override
public void onDensityOrFontScaleChanged() {
ViewGroup.LayoutParams lp = mLockIcon.getLayoutParams();
if (lp == null) {
return;
}
lp.width = mLockIcon.getResources().getDimensionPixelSize(R.dimen.keyguard_lock_width);
lp.height = mLockIcon.getResources().getDimensionPixelSize(
R.dimen.keyguard_lock_height);
mLockIcon.setLayoutParams(lp);
mLockIcon.update(true /* force */);
}
@Override
public void onLocaleListChanged() {
mLockIcon.setContentDescription(
mLockIcon.getResources().getText(R.string.accessibility_unlock_button));
mLockIcon.update(true /* force */);
}
};
@Inject
public LockscreenLockIconController(LockscreenGestureLogger lockscreenGestureLogger,
KeyguardUpdateMonitor keyguardUpdateMonitor,
LockPatternUtils lockPatternUtils,
ShadeController shadeController,
AccessibilityController accessibilityController,
KeyguardIndicationController keyguardIndicationController) {
KeyguardIndicationController keyguardIndicationController,
StatusBarStateController statusBarStateController,
ConfigurationController configurationController) {
mLockscreenGestureLogger = lockscreenGestureLogger;
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
mLockPatternUtils = lockPatternUtils;
mShadeController = shadeController;
mAccessibilityController = accessibilityController;
mKeyguardIndicationController = keyguardIndicationController;
mStatusBarStateController = statusBarStateController;
mConfigurationController = configurationController;
mKeyguardIndicationController.setLockIconController(this);
}
@@ -66,6 +144,12 @@ public class LockscreenLockIconController {
mLockIcon.setOnClickListener(this::handleClick);
mLockIcon.setOnLongClickListener(this::handleLongClick);
if (mLockIcon.isAttachedToWindow()) {
mOnAttachStateChangeListener.onViewAttachedToWindow(mLockIcon);
}
mLockIcon.addOnAttachStateChangeListener(mOnAttachStateChangeListener);
mLockIcon.setStatusBarState(mStatusBarStateController.getState());
}
public LockIcon getView() {

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.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.KeyguardIndicationController;
import com.android.systemui.statusbar.policy.AccessibilityController;
import com.android.systemui.statusbar.policy.ConfigurationController;
import org.junit.Before;
import org.junit.Test;
@@ -57,6 +59,10 @@ public class LockscreenIconControllerTest extends SysuiTestCase {
private KeyguardIndicationController mKeyguardIndicationController;
@Mock
private LockIcon mLockIcon; // TODO: make this not a mock once inject is removed.
@Mock
private StatusBarStateController mStatusBarStateController;
@Mock
private ConfigurationController mConfigurationController;
@Before
public void setUp() {
@@ -64,7 +70,8 @@ public class LockscreenIconControllerTest extends SysuiTestCase {
mLockIconController = new LockscreenLockIconController(
mLockscreenGestureLogger, mKeyguardUpdateMonitor, mLockPatternUtils,
mShadeController, mAccessibilityController, mKeyguardIndicationController);
mShadeController, mAccessibilityController, mKeyguardIndicationController,
mStatusBarStateController, mConfigurationController);
mLockIconController.attach(mLockIcon);
}