diff options
author | Jim Miller <jaggies@google.com> | 2010-12-07 20:41:41 -0800 |
---|---|---|
committer | Jim Miller <jaggies@google.com> | 2010-12-08 16:45:52 -0800 |
commit | 17e9e1933055b207473b488595b2887bfcaea32e (patch) | |
tree | 7b3f0f0ac2d5fcf62ea7dc4300f7927488250cab /src/com/android/settings/ChooseLockGeneric.java | |
parent | 1c7e49ba670ad70822d34234e3677fef53e94569 (diff) | |
download | packages_apps_settings-17e9e1933055b207473b488595b2887bfcaea32e.zip packages_apps_settings-17e9e1933055b207473b488595b2887bfcaea32e.tar.gz packages_apps_settings-17e9e1933055b207473b488595b2887bfcaea32e.tar.bz2 |
Fix 3148496: Initial pass at fragmentizing lockscreen settings.
This converts most of the existing activities to fragments and wraps
them in PreferenceActivities so they can be launched as before
(e.g. by a DevicePolicyManager)
Upload after sync/rebase.
Change-Id: I4f351b75d9fca0498bcb04b4e11ff3b70765a4ba
Diffstat (limited to 'src/com/android/settings/ChooseLockGeneric.java')
-rw-r--r-- | src/com/android/settings/ChooseLockGeneric.java | 314 |
1 files changed, 163 insertions, 151 deletions
diff --git a/src/com/android/settings/ChooseLockGeneric.java b/src/com/android/settings/ChooseLockGeneric.java index f87ee5a..264db5f 100644 --- a/src/com/android/settings/ChooseLockGeneric.java +++ b/src/com/android/settings/ChooseLockGeneric.java @@ -18,6 +18,7 @@ package com.android.settings; import com.android.internal.widget.LockPatternUtils; +import android.app.Activity; import android.app.admin.DevicePolicyManager; import android.content.Context; import android.content.Intent; @@ -28,179 +29,190 @@ import android.preference.PreferenceCategory; import android.preference.PreferenceScreen; public class ChooseLockGeneric extends PreferenceActivity { - private static final int MIN_PASSWORD_LENGTH = 4; - private static final String KEY_UNLOCK_SET_OFF = "unlock_set_off"; - private static final String KEY_UNLOCK_SET_NONE = "unlock_set_none"; - private static final String KEY_UNLOCK_SET_PIN = "unlock_set_pin"; - private static final String KEY_UNLOCK_SET_PASSWORD = "unlock_set_password"; - private static final String KEY_UNLOCK_SET_PATTERN = "unlock_set_pattern"; - private static final int CONFIRM_EXISTING_REQUEST = 100; - private static final String PASSWORD_CONFIRMED = "password_confirmed"; - private static final String CONFIRM_CREDENTIALS = "confirm_credentials"; - - private ChooseLockSettingsHelper mChooseLockSettingsHelper; - private DevicePolicyManager mDPM; - private boolean mPasswordConfirmed = false; @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); - mChooseLockSettingsHelper = new ChooseLockSettingsHelper(this); + public Intent getIntent() { + Intent modIntent = new Intent(super.getIntent()); + modIntent.putExtra(EXTRA_SHOW_FRAGMENT, ChooseLockGenericFragment.class.getName()); + modIntent.putExtra(EXTRA_NO_HEADERS, true); + return modIntent; + } - if (savedInstanceState != null) { - mPasswordConfirmed = savedInstanceState.getBoolean(PASSWORD_CONFIRMED); - } + public static class ChooseLockGenericFragment extends SettingsPreferenceFragment { + private static final int MIN_PASSWORD_LENGTH = 4; + private static final String KEY_UNLOCK_SET_OFF = "unlock_set_off"; + private static final String KEY_UNLOCK_SET_NONE = "unlock_set_none"; + private static final String KEY_UNLOCK_SET_PIN = "unlock_set_pin"; + private static final String KEY_UNLOCK_SET_PASSWORD = "unlock_set_password"; + private static final String KEY_UNLOCK_SET_PATTERN = "unlock_set_pattern"; + private static final int CONFIRM_EXISTING_REQUEST = 100; + private static final String PASSWORD_CONFIRMED = "password_confirmed"; + private static final String CONFIRM_CREDENTIALS = "confirm_credentials"; + + private ChooseLockSettingsHelper mChooseLockSettingsHelper; + private DevicePolicyManager mDPM; + private boolean mPasswordConfirmed = false; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); + mChooseLockSettingsHelper = new ChooseLockSettingsHelper(this.getActivity()); + + if (savedInstanceState != null) { + mPasswordConfirmed = savedInstanceState.getBoolean(PASSWORD_CONFIRMED); + } - if (!mPasswordConfirmed) { - ChooseLockSettingsHelper helper = new ChooseLockSettingsHelper(this); - if (!helper.launchConfirmationActivity(CONFIRM_EXISTING_REQUEST, null, null)) { - mPasswordConfirmed = true; // no password set, so no need to confirm + if (!mPasswordConfirmed) { + ChooseLockSettingsHelper helper = new ChooseLockSettingsHelper(this.getActivity(), this); + if (!helper.launchConfirmationActivity(CONFIRM_EXISTING_REQUEST, null, null)) { + mPasswordConfirmed = true; // no password set, so no need to confirm + updatePreferencesOrFinish(); + } + } else { updatePreferencesOrFinish(); } - } else { - updatePreferencesOrFinish(); } - } - @Override - public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, - Preference preference) { - final String key = preference.getKey(); - boolean handled = true; - if (KEY_UNLOCK_SET_OFF.equals(key)) { - updateUnlockMethodAndFinish(DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, true); - } else if (KEY_UNLOCK_SET_NONE.equals(key)) { - updateUnlockMethodAndFinish(DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, false); - } else if (KEY_UNLOCK_SET_PATTERN.equals(key)) { - updateUnlockMethodAndFinish(DevicePolicyManager.PASSWORD_QUALITY_SOMETHING, false); - } else if (KEY_UNLOCK_SET_PIN.equals(key)) { - updateUnlockMethodAndFinish(DevicePolicyManager.PASSWORD_QUALITY_NUMERIC, false); - } else if (KEY_UNLOCK_SET_PASSWORD.equals(key)) { - updateUnlockMethodAndFinish(DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC, false); - } else { - handled = false; + @Override + public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, + Preference preference) { + final String key = preference.getKey(); + boolean handled = true; + if (KEY_UNLOCK_SET_OFF.equals(key)) { + updateUnlockMethodAndFinish(DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, true); + } else if (KEY_UNLOCK_SET_NONE.equals(key)) { + updateUnlockMethodAndFinish(DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, false); + } else if (KEY_UNLOCK_SET_PATTERN.equals(key)) { + updateUnlockMethodAndFinish(DevicePolicyManager.PASSWORD_QUALITY_SOMETHING, false); + } else if (KEY_UNLOCK_SET_PIN.equals(key)) { + updateUnlockMethodAndFinish(DevicePolicyManager.PASSWORD_QUALITY_NUMERIC, false); + } else if (KEY_UNLOCK_SET_PASSWORD.equals(key)) { + updateUnlockMethodAndFinish(DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC, false); + } else { + handled = false; + } + return handled; } - return handled; - } - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - if (requestCode == CONFIRM_EXISTING_REQUEST && resultCode == RESULT_OK) { - mPasswordConfirmed = true; - updatePreferencesOrFinish(); - } else { - setResult(RESULT_CANCELED); - finish(); + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == CONFIRM_EXISTING_REQUEST && resultCode == Activity.RESULT_OK) { + mPasswordConfirmed = true; + updatePreferencesOrFinish(); + } else { + getActivity().setResult(Activity.RESULT_CANCELED); + finish(); + } } - } - @Override - protected void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - // Saved so we don't force user to re-enter their password if configuration changes - outState.putBoolean(PASSWORD_CONFIRMED, mPasswordConfirmed); - } + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + // Saved so we don't force user to re-enter their password if configuration changes + outState.putBoolean(PASSWORD_CONFIRMED, mPasswordConfirmed); + } - private void updatePreferencesOrFinish() { - int quality = getIntent().getIntExtra(LockPatternUtils.PASSWORD_TYPE_KEY, -1); - if (quality == -1) { - // If caller didn't specify password quality, show the UI and allow the user to choose. - quality = mChooseLockSettingsHelper.utils().getKeyguardStoredPasswordQuality(); - final PreferenceScreen prefScreen = getPreferenceScreen(); - if (prefScreen != null) { - prefScreen.removeAll(); + private void updatePreferencesOrFinish() { + int quality = getActivity().getIntent().getIntExtra(LockPatternUtils.PASSWORD_TYPE_KEY, -1); + if (quality == -1) { + // If caller didn't specify password quality, show the UI and allow the user to choose. + quality = mChooseLockSettingsHelper.utils().getKeyguardStoredPasswordQuality(); + final PreferenceScreen prefScreen = getPreferenceScreen(); + if (prefScreen != null) { + prefScreen.removeAll(); + } + addPreferencesFromResource(R.xml.security_settings_picker); + disableUnusablePreferences(mDPM.getPasswordQuality(null)); + } else { + updateUnlockMethodAndFinish(quality, false); } - addPreferencesFromResource(R.xml.security_settings_picker); - disableUnusablePreferences(mDPM.getPasswordQuality(null)); - } else { - updateUnlockMethodAndFinish(quality, false); } - } - /*** - * Disables preferences that are less secure than required quality. - * - * @param quality the requested quality. - */ - private void disableUnusablePreferences(final int quality) { - final Preference picker = getPreferenceScreen().findPreference("security_picker_category"); - final PreferenceCategory cat = (PreferenceCategory) picker; - final int preferenceCount = cat.getPreferenceCount(); - for (int i = 0; i < preferenceCount; i++) { - Preference pref = cat.getPreference(i); - if (pref instanceof PreferenceScreen) { - final String key = ((PreferenceScreen) pref).getKey(); - boolean enabled = true; - if (KEY_UNLOCK_SET_OFF.equals(key)) { - enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED; - } else if (KEY_UNLOCK_SET_NONE.equals(key)) { - enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED; - } else if (KEY_UNLOCK_SET_PATTERN.equals(key)) { - enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_SOMETHING; - } else if (KEY_UNLOCK_SET_PIN.equals(key)) { - enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_NUMERIC; - } else if (KEY_UNLOCK_SET_PASSWORD.equals(key)) { - enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_COMPLEX; - } - if (!enabled) { - pref.setSummary(R.string.unlock_set_unlock_disabled_summary); - pref.setEnabled(false); + /*** + * Disables preferences that are less secure than required quality. + * + * @param quality the requested quality. + */ + private void disableUnusablePreferences(final int quality) { + final Preference picker = getPreferenceScreen().findPreference("security_picker_category"); + final PreferenceCategory cat = (PreferenceCategory) picker; + final int preferenceCount = cat.getPreferenceCount(); + for (int i = 0; i < preferenceCount; i++) { + Preference pref = cat.getPreference(i); + if (pref instanceof PreferenceScreen) { + final String key = ((PreferenceScreen) pref).getKey(); + boolean enabled = true; + if (KEY_UNLOCK_SET_OFF.equals(key)) { + enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED; + } else if (KEY_UNLOCK_SET_NONE.equals(key)) { + enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED; + } else if (KEY_UNLOCK_SET_PATTERN.equals(key)) { + enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_SOMETHING; + } else if (KEY_UNLOCK_SET_PIN.equals(key)) { + enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_NUMERIC; + } else if (KEY_UNLOCK_SET_PASSWORD.equals(key)) { + enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_COMPLEX; + } + if (!enabled) { + pref.setSummary(R.string.unlock_set_unlock_disabled_summary); + pref.setEnabled(false); + } } } } - } - /** - * Invokes an activity to change the user's pattern, password or PIN based on given quality - * and minimum quality specified by DevicePolicyManager. If quality is - * {@link DevicePolicyManager#PASSWORD_QUALITY_UNSPECIFIED}, password is cleared. - * - * @param quality the desired quality. Ignored if DevicePolicyManager requires more security. - * @param disabled whether or not to show LockScreen at all. Only meaningful when quality is - * {@link DevicePolicyManager#PASSWORD_QUALITY_UNSPECIFIED} - */ - void updateUnlockMethodAndFinish(int quality, boolean disabled) { - // Sanity check. We should never get here without confirming user's existing password first. - if (!mPasswordConfirmed) { - throw new IllegalStateException("Tried to update password without confirming first"); - } + /** + * Invokes an activity to change the user's pattern, password or PIN based on given quality + * and minimum quality specified by DevicePolicyManager. If quality is + * {@link DevicePolicyManager#PASSWORD_QUALITY_UNSPECIFIED}, password is cleared. + * + * @param quality the desired quality. Ignored if DevicePolicyManager requires more security. + * @param disabled whether or not to show LockScreen at all. Only meaningful when quality is + * {@link DevicePolicyManager#PASSWORD_QUALITY_UNSPECIFIED} + */ + void updateUnlockMethodAndFinish(int quality, boolean disabled) { + // Sanity check. We should never get here without confirming user's existing password first. + if (!mPasswordConfirmed) { + throw new IllegalStateException("Tried to update password without confirming first"); + } - // Compare minimum allowed password quality and launch appropriate security setting method - int minQuality = mDPM.getPasswordQuality(null); - if (quality < minQuality) { - quality = minQuality; - } - if (quality >= DevicePolicyManager.PASSWORD_QUALITY_NUMERIC) { - int minLength = mDPM.getPasswordMinimumLength(null); - if (minLength < MIN_PASSWORD_LENGTH) { - minLength = MIN_PASSWORD_LENGTH; + // Compare minimum allowed password quality and launch appropriate security setting method + int minQuality = mDPM.getPasswordQuality(null); + if (quality < minQuality) { + quality = minQuality; } - final int maxLength = mDPM.getPasswordMaximumLength(quality); - Intent intent = new Intent().setClass(this, ChooseLockPassword.class); - intent.putExtra(LockPatternUtils.PASSWORD_TYPE_KEY, quality); - intent.putExtra(ChooseLockPassword.PASSWORD_MIN_KEY, minLength); - intent.putExtra(ChooseLockPassword.PASSWORD_MAX_KEY, maxLength); - intent.putExtra(CONFIRM_CREDENTIALS, false); - intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); - startActivity(intent); - } else if (quality == DevicePolicyManager.PASSWORD_QUALITY_SOMETHING) { - boolean showTutorial = !mChooseLockSettingsHelper.utils().isPatternEverChosen(); - Intent intent = new Intent(); - intent.setClass(this, showTutorial - ? ChooseLockPatternTutorial.class - : ChooseLockPattern.class); - intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); - intent.putExtra("key_lock_method", "pattern"); - intent.putExtra(CONFIRM_CREDENTIALS, false); - startActivity(intent); - } else if (quality == DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) { - mChooseLockSettingsHelper.utils().clearLock(); - mChooseLockSettingsHelper.utils().setLockScreenDisabled(disabled); - setResult(RESULT_OK); + 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 = new Intent().setClass(getActivity(), ChooseLockPassword.class); + intent.putExtra(LockPatternUtils.PASSWORD_TYPE_KEY, quality); + intent.putExtra(ChooseLockPassword.PASSWORD_MIN_KEY, minLength); + intent.putExtra(ChooseLockPassword.PASSWORD_MAX_KEY, maxLength); + intent.putExtra(CONFIRM_CREDENTIALS, false); + intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); + startActivity(intent); + } else if (quality == DevicePolicyManager.PASSWORD_QUALITY_SOMETHING) { + boolean showTutorial = !mChooseLockSettingsHelper.utils().isPatternEverChosen(); + Intent intent = new Intent(); + intent.setClass(getActivity(), showTutorial + ? ChooseLockPatternTutorial.class + : ChooseLockPattern.class); + intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); + intent.putExtra("key_lock_method", "pattern"); + intent.putExtra(CONFIRM_CREDENTIALS, false); + startActivity(intent); + } else if (quality == DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) { + mChooseLockSettingsHelper.utils().clearLock(); + mChooseLockSettingsHelper.utils().setLockScreenDisabled(disabled); + getActivity().setResult(Activity.RESULT_OK); + } + finish(); } - finish(); } } |