Animate clock weight to 0 on bypass face auth

Test: manual
Fixes: 186631254
Change-Id: Ib9ceb4c23c06717404845535ee86987d7f43686f
This commit is contained in:
Beverly
2021-04-28 13:29:36 -04:00
parent 5f82e987a3
commit c8410aa9c2
6 changed files with 73 additions and 18 deletions

View File

@@ -21,12 +21,14 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Color;
import android.hardware.biometrics.BiometricSourceType;
import android.icu.text.NumberFormat;
import com.android.settingslib.Utils;
import com.android.systemui.R;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.util.ViewController;
@@ -35,13 +37,15 @@ import java.util.Objects;
import java.util.TimeZone;
/**
* Controller for an AnimatableClockView.
* Controller for an AnimatableClockView. Instantiated by {@link KeyguardClockSwitchController}.
*/
public class AnimatableClockController extends ViewController<AnimatableClockView> {
private static final int FORMAT_NUMBER = 1234567890;
private final StatusBarStateController mStatusBarStateController;
private final BroadcastDispatcher mBroadcastDispatcher;
private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
private final KeyguardBypassController mBypassController;
private final int mDozingColor = Color.WHITE;
private int mLockScreenColor;
@@ -59,12 +63,16 @@ public class AnimatableClockController extends ViewController<AnimatableClockVie
AnimatableClockView view,
StatusBarStateController statusBarStateController,
BroadcastDispatcher broadcastDispatcher,
BatteryController batteryController) {
BatteryController batteryController,
KeyguardUpdateMonitor keyguardUpdateMonitor,
KeyguardBypassController bypassController) {
super(view);
mStatusBarStateController = statusBarStateController;
mIsDozing = mStatusBarStateController.isDozing();
mDozeAmount = mStatusBarStateController.getDozeAmount();
mBroadcastDispatcher = broadcastDispatcher;
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
mBypassController = bypassController;
mBurmeseNumerals = mBurmeseNf.format(FORMAT_NUMBER);
mBurmeseLineSpacing = getContext().getResources().getFloat(
@@ -98,14 +106,29 @@ public class AnimatableClockController extends ViewController<AnimatableClockVie
mStatusBarStateController.addCallback(mStatusBarStateListener);
mIsDozing = mStatusBarStateController.isDozing();
mDozeAmount = mStatusBarStateController.getDozeAmount();
mKeyguardUpdateMonitor.registerCallback(mKeyguardUpdateMonitorCallback);
refreshTime();
initColors();
}
private final KeyguardUpdateMonitorCallback mKeyguardUpdateMonitorCallback =
new KeyguardUpdateMonitorCallback() {
@Override
public void onBiometricAuthenticated(int userId, BiometricSourceType biometricSourceType,
boolean isStrongBiometric) {
if (biometricSourceType == BiometricSourceType.FACE
&& mBypassController.canBypass()) {
mView.animateDisappear();
}
}
};
@Override
protected void onViewDetached() {
mBroadcastDispatcher.unregisterReceiver(mLocaleBroadcastReceiver);
mStatusBarStateController.removeCallback(mStatusBarStateListener);
mKeyguardUpdateMonitor.removeCallback(mKeyguardUpdateMonitorCallback);
}
/**

View File

@@ -27,6 +27,7 @@ import android.util.AttributeSet;
import android.widget.TextView;
import com.android.systemui.R;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
import java.util.Calendar;
import java.util.TimeZone;
@@ -155,6 +156,21 @@ public class AnimatableClockView extends TextView {
mLockScreenColor = lockScreenColor;
}
void animateDisappear() {
if (mTextAnimator == null) {
return;
}
setTextStyle(
0 /* weight */,
-1 /* text size, no update */,
null /* color, no update */,
true /* animate */,
KeyguardBypassController.BYPASS_FADE_DURATION /* duration */,
0 /* delay */,
null /* onAnimationEnd */);
}
void animateCharge(boolean isDozing) {
if (mTextAnimator == null || mTextAnimator.isRunning()) {
// Skip charge animation if dozing animation is already playing.

View File

@@ -51,6 +51,7 @@ import com.android.systemui.statusbar.FeatureFlags;
import com.android.systemui.statusbar.notification.AnimatableProperty;
import com.android.systemui.statusbar.notification.PropertyAnimator;
import com.android.systemui.statusbar.notification.stack.AnimationProperties;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.phone.NotificationIconAreaController;
import com.android.systemui.statusbar.phone.NotificationIconContainer;
import com.android.systemui.statusbar.policy.BatteryController;
@@ -90,10 +91,11 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS
private SmartspaceSession mSmartspaceSession;
private SmartspaceSession.OnTargetsAvailableListener mSmartspaceCallback;
private int mWallpaperTextColor;
private ConfigurationController mConfigurationController;
private ActivityStarter mActivityStarter;
private FalsingManager mFalsingManager;
private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
private final KeyguardBypassController mBypassController;
/**
* Listener for changes to the color palette.
@@ -147,7 +149,9 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS
ConfigurationController configurationController,
SystemUIFactory systemUIFactory,
ActivityStarter activityStarter,
FalsingManager falsingManager) {
FalsingManager falsingManager,
KeyguardUpdateMonitor keyguardUpdateMonitor,
KeyguardBypassController bypassController) {
super(keyguardClockSwitch);
mStatusBarStateController = statusBarStateController;
mColorExtractor = colorExtractor;
@@ -162,6 +166,8 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS
mSystemUIFactory = systemUIFactory;
mActivityStarter = activityStarter;
mFalsingManager = falsingManager;
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
mBypassController = bypassController;
}
/**
@@ -185,19 +191,23 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS
mLargeClockFrame = mView.findViewById(R.id.lockscreen_clock_view_large);
mClockViewController =
new AnimatableClockController(
mView.findViewById(R.id.animatable_clock_view),
mStatusBarStateController,
mBroadcastDispatcher,
mBatteryController);
new AnimatableClockController(
mView.findViewById(R.id.animatable_clock_view),
mStatusBarStateController,
mBroadcastDispatcher,
mBatteryController,
mKeyguardUpdateMonitor,
mBypassController);
mClockViewController.init();
mLargeClockViewController =
new AnimatableClockController(
mView.findViewById(R.id.animatable_clock_view_large),
mStatusBarStateController,
mBroadcastDispatcher,
mBatteryController);
new AnimatableClockController(
mView.findViewById(R.id.animatable_clock_view_large),
mStatusBarStateController,
mBroadcastDispatcher,
mBatteryController,
mKeyguardUpdateMonitor,
mBypassController);
mLargeClockViewController.init();
mStatusBarStateController.addCallback(mStatusBarStateListener);

View File

@@ -217,7 +217,7 @@ open class KeyguardBypassController : Dumpable {
}
companion object {
const val BYPASS_PANEL_FADE_DURATION = 67
const val BYPASS_FADE_DURATION = 67
private const val FACE_UNLOCK_BYPASS_NO_OVERRIDE = 0
private const val FACE_UNLOCK_BYPASS_ALWAYS = 1

View File

@@ -615,7 +615,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
boolean needsFading = needsBypassFading();
if (needsFading) {
delay = 0;
fadeoutDuration = KeyguardBypassController.BYPASS_PANEL_FADE_DURATION;
fadeoutDuration = KeyguardBypassController.BYPASS_FADE_DURATION;
} else if (wakeUnlockPulsing) {
delay = 0;
fadeoutDuration = 240;
@@ -979,7 +979,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
resetAlternateAuth(false);
executeAfterKeyguardGoneAction();
}
}
public void showBouncerMessage(String message, ColorStateList colorState) {

View File

@@ -49,6 +49,7 @@ import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.FeatureFlags;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.phone.NotificationIconAreaController;
import com.android.systemui.statusbar.phone.NotificationIconContainer;
import com.android.systemui.statusbar.policy.BatteryController;
@@ -114,6 +115,10 @@ public class KeyguardClockSwitchControllerTest extends SysuiTestCase {
ActivityStarter mActivityStarter;
@Mock
FalsingManager mFalsingManager;
@Mock
KeyguardUpdateMonitor mKeyguardUpdateMonitor;
@Mock
KeyguardBypassController mBypassController;
private KeyguardClockSwitchController mController;
private View mStatusArea;
@@ -152,7 +157,9 @@ public class KeyguardClockSwitchControllerTest extends SysuiTestCase {
mConfigurationController,
mSystemUIFactory,
mActivityStarter,
mFalsingManager
mFalsingManager,
mKeyguardUpdateMonitor,
mBypassController
);
when(mStatusBarStateController.getState()).thenReturn(StatusBarState.SHADE);