Allows the user to go back to Encryption Screen

bug:22907221
Change-Id: I766407f4f130ac618da178e1b6c04029025db8f2
This commit is contained in:
Udam Saini
2015-12-08 17:28:19 -08:00
parent caac42dc99
commit edac136e16
4 changed files with 91 additions and 55 deletions

View File

@@ -220,13 +220,17 @@ public class ChooseLockGeneric extends SettingsActivity {
&& !dpm.getDoNotAskCredentialsOnBoot()) { && !dpm.getDoNotAskCredentialsOnBoot()) {
mEncryptionRequestQuality = quality; mEncryptionRequestQuality = quality;
mEncryptionRequestDisabled = disabled; mEncryptionRequestDisabled = disabled;
// Get the intent that the encryption interstitial should start for creating
// the new unlock method.
Intent unlockMethodIntent = getIntentForUnlockMethod(quality, disabled);
final Context context = getActivity(); final Context context = getActivity();
// If accessibility is enabled and the user hasn't seen this dialog before, set the // If accessibility is enabled and the user hasn't seen this dialog before, set the
// default state to agree with that which is compatible with accessibility // default state to agree with that which is compatible with accessibility
// (password not required). // (password not required).
final boolean accEn = AccessibilityManager.getInstance(context).isEnabled(); final boolean accEn = AccessibilityManager.getInstance(context).isEnabled();
final boolean required = mLockPatternUtils.isCredentialRequiredToDecrypt(!accEn); final boolean required = mLockPatternUtils.isCredentialRequiredToDecrypt(!accEn);
Intent intent = getEncryptionInterstitialIntent(context, quality, required); Intent intent = getEncryptionInterstitialIntent(context, quality, required,
unlockMethodIntent);
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_FOR_FINGERPRINT, intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_FOR_FINGERPRINT,
mForFingerprint); mForFingerprint);
startActivityForResult(intent, ENABLE_ENCRYPTION_REQUEST); startActivityForResult(intent, ENABLE_ENCRYPTION_REQUEST);
@@ -246,9 +250,8 @@ public class ChooseLockGeneric extends SettingsActivity {
updatePreferencesOrFinish(); updatePreferencesOrFinish();
} else if (requestCode == ENABLE_ENCRYPTION_REQUEST } else if (requestCode == ENABLE_ENCRYPTION_REQUEST
&& resultCode == Activity.RESULT_OK) { && resultCode == Activity.RESULT_OK) {
mRequirePassword = data.getBooleanExtra( getActivity().setResult(resultCode, data);
EncryptionInterstitial.EXTRA_REQUIRE_PASSWORD, true); finish();
updateUnlockMethodAndFinish(mEncryptionRequestQuality, mEncryptionRequestDisabled);
} else if (requestCode == CHOOSE_LOCK_REQUEST) { } else if (requestCode == CHOOSE_LOCK_REQUEST) {
getActivity().setResult(resultCode, data); getActivity().setResult(resultCode, data);
finish(); finish();
@@ -451,8 +454,9 @@ public class ChooseLockGeneric extends SettingsActivity {
} }
protected Intent getEncryptionInterstitialIntent(Context context, int quality, protected Intent getEncryptionInterstitialIntent(Context context, int quality,
boolean required) { boolean required, Intent unlockMethodIntent) {
return EncryptionInterstitial.createStartIntent(context, quality, required); return EncryptionInterstitial.createStartIntent(context, quality, required,
unlockMethodIntent);
} }
/** /**
@@ -471,34 +475,13 @@ public class ChooseLockGeneric extends SettingsActivity {
} }
quality = upgradeQuality(quality); quality = upgradeQuality(quality);
Intent intent = getIntentForUnlockMethod(quality, disabled);
if (intent != null) {
startActivityForResult(intent, CHOOSE_LOCK_REQUEST);
return;
}
final Context context = getActivity(); if (quality == DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) {
if (quality >= DevicePolicyManager.PASSWORD_QUALITY_NUMERIC) {
int minLength = mDPM.getPasswordMinimumLength(null);
if (minLength < MIN_PASSWORD_LENGTH) {
minLength = MIN_PASSWORD_LENGTH;
}
final int maxLength = mDPM.getPasswordMaximumLength(quality);
Intent intent;
if (mHasChallenge) {
intent = getLockPasswordIntent(context, quality, minLength,
maxLength, mRequirePassword, mChallenge, mUserId);
} else {
intent = getLockPasswordIntent(context, quality, minLength,
maxLength, mRequirePassword, mUserPassword, mUserId);
}
startActivityForResult(intent, CHOOSE_LOCK_REQUEST);
} else if (quality == DevicePolicyManager.PASSWORD_QUALITY_SOMETHING) {
Intent intent;
if (mHasChallenge) {
intent = getLockPatternIntent(context, mRequirePassword,
mChallenge, mUserId);
} else {
intent = getLockPatternIntent(context, mRequirePassword,
mUserPassword, mUserId);
}
startActivityForResult(intent, CHOOSE_LOCK_REQUEST);
} else if (quality == DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) {
mChooseLockSettingsHelper.utils().clearLock(mUserId); mChooseLockSettingsHelper.utils().clearLock(mUserId);
mChooseLockSettingsHelper.utils().setLockScreenDisabled(disabled, mUserId); mChooseLockSettingsHelper.utils().setLockScreenDisabled(disabled, mUserId);
removeAllFingerprintTemplatesAndFinish(); removeAllFingerprintTemplatesAndFinish();
@@ -508,6 +491,34 @@ public class ChooseLockGeneric extends SettingsActivity {
} }
} }
private Intent getIntentForUnlockMethod(int quality, boolean disabled) {
Intent intent = null;
final Context context = getActivity();
if (quality >= DevicePolicyManager.PASSWORD_QUALITY_NUMERIC) {
int minLength = mDPM.getPasswordMinimumLength(null);
if (minLength < MIN_PASSWORD_LENGTH) {
minLength = MIN_PASSWORD_LENGTH;
}
final int maxLength = mDPM.getPasswordMaximumLength(quality);
if (mHasChallenge) {
intent = getLockPasswordIntent(context, quality, minLength,
maxLength, mRequirePassword, mChallenge, mUserId);
} else {
intent = getLockPasswordIntent(context, quality, minLength,
maxLength, mRequirePassword, mUserPassword, mUserId);
}
} else if (quality == DevicePolicyManager.PASSWORD_QUALITY_SOMETHING) {
if (mHasChallenge) {
intent = getLockPatternIntent(context, mRequirePassword,
mChallenge, mUserId);
} else {
intent = getLockPatternIntent(context, mRequirePassword,
mUserPassword, mUserId);
}
}
return intent;
}
private void removeAllFingerprintTemplatesAndFinish() { private void removeAllFingerprintTemplatesAndFinish() {
if (mFingerprintManager != null && mFingerprintManager.isHardwareDetected() if (mFingerprintManager != null && mFingerprintManager.isHardwareDetected()
&& mFingerprintManager.getEnrolledFingerprints().size() > 0) { && mFingerprintManager.getEnrolledFingerprints().size() > 0) {

View File

@@ -26,10 +26,12 @@ import android.content.DialogInterface.OnClickListener;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.os.UserHandle; import android.os.UserHandle;
import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; 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.RadioButton; import android.widget.RadioButton;
import android.widget.TextView; import android.widget.TextView;
@@ -39,9 +41,12 @@ import com.android.internal.widget.LockPatternUtils;
import java.util.List; import java.util.List;
public class EncryptionInterstitial extends SettingsActivity { public class EncryptionInterstitial extends SettingsActivity {
private final static String TAG = EncryptionInterstitial.class.getSimpleName();
protected static final String EXTRA_PASSWORD_QUALITY = "extra_password_quality"; protected static final String EXTRA_PASSWORD_QUALITY = "extra_password_quality";
protected static final String EXTRA_UNLOCK_METHOD_INTENT = "extra_unlock_method_intent";
public static final String EXTRA_REQUIRE_PASSWORD = "extra_require_password"; public static final String EXTRA_REQUIRE_PASSWORD = "extra_require_password";
private static final int CHOOSE_LOCK_REQUEST = 100;
@Override @Override
public Intent getIntent() { public Intent getIntent() {
@@ -56,7 +61,7 @@ public class EncryptionInterstitial extends SettingsActivity {
} }
public static Intent createStartIntent(Context ctx, int quality, public static Intent createStartIntent(Context ctx, int quality,
boolean requirePasswordDefault) { boolean requirePasswordDefault, Intent unlockMethodIntent) {
return new Intent(ctx, EncryptionInterstitial.class) return new Intent(ctx, EncryptionInterstitial.class)
.putExtra(EXTRA_PREFS_SHOW_BUTTON_BAR, true) .putExtra(EXTRA_PREFS_SHOW_BUTTON_BAR, true)
.putExtra(EXTRA_PREFS_SET_BACK_TEXT, (String) null) .putExtra(EXTRA_PREFS_SET_BACK_TEXT, (String) null)
@@ -64,7 +69,8 @@ public class EncryptionInterstitial extends SettingsActivity {
R.string.encryption_continue_button)) R.string.encryption_continue_button))
.putExtra(EXTRA_PASSWORD_QUALITY, quality) .putExtra(EXTRA_PASSWORD_QUALITY, quality)
.putExtra(EXTRA_SHOW_FRAGMENT_TITLE_RESID, R.string.encryption_interstitial_header) .putExtra(EXTRA_SHOW_FRAGMENT_TITLE_RESID, R.string.encryption_interstitial_header)
.putExtra(EXTRA_REQUIRE_PASSWORD, requirePasswordDefault); .putExtra(EXTRA_REQUIRE_PASSWORD, requirePasswordDefault)
.putExtra(EXTRA_UNLOCK_METHOD_INTENT, unlockMethodIntent);
} }
public static class EncryptionInterstitialFragment extends SettingsPreferenceFragment public static class EncryptionInterstitialFragment extends SettingsPreferenceFragment
@@ -75,6 +81,7 @@ public class EncryptionInterstitial extends SettingsActivity {
private RadioButton mDontRequirePasswordToDecryptButton; private RadioButton mDontRequirePasswordToDecryptButton;
private TextView mEncryptionMessage; private TextView mEncryptionMessage;
private boolean mPasswordRequired; private boolean mPasswordRequired;
private Intent mUnlockMethodIntent;
@Override @Override
protected int getMetricsCategory() { protected int getMetricsCategory() {
@@ -98,7 +105,9 @@ public class EncryptionInterstitial extends SettingsActivity {
(TextView) view.findViewById(R.id.encryption_message); (TextView) view.findViewById(R.id.encryption_message);
boolean forFingerprint = getActivity().getIntent().getBooleanExtra( boolean forFingerprint = getActivity().getIntent().getBooleanExtra(
ChooseLockSettingsHelper.EXTRA_KEY_FOR_FINGERPRINT, false); ChooseLockSettingsHelper.EXTRA_KEY_FOR_FINGERPRINT, false);
int quality = getActivity().getIntent().getIntExtra(EXTRA_PASSWORD_QUALITY, 0); Intent intent = getActivity().getIntent();
final int quality = intent.getIntExtra(EXTRA_PASSWORD_QUALITY, 0);
mUnlockMethodIntent = (Intent) intent.getParcelableExtra(EXTRA_UNLOCK_METHOD_INTENT);
final int msgId; final int msgId;
final int enableId; final int enableId;
final int disableId; final int disableId;
@@ -136,6 +145,36 @@ public class EncryptionInterstitial extends SettingsActivity {
setRequirePasswordState(getActivity().getIntent().getBooleanExtra( setRequirePasswordState(getActivity().getIntent().getBooleanExtra(
EXTRA_REQUIRE_PASSWORD, true)); EXTRA_REQUIRE_PASSWORD, true));
Button nextButton = getNextButton();
if (nextButton != null) {
nextButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startLockIntent();
}
});
}
}
protected void startLockIntent() {
if (mUnlockMethodIntent != null) {
mUnlockMethodIntent.putExtra(EXTRA_REQUIRE_PASSWORD, mPasswordRequired);
startActivityForResult(mUnlockMethodIntent, CHOOSE_LOCK_REQUEST);
} else {
Log.wtf(TAG, "no unlock intent to start");
finish();
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == CHOOSE_LOCK_REQUEST &&
resultCode == RESULT_FIRST_USER) {
getActivity().setResult(RESULT_OK, data);
finish();
}
} }
@Override @Override
@@ -206,15 +245,6 @@ public class EncryptionInterstitial extends SettingsActivity {
mPasswordRequired = required; mPasswordRequired = required;
mRequirePasswordToDecryptButton.setChecked(required); mRequirePasswordToDecryptButton.setChecked(required);
mDontRequirePasswordToDecryptButton.setChecked(!required); mDontRequirePasswordToDecryptButton.setChecked(!required);
// Updates value returned by SettingsActivity.onActivityResult().
SettingsActivity sa = (SettingsActivity)getActivity();
Intent resultIntentData = sa.getResultIntentData();
if (resultIntentData == null) {
resultIntentData = new Intent();
sa.setResultIntentData(resultIntentData);
}
resultIntentData.putExtra(EXTRA_REQUIRE_PASSWORD, mPasswordRequired);
} }
@Override @Override

View File

@@ -170,9 +170,9 @@ public class SetupChooseLockGeneric extends ChooseLockGeneric {
@Override @Override
protected Intent getEncryptionInterstitialIntent(Context context, int quality, protected Intent getEncryptionInterstitialIntent(Context context, int quality,
boolean required) { boolean required, Intent unlockMethodIntent) {
Intent intent = SetupEncryptionInterstitial.createStartIntent(context, quality, Intent intent = SetupEncryptionInterstitial.createStartIntent(context, quality,
required); required, unlockMethodIntent);
SetupWizardUtils.copySetupExtras(getActivity().getIntent(), intent); SetupWizardUtils.copySetupExtras(getActivity().getIntent(), intent);
return intent; return intent;
} }

View File

@@ -38,9 +38,9 @@ import com.android.setupwizardlib.view.NavigationBar;
public class SetupEncryptionInterstitial extends EncryptionInterstitial { public class SetupEncryptionInterstitial extends EncryptionInterstitial {
public static Intent createStartIntent(Context ctx, int quality, public static Intent createStartIntent(Context ctx, int quality,
boolean requirePasswordDefault) { boolean requirePasswordDefault, Intent unlockMethodIntent) {
Intent startIntent = EncryptionInterstitial.createStartIntent(ctx, quality, Intent startIntent = EncryptionInterstitial.createStartIntent(ctx, quality,
requirePasswordDefault); requirePasswordDefault, unlockMethodIntent);
startIntent.setClass(ctx, SetupEncryptionInterstitial.class); startIntent.setClass(ctx, SetupEncryptionInterstitial.class);
startIntent.putExtra(EXTRA_PREFS_SHOW_BUTTON_BAR, false) startIntent.putExtra(EXTRA_PREFS_SHOW_BUTTON_BAR, false)
.putExtra(EXTRA_SHOW_FRAGMENT_TITLE_RESID, -1); .putExtra(EXTRA_SHOW_FRAGMENT_TITLE_RESID, -1);
@@ -102,12 +102,7 @@ public class SetupEncryptionInterstitial extends EncryptionInterstitial {
@Override @Override
public void onNavigateNext() { public void onNavigateNext() {
final SetupEncryptionInterstitial activity = startLockIntent();
(SetupEncryptionInterstitial) getActivity();
if (activity != null) {
activity.setResult(RESULT_OK, activity.getResultIntentData());
finish();
}
} }
} }
} }