Merge "Support customization for biometrics SafeSourceIssue" into main
This commit is contained in:
committed by
Android (Google) Code Review
commit
60c6d8ead5
@@ -22,6 +22,7 @@ import static android.provider.Settings.EXTRA_BIOMETRIC_AUTHENTICATORS_ALLOWED;
|
|||||||
import static com.android.settings.biometrics.BiometricEnrollBase.BIOMETRIC_AUTH_REQUEST;
|
import static com.android.settings.biometrics.BiometricEnrollBase.BIOMETRIC_AUTH_REQUEST;
|
||||||
import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_CONSENT_DENIED;
|
import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_CONSENT_DENIED;
|
||||||
import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_CONSENT_GRANTED;
|
import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_CONSENT_GRANTED;
|
||||||
|
import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_FINISHED;
|
||||||
|
|
||||||
import static com.google.android.setupdesign.transition.TransitionHelper.TRANSITION_FADE_THROUGH;
|
import static com.google.android.setupdesign.transition.TransitionHelper.TRANSITION_FADE_THROUGH;
|
||||||
|
|
||||||
@@ -53,6 +54,7 @@ import com.android.internal.widget.LockPatternUtils;
|
|||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.SetupWizardUtils;
|
import com.android.settings.SetupWizardUtils;
|
||||||
import com.android.settings.Utils;
|
import com.android.settings.Utils;
|
||||||
|
import com.android.settings.biometrics.combination.CombinedBiometricStatusUtils;
|
||||||
import com.android.settings.core.InstrumentedActivity;
|
import com.android.settings.core.InstrumentedActivity;
|
||||||
import com.android.settings.overlay.FeatureFactory;
|
import com.android.settings.overlay.FeatureFactory;
|
||||||
import com.android.settings.password.ChooseLockGeneric;
|
import com.android.settings.password.ChooseLockGeneric;
|
||||||
@@ -131,6 +133,7 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
|
|||||||
private Bundle mParentalOptions;
|
private Bundle mParentalOptions;
|
||||||
@Nullable private Long mGkPwHandle;
|
@Nullable private Long mGkPwHandle;
|
||||||
@Nullable private ParentalConsentHelper mParentalConsentHelper;
|
@Nullable private ParentalConsentHelper mParentalConsentHelper;
|
||||||
|
private boolean mIsPreviousEnrollmentCanceled = false;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
@@ -531,6 +534,7 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
|
|||||||
} else {
|
} else {
|
||||||
Log.d(TAG, "Unknown result for set/choose lock: " + resultCode);
|
Log.d(TAG, "Unknown result for set/choose lock: " + resultCode);
|
||||||
setResult(resultCode, newResultIntent());
|
setResult(resultCode, newResultIntent());
|
||||||
|
notifySafetyIssueActionLaunchedIfNeeded(resultCode);
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -549,16 +553,21 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
|
|||||||
// SetupFingerprintEnroll*/FingerprintEnrollmentActivity to
|
// SetupFingerprintEnroll*/FingerprintEnrollmentActivity to
|
||||||
// SetupFaceEnrollIntroduction
|
// SetupFaceEnrollIntroduction
|
||||||
TransitionHelper.applyForwardTransition(this, TRANSITION_FADE_THROUGH);
|
TransitionHelper.applyForwardTransition(this, TRANSITION_FADE_THROUGH);
|
||||||
|
mIsPreviousEnrollmentCanceled =
|
||||||
|
resultCode != BiometricEnrollBase.RESULT_FINISHED;
|
||||||
launchFaceOnlyEnroll();
|
launchFaceOnlyEnroll();
|
||||||
} else {
|
} else {
|
||||||
|
notifySafetyIssueActionLaunchedIfNeeded(resultCode);
|
||||||
finishOrLaunchHandToParent(resultCode);
|
finishOrLaunchHandToParent(resultCode);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case REQUEST_SINGLE_ENROLL_FACE:
|
case REQUEST_SINGLE_ENROLL_FACE:
|
||||||
mIsSingleEnrolling = false;
|
mIsSingleEnrolling = false;
|
||||||
if (resultCode == Activity.RESULT_CANCELED && mIsFingerprintEnrollable) {
|
if (resultCode == Activity.RESULT_CANCELED && mIsFingerprintEnrollable) {
|
||||||
|
mIsPreviousEnrollmentCanceled = true;
|
||||||
launchFingerprintOnlyEnroll();
|
launchFingerprintOnlyEnroll();
|
||||||
} else {
|
} else {
|
||||||
|
notifySafetyIssueActionLaunchedIfNeeded(resultCode);
|
||||||
finishOrLaunchHandToParent(resultCode);
|
finishOrLaunchHandToParent(resultCode);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -742,6 +751,15 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
|
|||||||
startActivityForResult(intent, REQUEST_HANDOFF_PARENT);
|
startActivityForResult(intent, REQUEST_HANDOFF_PARENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void notifySafetyIssueActionLaunchedIfNeeded(int resultCode) {
|
||||||
|
if (getIntent().getBooleanExtra(
|
||||||
|
CombinedBiometricStatusUtils.EXTRA_LAUNCH_FROM_SAFETY_SOURCE_ISSUE, false)
|
||||||
|
&& (resultCode != RESULT_FINISHED || mIsPreviousEnrollmentCanceled)) {
|
||||||
|
FeatureFactory.getFeatureFactory().getBiometricsFeatureProvider()
|
||||||
|
.notifySafetyIssueActionLaunched();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMetricsCategory() {
|
public int getMetricsCategory() {
|
||||||
return SettingsEnums.BIOMETRIC_ENROLL_ACTIVITY;
|
return SettingsEnums.BIOMETRIC_ENROLL_ACTIVITY;
|
||||||
|
@@ -36,6 +36,13 @@ import com.android.settingslib.utils.StringUtil;
|
|||||||
*/
|
*/
|
||||||
public class CombinedBiometricStatusUtils {
|
public class CombinedBiometricStatusUtils {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An intent extra indicates that the enrollment process is launched from biometric
|
||||||
|
* SafetySourceIssue action.
|
||||||
|
*/
|
||||||
|
public static final String EXTRA_LAUNCH_FROM_SAFETY_SOURCE_ISSUE =
|
||||||
|
"launch_from_safety_source_issue";
|
||||||
|
|
||||||
private final int mUserId;
|
private final int mUserId;
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
@Nullable
|
@Nullable
|
||||||
|
@@ -16,10 +16,13 @@
|
|||||||
|
|
||||||
package com.android.settings.biometrics.face
|
package com.android.settings.biometrics.face
|
||||||
|
|
||||||
|
import android.app.ComponentCaller
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import com.android.settings.biometrics.BiometricEnrollBase.RESULT_FINISHED
|
||||||
|
import com.android.settings.biometrics.combination.CombinedBiometricStatusUtils
|
||||||
|
|
||||||
import com.android.settings.overlay.FeatureFactory.Companion.featureFactory
|
import com.android.settings.overlay.FeatureFactory.Companion.featureFactory
|
||||||
|
|
||||||
@@ -46,9 +49,23 @@ class FaceEnroll: AppCompatActivity() {
|
|||||||
*/
|
*/
|
||||||
Log.d("FaceEnroll", "forward to $nextActivityClass")
|
Log.d("FaceEnroll", "forward to $nextActivityClass")
|
||||||
val nextIntent = Intent(this, nextActivityClass)
|
val nextIntent = Intent(this, nextActivityClass)
|
||||||
nextIntent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT)
|
|
||||||
nextIntent.putExtras(intent)
|
nextIntent.putExtras(intent)
|
||||||
startActivity(nextIntent)
|
startActivityForResult(nextIntent, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onActivityResult(
|
||||||
|
requestCode: Int,
|
||||||
|
resultCode: Int,
|
||||||
|
data: Intent?,
|
||||||
|
caller: ComponentCaller
|
||||||
|
) {
|
||||||
|
super.onActivityResult(requestCode, resultCode, data, caller)
|
||||||
|
if (intent.getBooleanExtra(
|
||||||
|
CombinedBiometricStatusUtils.EXTRA_LAUNCH_FROM_SAFETY_SOURCE_ISSUE, false)
|
||||||
|
&& resultCode != RESULT_FINISHED) {
|
||||||
|
featureFactory.biometricsFeatureProvider.notifySafetyIssueActionLaunched()
|
||||||
|
}
|
||||||
|
setResult(resultCode, data)
|
||||||
finish()
|
finish()
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -16,10 +16,13 @@
|
|||||||
|
|
||||||
package com.android.settings.biometrics.fingerprint
|
package com.android.settings.biometrics.fingerprint
|
||||||
|
|
||||||
|
import android.app.ComponentCaller
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import com.android.settings.biometrics.BiometricEnrollBase
|
||||||
|
import com.android.settings.biometrics.combination.CombinedBiometricStatusUtils
|
||||||
import com.android.settings.overlay.FeatureFactory.Companion.featureFactory
|
import com.android.settings.overlay.FeatureFactory.Companion.featureFactory
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -69,9 +72,24 @@ open class FingerprintEnroll: AppCompatActivity() {
|
|||||||
*/
|
*/
|
||||||
Log.d("FingerprintEnroll", "forward to $nextActivityClass")
|
Log.d("FingerprintEnroll", "forward to $nextActivityClass")
|
||||||
val nextIntent = Intent(this, nextActivityClass)
|
val nextIntent = Intent(this, nextActivityClass)
|
||||||
nextIntent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT)
|
|
||||||
nextIntent.putExtras(intent)
|
nextIntent.putExtras(intent)
|
||||||
startActivity(nextIntent)
|
startActivityForResult(nextIntent, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onActivityResult(
|
||||||
|
requestCode: Int,
|
||||||
|
resultCode: Int,
|
||||||
|
data: Intent?,
|
||||||
|
caller: ComponentCaller
|
||||||
|
) {
|
||||||
|
super.onActivityResult(requestCode, resultCode, data, caller)
|
||||||
|
if (intent.getBooleanExtra(
|
||||||
|
CombinedBiometricStatusUtils.EXTRA_LAUNCH_FROM_SAFETY_SOURCE_ISSUE, false)
|
||||||
|
&& resultCode != BiometricEnrollBase.RESULT_FINISHED
|
||||||
|
) {
|
||||||
|
featureFactory.biometricsFeatureProvider.notifySafetyIssueActionLaunched()
|
||||||
|
}
|
||||||
|
setResult(resultCode, data)
|
||||||
finish()
|
finish()
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -68,7 +68,6 @@ class FaceEnrollTest {
|
|||||||
currentActivityInstance : FaceEnroll,
|
currentActivityInstance : FaceEnroll,
|
||||||
nextActivityClass: Class<out Activity>
|
nextActivityClass: Class<out Activity>
|
||||||
) {
|
) {
|
||||||
Truth.assertThat(currentActivityInstance.isFinishing).isTrue()
|
|
||||||
val nextActivityIntent = Shadows.shadowOf(currentActivityInstance).nextStartedActivity
|
val nextActivityIntent = Shadows.shadowOf(currentActivityInstance).nextStartedActivity
|
||||||
assertThat(nextActivityIntent.component!!.className).isEqualTo(nextActivityClass.name)
|
assertThat(nextActivityIntent.component!!.className).isEqualTo(nextActivityClass.name)
|
||||||
assertThat(nextActivityIntent.extras!!.size()).isEqualTo(1)
|
assertThat(nextActivityIntent.extras!!.size()).isEqualTo(1)
|
||||||
|
@@ -95,7 +95,6 @@ class FingerprintEnrollTest {
|
|||||||
currentActivityInstance : FingerprintEnroll,
|
currentActivityInstance : FingerprintEnroll,
|
||||||
nextActivityClass: Class<out Activity>
|
nextActivityClass: Class<out Activity>
|
||||||
) {
|
) {
|
||||||
assertThat(currentActivityInstance.isFinishing).isTrue()
|
|
||||||
val nextActivityIntent = Shadows.shadowOf(currentActivityInstance).nextStartedActivity
|
val nextActivityIntent = Shadows.shadowOf(currentActivityInstance).nextStartedActivity
|
||||||
assertThat(nextActivityIntent.component!!.className).isEqualTo(nextActivityClass.name)
|
assertThat(nextActivityIntent.component!!.className).isEqualTo(nextActivityClass.name)
|
||||||
assertThat(nextActivityIntent.extras!!.size()).isEqualTo(1)
|
assertThat(nextActivityIntent.extras!!.size()).isEqualTo(1)
|
||||||
|
Reference in New Issue
Block a user