Use proper DashboardFragment APIs for SecuritySettingsV2

Next CL will add tests.

Bug: 32953042
Test: TODO
Change-Id: I0cb0e4eb216d3e9408675486f1cd73ba82d8ca36
This commit is contained in:
Fan Zhang
2018-01-03 15:02:02 -08:00
parent b8b9b283fe
commit 361e55bb4c
12 changed files with 175 additions and 294 deletions

View File

@@ -1,33 +1,28 @@
package com.android.settings.security;
import static com.android.settings.security.EncryptionStatusPreferenceController.PREF_KEY_ENCRYPTION_SECURITY_PAGE;
import static com.android.settings.security.EncryptionStatusPreferenceController
.PREF_KEY_ENCRYPTION_SECURITY_PAGE;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.hardware.fingerprint.FingerprintManager;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.SearchIndexableResource;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
import com.android.internal.logging.nano.MetricsProto;
import com.android.internal.widget.LockPatternUtils;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.dashboard.DashboardFeatureProvider;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.enterprise.EnterprisePrivacyPreferenceController;
import com.android.settings.enterprise.ManageDeviceAdminPreferenceController;
import com.android.settings.location.LocationPreferenceController;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.security.trustagent.ManageTrustAgentsPreferenceController;
import com.android.settings.security.trustagent.TrustAgentListPreferenceController;
import com.android.settings.widget.PreferenceCategoryController;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
import java.util.ArrayList;
import java.util.List;
@@ -43,59 +38,11 @@ public class SecuritySettingsV2 extends DashboardFragment {
public static final int UNIFY_LOCK_CONFIRM_PROFILE_REQUEST = 129;
public static final int UNUNIFY_LOCK_CONFIRM_DEVICE_REQUEST = 130;
// Security status
private static final String KEY_SECURITY_STATUS = "security_status";
private static final String SECURITY_STATUS_KEY_PREFIX = "security_status_";
private static final int MY_USER_ID = UserHandle.myUserId();
private DashboardFeatureProvider mDashboardFeatureProvider;
private SecurityFeatureProvider mSecurityFeatureProvider;
private UserManager mUm;
private ChooseLockSettingsHelper mChooseLockSettingsHelper;
private LockPatternUtils mLockPatternUtils;
private int mProfileChallengeUserId;
private LocationPreferenceController mLocationController;
private ManageDeviceAdminPreferenceController mManageDeviceAdminPreferenceController;
private EnterprisePrivacyPreferenceController mEnterprisePrivacyPreferenceController;
private EncryptionStatusPreferenceController mEncryptionStatusPreferenceController;
private ManageTrustAgentsPreferenceController mManageTrustAgentsPreferenceController;
private ScreenPinningPreferenceController mScreenPinningPreferenceController;
private SimLockPreferenceController mSimLockPreferenceController;
private ShowPasswordPreferenceController mShowPasswordPreferenceController;
private TrustAgentListPreferenceController mTrustAgentListPreferenceController;
private LockScreenPreferenceController mLockScreenPreferenceController;
private ChangeScreenLockPreferenceController mChangeScreenLockPreferenceController;
private ChangeProfileScreenLockPreferenceController
mChangeProfileScreenLockPreferenceController;
private LockUnificationPreferenceController mLockUnificationPreferenceController;
private VisiblePatternProfilePreferenceController mVisiblePatternProfilePreferenceController;
private FingerprintStatusPreferenceController mFingerprintStatusPreferenceController;
private FingerprintProfileStatusPreferenceController
mFingerprintProfileStatusPreferenceController;
@Override
public int getMetricsCategory() {
return MetricsProto.MetricsEvent.SECURITY;
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
mSecurityFeatureProvider = FeatureFactory.getFactory(context).getSecurityFeatureProvider();
mLocationController = new LocationPreferenceController(context, getLifecycle());
mLockPatternUtils = mSecurityFeatureProvider.getLockPatternUtils(context);
mUm = UserManager.get(context);
mDashboardFeatureProvider = FeatureFactory.getFactory(context)
.getDashboardFeatureProvider(context);
mChooseLockSettingsHelper = new ChooseLockSettingsHelper(getActivity());
}
@Override
protected int getPreferenceScreenResId() {
return R.xml.security_settings_v2;
@@ -106,7 +53,6 @@ public class SecuritySettingsV2 extends DashboardFragment {
return TAG;
}
@Override
public int getHelpResource() {
return R.string.help_url_security;
@@ -114,161 +60,7 @@ public class SecuritySettingsV2 extends DashboardFragment {
@Override
protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
mManageDeviceAdminPreferenceController
= new ManageDeviceAdminPreferenceController(context);
mEnterprisePrivacyPreferenceController
= new EnterprisePrivacyPreferenceController(context);
mManageTrustAgentsPreferenceController = new ManageTrustAgentsPreferenceController(context);
mScreenPinningPreferenceController = new ScreenPinningPreferenceController(context);
mSimLockPreferenceController = new SimLockPreferenceController(context);
mShowPasswordPreferenceController = new ShowPasswordPreferenceController(context);
mEncryptionStatusPreferenceController = new EncryptionStatusPreferenceController(
context, PREF_KEY_ENCRYPTION_SECURITY_PAGE);
mTrustAgentListPreferenceController = new TrustAgentListPreferenceController(getActivity(),
this /* host */, getLifecycle());
mLockScreenPreferenceController = new LockScreenPreferenceController(context);
mChangeScreenLockPreferenceController = new ChangeScreenLockPreferenceController(context,
this /* host */);
mChangeProfileScreenLockPreferenceController =
new ChangeProfileScreenLockPreferenceController(context, this /* host */);
mLockUnificationPreferenceController = new LockUnificationPreferenceController(context,
this /* host */);
mVisiblePatternProfilePreferenceController =
new VisiblePatternProfilePreferenceController(context);
mFingerprintStatusPreferenceController = new FingerprintStatusPreferenceController(context);
mFingerprintProfileStatusPreferenceController =
new FingerprintProfileStatusPreferenceController(context);
return null;
}
/**
* Important!
*
* Don't forget to update the SecuritySearchIndexProvider if you are doing any change in the
* logic or adding/removing preferences here.
*/
private PreferenceScreen createPreferenceHierarchy() {
final PreferenceScreen root = getPreferenceScreen();
mTrustAgentListPreferenceController.displayPreference(root);
mLockScreenPreferenceController.displayPreference(root);
mChangeScreenLockPreferenceController.displayPreference(root);
mChangeProfileScreenLockPreferenceController.displayPreference(root);
mLockUnificationPreferenceController.displayPreference(root);
mVisiblePatternProfilePreferenceController.displayPreference(root);
mFingerprintStatusPreferenceController.displayPreference(root);
mFingerprintProfileStatusPreferenceController.displayPreference(root);
mSimLockPreferenceController.displayPreference(root);
mScreenPinningPreferenceController.displayPreference(root);
// Advanced Security features
mManageTrustAgentsPreferenceController.displayPreference(root);
// PreferenceGroup securityStatusPreferenceGroup =
// (PreferenceGroup) root.findPreference(KEY_SECURITY_STATUS);
// final List<Preference> tilePrefs = mDashboardFeatureProvider.getPreferencesForCategory(
// getActivity(), getPrefContext(), getMetricsCategory(),
// CategoryKey.CATEGORY_SECURITY);
// int numSecurityStatusPrefs = 0;
// if (tilePrefs != null && !tilePrefs.isEmpty()) {
// for (Preference preference : tilePrefs) {
// if (!TextUtils.isEmpty(preference.getKey())
// && preference.getKey().startsWith(SECURITY_STATUS_KEY_PREFIX)) {
// // Injected security status settings are placed under the Security status
// // category.
// securityStatusPreferenceGroup.addPreference(preference);
// numSecurityStatusPrefs++;
// } else {
// // Other injected settings are placed under the Security preference screen.
// root.addPreference(preference);
// }
// }
// }
//
// if (numSecurityStatusPrefs == 0) {
// root.removePreference(securityStatusPreferenceGroup);
// } else if (numSecurityStatusPrefs > 0) {
// // Update preference data with tile data. Security feature provider only updates the
// // data if it actually needs to be changed.
// mSecurityFeatureProvider.updatePreferences(getActivity(), root,
// mDashboardFeatureProvider.getTilesForCategory(
// CategoryKey.CATEGORY_SECURITY));
// }
mLocationController.displayPreference(root);
mManageDeviceAdminPreferenceController.updateState(
root.findPreference(mManageDeviceAdminPreferenceController.getPreferenceKey()));
mEnterprisePrivacyPreferenceController.displayPreference(root);
final Preference enterprisePrivacyPreference = root.findPreference(
mEnterprisePrivacyPreferenceController.getPreferenceKey());
mEnterprisePrivacyPreferenceController.updateState(enterprisePrivacyPreference);
return root;
}
@Override
public void onResume() {
super.onResume();
// Make sure we reload the preference hierarchy since some of these settings
// depend on others...
createPreferenceHierarchy();
final Preference visiblePatternProfilePref = getPreferenceScreen().findPreference(
mVisiblePatternProfilePreferenceController.getPreferenceKey());
if (visiblePatternProfilePref != null) {
visiblePatternProfilePref
.setOnPreferenceChangeListener(mVisiblePatternProfilePreferenceController);
mVisiblePatternProfilePreferenceController.updateState(visiblePatternProfilePref);
}
final Preference showPasswordPref = getPreferenceScreen().findPreference(
mShowPasswordPreferenceController.getPreferenceKey());
showPasswordPref.setOnPreferenceChangeListener(mShowPasswordPreferenceController);
mShowPasswordPreferenceController.updateState(showPasswordPref);
final Preference lockUnificationPref = getPreferenceScreen().findPreference(
mLockUnificationPreferenceController.getPreferenceKey());
lockUnificationPref.setOnPreferenceChangeListener(mLockUnificationPreferenceController);
mLockUnificationPreferenceController.updateState(lockUnificationPref);
final Preference changeDeviceLockPref = getPreferenceScreen().findPreference(
mChangeScreenLockPreferenceController.getPreferenceKey());
mChangeScreenLockPreferenceController.updateState(changeDeviceLockPref);
mFingerprintStatusPreferenceController.updateState(
getPreferenceScreen().findPreference(
mFingerprintStatusPreferenceController.getPreferenceKey()));
mFingerprintProfileStatusPreferenceController.updateState(
getPreferenceScreen().findPreference(
mFingerprintProfileStatusPreferenceController.getPreferenceKey()));
final Preference changeProfileLockPref = getPreferenceScreen().findPreference(
mChangeProfileScreenLockPreferenceController.getPreferenceKey());
mChangeProfileScreenLockPreferenceController.updateState(changeProfileLockPref);
final Preference encryptionStatusPref = getPreferenceScreen().findPreference(
mEncryptionStatusPreferenceController.getPreferenceKey());
mEncryptionStatusPreferenceController.updateState(encryptionStatusPref);
mTrustAgentListPreferenceController.onResume();
mLocationController.updateSummary();
}
@Override
public boolean onPreferenceTreeClick(Preference preference) {
if (mTrustAgentListPreferenceController.handlePreferenceTreeClick(preference)) {
return true;
}
if (mChangeScreenLockPreferenceController.handlePreferenceTreeClick(preference)) {
return true;
}
if (mChangeProfileScreenLockPreferenceController.handlePreferenceTreeClick(preference)) {
return true;
}
// If we didn't handle it, let preferences handle it.
return super.onPreferenceTreeClick(preference);
return buildPreferenceControllers(context, getLifecycle(), this /* host*/);
}
/**
@@ -276,50 +68,85 @@ public class SecuritySettingsV2 extends DashboardFragment {
*/
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (getPreferenceController(TrustAgentListPreferenceController.class)
.handleActivityResult(requestCode, resultCode)) {
return;
}
if (getPreferenceController(LockUnificationPreferenceController.class)
.handleActivityResult(requestCode, resultCode, data)) {
return;
}
super.onActivityResult(requestCode, resultCode, data);
if (mTrustAgentListPreferenceController.handleActivityResult(requestCode, resultCode)) {
return;
}
if (mLockUnificationPreferenceController.handleActivityResult(
requestCode, resultCode, data)) {
return;
}
createPreferenceHierarchy();
}
void launchConfirmDeviceLockForUnification() {
getPreferenceController(LockUnificationPreferenceController.class)
.launchConfirmDeviceLockForUnification();
}
void unifyUncompliantLocks() {
getPreferenceController(LockUnificationPreferenceController.class).unifyUncompliantLocks();
}
void updateUnificationPreference() {
getPreferenceController(LockUnificationPreferenceController.class).updateState(null);
}
private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
Lifecycle lifecycle, SecuritySettingsV2 host) {
final List<AbstractPreferenceController> controllers = new ArrayList<>();
controllers.add(new LocationPreferenceController(context, lifecycle));
controllers.add(new ManageDeviceAdminPreferenceController(context));
controllers.add(new EnterprisePrivacyPreferenceController(context));
controllers.add(new ManageTrustAgentsPreferenceController(context));
controllers.add(new ScreenPinningPreferenceController(context));
controllers.add(new SimLockPreferenceController(context));
controllers.add(new ShowPasswordPreferenceController(context));
controllers.add(new FingerprintStatusPreferenceController(context));
controllers.add(new EncryptionStatusPreferenceController(context,
PREF_KEY_ENCRYPTION_SECURITY_PAGE));
controllers.add(new TrustAgentListPreferenceController(context, host, lifecycle));
controllers.add(new LockScreenPreferenceController(context, lifecycle));
controllers.add(new ChangeScreenLockPreferenceController(context, host));
final List<AbstractPreferenceController> profileSecurityControllers = new ArrayList<>();
profileSecurityControllers.add(new ChangeProfileScreenLockPreferenceController(
context, host));
profileSecurityControllers.add(new LockUnificationPreferenceController(context, host));
profileSecurityControllers.add(new VisiblePatternProfilePreferenceController(
context, lifecycle));
profileSecurityControllers.add(new FingerprintProfileStatusPreferenceController(context));
controllers.add(new PreferenceCategoryController(context, "security_category_profile",
profileSecurityControllers));
controllers.addAll(profileSecurityControllers);
return controllers;
}
/**
* For Search. Please keep it in sync when updating "createPreferenceHierarchy()"
*/
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new SecuritySearchIndexProvider();
new BaseSearchIndexProvider() {
void launchConfirmDeviceLockForUnification() {
mLockUnificationPreferenceController.launchConfirmDeviceLockForUnification();
}
@Override
public List<SearchIndexableResource> getXmlResourcesToIndex(
Context context, boolean enabled) {
final List<SearchIndexableResource> index = new ArrayList<>();
// Append the rest of the settings
final SearchIndexableResource sir = new SearchIndexableResource(context);
sir.xmlResId = R.xml.security_settings_v2;
index.add(sir);
return index;
}
void unifyUncompliantLocks() {
mLockUnificationPreferenceController.unifyUncompliantLocks();
}
void updateUnificationPreference() {
mLockUnificationPreferenceController.updateState(null);
}
private static class SecuritySearchIndexProvider extends BaseSearchIndexProvider {
// TODO (b/68001777) Refactor indexing to include all XML and block other settings.
@Override
public List<SearchIndexableResource> getXmlResourcesToIndex(
Context context, boolean enabled) {
final List<SearchIndexableResource> index = new ArrayList<>();
// Append the rest of the settings
final SearchIndexableResource sir = new SearchIndexableResource(context);
sir.xmlResId = R.xml.security_settings_v2;
index.add(sir);
return index;
}
}
@Override
public List<AbstractPreferenceController> getPreferenceControllers(Context
context) {
return buildPreferenceControllers(context, null /* lifecycle */,
null /* host*/);
}
};
static class SummaryProvider implements SummaryLoader.SummaryProvider {