From df8566a9a1eb69ee19376457fe0ee8ad39774790 Mon Sep 17 00:00:00 2001 From: Lucky Zhang Date: Fri, 5 Dec 2014 15:00:20 -0800 Subject: [PATCH] [FRP] Remove None and Swipe from screen lock options Removed "None" and "Swipe" from screen lock options in the choosing lock screen during setup wizard, because at this step, the user has already chosen to pick a screen lock, hence it's unnecessory to show "none" and "swipe". Implemented this by overriding the DisableUnusablePreferences in SetupChooseLockGenericFragment to disable the insecure lock methods and adding a flag to hide disabled methods for setup wizard. Bug: 18631416 Change-Id: I3feccf591da25bd6eadcc03c75b28cfc1d069db7 --- .../android/settings/ChooseLockGeneric.java | 25 ++++++++++++++++--- .../settings/SetupChooseLockGeneric.java | 23 +++++++++++++++++ 2 files changed, 45 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/ChooseLockGeneric.java b/src/com/android/settings/ChooseLockGeneric.java index f64a9dff81b..b289e7aeeb0 100644 --- a/src/com/android/settings/ChooseLockGeneric.java +++ b/src/com/android/settings/ChooseLockGeneric.java @@ -287,15 +287,31 @@ public class ChooseLockGeneric extends SettingsActivity { return quality; } + /*** + * Disables preferences that are less secure than required quality. The actual + * implementation is in disableUnusablePreferenceImpl. + * + * @param quality the requested quality. + * @param allowBiometric whether to allow biometic screen lock. + */ + protected void disableUnusablePreferences(final int quality, + MutableBoolean allowBiometric) { + disableUnusablePreferencesImpl(quality, allowBiometric, false /* hideDisabled */); + } + /*** * Disables preferences that are less secure than required quality. * * @param quality the requested quality. + * @param allowBiometric whether to allow biometic screen lock. + * @param hideDisabled whether to hide disable screen lock options. */ - private void disableUnusablePreferences(final int quality, MutableBoolean allowBiometric) { + protected void disableUnusablePreferencesImpl(final int quality, + MutableBoolean allowBiometric, boolean hideDisabled) { final PreferenceScreen entries = getPreferenceScreen(); - final boolean onlyShowFallback = getActivity().getIntent() - .getBooleanExtra(LockPatternUtils.LOCKSCREEN_BIOMETRIC_WEAK_FALLBACK, false); + final Intent intent = getActivity().getIntent(); + final boolean onlyShowFallback = intent.getBooleanExtra( + LockPatternUtils.LOCKSCREEN_BIOMETRIC_WEAK_FALLBACK, false); final boolean weakBiometricAvailable = mChooseLockSettingsHelper.utils().isBiometricWeakInstalled(); @@ -326,6 +342,9 @@ public class ChooseLockGeneric extends SettingsActivity { } else if (KEY_UNLOCK_SET_PASSWORD.equals(key)) { enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_COMPLEX; } + if (hideDisabled) { + visible = visible && enabled; + } if (!visible || (onlyShowFallback && !allowedForFallback(key))) { entries.removePreference(pref); } else if (!enabled) { diff --git a/src/com/android/settings/SetupChooseLockGeneric.java b/src/com/android/settings/SetupChooseLockGeneric.java index c40e7c1a843..42e2baaa820 100644 --- a/src/com/android/settings/SetupChooseLockGeneric.java +++ b/src/com/android/settings/SetupChooseLockGeneric.java @@ -18,11 +18,13 @@ package com.android.settings; import com.android.setupwizard.navigationbar.SetupWizardNavBar; +import android.app.admin.DevicePolicyManager; import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.os.Bundle; import android.preference.PreferenceFragment; +import android.util.MutableBoolean; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -92,6 +94,27 @@ public class SetupChooseLockGeneric extends ChooseLockGeneric SetupWizardUtils.setHeaderText(getActivity(), getActivity().getTitle()); } + /*** + * Disables preferences that are less secure than required quality and shows only secure + * screen lock options here. + * + * @param quality the requested quality. + * @param allowBiometric whether to allow biometic screen lock + */ + @Override + protected void disableUnusablePreferences(final int quality, + MutableBoolean allowBiometric) { + // At this part of the flow, the user has already indicated they want to add a pin, + // pattern or password, so don't show "None" or "Slide". We disable them here and set + // the HIDE_DISABLED flag to true to hide them. This only happens for setup wizard. + // We do the following max check here since the device may already have a Device Admin + // installed with a policy we need to honor. + final int newQuality = Math.max(quality, + DevicePolicyManager.PASSWORD_QUALITY_SOMETHING); + super.disableUnusablePreferencesImpl(newQuality, allowBiometric, + true /* hideDisabled */); + } + @Override protected Intent getLockPasswordIntent(Context context, int quality, boolean isFallback, int minLength, int maxLength, boolean requirePasswordToDecrypt,