Merge "Updated biometric prompt assets." into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
8b1aeaa2c2
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -49,11 +49,11 @@
|
|||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
android:id="@+id/biometric_icon_frame"
|
android:id="@+id/biometric_icon_frame"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center_horizontal">
|
android:layout_gravity="center_horizontal">
|
||||||
|
|
||||||
<ImageView
|
<com.airbnb.lottie.LottieAnimationView
|
||||||
android:id="@+id/biometric_icon"
|
android:id="@+id/biometric_icon"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
<com.android.systemui.biometrics.AuthBiometricFingerprintView
|
<com.android.systemui.biometrics.AuthBiometricFingerprintView
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:id="@+id/contents"
|
android:id="@+id/contents"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -937,7 +937,8 @@
|
|||||||
|
|
||||||
<!-- Biometric Dialog values -->
|
<!-- Biometric Dialog values -->
|
||||||
<dimen name="biometric_dialog_face_icon_size">64dp</dimen>
|
<dimen name="biometric_dialog_face_icon_size">64dp</dimen>
|
||||||
<dimen name="biometric_dialog_fingerprint_icon_size">80dp</dimen>
|
<dimen name="biometric_dialog_fingerprint_icon_width">80dp</dimen>
|
||||||
|
<dimen name="biometric_dialog_fingerprint_icon_height">80dp</dimen>
|
||||||
<dimen name="biometric_dialog_button_negative_max_width">160dp</dimen>
|
<dimen name="biometric_dialog_button_negative_max_width">160dp</dimen>
|
||||||
<dimen name="biometric_dialog_button_positive_max_width">136dp</dimen>
|
<dimen name="biometric_dialog_button_positive_max_width">136dp</dimen>
|
||||||
<dimen name="biometric_dialog_corner_size">4dp</dimen>
|
<dimen name="biometric_dialog_corner_size">4dp</dimen>
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ package com.android.systemui.biometrics
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import android.widget.ImageView
|
import com.airbnb.lottie.LottieAnimationView
|
||||||
import com.android.systemui.R
|
import com.android.systemui.R
|
||||||
import com.android.systemui.biometrics.AuthBiometricView.BiometricState
|
import com.android.systemui.biometrics.AuthBiometricView.BiometricState
|
||||||
import com.android.systemui.biometrics.AuthBiometricView.STATE_AUTHENTICATED
|
import com.android.systemui.biometrics.AuthBiometricView.STATE_AUTHENTICATED
|
||||||
@@ -34,7 +34,7 @@ private const val TAG = "AuthBiometricFaceIconController"
|
|||||||
/** Face only icon animator for BiometricPrompt. */
|
/** Face only icon animator for BiometricPrompt. */
|
||||||
class AuthBiometricFaceIconController(
|
class AuthBiometricFaceIconController(
|
||||||
context: Context,
|
context: Context,
|
||||||
iconView: ImageView
|
iconView: LottieAnimationView
|
||||||
) : AuthIconController(context, iconView) {
|
) : AuthIconController(context, iconView) {
|
||||||
|
|
||||||
// false = dark to light, true = light to dark
|
// false = dark to light, true = light to dark
|
||||||
|
|||||||
@@ -16,20 +16,20 @@
|
|||||||
|
|
||||||
package com.android.systemui.biometrics
|
package com.android.systemui.biometrics
|
||||||
|
|
||||||
|
import android.annotation.RawRes
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.drawable.Drawable
|
import com.airbnb.lottie.LottieAnimationView
|
||||||
import android.widget.ImageView
|
|
||||||
import com.android.systemui.R
|
import com.android.systemui.R
|
||||||
import com.android.systemui.biometrics.AuthBiometricView.BiometricState
|
import com.android.systemui.biometrics.AuthBiometricView.BiometricState
|
||||||
import com.android.systemui.biometrics.AuthBiometricView.STATE_PENDING_CONFIRMATION
|
|
||||||
import com.android.systemui.biometrics.AuthBiometricView.STATE_AUTHENTICATED
|
import com.android.systemui.biometrics.AuthBiometricView.STATE_AUTHENTICATED
|
||||||
import com.android.systemui.biometrics.AuthBiometricView.STATE_ERROR
|
import com.android.systemui.biometrics.AuthBiometricView.STATE_ERROR
|
||||||
import com.android.systemui.biometrics.AuthBiometricView.STATE_HELP
|
import com.android.systemui.biometrics.AuthBiometricView.STATE_HELP
|
||||||
|
import com.android.systemui.biometrics.AuthBiometricView.STATE_PENDING_CONFIRMATION
|
||||||
|
|
||||||
/** Face/Fingerprint combined icon animator for BiometricPrompt. */
|
/** Face/Fingerprint combined icon animator for BiometricPrompt. */
|
||||||
class AuthBiometricFingerprintAndFaceIconController(
|
class AuthBiometricFingerprintAndFaceIconController(
|
||||||
context: Context,
|
context: Context,
|
||||||
iconView: ImageView
|
iconView: LottieAnimationView
|
||||||
) : AuthBiometricFingerprintIconController(context, iconView) {
|
) : AuthBiometricFingerprintIconController(context, iconView) {
|
||||||
|
|
||||||
override val actsAsConfirmButton: Boolean = true
|
override val actsAsConfirmButton: Boolean = true
|
||||||
@@ -43,15 +43,16 @@ class AuthBiometricFingerprintAndFaceIconController(
|
|||||||
else -> super.shouldAnimateForTransition(oldState, newState)
|
else -> super.shouldAnimateForTransition(oldState, newState)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@RawRes
|
||||||
override fun getAnimationForTransition(
|
override fun getAnimationForTransition(
|
||||||
@BiometricState oldState: Int,
|
@BiometricState oldState: Int,
|
||||||
@BiometricState newState: Int
|
@BiometricState newState: Int
|
||||||
): Drawable? = when (newState) {
|
): Int? = when (newState) {
|
||||||
STATE_PENDING_CONFIRMATION -> {
|
STATE_PENDING_CONFIRMATION -> {
|
||||||
if (oldState == STATE_ERROR || oldState == STATE_HELP) {
|
if (oldState == STATE_ERROR || oldState == STATE_HELP) {
|
||||||
context.getDrawable(R.drawable.fingerprint_dialog_error_to_unlock)
|
R.raw.fingerprint_dialogue_error_to_unlock_lottie
|
||||||
} else {
|
} else {
|
||||||
context.getDrawable(R.drawable.fingerprint_dialog_fp_to_unlock)
|
R.raw.fingerprint_dialogue_fingerprint_to_unlock_lottie
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
STATE_AUTHENTICATED -> null
|
STATE_AUTHENTICATED -> null
|
||||||
|
|||||||
@@ -16,10 +16,9 @@
|
|||||||
|
|
||||||
package com.android.systemui.biometrics
|
package com.android.systemui.biometrics
|
||||||
|
|
||||||
|
import android.annotation.RawRes
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.drawable.AnimatedVectorDrawable
|
import com.airbnb.lottie.LottieAnimationView
|
||||||
import android.graphics.drawable.Drawable
|
|
||||||
import android.widget.ImageView
|
|
||||||
import com.android.systemui.R
|
import com.android.systemui.R
|
||||||
import com.android.systemui.biometrics.AuthBiometricView.BiometricState
|
import com.android.systemui.biometrics.AuthBiometricView.BiometricState
|
||||||
import com.android.systemui.biometrics.AuthBiometricView.STATE_AUTHENTICATED
|
import com.android.systemui.biometrics.AuthBiometricView.STATE_AUTHENTICATED
|
||||||
@@ -33,41 +32,41 @@ import com.android.systemui.biometrics.AuthBiometricView.STATE_PENDING_CONFIRMAT
|
|||||||
/** Fingerprint only icon animator for BiometricPrompt. */
|
/** Fingerprint only icon animator for BiometricPrompt. */
|
||||||
open class AuthBiometricFingerprintIconController(
|
open class AuthBiometricFingerprintIconController(
|
||||||
context: Context,
|
context: Context,
|
||||||
iconView: ImageView
|
iconView: LottieAnimationView
|
||||||
) : AuthIconController(context, iconView) {
|
) : AuthIconController(context, iconView) {
|
||||||
|
|
||||||
var iconLayoutParamsSize = 0
|
var iconLayoutParamSize: Pair<Int, Int> = Pair(1, 1)
|
||||||
set(value) {
|
set(value) {
|
||||||
if (field == value) {
|
if (field == value) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
iconView.layoutParams.width = value
|
iconView.layoutParams.width = value.first
|
||||||
iconView.layoutParams.height = value
|
iconView.layoutParams.height = value.second
|
||||||
field = value
|
field = value
|
||||||
}
|
}
|
||||||
|
|
||||||
init {
|
init {
|
||||||
iconLayoutParamsSize = context.resources.getDimensionPixelSize(
|
iconLayoutParamSize = Pair(context.resources.getDimensionPixelSize(
|
||||||
R.dimen.biometric_dialog_fingerprint_icon_size
|
R.dimen.biometric_dialog_fingerprint_icon_width),
|
||||||
)
|
context.resources.getDimensionPixelSize(
|
||||||
|
R.dimen.biometric_dialog_fingerprint_icon_height))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun updateIcon(@BiometricState lastState: Int, @BiometricState newState: Int) {
|
override fun updateIcon(@BiometricState lastState: Int, @BiometricState newState: Int) {
|
||||||
val icon = getAnimationForTransition(lastState, newState) ?: return
|
val icon = getAnimationForTransition(lastState, newState) ?: return
|
||||||
|
|
||||||
iconView.setImageDrawable(icon)
|
if (!(lastState == STATE_AUTHENTICATING_ANIMATING_IN && newState == STATE_AUTHENTICATING)) {
|
||||||
|
iconView.setAnimation(icon)
|
||||||
|
}
|
||||||
|
|
||||||
val iconContentDescription = getIconContentDescription(newState)
|
val iconContentDescription = getIconContentDescription(newState)
|
||||||
if (iconContentDescription != null) {
|
if (iconContentDescription != null) {
|
||||||
iconView.contentDescription = iconContentDescription
|
iconView.contentDescription = iconContentDescription
|
||||||
}
|
}
|
||||||
|
|
||||||
(icon as? AnimatedVectorDrawable)?.apply {
|
iconView.frame = 0
|
||||||
reset()
|
|
||||||
if (shouldAnimateForTransition(lastState, newState)) {
|
if (shouldAnimateForTransition(lastState, newState)) {
|
||||||
forceAnimationOnUI()
|
iconView.playAnimation()
|
||||||
start()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,24 +96,27 @@ open class AuthBiometricFingerprintIconController(
|
|||||||
else -> false
|
else -> false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@RawRes
|
||||||
protected open fun getAnimationForTransition(
|
protected open fun getAnimationForTransition(
|
||||||
@BiometricState oldState: Int,
|
@BiometricState oldState: Int,
|
||||||
@BiometricState newState: Int
|
@BiometricState newState: Int
|
||||||
): Drawable? {
|
): Int? {
|
||||||
val id = when (newState) {
|
val id = when (newState) {
|
||||||
STATE_HELP,
|
STATE_HELP,
|
||||||
STATE_ERROR -> R.drawable.fingerprint_dialog_fp_to_error
|
STATE_ERROR -> {
|
||||||
|
R.raw.fingerprint_dialogue_fingerprint_to_error_lottie
|
||||||
|
}
|
||||||
STATE_AUTHENTICATING_ANIMATING_IN,
|
STATE_AUTHENTICATING_ANIMATING_IN,
|
||||||
STATE_AUTHENTICATING -> {
|
STATE_AUTHENTICATING -> {
|
||||||
if (oldState == STATE_ERROR || oldState == STATE_HELP) {
|
if (oldState == STATE_ERROR || oldState == STATE_HELP) {
|
||||||
R.drawable.fingerprint_dialog_error_to_fp
|
R.raw.fingerprint_dialogue_error_to_fingerprint_lottie
|
||||||
} else {
|
} else {
|
||||||
R.drawable.fingerprint_dialog_fp_to_error
|
R.raw.fingerprint_dialogue_fingerprint_to_error_lottie
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
STATE_AUTHENTICATED -> R.drawable.fingerprint_dialog_fp_to_error
|
STATE_AUTHENTICATED -> R.raw.fingerprint_dialogue_fingerprint_to_error_lottie
|
||||||
else -> return null
|
else -> return null
|
||||||
}
|
}
|
||||||
return if (id != null) context.getDrawable(id) else null
|
return if (id != null) return id else null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -90,8 +90,9 @@ open class AuthBiometricFingerprintView(
|
|||||||
|
|
||||||
fun updateOverrideIconLayoutParamsSize() {
|
fun updateOverrideIconLayoutParamsSize() {
|
||||||
udfpsAdapter?.let {
|
udfpsAdapter?.let {
|
||||||
(mIconController as? AuthBiometricFingerprintIconController)?.iconLayoutParamsSize =
|
val sensorDiameter = it.getSensorDiameter(scaleFactorProvider?.provide() ?: 1.0f)
|
||||||
it.getSensorDiameter(scaleFactorProvider?.provide() ?: 1.0f)
|
(mIconController as? AuthBiometricFingerprintIconController)?.iconLayoutParamSize =
|
||||||
|
Pair(sensorDiameter, sensorDiameter)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ import android.graphics.drawable.Animatable2
|
|||||||
import android.graphics.drawable.AnimatedVectorDrawable
|
import android.graphics.drawable.AnimatedVectorDrawable
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import android.widget.ImageView
|
import com.airbnb.lottie.LottieAnimationView
|
||||||
import com.android.systemui.biometrics.AuthBiometricView.BiometricState
|
import com.android.systemui.biometrics.AuthBiometricView.BiometricState
|
||||||
|
|
||||||
private const val TAG = "AuthIconController"
|
private const val TAG = "AuthIconController"
|
||||||
@@ -30,7 +30,7 @@ private const val TAG = "AuthIconController"
|
|||||||
/** Controller for animating the BiometricPrompt icon/affordance. */
|
/** Controller for animating the BiometricPrompt icon/affordance. */
|
||||||
abstract class AuthIconController(
|
abstract class AuthIconController(
|
||||||
protected val context: Context,
|
protected val context: Context,
|
||||||
protected val iconView: ImageView
|
protected val iconView: LottieAnimationView
|
||||||
) : Animatable2.AnimationCallback() {
|
) : Animatable2.AnimationCallback() {
|
||||||
|
|
||||||
/** If this controller should ignore events and pause. */
|
/** If this controller should ignore events and pause. */
|
||||||
|
|||||||
@@ -41,14 +41,14 @@ import android.view.View;
|
|||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.accessibility.AccessibilityManager;
|
import android.view.accessibility.AccessibilityManager;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.internal.widget.LockPatternUtils;
|
import com.android.internal.widget.LockPatternUtils;
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
import com.android.systemui.util.LargeScreenUtils;
|
|
||||||
|
import com.airbnb.lottie.LottieAnimationView;
|
||||||
|
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
import java.lang.annotation.RetentionPolicy;
|
import java.lang.annotation.RetentionPolicy;
|
||||||
@@ -133,7 +133,7 @@ public abstract class AuthBiometricView extends LinearLayout {
|
|||||||
private TextView mSubtitleView;
|
private TextView mSubtitleView;
|
||||||
private TextView mDescriptionView;
|
private TextView mDescriptionView;
|
||||||
private View mIconHolderView;
|
private View mIconHolderView;
|
||||||
protected ImageView mIconView;
|
protected LottieAnimationView mIconView;
|
||||||
protected TextView mIndicatorView;
|
protected TextView mIndicatorView;
|
||||||
|
|
||||||
@VisibleForTesting @NonNull AuthIconController mIconController;
|
@VisibleForTesting @NonNull AuthIconController mIconController;
|
||||||
@@ -824,25 +824,12 @@ public abstract class AuthBiometricView extends LinearLayout {
|
|||||||
return new AuthDialog.LayoutParams(width, totalHeight);
|
return new AuthDialog.LayoutParams(width, totalHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isLargeDisplay() {
|
|
||||||
return LargeScreenUtils.shouldUseSplitNotificationShade(getResources());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||||
final int width = MeasureSpec.getSize(widthMeasureSpec);
|
final int width = MeasureSpec.getSize(widthMeasureSpec);
|
||||||
final int height = MeasureSpec.getSize(heightMeasureSpec);
|
final int height = MeasureSpec.getSize(heightMeasureSpec);
|
||||||
|
|
||||||
final boolean isLargeDisplay = isLargeDisplay();
|
final int newWidth = Math.min(width, height);
|
||||||
|
|
||||||
final int newWidth;
|
|
||||||
if (isLargeDisplay) {
|
|
||||||
// TODO(b/201811580): Unless we can come up with a one-size-fits-all equation, we may
|
|
||||||
// want to consider moving this to an overlay.
|
|
||||||
newWidth = 2 * Math.min(width, height) / 3;
|
|
||||||
} else {
|
|
||||||
newWidth = Math.min(width, height);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Use "newWidth" instead, so the landscape dialog width is the same as the portrait
|
// Use "newWidth" instead, so the landscape dialog width is the same as the portrait
|
||||||
// width.
|
// width.
|
||||||
|
|||||||
Reference in New Issue
Block a user