Launch correct enrollment activity from ChooseLock

Test: no noticable difference when setting up fingeprint work profile

Fixes: 130397083
Change-Id: I34be5262cc52052ce25a188f19bbcc13f938ac92
This commit is contained in:
Kevin Chyn
2019-04-12 15:19:12 -07:00
parent c4083cecd7
commit 5ab064f343
6 changed files with 61 additions and 17 deletions

View File

@@ -1562,6 +1562,11 @@
android:exported="false" android:exported="false"
android:screenOrientation="portrait"/> 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" <activity android:name=".biometrics.BiometricEnrollActivity"
android:exported="true" android:exported="true"
android:theme="@style/GlifTheme.Light"> android:theme="@style/GlifTheme.Light">

View File

@@ -20,11 +20,15 @@ import android.app.settings.SettingsEnums;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.os.Bundle; 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.face.FaceEnrollIntroduction;
import com.android.settings.biometrics.fingerprint.FingerprintEnrollFindSensor;
import com.android.settings.biometrics.fingerprint.FingerprintEnrollIntroduction; import com.android.settings.biometrics.fingerprint.FingerprintEnrollIntroduction;
import com.android.settings.biometrics.fingerprint.SetupFingerprintEnrollIntroduction; import com.android.settings.biometrics.fingerprint.SetupFingerprintEnrollIntroduction;
import com.android.settings.core.InstrumentedActivity; import com.android.settings.core.InstrumentedActivity;
import com.android.settings.password.ChooseLockSettingsHelper;
import com.google.android.setupcompat.util.WizardManagerHelper; import com.google.android.setupcompat.util.WizardManagerHelper;
@@ -36,6 +40,12 @@ import com.google.android.setupcompat.util.WizardManagerHelper;
*/ */
public class BiometricEnrollActivity extends InstrumentedActivity { 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 @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@@ -45,19 +55,43 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
// This logic may have to be modified on devices with multiple biometrics. // This logic may have to be modified on devices with multiple biometrics.
if (pm.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) { 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)) { } else if (pm.hasSystemFeature(PackageManager.FEATURE_FACE)) {
intent = getFaceEnrollIntent(); intent = getFaceIntroIntent();
} }
if (intent != null) { if (intent != null) {
intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); 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); startActivity(intent);
} }
finish(); 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())) { if (WizardManagerHelper.isAnySetupWizard(getIntent())) {
Intent intent = new Intent(this, SetupFingerprintEnrollIntroduction.class); Intent intent = new Intent(this, SetupFingerprintEnrollIntroduction.class);
WizardManagerHelper.copyWizardManagerExtras(getIntent(), intent); WizardManagerHelper.copyWizardManagerExtras(getIntent(), intent);
@@ -67,7 +101,7 @@ public class BiometricEnrollActivity extends InstrumentedActivity {
} }
} }
private Intent getFaceEnrollIntent() { private Intent getFaceIntroIntent() {
Intent intent = new Intent(this, FaceEnrollIntroduction.class); Intent intent = new Intent(this, FaceEnrollIntroduction.class);
WizardManagerHelper.copyWizardManagerExtras(getIntent(), intent); WizardManagerHelper.copyWizardManagerExtras(getIntent(), intent);
return intent; return intent;

View File

@@ -150,7 +150,9 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
if (!mHasPassword) { if (!mHasPassword) {
// No password registered, launch into enrollment wizard. // No password registered, launch into enrollment wizard.
launchChooseLock(); 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()); launchConfirmLock(getConfirmLockTitleResId(), getChallenge());
} }
} }

View File

@@ -66,8 +66,8 @@ import com.android.settings.R;
import com.android.settings.SettingsActivity; import com.android.settings.SettingsActivity;
import com.android.settings.SettingsPreferenceFragment; import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.biometrics.BiometricEnrollActivity;
import com.android.settings.biometrics.BiometricEnrollBase; import com.android.settings.biometrics.BiometricEnrollBase;
import com.android.settings.biometrics.fingerprint.FingerprintEnrollFindSensor;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.search.SearchFeatureProvider; import com.android.settings.search.SearchFeatureProvider;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
@@ -76,7 +76,6 @@ import com.android.settingslib.RestrictedPreference;
import com.android.settingslib.widget.FooterPreference; import com.android.settingslib.widget.FooterPreference;
import com.android.settingslib.widget.FooterPreferenceMixinCompat; import com.android.settingslib.widget.FooterPreferenceMixinCompat;
import java.util.Arrays;
import java.util.List; import java.util.List;
public class ChooseLockGeneric extends SettingsActivity { public class ChooseLockGeneric extends SettingsActivity {
@@ -141,7 +140,7 @@ public class ChooseLockGeneric extends SettingsActivity {
@VisibleForTesting @VisibleForTesting
static final int CHOOSE_LOCK_REQUEST = 102; static final int CHOOSE_LOCK_REQUEST = 102;
@VisibleForTesting @VisibleForTesting
static final int CHOOSE_LOCK_BEFORE_FINGERPRINT_REQUEST = 103; static final int CHOOSE_LOCK_BEFORE_BIOMETRIC_REQUEST = 103;
@VisibleForTesting @VisibleForTesting
static final int SKIP_FINGERPRINT_REQUEST = 104; static final int SKIP_FINGERPRINT_REQUEST = 104;
@@ -366,7 +365,7 @@ public class ChooseLockGeneric extends SettingsActivity {
startActivityForResult( startActivityForResult(
intent, intent,
mIsSetNewPassword && mHasChallenge mIsSetNewPassword && mHasChallenge
? CHOOSE_LOCK_BEFORE_FINGERPRINT_REQUEST ? CHOOSE_LOCK_BEFORE_BIOMETRIC_REQUEST
: ENABLE_ENCRYPTION_REQUEST); : ENABLE_ENCRYPTION_REQUEST);
} else { } else {
if (mForChangeCredRequiredForBoot) { if (mForChangeCredRequiredForBoot) {
@@ -411,9 +410,9 @@ public class ChooseLockGeneric extends SettingsActivity {
finish(); finish();
} }
} }
} else if (requestCode == CHOOSE_LOCK_BEFORE_FINGERPRINT_REQUEST } else if (requestCode == CHOOSE_LOCK_BEFORE_BIOMETRIC_REQUEST
&& resultCode == BiometricEnrollBase.RESULT_FINISHED) { && resultCode == BiometricEnrollBase.RESULT_FINISHED) {
Intent intent = getFindSensorIntent(getActivity()); Intent intent = getBiometricEnrollIntent(getActivity());
if (data != null) { if (data != null) {
intent.putExtras(data.getExtras()); intent.putExtras(data.getExtras());
} }
@@ -438,8 +437,11 @@ public class ChooseLockGeneric extends SettingsActivity {
} }
} }
protected Intent getFindSensorIntent(Context context) { protected Intent getBiometricEnrollIntent(Context context) {
return new Intent(context, FingerprintEnrollFindSensor.class); final Intent intent =
new Intent(context, BiometricEnrollActivity.InternalActivity.class);
intent.putExtra(BiometricEnrollActivity.EXTRA_SKIP_INTRO, true);
return intent;
} }
@Override @Override
@@ -764,7 +766,7 @@ public class ChooseLockGeneric extends SettingsActivity {
intent.putExtra(EXTRA_CHOOSE_LOCK_GENERIC_EXTRAS, getIntent().getExtras()); intent.putExtra(EXTRA_CHOOSE_LOCK_GENERIC_EXTRAS, getIntent().getExtras());
startActivityForResult(intent, startActivityForResult(intent,
mIsSetNewPassword && mHasChallenge mIsSetNewPassword && mHasChallenge
? CHOOSE_LOCK_BEFORE_FINGERPRINT_REQUEST ? CHOOSE_LOCK_BEFORE_BIOMETRIC_REQUEST
: CHOOSE_LOCK_REQUEST); : CHOOSE_LOCK_REQUEST);
return; return;
} }

View File

@@ -42,6 +42,7 @@ import com.android.internal.widget.LockPatternUtils;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.SetupEncryptionInterstitial; import com.android.settings.SetupEncryptionInterstitial;
import com.android.settings.SetupWizardUtils; import com.android.settings.SetupWizardUtils;
import com.android.settings.biometrics.BiometricEnrollActivity;
import com.android.settings.biometrics.fingerprint.SetupFingerprintEnrollFindSensor; import com.android.settings.biometrics.fingerprint.SetupFingerprintEnrollFindSensor;
import com.android.settings.utils.SettingsDividerItemDecoration; import com.android.settings.utils.SettingsDividerItemDecoration;
@@ -229,8 +230,8 @@ public class SetupChooseLockGeneric extends ChooseLockGeneric {
} }
@Override @Override
protected Intent getFindSensorIntent(Context context) { protected Intent getBiometricEnrollIntent(Context context) {
final Intent intent = new Intent(context, SetupFingerprintEnrollFindSensor.class); final Intent intent = getBiometricEnrollIntent(context);
SetupWizardUtils.copySetupExtras(getActivity().getIntent(), intent); SetupWizardUtils.copySetupExtras(getActivity().getIntent(), intent);
return intent; return intent;
} }

View File

@@ -224,7 +224,7 @@ public class ChooseLockGenericTest {
initActivity(null); initActivity(null);
mFragment.onActivityResult( mFragment.onActivityResult(
ChooseLockGenericFragment.CHOOSE_LOCK_BEFORE_FINGERPRINT_REQUEST, ChooseLockGenericFragment.CHOOSE_LOCK_BEFORE_BIOMETRIC_REQUEST,
BiometricEnrollBase.RESULT_FINISHED, null /* data */); BiometricEnrollBase.RESULT_FINISHED, null /* data */);
assertThat(mActivity.isFinishing()).isTrue(); assertThat(mActivity.isFinishing()).isTrue();