Loading packages/SystemUI/src/com/android/systemui/biometrics/UdfpsAnimationViewController.java +1 −1 Original line number Diff line number Diff line Loading @@ -45,7 +45,7 @@ abstract class UdfpsAnimationViewController<T extends UdfpsAnimationView> @NonNull final StatusBar mStatusBar; @NonNull final DumpManager mDumpManger; private boolean mNotificationShadeExpanded; boolean mNotificationShadeExpanded; protected UdfpsAnimationViewController( T view, Loading packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardView.java +30 −11 Original line number Diff line number Diff line Loading @@ -40,12 +40,14 @@ import com.android.systemui.statusbar.StatusBarState; public class UdfpsKeyguardView extends UdfpsAnimationView { private final UdfpsKeyguardDrawable mFingerprintDrawable; private ImageView mFingerprintView; private int mWallpaperTexColor; private int mWallpaperTextColor; private int mStatusBarState; // used when highlighting fp icon: private int mTextColorPrimary; private ImageView mBgProtection; boolean mUdfpsRequested; int mUdfpsRequestedColor; private AnimatorSet mAnimatorSet; private int mAlpha; // 0-255 Loading @@ -63,10 +65,11 @@ public class UdfpsKeyguardView extends UdfpsAnimationView { mBgProtection = findViewById(R.id.udfps_keyguard_fp_bg); mWallpaperTexColor = Utils.getColorAttrDefaultColor(mContext, mWallpaperTextColor = Utils.getColorAttrDefaultColor(mContext, R.attr.wallpaperTextColorAccent); mTextColorPrimary = Utils.getColorAttrDefaultColor(mContext, android.R.attr.textColorPrimary); mUdfpsRequested = false; } @Override Loading @@ -90,11 +93,31 @@ public class UdfpsKeyguardView extends UdfpsAnimationView { return true; } void requestUdfps(boolean request, int color) { if (request) { mUdfpsRequestedColor = color; } else { mUdfpsRequestedColor = -1; } mUdfpsRequested = request; updateColor(); } void setStatusBarState(int statusBarState) { mStatusBarState = statusBarState; if (!isShadeLocked()) { updateColor(); } void updateColor() { mFingerprintView.setAlpha(1f); mFingerprintDrawable.setLockScreenColor(mWallpaperTexColor); mFingerprintDrawable.setLockScreenColor(getColor()); } private int getColor() { if (mUdfpsRequested && mUdfpsRequestedColor != -1) { return mUdfpsRequestedColor; } else { return mWallpaperTextColor; } } Loading Loading @@ -142,7 +165,7 @@ public class UdfpsKeyguardView extends UdfpsAnimationView { } else { // update icon color fpIconAnim = new ValueAnimator(); fpIconAnim.setIntValues(mWallpaperTexColor, mTextColorPrimary); fpIconAnim.setIntValues(getColor(), mTextColorPrimary); fpIconAnim.setEvaluator(new ArgbEvaluator()); fpIconAnim.addUpdateListener(valueAnimator -> mFingerprintDrawable.setLockScreenColor( (Integer) valueAnimator.getAnimatedValue())); Loading Loading @@ -170,10 +193,6 @@ public class UdfpsKeyguardView extends UdfpsAnimationView { 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. */ Loading @@ -193,7 +212,7 @@ public class UdfpsKeyguardView extends UdfpsAnimationView { } else { // update icon color fpIconAnim = new ValueAnimator(); fpIconAnim.setIntValues(mTextColorPrimary, mWallpaperTexColor); fpIconAnim.setIntValues(mTextColorPrimary, getColor()); fpIconAnim.setEvaluator(new ArgbEvaluator()); fpIconAnim.addUpdateListener(valueAnimator -> mFingerprintDrawable.setLockScreenColor( (Integer) valueAnimator.getAnimatedValue())); Loading packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java +28 −1 Original line number Diff line number Diff line Loading @@ -57,6 +57,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud @Nullable private Runnable mCancelRunnable; private boolean mShowingUdfpsBouncer; private boolean mUdfpsRequested; private boolean mQsExpanded; private boolean mFaceDetectRunning; private boolean mHintShown; Loading @@ -70,6 +71,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud * {@link KeyguardBouncer#EXPANSION_HIDDEN} (1f) */ private float mInputBouncerHiddenAmount; private boolean mIsBouncerVisible; protected UdfpsKeyguardViewController( @NonNull UdfpsKeyguardView view, Loading Loading @@ -105,6 +107,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud mStateListener.onDozeAmountChanged(dozeAmount, dozeAmount); mStatusBarStateController.addCallback(mStateListener); mUdfpsRequested = false; mStatusBarState = mStatusBarStateController.getState(); mQsExpanded = mKeyguardViewManager.isQsExpanded(); mKeyguardIsVisible = mKeyguardUpdateMonitor.isKeyguardVisible(); Loading @@ -113,6 +116,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud updatePauseAuth(); mKeyguardViewManager.setAlternateAuthInterceptor(mAlternateAuthInterceptor); mIsBouncerVisible = mKeyguardViewManager.bouncerIsOrWillBeShowing(); } @Override Loading @@ -137,11 +141,15 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud pw.println("mShowingUdfpsBouncer=" + mShowingUdfpsBouncer); pw.println("mFaceDetectRunning=" + mFaceDetectRunning); pw.println("mTransitioningFromHomeToKeyguard=" + mTransitioningFromHome); pw.println("mStatusBarState" + StatusBarState.toShortString(mStatusBarState)); pw.println("mStatusBarState=" + StatusBarState.toShortString(mStatusBarState)); pw.println("mQsExpanded=" + mQsExpanded); pw.println("mKeyguardVisible=" + mKeyguardIsVisible); pw.println("mIsBouncerVisible=" + mIsBouncerVisible); pw.println("mInputBouncerHiddenAmount=" + mInputBouncerHiddenAmount); pw.println("mAlpha=" + mView.getAlpha()); pw.println("mUdfpsRequested=" + mUdfpsRequested); pw.println("mView.mUdfpsRequested=" + mView.mUdfpsRequested); pw.println("mView.mUdfpsRequestedColor=" + mView.mUdfpsRequestedColor); } /** Loading Loading @@ -173,6 +181,12 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud return false; } if (mUdfpsRequested && !mNotificationShadeExpanded && (!mIsBouncerVisible || mInputBouncerHiddenAmount != KeyguardBouncer.EXPANSION_VISIBLE)) { return false; } if (mStatusBarState != KEYGUARD) { return true; } Loading Loading @@ -332,6 +346,13 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud return mShowingUdfpsBouncer; } @Override public void requestUdfps(boolean request, int color) { mUdfpsRequested = request; mView.requestUdfps(request, color); updatePauseAuth(); } @Override public boolean isAnimating() { return mView.isAnimating(); Loading @@ -355,6 +376,12 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud updatePauseAuth(); } @Override public void onBouncerVisibilityChanged() { mIsBouncerVisible = mKeyguardViewManager.bouncerIsOrWillBeShowing(); updatePauseAuth(); } @Override public void dump(PrintWriter pw) { pw.println(getTag()); Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java +24 −6 Original line number Diff line number Diff line Loading @@ -220,17 +220,22 @@ public class KeyguardBouncer { */ private void onFullyHidden() { cancelShowRunnable(); if (mRoot != null) { mRoot.setVisibility(View.INVISIBLE); } setVisibility(View.INVISIBLE); mFalsingCollector.onBouncerHidden(); DejankUtils.postAfterTraversal(mResetRunnable); } private void setVisibility(@View.Visibility int visibility) { if (mRoot != null) { mRoot.setVisibility(visibility); dispatchVisibilityChanged(); } } private final Runnable mShowRunnable = new Runnable() { @Override public void run() { mRoot.setVisibility(View.VISIBLE); setVisibility(View.VISIBLE); showPromptReason(mBouncerPromptReason); final CharSequence customMessage = mCallback.consumeCustomMessage(); if (customMessage != null) { Loading Loading @@ -299,7 +304,7 @@ public class KeyguardBouncer { } mIsAnimatingAway = false; if (mRoot != null) { mRoot.setVisibility(View.INVISIBLE); setVisibility(View.INVISIBLE); if (destroyView) { // We have a ViewFlipper that unregisters a broadcast when being detached, which may Loading Loading @@ -436,7 +441,7 @@ public class KeyguardBouncer { mContainer.addView(mRoot, mContainer.getChildCount()); mStatusBarHeight = mRoot.getResources().getDimensionPixelOffset( com.android.systemui.R.dimen.status_bar_height); mRoot.setVisibility(View.INVISIBLE); setVisibility(View.INVISIBLE); final WindowInsets rootInsets = mRoot.getRootWindowInsets(); if (rootInsets != null) { Loading Loading @@ -533,6 +538,12 @@ public class KeyguardBouncer { } } private void dispatchVisibilityChanged() { for (BouncerExpansionCallback callback : mExpansionCallbacks) { callback.onVisibilityChanged(mRoot.getVisibility() == View.VISIBLE); } } /** * Apply keyguard configuration from the currently active resources. This can be called when the * device configuration changes, to re-apply some resources that are qualified on the device Loading Loading @@ -573,6 +584,13 @@ public class KeyguardBouncer { * to 1f {@link KeyguardBouncer#EXPANSION_HIDDEN} when fully hidden */ default void onExpansionChanged(float bouncerHideAmount) {} /** * Invoked when visibility of KeyguardBouncer has changed. * Note the bouncer expansion can be {@link KeyguardBouncer#EXPANSION_VISIBLE}, but the * view's visibility can be {@link View.INVISIBLE}. */ default void onVisibilityChanged(boolean isVisible) {} } /** Create a {@link KeyguardBouncer} once a container and bouncer callback are available. */ Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +33 −0 Original line number Diff line number Diff line Loading @@ -129,6 +129,13 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb } updateStates(); } @Override public void onVisibilityChanged(boolean isVisible) { if (mAlternateAuthInterceptor != null) { mAlternateAuthInterceptor.onBouncerVisibilityChanged(); } } }; private final DockManager.DockEventListener mDockEventListener = new DockManager.DockEventListener() { Loading Loading @@ -1125,6 +1132,18 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb } } /** * Request to show the udfps affordance in a particular color. This can be used if an * occluding app on the keyguard would like to request udfps. This method does nothing if * {@link KeyguardUpdateMonitor#shouldListenForFingerprint} is false. */ public void requestUdfps(boolean request, int color) { if (mAlternateAuthInterceptor == null) { return; } mAlternateAuthInterceptor.requestUdfps(request, color); } /** * Delegate used to send show/reset events to an alternate authentication method instead of the * regular pin/pattern/password bouncer. Loading Loading @@ -1174,5 +1193,19 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb */ void setBouncerExpansionChanged(float expansion); /** * called when the bouncer view visibility has changed. */ void onBouncerVisibilityChanged(); /** * Use when an app occluding the keyguard would like to give the user ability to * unlock the device using udfps. * * @param color of the udfps icon. should have proper contrast with its background. only * used if requestUdfps = true */ void requestUdfps(boolean requestUdfps, int color); } } No newline at end of file Loading
packages/SystemUI/src/com/android/systemui/biometrics/UdfpsAnimationViewController.java +1 −1 Original line number Diff line number Diff line Loading @@ -45,7 +45,7 @@ abstract class UdfpsAnimationViewController<T extends UdfpsAnimationView> @NonNull final StatusBar mStatusBar; @NonNull final DumpManager mDumpManger; private boolean mNotificationShadeExpanded; boolean mNotificationShadeExpanded; protected UdfpsAnimationViewController( T view, Loading
packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardView.java +30 −11 Original line number Diff line number Diff line Loading @@ -40,12 +40,14 @@ import com.android.systemui.statusbar.StatusBarState; public class UdfpsKeyguardView extends UdfpsAnimationView { private final UdfpsKeyguardDrawable mFingerprintDrawable; private ImageView mFingerprintView; private int mWallpaperTexColor; private int mWallpaperTextColor; private int mStatusBarState; // used when highlighting fp icon: private int mTextColorPrimary; private ImageView mBgProtection; boolean mUdfpsRequested; int mUdfpsRequestedColor; private AnimatorSet mAnimatorSet; private int mAlpha; // 0-255 Loading @@ -63,10 +65,11 @@ public class UdfpsKeyguardView extends UdfpsAnimationView { mBgProtection = findViewById(R.id.udfps_keyguard_fp_bg); mWallpaperTexColor = Utils.getColorAttrDefaultColor(mContext, mWallpaperTextColor = Utils.getColorAttrDefaultColor(mContext, R.attr.wallpaperTextColorAccent); mTextColorPrimary = Utils.getColorAttrDefaultColor(mContext, android.R.attr.textColorPrimary); mUdfpsRequested = false; } @Override Loading @@ -90,11 +93,31 @@ public class UdfpsKeyguardView extends UdfpsAnimationView { return true; } void requestUdfps(boolean request, int color) { if (request) { mUdfpsRequestedColor = color; } else { mUdfpsRequestedColor = -1; } mUdfpsRequested = request; updateColor(); } void setStatusBarState(int statusBarState) { mStatusBarState = statusBarState; if (!isShadeLocked()) { updateColor(); } void updateColor() { mFingerprintView.setAlpha(1f); mFingerprintDrawable.setLockScreenColor(mWallpaperTexColor); mFingerprintDrawable.setLockScreenColor(getColor()); } private int getColor() { if (mUdfpsRequested && mUdfpsRequestedColor != -1) { return mUdfpsRequestedColor; } else { return mWallpaperTextColor; } } Loading Loading @@ -142,7 +165,7 @@ public class UdfpsKeyguardView extends UdfpsAnimationView { } else { // update icon color fpIconAnim = new ValueAnimator(); fpIconAnim.setIntValues(mWallpaperTexColor, mTextColorPrimary); fpIconAnim.setIntValues(getColor(), mTextColorPrimary); fpIconAnim.setEvaluator(new ArgbEvaluator()); fpIconAnim.addUpdateListener(valueAnimator -> mFingerprintDrawable.setLockScreenColor( (Integer) valueAnimator.getAnimatedValue())); Loading Loading @@ -170,10 +193,6 @@ public class UdfpsKeyguardView extends UdfpsAnimationView { 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. */ Loading @@ -193,7 +212,7 @@ public class UdfpsKeyguardView extends UdfpsAnimationView { } else { // update icon color fpIconAnim = new ValueAnimator(); fpIconAnim.setIntValues(mTextColorPrimary, mWallpaperTexColor); fpIconAnim.setIntValues(mTextColorPrimary, getColor()); fpIconAnim.setEvaluator(new ArgbEvaluator()); fpIconAnim.addUpdateListener(valueAnimator -> mFingerprintDrawable.setLockScreenColor( (Integer) valueAnimator.getAnimatedValue())); Loading
packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java +28 −1 Original line number Diff line number Diff line Loading @@ -57,6 +57,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud @Nullable private Runnable mCancelRunnable; private boolean mShowingUdfpsBouncer; private boolean mUdfpsRequested; private boolean mQsExpanded; private boolean mFaceDetectRunning; private boolean mHintShown; Loading @@ -70,6 +71,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud * {@link KeyguardBouncer#EXPANSION_HIDDEN} (1f) */ private float mInputBouncerHiddenAmount; private boolean mIsBouncerVisible; protected UdfpsKeyguardViewController( @NonNull UdfpsKeyguardView view, Loading Loading @@ -105,6 +107,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud mStateListener.onDozeAmountChanged(dozeAmount, dozeAmount); mStatusBarStateController.addCallback(mStateListener); mUdfpsRequested = false; mStatusBarState = mStatusBarStateController.getState(); mQsExpanded = mKeyguardViewManager.isQsExpanded(); mKeyguardIsVisible = mKeyguardUpdateMonitor.isKeyguardVisible(); Loading @@ -113,6 +116,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud updatePauseAuth(); mKeyguardViewManager.setAlternateAuthInterceptor(mAlternateAuthInterceptor); mIsBouncerVisible = mKeyguardViewManager.bouncerIsOrWillBeShowing(); } @Override Loading @@ -137,11 +141,15 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud pw.println("mShowingUdfpsBouncer=" + mShowingUdfpsBouncer); pw.println("mFaceDetectRunning=" + mFaceDetectRunning); pw.println("mTransitioningFromHomeToKeyguard=" + mTransitioningFromHome); pw.println("mStatusBarState" + StatusBarState.toShortString(mStatusBarState)); pw.println("mStatusBarState=" + StatusBarState.toShortString(mStatusBarState)); pw.println("mQsExpanded=" + mQsExpanded); pw.println("mKeyguardVisible=" + mKeyguardIsVisible); pw.println("mIsBouncerVisible=" + mIsBouncerVisible); pw.println("mInputBouncerHiddenAmount=" + mInputBouncerHiddenAmount); pw.println("mAlpha=" + mView.getAlpha()); pw.println("mUdfpsRequested=" + mUdfpsRequested); pw.println("mView.mUdfpsRequested=" + mView.mUdfpsRequested); pw.println("mView.mUdfpsRequestedColor=" + mView.mUdfpsRequestedColor); } /** Loading Loading @@ -173,6 +181,12 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud return false; } if (mUdfpsRequested && !mNotificationShadeExpanded && (!mIsBouncerVisible || mInputBouncerHiddenAmount != KeyguardBouncer.EXPANSION_VISIBLE)) { return false; } if (mStatusBarState != KEYGUARD) { return true; } Loading Loading @@ -332,6 +346,13 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud return mShowingUdfpsBouncer; } @Override public void requestUdfps(boolean request, int color) { mUdfpsRequested = request; mView.requestUdfps(request, color); updatePauseAuth(); } @Override public boolean isAnimating() { return mView.isAnimating(); Loading @@ -355,6 +376,12 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud updatePauseAuth(); } @Override public void onBouncerVisibilityChanged() { mIsBouncerVisible = mKeyguardViewManager.bouncerIsOrWillBeShowing(); updatePauseAuth(); } @Override public void dump(PrintWriter pw) { pw.println(getTag()); Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java +24 −6 Original line number Diff line number Diff line Loading @@ -220,17 +220,22 @@ public class KeyguardBouncer { */ private void onFullyHidden() { cancelShowRunnable(); if (mRoot != null) { mRoot.setVisibility(View.INVISIBLE); } setVisibility(View.INVISIBLE); mFalsingCollector.onBouncerHidden(); DejankUtils.postAfterTraversal(mResetRunnable); } private void setVisibility(@View.Visibility int visibility) { if (mRoot != null) { mRoot.setVisibility(visibility); dispatchVisibilityChanged(); } } private final Runnable mShowRunnable = new Runnable() { @Override public void run() { mRoot.setVisibility(View.VISIBLE); setVisibility(View.VISIBLE); showPromptReason(mBouncerPromptReason); final CharSequence customMessage = mCallback.consumeCustomMessage(); if (customMessage != null) { Loading Loading @@ -299,7 +304,7 @@ public class KeyguardBouncer { } mIsAnimatingAway = false; if (mRoot != null) { mRoot.setVisibility(View.INVISIBLE); setVisibility(View.INVISIBLE); if (destroyView) { // We have a ViewFlipper that unregisters a broadcast when being detached, which may Loading Loading @@ -436,7 +441,7 @@ public class KeyguardBouncer { mContainer.addView(mRoot, mContainer.getChildCount()); mStatusBarHeight = mRoot.getResources().getDimensionPixelOffset( com.android.systemui.R.dimen.status_bar_height); mRoot.setVisibility(View.INVISIBLE); setVisibility(View.INVISIBLE); final WindowInsets rootInsets = mRoot.getRootWindowInsets(); if (rootInsets != null) { Loading Loading @@ -533,6 +538,12 @@ public class KeyguardBouncer { } } private void dispatchVisibilityChanged() { for (BouncerExpansionCallback callback : mExpansionCallbacks) { callback.onVisibilityChanged(mRoot.getVisibility() == View.VISIBLE); } } /** * Apply keyguard configuration from the currently active resources. This can be called when the * device configuration changes, to re-apply some resources that are qualified on the device Loading Loading @@ -573,6 +584,13 @@ public class KeyguardBouncer { * to 1f {@link KeyguardBouncer#EXPANSION_HIDDEN} when fully hidden */ default void onExpansionChanged(float bouncerHideAmount) {} /** * Invoked when visibility of KeyguardBouncer has changed. * Note the bouncer expansion can be {@link KeyguardBouncer#EXPANSION_VISIBLE}, but the * view's visibility can be {@link View.INVISIBLE}. */ default void onVisibilityChanged(boolean isVisible) {} } /** Create a {@link KeyguardBouncer} once a container and bouncer callback are available. */ Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +33 −0 Original line number Diff line number Diff line Loading @@ -129,6 +129,13 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb } updateStates(); } @Override public void onVisibilityChanged(boolean isVisible) { if (mAlternateAuthInterceptor != null) { mAlternateAuthInterceptor.onBouncerVisibilityChanged(); } } }; private final DockManager.DockEventListener mDockEventListener = new DockManager.DockEventListener() { Loading Loading @@ -1125,6 +1132,18 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb } } /** * Request to show the udfps affordance in a particular color. This can be used if an * occluding app on the keyguard would like to request udfps. This method does nothing if * {@link KeyguardUpdateMonitor#shouldListenForFingerprint} is false. */ public void requestUdfps(boolean request, int color) { if (mAlternateAuthInterceptor == null) { return; } mAlternateAuthInterceptor.requestUdfps(request, color); } /** * Delegate used to send show/reset events to an alternate authentication method instead of the * regular pin/pattern/password bouncer. Loading Loading @@ -1174,5 +1193,19 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb */ void setBouncerExpansionChanged(float expansion); /** * called when the bouncer view visibility has changed. */ void onBouncerVisibilityChanged(); /** * Use when an app occluding the keyguard would like to give the user ability to * unlock the device using udfps. * * @param color of the udfps icon. should have proper contrast with its background. only * used if requestUdfps = true */ void requestUdfps(boolean requestUdfps, int color); } } No newline at end of file