Loading src/com/android/settings/SecuritySettings.java +186 −19 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.pm.UserInfo; import android.content.res.Resources; import android.nfc.NfcUnlock; import android.os.Bundle; import android.os.UserHandle; Loading @@ -39,21 +40,27 @@ import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; import android.preference.PreferenceGroup; import android.preference.PreferenceScreen; import android.provider.SearchIndexableResource; import android.provider.Settings; import android.security.KeyStore; import android.telephony.TelephonyManager; import android.util.Log; import com.android.internal.widget.LockPatternUtils; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.Indexable; import com.android.settings.search.SearchIndexableRaw; import java.util.ArrayList; import java.util.List; import static com.android.settings.search.SearchIndexableResources.RANK_SECURITY; /** * Gesture lock pattern settings. */ public class SecuritySettings extends RestrictedSettingsFragment implements OnPreferenceChangeListener, DialogInterface.OnClickListener { implements OnPreferenceChangeListener, DialogInterface.OnClickListener, Indexable { static final String TAG = "SecuritySettings"; // Lock Settings Loading Loading @@ -86,7 +93,6 @@ public class SecuritySettings extends RestrictedSettingsFragment private static final String KEY_CREDENTIALS_MANAGER = "credentials_management"; private static final String PACKAGE_MIME_TYPE = "application/vnd.android.package-archive"; private PackageManager mPM; private DevicePolicyManager mDPM; private ChooseLockSettingsHelper mChooseLockSettingsHelper; Loading Loading @@ -119,38 +125,30 @@ public class SecuritySettings extends RestrictedSettingsFragment mLockPatternUtils = new LockPatternUtils(getActivity()); mPM = getActivity().getPackageManager(); mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE); mChooseLockSettingsHelper = new ChooseLockSettingsHelper(getActivity()); } private PreferenceScreen createPreferenceHierarchy() { PreferenceScreen root = getPreferenceScreen(); if (root != null) { root.removeAll(); } addPreferencesFromResource(R.xml.security_settings); root = getPreferenceScreen(); // Add options for lock/unlock screen private static int getResIdForLockUnlockScreen(Context context, LockPatternUtils lockPatternUtils) { int resid = 0; if (!mLockPatternUtils.isSecure()) { if (!lockPatternUtils.isSecure()) { // if there are multiple users, disable "None" setting UserManager mUm = (UserManager) getSystemService(Context.USER_SERVICE); UserManager mUm = (UserManager) context. getSystemService(Context.USER_SERVICE); List<UserInfo> users = mUm.getUsers(true); final boolean singleUser = users.size() == 1; if (singleUser && mLockPatternUtils.isLockScreenDisabled()) { if (singleUser && lockPatternUtils.isLockScreenDisabled()) { resid = R.xml.security_settings_lockscreen; } else { resid = R.xml.security_settings_chooser; } } else if (mLockPatternUtils.usingBiometricWeak() && mLockPatternUtils.isBiometricWeakInstalled()) { } else if (lockPatternUtils.usingBiometricWeak() && lockPatternUtils.isBiometricWeakInstalled()) { resid = R.xml.security_settings_biometric_weak; } else { switch (mLockPatternUtils.getKeyguardStoredPasswordQuality()) { switch (lockPatternUtils.getKeyguardStoredPasswordQuality()) { case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING: resid = R.xml.security_settings_pattern; break; Loading @@ -164,8 +162,26 @@ public class SecuritySettings extends RestrictedSettingsFragment break; } } addPreferencesFromResource(resid); return resid; } /** * Important! * * Dont forget to update the SecuritySearchIndexProvider if you are doing any change in the * logic or adding/removing preferences here. */ private PreferenceScreen createPreferenceHierarchy() { PreferenceScreen root = getPreferenceScreen(); if (root != null) { root.removeAll(); } addPreferencesFromResource(R.xml.security_settings); root = getPreferenceScreen(); // Add options for lock/unlock screen final int resid = getResIdForLockUnlockScreen(getActivity(), mLockPatternUtils); addPreferencesFromResource(resid); // Add options for device encryption mIsPrimary = UserHandle.myUserId() == UserHandle.USER_OWNER; Loading Loading @@ -619,4 +635,155 @@ public class SecuritySettings extends RestrictedSettingsFragment intent.setClassName("com.android.facelock", "com.android.facelock.AddToSetup"); startActivity(intent); } /** * For Search. Please keep it in sync when updating "createPreferenceHierarchy()" */ public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = new SecuritySearchIndexProvider(); static private class SecuritySearchIndexProvider extends BaseSearchIndexProvider { boolean mIsPrimary; public SecuritySearchIndexProvider() { super(); mIsPrimary = UserHandle.myUserId() == UserHandle.USER_OWNER; } @Override public List<SearchIndexableResource> getXmlResourcesToIndex( Context context, boolean enabled) { List<SearchIndexableResource> result = new ArrayList<SearchIndexableResource>(); LockPatternUtils lockPatternUtils = new LockPatternUtils(context); // Add options for lock/unlock screen int resId = getResIdForLockUnlockScreen(context, lockPatternUtils); SearchIndexableResource sir = new SearchIndexableResource(context); sir.xmlResId = resId; result.add(sir); if (mIsPrimary) { DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); switch (dpm.getStorageEncryptionStatus()) { case DevicePolicyManager.ENCRYPTION_STATUS_ACTIVE: // The device is currently encrypted. resId = R.xml.security_settings_encrypted; break; case DevicePolicyManager.ENCRYPTION_STATUS_INACTIVE: // This device supports encryption but isn't encrypted. resId = R.xml.security_settings_unencrypted; break; } sir = new SearchIndexableResource(context); sir.xmlResId = resId; result.add(sir); } // Append the rest of the settings sir = new SearchIndexableResource(context); sir.xmlResId = R.xml.security_settings_misc; result.add(sir); return result; } @Override public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) { final List<SearchIndexableRaw> result = new ArrayList<SearchIndexableRaw>(); final Resources res = context.getResources(); final String screenTitle = res.getString(R.string.security_settings_title); SearchIndexableRaw data; if (!mIsPrimary) { int resId = (UserManager.get(context).isLinkedUser()) ? R.string.profile_info_settings_title : R.string.user_info_settings_title; data = new SearchIndexableRaw(context); data.title = res.getString(resId); data.screenTitle = screenTitle; result.add(data); } LockPatternUtils lockPatternUtils = new LockPatternUtils(context); if (!ActivityManager.isLowRamDeviceStatic() && !lockPatternUtils.isLockScreenDisabled()) { DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); final boolean disabled = (0 != (dpm.getKeyguardDisabledFeatures(null) & DevicePolicyManager.KEYGUARD_DISABLE_WIDGETS_ALL)); if (disabled) { data = new SearchIndexableRaw(context); data.title = res.getString(R.string.security_enable_widgets_disabled_summary); data.screenTitle = screenTitle; result.add(data); } } // Credential storage final UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE); if (!um.hasUserRestriction(UserManager.DISALLOW_CONFIG_CREDENTIALS)) { KeyStore keyStore = KeyStore.getInstance(); final int storageSummaryRes = keyStore.isHardwareBacked() ? R.string.credential_storage_type_hardware : R.string.credential_storage_type_software; data = new SearchIndexableRaw(context); data.title = res.getString(storageSummaryRes); data.screenTitle = screenTitle; result.add(data); } return result; } @Override public List<String> getNonIndexableKeys(Context context) { final List<String> keys = new ArrayList<String>(); LockPatternUtils lockPatternUtils = new LockPatternUtils(context); // Add options for lock/unlock screen int resId = getResIdForLockUnlockScreen(context, lockPatternUtils); // don't display visible pattern if biometric and backup is not pattern if (resId == R.xml.security_settings_biometric_weak && lockPatternUtils.getKeyguardStoredPasswordQuality() != DevicePolicyManager.PASSWORD_QUALITY_SOMETHING) { keys.add(KEY_VISIBLE_PATTERN); } // Do not display SIM lock for devices without an Icc card TelephonyManager tm = TelephonyManager.getDefault(); if (!mIsPrimary || !tm.hasIccCard()) { keys.add(KEY_SIM_LOCK); } if (ActivityManager.isLowRamDeviceStatic() || lockPatternUtils.isLockScreenDisabled()) { // Widgets take a lot of RAM, so disable them on low-memory devices keys.add(KEY_ENABLE_WIDGETS); } final UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE); if (um.hasUserRestriction(UserManager.DISALLOW_CONFIG_CREDENTIALS)) { keys.add(KEY_CREDENTIALS_MANAGER); } return keys; } } } src/com/android/settings/search/SearchIndexableResources.java +22 −22 Original line number Diff line number Diff line Loading @@ -49,27 +49,27 @@ public final class SearchIndexableResources { public static int NO_DATA_RES_ID = 0; private static final int RANK_WIFI = 1; private static final int RANK_BT = 2; private static final int RANK_DATA_USAGE = 3; private static final int RANK_WIRELESS = 4; private static final int RANK_HOME = 5; private static final int RANK_SOUND = 6; private static final int RANK_DISPLAY = 7; private static final int RANK_WALLPAPER = 7; private static final int RANK_NOTIFICATIONS = 8; private static final int RANK_MEMORY = 9; private static final int RANK_POWER_USAGE = 10; private static final int RANK_USERS = 11; private static final int RANK_LOCATION = 12; private static final int RANK_SECURITY = 13; private static final int RANK_IME = 14; private static final int RANK_PRIVACY = 15; private static final int RANK_DATE_TIME = 16; private static final int RANK_ACCESSIBILITY = 17; private static final int RANK_PRINTING = 18; private static final int RANK_DEVELOPEMENT = 19; private static final int RANK_DEVICE_INFO = 20; public static final int RANK_WIFI = 1; public static final int RANK_BT = 2; public static final int RANK_DATA_USAGE = 3; public static final int RANK_WIRELESS = 4; public static final int RANK_HOME = 5; public static final int RANK_SOUND = 6; public static final int RANK_DISPLAY = 7; public static final int RANK_WALLPAPER = 7; public static final int RANK_NOTIFICATIONS = 8; public static final int RANK_MEMORY = 9; public static final int RANK_POWER_USAGE = 10; public static final int RANK_USERS = 11; public static final int RANK_LOCATION = 12; public static final int RANK_SECURITY = 13; public static final int RANK_IME = 14; public static final int RANK_PRIVACY = 15; public static final int RANK_DATE_TIME = 16; public static final int RANK_ACCESSIBILITY = 17; public static final int RANK_PRINTING = 18; public static final int RANK_DEVELOPEMENT = 19; public static final int RANK_DEVICE_INFO = 20; private static HashMap<String, SearchIndexableResource> sResMap = new HashMap<String, SearchIndexableResource>(); Loading Loading @@ -162,7 +162,7 @@ public final class SearchIndexableResources { sResMap.put(SecuritySettings.class.getName(), new SearchIndexableResource(RANK_SECURITY, R.xml.security_settings, NO_DATA_RES_ID, SecuritySettings.class.getName(), R.drawable.ic_settings_security)); Loading Loading
src/com/android/settings/SecuritySettings.java +186 −19 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.pm.UserInfo; import android.content.res.Resources; import android.nfc.NfcUnlock; import android.os.Bundle; import android.os.UserHandle; Loading @@ -39,21 +40,27 @@ import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; import android.preference.PreferenceGroup; import android.preference.PreferenceScreen; import android.provider.SearchIndexableResource; import android.provider.Settings; import android.security.KeyStore; import android.telephony.TelephonyManager; import android.util.Log; import com.android.internal.widget.LockPatternUtils; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.Indexable; import com.android.settings.search.SearchIndexableRaw; import java.util.ArrayList; import java.util.List; import static com.android.settings.search.SearchIndexableResources.RANK_SECURITY; /** * Gesture lock pattern settings. */ public class SecuritySettings extends RestrictedSettingsFragment implements OnPreferenceChangeListener, DialogInterface.OnClickListener { implements OnPreferenceChangeListener, DialogInterface.OnClickListener, Indexable { static final String TAG = "SecuritySettings"; // Lock Settings Loading Loading @@ -86,7 +93,6 @@ public class SecuritySettings extends RestrictedSettingsFragment private static final String KEY_CREDENTIALS_MANAGER = "credentials_management"; private static final String PACKAGE_MIME_TYPE = "application/vnd.android.package-archive"; private PackageManager mPM; private DevicePolicyManager mDPM; private ChooseLockSettingsHelper mChooseLockSettingsHelper; Loading Loading @@ -119,38 +125,30 @@ public class SecuritySettings extends RestrictedSettingsFragment mLockPatternUtils = new LockPatternUtils(getActivity()); mPM = getActivity().getPackageManager(); mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE); mChooseLockSettingsHelper = new ChooseLockSettingsHelper(getActivity()); } private PreferenceScreen createPreferenceHierarchy() { PreferenceScreen root = getPreferenceScreen(); if (root != null) { root.removeAll(); } addPreferencesFromResource(R.xml.security_settings); root = getPreferenceScreen(); // Add options for lock/unlock screen private static int getResIdForLockUnlockScreen(Context context, LockPatternUtils lockPatternUtils) { int resid = 0; if (!mLockPatternUtils.isSecure()) { if (!lockPatternUtils.isSecure()) { // if there are multiple users, disable "None" setting UserManager mUm = (UserManager) getSystemService(Context.USER_SERVICE); UserManager mUm = (UserManager) context. getSystemService(Context.USER_SERVICE); List<UserInfo> users = mUm.getUsers(true); final boolean singleUser = users.size() == 1; if (singleUser && mLockPatternUtils.isLockScreenDisabled()) { if (singleUser && lockPatternUtils.isLockScreenDisabled()) { resid = R.xml.security_settings_lockscreen; } else { resid = R.xml.security_settings_chooser; } } else if (mLockPatternUtils.usingBiometricWeak() && mLockPatternUtils.isBiometricWeakInstalled()) { } else if (lockPatternUtils.usingBiometricWeak() && lockPatternUtils.isBiometricWeakInstalled()) { resid = R.xml.security_settings_biometric_weak; } else { switch (mLockPatternUtils.getKeyguardStoredPasswordQuality()) { switch (lockPatternUtils.getKeyguardStoredPasswordQuality()) { case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING: resid = R.xml.security_settings_pattern; break; Loading @@ -164,8 +162,26 @@ public class SecuritySettings extends RestrictedSettingsFragment break; } } addPreferencesFromResource(resid); return resid; } /** * Important! * * Dont forget to update the SecuritySearchIndexProvider if you are doing any change in the * logic or adding/removing preferences here. */ private PreferenceScreen createPreferenceHierarchy() { PreferenceScreen root = getPreferenceScreen(); if (root != null) { root.removeAll(); } addPreferencesFromResource(R.xml.security_settings); root = getPreferenceScreen(); // Add options for lock/unlock screen final int resid = getResIdForLockUnlockScreen(getActivity(), mLockPatternUtils); addPreferencesFromResource(resid); // Add options for device encryption mIsPrimary = UserHandle.myUserId() == UserHandle.USER_OWNER; Loading Loading @@ -619,4 +635,155 @@ public class SecuritySettings extends RestrictedSettingsFragment intent.setClassName("com.android.facelock", "com.android.facelock.AddToSetup"); startActivity(intent); } /** * For Search. Please keep it in sync when updating "createPreferenceHierarchy()" */ public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = new SecuritySearchIndexProvider(); static private class SecuritySearchIndexProvider extends BaseSearchIndexProvider { boolean mIsPrimary; public SecuritySearchIndexProvider() { super(); mIsPrimary = UserHandle.myUserId() == UserHandle.USER_OWNER; } @Override public List<SearchIndexableResource> getXmlResourcesToIndex( Context context, boolean enabled) { List<SearchIndexableResource> result = new ArrayList<SearchIndexableResource>(); LockPatternUtils lockPatternUtils = new LockPatternUtils(context); // Add options for lock/unlock screen int resId = getResIdForLockUnlockScreen(context, lockPatternUtils); SearchIndexableResource sir = new SearchIndexableResource(context); sir.xmlResId = resId; result.add(sir); if (mIsPrimary) { DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); switch (dpm.getStorageEncryptionStatus()) { case DevicePolicyManager.ENCRYPTION_STATUS_ACTIVE: // The device is currently encrypted. resId = R.xml.security_settings_encrypted; break; case DevicePolicyManager.ENCRYPTION_STATUS_INACTIVE: // This device supports encryption but isn't encrypted. resId = R.xml.security_settings_unencrypted; break; } sir = new SearchIndexableResource(context); sir.xmlResId = resId; result.add(sir); } // Append the rest of the settings sir = new SearchIndexableResource(context); sir.xmlResId = R.xml.security_settings_misc; result.add(sir); return result; } @Override public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) { final List<SearchIndexableRaw> result = new ArrayList<SearchIndexableRaw>(); final Resources res = context.getResources(); final String screenTitle = res.getString(R.string.security_settings_title); SearchIndexableRaw data; if (!mIsPrimary) { int resId = (UserManager.get(context).isLinkedUser()) ? R.string.profile_info_settings_title : R.string.user_info_settings_title; data = new SearchIndexableRaw(context); data.title = res.getString(resId); data.screenTitle = screenTitle; result.add(data); } LockPatternUtils lockPatternUtils = new LockPatternUtils(context); if (!ActivityManager.isLowRamDeviceStatic() && !lockPatternUtils.isLockScreenDisabled()) { DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); final boolean disabled = (0 != (dpm.getKeyguardDisabledFeatures(null) & DevicePolicyManager.KEYGUARD_DISABLE_WIDGETS_ALL)); if (disabled) { data = new SearchIndexableRaw(context); data.title = res.getString(R.string.security_enable_widgets_disabled_summary); data.screenTitle = screenTitle; result.add(data); } } // Credential storage final UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE); if (!um.hasUserRestriction(UserManager.DISALLOW_CONFIG_CREDENTIALS)) { KeyStore keyStore = KeyStore.getInstance(); final int storageSummaryRes = keyStore.isHardwareBacked() ? R.string.credential_storage_type_hardware : R.string.credential_storage_type_software; data = new SearchIndexableRaw(context); data.title = res.getString(storageSummaryRes); data.screenTitle = screenTitle; result.add(data); } return result; } @Override public List<String> getNonIndexableKeys(Context context) { final List<String> keys = new ArrayList<String>(); LockPatternUtils lockPatternUtils = new LockPatternUtils(context); // Add options for lock/unlock screen int resId = getResIdForLockUnlockScreen(context, lockPatternUtils); // don't display visible pattern if biometric and backup is not pattern if (resId == R.xml.security_settings_biometric_weak && lockPatternUtils.getKeyguardStoredPasswordQuality() != DevicePolicyManager.PASSWORD_QUALITY_SOMETHING) { keys.add(KEY_VISIBLE_PATTERN); } // Do not display SIM lock for devices without an Icc card TelephonyManager tm = TelephonyManager.getDefault(); if (!mIsPrimary || !tm.hasIccCard()) { keys.add(KEY_SIM_LOCK); } if (ActivityManager.isLowRamDeviceStatic() || lockPatternUtils.isLockScreenDisabled()) { // Widgets take a lot of RAM, so disable them on low-memory devices keys.add(KEY_ENABLE_WIDGETS); } final UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE); if (um.hasUserRestriction(UserManager.DISALLOW_CONFIG_CREDENTIALS)) { keys.add(KEY_CREDENTIALS_MANAGER); } return keys; } } }
src/com/android/settings/search/SearchIndexableResources.java +22 −22 Original line number Diff line number Diff line Loading @@ -49,27 +49,27 @@ public final class SearchIndexableResources { public static int NO_DATA_RES_ID = 0; private static final int RANK_WIFI = 1; private static final int RANK_BT = 2; private static final int RANK_DATA_USAGE = 3; private static final int RANK_WIRELESS = 4; private static final int RANK_HOME = 5; private static final int RANK_SOUND = 6; private static final int RANK_DISPLAY = 7; private static final int RANK_WALLPAPER = 7; private static final int RANK_NOTIFICATIONS = 8; private static final int RANK_MEMORY = 9; private static final int RANK_POWER_USAGE = 10; private static final int RANK_USERS = 11; private static final int RANK_LOCATION = 12; private static final int RANK_SECURITY = 13; private static final int RANK_IME = 14; private static final int RANK_PRIVACY = 15; private static final int RANK_DATE_TIME = 16; private static final int RANK_ACCESSIBILITY = 17; private static final int RANK_PRINTING = 18; private static final int RANK_DEVELOPEMENT = 19; private static final int RANK_DEVICE_INFO = 20; public static final int RANK_WIFI = 1; public static final int RANK_BT = 2; public static final int RANK_DATA_USAGE = 3; public static final int RANK_WIRELESS = 4; public static final int RANK_HOME = 5; public static final int RANK_SOUND = 6; public static final int RANK_DISPLAY = 7; public static final int RANK_WALLPAPER = 7; public static final int RANK_NOTIFICATIONS = 8; public static final int RANK_MEMORY = 9; public static final int RANK_POWER_USAGE = 10; public static final int RANK_USERS = 11; public static final int RANK_LOCATION = 12; public static final int RANK_SECURITY = 13; public static final int RANK_IME = 14; public static final int RANK_PRIVACY = 15; public static final int RANK_DATE_TIME = 16; public static final int RANK_ACCESSIBILITY = 17; public static final int RANK_PRINTING = 18; public static final int RANK_DEVELOPEMENT = 19; public static final int RANK_DEVICE_INFO = 20; private static HashMap<String, SearchIndexableResource> sResMap = new HashMap<String, SearchIndexableResource>(); Loading Loading @@ -162,7 +162,7 @@ public final class SearchIndexableResources { sResMap.put(SecuritySettings.class.getName(), new SearchIndexableResource(RANK_SECURITY, R.xml.security_settings, NO_DATA_RES_ID, SecuritySettings.class.getName(), R.drawable.ic_settings_security)); Loading