Launch correct enrollment activity from ChooseLock
Test: no noticable difference when setting up fingeprint work profile
Fixes: 130397083
Change-Id: I34be5262cc52052ce25a188f19bbcc13f938ac92
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index dfbc02c..76a8770 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1562,6 +1562,11 @@
android:exported="false"
android:screenOrientation="portrait"/>
+ <!-- Must not be exported -->
+ <activity android:name=".biometrics.BiometricEnrollActivity$InternalActivity"
+ android:exported="false"
+ android:theme="@style/GlifTheme.Light"/>
+
<activity android:name=".biometrics.BiometricEnrollActivity"
android:exported="true"
android:theme="@style/GlifTheme.Light">
diff --git a/src/com/android/settings/biometrics/BiometricEnrollActivity.java b/src/com/android/settings/biometrics/BiometricEnrollActivity.java
index 1b41240..64ddf4f 100644
--- a/src/com/android/settings/biometrics/BiometricEnrollActivity.java
+++ b/src/com/android/settings/biometrics/BiometricEnrollActivity.java
@@ -20,11 +20,15 @@
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
+import android.os.UserHandle;
+import com.android.settings.SetupWizardUtils;
import com.android.settings.biometrics.face.FaceEnrollIntroduction;
+import com.android.settings.biometrics.fingerprint.FingerprintEnrollFindSensor;
import com.android.settings.biometrics.fingerprint.FingerprintEnrollIntroduction;
import com.android.settings.biometrics.fingerprint.SetupFingerprintEnrollIntroduction;
import com.android.settings.core.InstrumentedActivity;
+import com.android.settings.password.ChooseLockSettingsHelper;
import com.google.android.setupcompat.util.WizardManagerHelper;
@@ -36,6 +40,12 @@
*/
public class BiometricEnrollActivity extends InstrumentedActivity {
+ private static final String TAG = "BiometricEnrollActivity";
+
+ public static final String EXTRA_SKIP_INTRO = "skip_intro";
+
+ public static final class InternalActivity extends BiometricEnrollActivity {}
+
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -45,19 +55,43 @@
// This logic may have to be modified on devices with multiple biometrics.
if (pm.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) {
- intent = getFingerprintEnrollIntent();
+ // ChooseLockGeneric can request to start fingerprint enroll bypassing the intro screen.
+ if (getIntent().getBooleanExtra(EXTRA_SKIP_INTRO, false)
+ && this instanceof InternalActivity) {
+ intent = getFingerprintFindSensorIntent();
+ } else {
+ intent = getFingerprintIntroIntent();
+ }
} else if (pm.hasSystemFeature(PackageManager.FEATURE_FACE)) {
- intent = getFaceEnrollIntent();
+ intent = getFaceIntroIntent();
}
if (intent != null) {
intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+
+ if (this instanceof InternalActivity) {
+ // Propagate challenge and user Id from ChooseLockGeneric.
+ final byte[] token = getIntent()
+ .getByteArrayExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN);
+ final int userId = getIntent()
+ .getIntExtra(Intent.EXTRA_USER_ID, UserHandle.USER_NULL);
+
+ intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, token);
+ intent.putExtra(Intent.EXTRA_USER_ID, userId);
+ }
+
startActivity(intent);
}
finish();
}
- private Intent getFingerprintEnrollIntent() {
+ private Intent getFingerprintFindSensorIntent() {
+ Intent intent = new Intent(this, FingerprintEnrollFindSensor.class);
+ SetupWizardUtils.copySetupExtras(getIntent(), intent);
+ return intent;
+ }
+
+ private Intent getFingerprintIntroIntent() {
if (WizardManagerHelper.isAnySetupWizard(getIntent())) {
Intent intent = new Intent(this, SetupFingerprintEnrollIntroduction.class);
WizardManagerHelper.copyWizardManagerExtras(getIntent(), intent);
@@ -67,7 +101,7 @@
}
}
- private Intent getFaceEnrollIntent() {
+ private Intent getFaceIntroIntent() {
Intent intent = new Intent(this, FaceEnrollIntroduction.class);
WizardManagerHelper.copyWizardManagerExtras(getIntent(), intent);
return intent;
diff --git a/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java b/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java
index a8e4206..93e1fd4 100644
--- a/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java
+++ b/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java
@@ -150,7 +150,9 @@
if (!mHasPassword) {
// No password registered, launch into enrollment wizard.
launchChooseLock();
- } else if (!mLaunchedConfirmLock || mToken == null) {
+ } else if (mToken == null) {
+ // It's possible to have a token but mLaunchedConfirmLock == false, since
+ // ChooseLockGeneric can pass us a token.
launchConfirmLock(getConfirmLockTitleResId(), getChallenge());
}
}
diff --git a/src/com/android/settings/password/ChooseLockGeneric.java b/src/com/android/settings/password/ChooseLockGeneric.java
index 580c7ba..7eb8dc2 100644
--- a/src/com/android/settings/password/ChooseLockGeneric.java
+++ b/src/com/android/settings/password/ChooseLockGeneric.java
@@ -66,8 +66,8 @@
import com.android.settings.SettingsActivity;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils;
+import com.android.settings.biometrics.BiometricEnrollActivity;
import com.android.settings.biometrics.BiometricEnrollBase;
-import com.android.settings.biometrics.fingerprint.FingerprintEnrollFindSensor;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.search.SearchFeatureProvider;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
@@ -76,7 +76,6 @@
import com.android.settingslib.widget.FooterPreference;
import com.android.settingslib.widget.FooterPreferenceMixinCompat;
-import java.util.Arrays;
import java.util.List;
public class ChooseLockGeneric extends SettingsActivity {
@@ -141,7 +140,7 @@
@VisibleForTesting
static final int CHOOSE_LOCK_REQUEST = 102;
@VisibleForTesting
- static final int CHOOSE_LOCK_BEFORE_FINGERPRINT_REQUEST = 103;
+ static final int CHOOSE_LOCK_BEFORE_BIOMETRIC_REQUEST = 103;
@VisibleForTesting
static final int SKIP_FINGERPRINT_REQUEST = 104;
@@ -366,7 +365,7 @@
startActivityForResult(
intent,
mIsSetNewPassword && mHasChallenge
- ? CHOOSE_LOCK_BEFORE_FINGERPRINT_REQUEST
+ ? CHOOSE_LOCK_BEFORE_BIOMETRIC_REQUEST
: ENABLE_ENCRYPTION_REQUEST);
} else {
if (mForChangeCredRequiredForBoot) {
@@ -411,9 +410,9 @@
finish();
}
}
- } else if (requestCode == CHOOSE_LOCK_BEFORE_FINGERPRINT_REQUEST
+ } else if (requestCode == CHOOSE_LOCK_BEFORE_BIOMETRIC_REQUEST
&& resultCode == BiometricEnrollBase.RESULT_FINISHED) {
- Intent intent = getFindSensorIntent(getActivity());
+ Intent intent = getBiometricEnrollIntent(getActivity());
if (data != null) {
intent.putExtras(data.getExtras());
}
@@ -438,8 +437,11 @@
}
}
- protected Intent getFindSensorIntent(Context context) {
- return new Intent(context, FingerprintEnrollFindSensor.class);
+ protected Intent getBiometricEnrollIntent(Context context) {
+ final Intent intent =
+ new Intent(context, BiometricEnrollActivity.InternalActivity.class);
+ intent.putExtra(BiometricEnrollActivity.EXTRA_SKIP_INTRO, true);
+ return intent;
}
@Override
@@ -764,7 +766,7 @@
intent.putExtra(EXTRA_CHOOSE_LOCK_GENERIC_EXTRAS, getIntent().getExtras());
startActivityForResult(intent,
mIsSetNewPassword && mHasChallenge
- ? CHOOSE_LOCK_BEFORE_FINGERPRINT_REQUEST
+ ? CHOOSE_LOCK_BEFORE_BIOMETRIC_REQUEST
: CHOOSE_LOCK_REQUEST);
return;
}
diff --git a/src/com/android/settings/password/SetupChooseLockGeneric.java b/src/com/android/settings/password/SetupChooseLockGeneric.java
index 346e771..72b9fa8 100644
--- a/src/com/android/settings/password/SetupChooseLockGeneric.java
+++ b/src/com/android/settings/password/SetupChooseLockGeneric.java
@@ -42,6 +42,7 @@
import com.android.settings.R;
import com.android.settings.SetupEncryptionInterstitial;
import com.android.settings.SetupWizardUtils;
+import com.android.settings.biometrics.BiometricEnrollActivity;
import com.android.settings.biometrics.fingerprint.SetupFingerprintEnrollFindSensor;
import com.android.settings.utils.SettingsDividerItemDecoration;
@@ -229,8 +230,8 @@
}
@Override
- protected Intent getFindSensorIntent(Context context) {
- final Intent intent = new Intent(context, SetupFingerprintEnrollFindSensor.class);
+ protected Intent getBiometricEnrollIntent(Context context) {
+ final Intent intent = getBiometricEnrollIntent(context);
SetupWizardUtils.copySetupExtras(getActivity().getIntent(), intent);
return intent;
}
diff --git a/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java b/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java
index a1db12c..c692f55 100644
--- a/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java
+++ b/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java
@@ -224,7 +224,7 @@
initActivity(null);
mFragment.onActivityResult(
- ChooseLockGenericFragment.CHOOSE_LOCK_BEFORE_FINGERPRINT_REQUEST,
+ ChooseLockGenericFragment.CHOOSE_LOCK_BEFORE_BIOMETRIC_REQUEST,
BiometricEnrollBase.RESULT_FINISHED, null /* data */);
assertThat(mActivity.isFinishing()).isTrue();