Merge "Update light reveal + udfps icon vis" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
c4e370db47
@@ -32,9 +32,10 @@ import android.widget.FrameLayout;
|
|||||||
* - optionally can override dozeTimeTick to adjust views for burn-in mitigation
|
* - optionally can override dozeTimeTick to adjust views for burn-in mitigation
|
||||||
*/
|
*/
|
||||||
abstract class UdfpsAnimationView extends FrameLayout {
|
abstract class UdfpsAnimationView extends FrameLayout {
|
||||||
|
// mAlpha takes into consideration the status bar expansion amount to fade out icon when
|
||||||
|
// the status bar is expanded
|
||||||
private int mAlpha;
|
private int mAlpha;
|
||||||
private boolean mPauseAuth;
|
boolean mPauseAuth;
|
||||||
|
|
||||||
public UdfpsAnimationView(Context context, @Nullable AttributeSet attrs) {
|
public UdfpsAnimationView(Context context, @Nullable AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
@@ -75,7 +76,7 @@ abstract class UdfpsAnimationView extends FrameLayout {
|
|||||||
getDrawable().setAlpha(calculateAlpha());
|
getDrawable().setAlpha(calculateAlpha());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected final int calculateAlpha() {
|
int calculateAlpha() {
|
||||||
return mPauseAuth ? mAlpha : 255;
|
return mPauseAuth ? mAlpha : 255;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,10 +16,6 @@
|
|||||||
|
|
||||||
package com.android.systemui.biometrics;
|
package com.android.systemui.biometrics;
|
||||||
|
|
||||||
import static com.android.systemui.statusbar.StatusBarState.FULLSCREEN_USER_SWITCHER;
|
|
||||||
import static com.android.systemui.statusbar.StatusBarState.KEYGUARD;
|
|
||||||
import static com.android.systemui.statusbar.StatusBarState.SHADE_LOCKED;
|
|
||||||
|
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.graphics.PointF;
|
import android.graphics.PointF;
|
||||||
import android.graphics.RectF;
|
import android.graphics.RectF;
|
||||||
@@ -68,18 +64,13 @@ abstract class UdfpsAnimationViewController<T extends UdfpsAnimationView>
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onViewAttached() {
|
protected void onViewAttached() {
|
||||||
mStatusBarStateController.addCallback(mStateListener);
|
|
||||||
mStateListener.onStateChanged(mStatusBarStateController.getState());
|
|
||||||
mStatusBar.addExpansionChangedListener(mStatusBarExpansionChangedListener);
|
mStatusBar.addExpansionChangedListener(mStatusBarExpansionChangedListener);
|
||||||
|
|
||||||
mDumpManger.registerDumpable(getDumpTag(), this);
|
mDumpManger.registerDumpable(getDumpTag(), this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onViewDetached() {
|
protected void onViewDetached() {
|
||||||
mStatusBarStateController.removeCallback(mStateListener);
|
|
||||||
mStatusBar.removeExpansionChangedListener(mStatusBarExpansionChangedListener);
|
mStatusBar.removeExpansionChangedListener(mStatusBarExpansionChangedListener);
|
||||||
|
|
||||||
mDumpManger.unregisterDumpable(getDumpTag());
|
mDumpManger.unregisterDumpable(getDumpTag());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -106,9 +97,7 @@ abstract class UdfpsAnimationViewController<T extends UdfpsAnimationView>
|
|||||||
* authentication.
|
* authentication.
|
||||||
*/
|
*/
|
||||||
boolean shouldPauseAuth() {
|
boolean shouldPauseAuth() {
|
||||||
return (mNotificationShadeExpanded && mStatusBarState != KEYGUARD)
|
return mNotificationShadeExpanded;
|
||||||
|| mStatusBarState == SHADE_LOCKED
|
|
||||||
|| mStatusBarState == FULLSCREEN_USER_SWITCHER;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -188,13 +177,4 @@ abstract class UdfpsAnimationViewController<T extends UdfpsAnimationView>
|
|||||||
updatePauseAuth();
|
updatePauseAuth();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
private final StatusBarStateController.StateListener mStateListener =
|
|
||||||
new StatusBarStateController.StateListener() {
|
|
||||||
@Override
|
|
||||||
public void onStateChanged(int newState) {
|
|
||||||
mStatusBarState = newState;
|
|
||||||
updatePauseAuth();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ import com.android.systemui.dagger.SysUISingleton;
|
|||||||
import com.android.systemui.dagger.qualifiers.Main;
|
import com.android.systemui.dagger.qualifiers.Main;
|
||||||
import com.android.systemui.doze.DozeReceiver;
|
import com.android.systemui.doze.DozeReceiver;
|
||||||
import com.android.systemui.dump.DumpManager;
|
import com.android.systemui.dump.DumpManager;
|
||||||
|
import com.android.systemui.keyguard.KeyguardViewMediator;
|
||||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||||
import com.android.systemui.statusbar.phone.StatusBar;
|
import com.android.systemui.statusbar.phone.StatusBar;
|
||||||
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
|
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
|
||||||
@@ -90,6 +91,7 @@ public class UdfpsController implements DozeReceiver, HbmCallback {
|
|||||||
@NonNull private final DumpManager mDumpManager;
|
@NonNull private final DumpManager mDumpManager;
|
||||||
@NonNull private final AuthRippleController mAuthRippleController;
|
@NonNull private final AuthRippleController mAuthRippleController;
|
||||||
@NonNull private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
|
@NonNull private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
|
||||||
|
@NonNull private final KeyguardViewMediator mKeyguardViewMediator;
|
||||||
// Currently the UdfpsController supports a single UDFPS sensor. If devices have multiple
|
// Currently the UdfpsController supports a single UDFPS sensor. If devices have multiple
|
||||||
// sensors, this, in addition to a lot of the code here, will be updated.
|
// sensors, this, in addition to a lot of the code here, will be updated.
|
||||||
@VisibleForTesting final FingerprintSensorPropertiesInternal mSensorProps;
|
@VisibleForTesting final FingerprintSensorPropertiesInternal mSensorProps;
|
||||||
@@ -310,7 +312,8 @@ public class UdfpsController implements DozeReceiver, HbmCallback {
|
|||||||
@NonNull StatusBarKeyguardViewManager statusBarKeyguardViewManager,
|
@NonNull StatusBarKeyguardViewManager statusBarKeyguardViewManager,
|
||||||
@NonNull DumpManager dumpManager,
|
@NonNull DumpManager dumpManager,
|
||||||
@NonNull AuthRippleController authRippleController,
|
@NonNull AuthRippleController authRippleController,
|
||||||
@NonNull KeyguardUpdateMonitor keyguardUpdateMonitor) {
|
@NonNull KeyguardUpdateMonitor keyguardUpdateMonitor,
|
||||||
|
@NonNull KeyguardViewMediator keyguardViewMediator) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mInflater = inflater;
|
mInflater = inflater;
|
||||||
// The fingerprint manager is queried for UDFPS before this class is constructed, so the
|
// The fingerprint manager is queried for UDFPS before this class is constructed, so the
|
||||||
@@ -324,6 +327,7 @@ public class UdfpsController implements DozeReceiver, HbmCallback {
|
|||||||
mDumpManager = dumpManager;
|
mDumpManager = dumpManager;
|
||||||
mAuthRippleController = authRippleController;
|
mAuthRippleController = authRippleController;
|
||||||
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
|
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
|
||||||
|
mKeyguardViewMediator = keyguardViewMediator;
|
||||||
|
|
||||||
mSensorProps = findFirstUdfps();
|
mSensorProps = findFirstUdfps();
|
||||||
// At least one UDFPS sensor exists
|
// At least one UDFPS sensor exists
|
||||||
@@ -491,7 +495,8 @@ public class UdfpsController implements DozeReceiver, HbmCallback {
|
|||||||
mKeyguardViewManager,
|
mKeyguardViewManager,
|
||||||
mKeyguardUpdateMonitor,
|
mKeyguardUpdateMonitor,
|
||||||
mFgExecutor,
|
mFgExecutor,
|
||||||
mDumpManager
|
mDumpManager,
|
||||||
|
mKeyguardViewMediator
|
||||||
);
|
);
|
||||||
case IUdfpsOverlayController.REASON_AUTH_BP:
|
case IUdfpsOverlayController.REASON_AUTH_BP:
|
||||||
// note: empty controller, currently shows no visual affordance
|
// note: empty controller, currently shows no visual affordance
|
||||||
|
|||||||
@@ -97,6 +97,11 @@ public class UdfpsKeyguardView extends UdfpsAnimationView {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
int calculateAlpha() {
|
||||||
|
return mPauseAuth ? 0 : 255;
|
||||||
|
}
|
||||||
|
|
||||||
void onDozeAmountChanged(float linear, float eased) {
|
void onDozeAmountChanged(float linear, float eased) {
|
||||||
mFingerprintDrawable.onDozeAmountChanged(linear, eased);
|
mFingerprintDrawable.onDozeAmountChanged(linear, eased);
|
||||||
}
|
}
|
||||||
@@ -153,6 +158,10 @@ public class UdfpsKeyguardView extends UdfpsAnimationView {
|
|||||||
return mStatusBarState == StatusBarState.SHADE_LOCKED;
|
return mStatusBarState == StatusBarState.SHADE_LOCKED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean isHome() {
|
||||||
|
return mStatusBarState == StatusBarState.SHADE;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Animates out the bg protection circle behind the fp icon to unhighlight the icon.
|
* Animates out the bg protection circle behind the fp icon to unhighlight the icon.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package com.android.systemui.biometrics;
|
package com.android.systemui.biometrics;
|
||||||
|
|
||||||
|
import static com.android.systemui.statusbar.StatusBarState.KEYGUARD;
|
||||||
|
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.hardware.biometrics.BiometricSourceType;
|
import android.hardware.biometrics.BiometricSourceType;
|
||||||
|
|
||||||
@@ -24,7 +26,9 @@ import androidx.annotation.Nullable;
|
|||||||
import com.android.keyguard.KeyguardUpdateMonitor;
|
import com.android.keyguard.KeyguardUpdateMonitor;
|
||||||
import com.android.keyguard.KeyguardUpdateMonitorCallback;
|
import com.android.keyguard.KeyguardUpdateMonitorCallback;
|
||||||
import com.android.systemui.dump.DumpManager;
|
import com.android.systemui.dump.DumpManager;
|
||||||
|
import com.android.systemui.keyguard.KeyguardViewMediator;
|
||||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||||
|
import com.android.systemui.statusbar.StatusBarState;
|
||||||
import com.android.systemui.statusbar.phone.StatusBar;
|
import com.android.systemui.statusbar.phone.StatusBar;
|
||||||
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
|
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
|
||||||
import com.android.systemui.util.concurrency.DelayableExecutor;
|
import com.android.systemui.util.concurrency.DelayableExecutor;
|
||||||
@@ -45,12 +49,15 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
|
|||||||
@NonNull private final StatusBarKeyguardViewManager mKeyguardViewManager;
|
@NonNull private final StatusBarKeyguardViewManager mKeyguardViewManager;
|
||||||
@NonNull private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
|
@NonNull private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
|
||||||
@NonNull private final DelayableExecutor mExecutor;
|
@NonNull private final DelayableExecutor mExecutor;
|
||||||
|
@NonNull private final KeyguardViewMediator mKeyguardViewMediator;
|
||||||
|
|
||||||
@Nullable private Runnable mCancelRunnable;
|
@Nullable private Runnable mCancelRunnable;
|
||||||
private boolean mShowBouncer;
|
private boolean mShowBouncer;
|
||||||
private boolean mQsExpanded;
|
private boolean mQsExpanded;
|
||||||
private boolean mFaceDetectRunning;
|
private boolean mFaceDetectRunning;
|
||||||
private boolean mHintShown;
|
private boolean mHintShown;
|
||||||
|
private boolean mTransitioningFromHome;
|
||||||
|
private int mStatusBarState;
|
||||||
|
|
||||||
protected UdfpsKeyguardViewController(
|
protected UdfpsKeyguardViewController(
|
||||||
@NonNull UdfpsKeyguardView view,
|
@NonNull UdfpsKeyguardView view,
|
||||||
@@ -59,11 +66,13 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
|
|||||||
@NonNull StatusBarKeyguardViewManager statusBarKeyguardViewManager,
|
@NonNull StatusBarKeyguardViewManager statusBarKeyguardViewManager,
|
||||||
@NonNull KeyguardUpdateMonitor keyguardUpdateMonitor,
|
@NonNull KeyguardUpdateMonitor keyguardUpdateMonitor,
|
||||||
@NonNull DelayableExecutor mainDelayableExecutor,
|
@NonNull DelayableExecutor mainDelayableExecutor,
|
||||||
@NonNull DumpManager dumpManager) {
|
@NonNull DumpManager dumpManager,
|
||||||
|
@NonNull KeyguardViewMediator keyguardViewMediator) {
|
||||||
super(view, statusBarStateController, statusBar, dumpManager);
|
super(view, statusBarStateController, statusBar, dumpManager);
|
||||||
mKeyguardViewManager = statusBarKeyguardViewManager;
|
mKeyguardViewManager = statusBarKeyguardViewManager;
|
||||||
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
|
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
|
||||||
mExecutor = mainDelayableExecutor;
|
mExecutor = mainDelayableExecutor;
|
||||||
|
mKeyguardViewMediator = keyguardViewMediator;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -94,6 +103,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
|
|||||||
mStatusBarStateController.removeCallback(mStateListener);
|
mStatusBarStateController.removeCallback(mStateListener);
|
||||||
mAlternateAuthInterceptor.hideAlternateAuthBouncer();
|
mAlternateAuthInterceptor.hideAlternateAuthBouncer();
|
||||||
mKeyguardViewManager.setAlternateAuthInterceptor(null);
|
mKeyguardViewManager.setAlternateAuthInterceptor(null);
|
||||||
|
mTransitioningFromHome = false;
|
||||||
|
|
||||||
if (mCancelRunnable != null) {
|
if (mCancelRunnable != null) {
|
||||||
mCancelRunnable.run();
|
mCancelRunnable.run();
|
||||||
@@ -106,17 +116,18 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
|
|||||||
super.dump(fd, pw, args);
|
super.dump(fd, pw, args);
|
||||||
pw.println("mShowBouncer=" + mShowBouncer);
|
pw.println("mShowBouncer=" + mShowBouncer);
|
||||||
pw.println("mFaceDetectRunning=" + mFaceDetectRunning);
|
pw.println("mFaceDetectRunning=" + mFaceDetectRunning);
|
||||||
|
pw.println("mTransitioningFromHomeToKeyguard=" + mTransitioningFromHome);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Overrides non-bouncer show logic in shouldPauseAuth to still auth.
|
* Overrides non-bouncer show logic in shouldPauseAuth to still auth.
|
||||||
*/
|
*/
|
||||||
private void showBouncer(boolean forceShow) {
|
private void showBouncer(boolean show) {
|
||||||
if (mShowBouncer == forceShow) {
|
if (mShowBouncer == show) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
mShowBouncer = forceShow;
|
mShowBouncer = show;
|
||||||
updatePauseAuth();
|
updatePauseAuth();
|
||||||
if (mShowBouncer) {
|
if (mShowBouncer) {
|
||||||
mView.animateUdfpsBouncer();
|
mView.animateUdfpsBouncer();
|
||||||
@@ -128,18 +139,26 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
|
|||||||
/**
|
/**
|
||||||
* Returns true if the fingerprint manager is running but we want to temporarily pause
|
* Returns true if the fingerprint manager is running but we want to temporarily pause
|
||||||
* authentication. On the keyguard, we may want to show udfps when the shade
|
* authentication. On the keyguard, we may want to show udfps when the shade
|
||||||
* is expanded, so this can be overridden with the forceShow method.
|
* is expanded, so this can be overridden with the showBouncer method.
|
||||||
*/
|
*/
|
||||||
public boolean shouldPauseAuth() {
|
public boolean shouldPauseAuth() {
|
||||||
if (mShowBouncer) {
|
if (mShowBouncer) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mStatusBarState != KEYGUARD) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mTransitioningFromHome && mKeyguardViewMediator.isAnimatingScreenOff()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if (mQsExpanded) {
|
if (mQsExpanded) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return super.shouldPauseAuth();
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void cancelDelayedHint() {
|
private void cancelDelayedHint() {
|
||||||
@@ -176,12 +195,25 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
|
|||||||
new StatusBarStateController.StateListener() {
|
new StatusBarStateController.StateListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onDozeAmountChanged(float linear, float eased) {
|
public void onDozeAmountChanged(float linear, float eased) {
|
||||||
mView.onDozeAmountChanged(linear, eased);
|
|
||||||
if (linear != 0) showBouncer(false);
|
if (linear != 0) showBouncer(false);
|
||||||
|
mView.onDozeAmountChanged(linear, eased);
|
||||||
|
if (linear == 1f) {
|
||||||
|
// transition has finished
|
||||||
|
mTransitioningFromHome = false;
|
||||||
|
}
|
||||||
|
updatePauseAuth();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStatePreChange(int oldState, int newState) {
|
||||||
|
mTransitioningFromHome = oldState == StatusBarState.SHADE
|
||||||
|
&& newState == StatusBarState.KEYGUARD;
|
||||||
|
updatePauseAuth();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStateChanged(int statusBarState) {
|
public void onStateChanged(int statusBarState) {
|
||||||
|
mStatusBarState = statusBarState;
|
||||||
mView.setStatusBarState(statusBarState);
|
mView.setStatusBarState(statusBarState);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -239,6 +239,7 @@ import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
|
|||||||
import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler;
|
import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler;
|
||||||
import com.android.systemui.statusbar.policy.UserInfoControllerImpl;
|
import com.android.systemui.statusbar.policy.UserInfoControllerImpl;
|
||||||
import com.android.systemui.statusbar.policy.UserSwitcherController;
|
import com.android.systemui.statusbar.policy.UserSwitcherController;
|
||||||
|
import com.android.systemui.tuner.TunerService;
|
||||||
import com.android.systemui.volume.VolumeComponent;
|
import com.android.systemui.volume.VolumeComponent;
|
||||||
import com.android.systemui.wmshell.BubblesManager;
|
import com.android.systemui.wmshell.BubblesManager;
|
||||||
import com.android.wm.shell.bubbles.Bubbles;
|
import com.android.wm.shell.bubbles.Bubbles;
|
||||||
@@ -791,6 +792,7 @@ public class StatusBar extends SystemUI implements DemoMode,
|
|||||||
BrightnessSlider.Factory brightnessSliderFactory,
|
BrightnessSlider.Factory brightnessSliderFactory,
|
||||||
WiredChargingRippleController chargingRippleAnimationController,
|
WiredChargingRippleController chargingRippleAnimationController,
|
||||||
OngoingCallController ongoingCallController,
|
OngoingCallController ongoingCallController,
|
||||||
|
TunerService tunerService,
|
||||||
FeatureFlags featureFlags) {
|
FeatureFlags featureFlags) {
|
||||||
super(context);
|
super(context);
|
||||||
mNotificationsController = notificationsController;
|
mNotificationsController = notificationsController;
|
||||||
@@ -873,6 +875,15 @@ public class StatusBar extends SystemUI implements DemoMode,
|
|||||||
mOngoingCallController = ongoingCallController;
|
mOngoingCallController = ongoingCallController;
|
||||||
mFeatureFlags = featureFlags;
|
mFeatureFlags = featureFlags;
|
||||||
|
|
||||||
|
tunerService.addTunable(
|
||||||
|
(key, newValue) -> {
|
||||||
|
if (key.equals(Settings.Secure.DOZE_ALWAYS_ON)) {
|
||||||
|
updateLightRevealScrimVisibility();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Settings.Secure.DOZE_ALWAYS_ON
|
||||||
|
);
|
||||||
|
|
||||||
mExpansionChangedListeners = new ArrayList<>();
|
mExpansionChangedListeners = new ArrayList<>();
|
||||||
|
|
||||||
mBubbleExpandListener =
|
mBubbleExpandListener =
|
||||||
@@ -1216,15 +1227,7 @@ public class StatusBar extends SystemUI implements DemoMode,
|
|||||||
|
|
||||||
mLightRevealScrim = mNotificationShadeWindowView.findViewById(R.id.light_reveal_scrim);
|
mLightRevealScrim = mNotificationShadeWindowView.findViewById(R.id.light_reveal_scrim);
|
||||||
mChargingRippleAnimationController.setViewHost(mNotificationShadeWindowView);
|
mChargingRippleAnimationController.setViewHost(mNotificationShadeWindowView);
|
||||||
|
updateLightRevealScrimVisibility();
|
||||||
|
|
||||||
if (mFeatureFlags.useNewLockscreenAnimations()
|
|
||||||
&& (mDozeParameters.getAlwaysOn() || mDozeParameters.isQuickPickupEnabled())) {
|
|
||||||
mLightRevealScrim.setVisibility(View.VISIBLE);
|
|
||||||
mLightRevealScrim.setRevealEffect(LiftReveal.INSTANCE);
|
|
||||||
} else {
|
|
||||||
mLightRevealScrim.setVisibility(View.GONE);
|
|
||||||
}
|
|
||||||
|
|
||||||
mNotificationPanelViewController.initDependencies(
|
mNotificationPanelViewController.initDependencies(
|
||||||
this,
|
this,
|
||||||
@@ -4654,4 +4657,19 @@ public class StatusBar extends SystemUI implements DemoMode,
|
|||||||
public void removeExpansionChangedListener(@NonNull ExpansionChangedListener listener) {
|
public void removeExpansionChangedListener(@NonNull ExpansionChangedListener listener) {
|
||||||
mExpansionChangedListeners.remove(listener);
|
mExpansionChangedListeners.remove(listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void updateLightRevealScrimVisibility() {
|
||||||
|
if (mLightRevealScrim == null) {
|
||||||
|
// status bar may not be inflated yet
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mFeatureFlags.useNewLockscreenAnimations()
|
||||||
|
&& (mDozeParameters.getAlwaysOn() || mDozeParameters.isQuickPickupEnabled())) {
|
||||||
|
mLightRevealScrim.setVisibility(View.VISIBLE);
|
||||||
|
mLightRevealScrim.setRevealEffect(LiftReveal.INSTANCE);
|
||||||
|
} else {
|
||||||
|
mLightRevealScrim.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -100,6 +100,7 @@ import com.android.systemui.statusbar.policy.NetworkController;
|
|||||||
import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler;
|
import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler;
|
||||||
import com.android.systemui.statusbar.policy.UserInfoControllerImpl;
|
import com.android.systemui.statusbar.policy.UserInfoControllerImpl;
|
||||||
import com.android.systemui.statusbar.policy.UserSwitcherController;
|
import com.android.systemui.statusbar.policy.UserSwitcherController;
|
||||||
|
import com.android.systemui.tuner.TunerService;
|
||||||
import com.android.systemui.volume.VolumeComponent;
|
import com.android.systemui.volume.VolumeComponent;
|
||||||
import com.android.systemui.wmshell.BubblesManager;
|
import com.android.systemui.wmshell.BubblesManager;
|
||||||
import com.android.wm.shell.bubbles.Bubbles;
|
import com.android.wm.shell.bubbles.Bubbles;
|
||||||
@@ -208,6 +209,7 @@ public interface StatusBarPhoneModule {
|
|||||||
BrightnessSlider.Factory brightnessSliderFactory,
|
BrightnessSlider.Factory brightnessSliderFactory,
|
||||||
WiredChargingRippleController chargingRippleAnimationController,
|
WiredChargingRippleController chargingRippleAnimationController,
|
||||||
OngoingCallController ongoingCallController,
|
OngoingCallController ongoingCallController,
|
||||||
|
TunerService tunerService,
|
||||||
FeatureFlags featureFlags) {
|
FeatureFlags featureFlags) {
|
||||||
return new StatusBar(
|
return new StatusBar(
|
||||||
context,
|
context,
|
||||||
@@ -291,6 +293,7 @@ public interface StatusBarPhoneModule {
|
|||||||
brightnessSliderFactory,
|
brightnessSliderFactory,
|
||||||
chargingRippleAnimationController,
|
chargingRippleAnimationController,
|
||||||
ongoingCallController,
|
ongoingCallController,
|
||||||
|
tunerService,
|
||||||
featureFlags);
|
featureFlags);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ import com.android.keyguard.KeyguardUpdateMonitor;
|
|||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
import com.android.systemui.SysuiTestCase;
|
import com.android.systemui.SysuiTestCase;
|
||||||
import com.android.systemui.dump.DumpManager;
|
import com.android.systemui.dump.DumpManager;
|
||||||
|
import com.android.systemui.keyguard.KeyguardViewMediator;
|
||||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||||
import com.android.systemui.statusbar.phone.StatusBar;
|
import com.android.systemui.statusbar.phone.StatusBar;
|
||||||
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
|
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
|
||||||
@@ -103,6 +104,8 @@ public class UdfpsControllerTest extends SysuiTestCase {
|
|||||||
@Mock
|
@Mock
|
||||||
private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
|
private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
|
||||||
@Mock
|
@Mock
|
||||||
|
private KeyguardViewMediator mKeyguardViewMediator;
|
||||||
|
@Mock
|
||||||
private IUdfpsOverlayControllerCallback mUdfpsOverlayControllerCallback;
|
private IUdfpsOverlayControllerCallback mUdfpsOverlayControllerCallback;
|
||||||
|
|
||||||
private FakeExecutor mFgExecutor;
|
private FakeExecutor mFgExecutor;
|
||||||
@@ -155,7 +158,8 @@ public class UdfpsControllerTest extends SysuiTestCase {
|
|||||||
mStatusBarKeyguardViewManager,
|
mStatusBarKeyguardViewManager,
|
||||||
mDumpManager,
|
mDumpManager,
|
||||||
mAuthRippleController,
|
mAuthRippleController,
|
||||||
mKeyguardUpdateMonitor);
|
mKeyguardUpdateMonitor,
|
||||||
|
mKeyguardViewMediator);
|
||||||
verify(mFingerprintManager).setUdfpsOverlayController(mOverlayCaptor.capture());
|
verify(mFingerprintManager).setUdfpsOverlayController(mOverlayCaptor.capture());
|
||||||
mOverlayController = mOverlayCaptor.getValue();
|
mOverlayController = mOverlayCaptor.getValue();
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ package com.android.systemui.biometrics;
|
|||||||
|
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.mockito.Mockito.times;
|
import static org.mockito.Mockito.atLeast;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
@@ -30,6 +30,7 @@ import androidx.test.filters.SmallTest;
|
|||||||
import com.android.keyguard.KeyguardUpdateMonitor;
|
import com.android.keyguard.KeyguardUpdateMonitor;
|
||||||
import com.android.systemui.SysuiTestCase;
|
import com.android.systemui.SysuiTestCase;
|
||||||
import com.android.systemui.dump.DumpManager;
|
import com.android.systemui.dump.DumpManager;
|
||||||
|
import com.android.systemui.keyguard.KeyguardViewMediator;
|
||||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||||
import com.android.systemui.statusbar.StatusBarState;
|
import com.android.systemui.statusbar.StatusBarState;
|
||||||
import com.android.systemui.statusbar.phone.StatusBar;
|
import com.android.systemui.statusbar.phone.StatusBar;
|
||||||
@@ -44,7 +45,6 @@ import org.mockito.Captor;
|
|||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import org.mockito.MockitoAnnotations;
|
import org.mockito.MockitoAnnotations;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@SmallTest
|
@SmallTest
|
||||||
@RunWith(AndroidTestingRunner.class)
|
@RunWith(AndroidTestingRunner.class)
|
||||||
@@ -65,12 +65,13 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase {
|
|||||||
private DelayableExecutor mExecutor;
|
private DelayableExecutor mExecutor;
|
||||||
@Mock
|
@Mock
|
||||||
private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
|
private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
|
||||||
|
@Mock
|
||||||
|
private KeyguardViewMediator mKeyguardViewMediator;
|
||||||
|
|
||||||
private UdfpsKeyguardViewController mController;
|
private UdfpsKeyguardViewController mController;
|
||||||
|
|
||||||
// Capture listeners so that they can be used to send events
|
// Capture listeners so that they can be used to send events
|
||||||
@Captor private ArgumentCaptor<StatusBarStateController.StateListener> mStateListenerCaptor;
|
@Captor private ArgumentCaptor<StatusBarStateController.StateListener> mStateListenerCaptor;
|
||||||
private StatusBarStateController.StateListener mParentStatusBarStateListener;
|
|
||||||
private StatusBarStateController.StateListener mStatusBarStateListener;
|
private StatusBarStateController.StateListener mStatusBarStateListener;
|
||||||
|
|
||||||
@Captor private ArgumentCaptor<StatusBar.ExpansionChangedListener> mExpansionListenerCaptor;
|
@Captor private ArgumentCaptor<StatusBar.ExpansionChangedListener> mExpansionListenerCaptor;
|
||||||
@@ -83,6 +84,7 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase {
|
|||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
|
when(mKeyguardViewMediator.isAnimatingScreenOff()).thenReturn(false);
|
||||||
mController = new UdfpsKeyguardViewController(
|
mController = new UdfpsKeyguardViewController(
|
||||||
mView,
|
mView,
|
||||||
mStatusBarStateController,
|
mStatusBarStateController,
|
||||||
@@ -90,7 +92,8 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase {
|
|||||||
mStatusBarKeyguardViewManager,
|
mStatusBarKeyguardViewManager,
|
||||||
mKeyguardUpdateMonitor,
|
mKeyguardUpdateMonitor,
|
||||||
mExecutor,
|
mExecutor,
|
||||||
mDumpManager);
|
mDumpManager,
|
||||||
|
mKeyguardViewMediator);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -108,7 +111,7 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase {
|
|||||||
@Test
|
@Test
|
||||||
public void testViewControllerQueriesSBStateOnAttached() {
|
public void testViewControllerQueriesSBStateOnAttached() {
|
||||||
mController.onViewAttached();
|
mController.onViewAttached();
|
||||||
verify(mStatusBarStateController, times(2)).getState();
|
verify(mStatusBarStateController).getState();
|
||||||
verify(mStatusBarStateController).getDozeAmount();
|
verify(mStatusBarStateController).getDozeAmount();
|
||||||
|
|
||||||
final float dozeAmount = .88f;
|
final float dozeAmount = .88f;
|
||||||
@@ -117,7 +120,7 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase {
|
|||||||
captureStatusBarStateListeners();
|
captureStatusBarStateListeners();
|
||||||
|
|
||||||
mController.onViewAttached();
|
mController.onViewAttached();
|
||||||
verify(mView).setPauseAuth(true);
|
verify(mView, atLeast(1)).setPauseAuth(true);
|
||||||
verify(mView).onDozeAmountChanged(dozeAmount, dozeAmount);
|
verify(mView).onDozeAmountChanged(dozeAmount, dozeAmount);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -128,7 +131,6 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase {
|
|||||||
captureExpansionListener();
|
captureExpansionListener();
|
||||||
mController.onViewDetached();
|
mController.onViewDetached();
|
||||||
|
|
||||||
verify(mStatusBarStateController).removeCallback(mParentStatusBarStateListener);
|
|
||||||
verify(mStatusBarStateController).removeCallback(mStatusBarStateListener);
|
verify(mStatusBarStateController).removeCallback(mStatusBarStateListener);
|
||||||
verify(mStatusBar).removeExpansionChangedListener(mExpansionListener);
|
verify(mStatusBar).removeExpansionChangedListener(mExpansionListener);
|
||||||
}
|
}
|
||||||
@@ -167,6 +169,47 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase {
|
|||||||
assertTrue(mController.shouldPauseAuth());
|
assertTrue(mController.shouldPauseAuth());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testShouldPauseAuthOnShade() {
|
||||||
|
mController.onViewAttached();
|
||||||
|
captureStatusBarStateListeners();
|
||||||
|
captureExpansionListener();
|
||||||
|
|
||||||
|
// WHEN not on keyguard yet (shade = home)
|
||||||
|
sendStatusBarStateChanged(StatusBarState.SHADE);
|
||||||
|
|
||||||
|
// THEN pause auth
|
||||||
|
assertTrue(mController.shouldPauseAuth());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testShouldPauseAuthAnimatingScreenOffFromShade() {
|
||||||
|
mController.onViewAttached();
|
||||||
|
captureStatusBarStateListeners();
|
||||||
|
captureExpansionListener();
|
||||||
|
|
||||||
|
// WHEN transitioning from home/shade => keyguard + animating screen off
|
||||||
|
mStatusBarStateListener.onStatePreChange(StatusBarState.SHADE, StatusBarState.KEYGUARD);
|
||||||
|
when(mKeyguardViewMediator.isAnimatingScreenOff()).thenReturn(true);
|
||||||
|
|
||||||
|
// THEN pause auth
|
||||||
|
assertTrue(mController.shouldPauseAuth());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testDoNotPauseAuthAnimatingScreenOffFromLS() {
|
||||||
|
mController.onViewAttached();
|
||||||
|
captureStatusBarStateListeners();
|
||||||
|
captureExpansionListener();
|
||||||
|
|
||||||
|
// WHEN animating screen off transition from LS => AOD
|
||||||
|
sendStatusBarStateChanged(StatusBarState.KEYGUARD);
|
||||||
|
when(mKeyguardViewMediator.isAnimatingScreenOff()).thenReturn(true);
|
||||||
|
|
||||||
|
// THEN don't pause auth
|
||||||
|
assertFalse(mController.shouldPauseAuth());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testOverrideShouldPauseAuthOnShadeLocked() {
|
public void testOverrideShouldPauseAuthOnShadeLocked() {
|
||||||
mController.onViewAttached();
|
mController.onViewAttached();
|
||||||
@@ -203,15 +246,11 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase {
|
|||||||
|
|
||||||
private void sendStatusBarStateChanged(int statusBarState) {
|
private void sendStatusBarStateChanged(int statusBarState) {
|
||||||
mStatusBarStateListener.onStateChanged(statusBarState);
|
mStatusBarStateListener.onStateChanged(statusBarState);
|
||||||
mParentStatusBarStateListener.onStateChanged(statusBarState);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void captureStatusBarStateListeners() {
|
private void captureStatusBarStateListeners() {
|
||||||
verify(mStatusBarStateController, times(2)).addCallback(mStateListenerCaptor.capture());
|
verify(mStatusBarStateController).addCallback(mStateListenerCaptor.capture());
|
||||||
List<StatusBarStateController.StateListener> stateListeners =
|
mStatusBarStateListener = mStateListenerCaptor.getValue();
|
||||||
mStateListenerCaptor.getAllValues();
|
|
||||||
mParentStatusBarStateListener = stateListeners.get(0);
|
|
||||||
mStatusBarStateListener = stateListeners.get(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void captureExpansionListener() {
|
private void captureExpansionListener() {
|
||||||
|
|||||||
@@ -143,6 +143,7 @@ import com.android.systemui.statusbar.policy.NetworkController;
|
|||||||
import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler;
|
import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler;
|
||||||
import com.android.systemui.statusbar.policy.UserInfoControllerImpl;
|
import com.android.systemui.statusbar.policy.UserInfoControllerImpl;
|
||||||
import com.android.systemui.statusbar.policy.UserSwitcherController;
|
import com.android.systemui.statusbar.policy.UserSwitcherController;
|
||||||
|
import com.android.systemui.tuner.TunerService;
|
||||||
import com.android.systemui.util.concurrency.FakeExecutor;
|
import com.android.systemui.util.concurrency.FakeExecutor;
|
||||||
import com.android.systemui.util.time.FakeSystemClock;
|
import com.android.systemui.util.time.FakeSystemClock;
|
||||||
import com.android.systemui.volume.VolumeComponent;
|
import com.android.systemui.volume.VolumeComponent;
|
||||||
@@ -265,6 +266,7 @@ public class StatusBarTest extends SysuiTestCase {
|
|||||||
@Mock private BrightnessSlider.Factory mBrightnessSliderFactory;
|
@Mock private BrightnessSlider.Factory mBrightnessSliderFactory;
|
||||||
@Mock private WiredChargingRippleController mWiredChargingRippleController;
|
@Mock private WiredChargingRippleController mWiredChargingRippleController;
|
||||||
@Mock private OngoingCallController mOngoingCallController;
|
@Mock private OngoingCallController mOngoingCallController;
|
||||||
|
@Mock private TunerService mTunerService;
|
||||||
@Mock private FeatureFlags mFeatureFlags;
|
@Mock private FeatureFlags mFeatureFlags;
|
||||||
private ShadeController mShadeController;
|
private ShadeController mShadeController;
|
||||||
private FakeExecutor mUiBgExecutor = new FakeExecutor(new FakeSystemClock());
|
private FakeExecutor mUiBgExecutor = new FakeExecutor(new FakeSystemClock());
|
||||||
@@ -430,6 +432,7 @@ public class StatusBarTest extends SysuiTestCase {
|
|||||||
mBrightnessSliderFactory,
|
mBrightnessSliderFactory,
|
||||||
mWiredChargingRippleController,
|
mWiredChargingRippleController,
|
||||||
mOngoingCallController,
|
mOngoingCallController,
|
||||||
|
mTunerService,
|
||||||
mFeatureFlags);
|
mFeatureFlags);
|
||||||
|
|
||||||
when(mNotificationShadeWindowView.findViewById(R.id.lock_icon_container)).thenReturn(
|
when(mNotificationShadeWindowView.findViewById(R.id.lock_icon_container)).thenReturn(
|
||||||
|
|||||||
Reference in New Issue
Block a user