Merge "Search - add indexing of SecuritySettings"

This commit is contained in:
Fabrice Di Meglio
2014-04-12 00:54:55 +00:00
committed by Android (Google) Code Review
2 changed files with 208 additions and 41 deletions

View File

@@ -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;
@@ -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
@@ -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;
@@ -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;
@@ -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;
@@ -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;
}
}
}

View File

@@ -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>();
@@ -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));