Use proper DashboardFragment APIs for SecuritySettingsV2
Next CL will add tests.
Bug: 32953042
Test: TODO
Change-Id: I0cb0e4eb216d3e9408675486f1cd73ba82d8ca36
diff --git a/res/xml/security_settings_v2.xml b/res/xml/security_settings_v2.xml
index 86f542c..571e51f 100644
--- a/res/xml/security_settings_v2.xml
+++ b/res/xml/security_settings_v2.xml
@@ -47,6 +47,7 @@
<Preference
android:key="lockscreen_preferences"
android:title="@string/lockscreen_settings_title"
+ android:summary="@string/summary_placeholder"
android:fragment="com.android.settings.security.LockscreenDashboardFragment" />
<Preference
@@ -77,6 +78,7 @@
<SwitchPreference
android:key="visiblepattern_profile"
+ android:summary="@string/summary_placeholder"
android:title="@string/lockpattern_settings_enable_visible_pattern_title_profile" />
<Preference
@@ -95,8 +97,8 @@
<Preference
android:key="location"
android:title="@string/location_settings_title"
- android:fragment="com.android.settings.location.LocationSettings">
- </Preference>
+ android:summary="@string/summary_placeholder"
+ android:fragment="com.android.settings.location.LocationSettings" />
<SwitchPreference
android:key="show_password"
@@ -109,15 +111,17 @@
android:order="40"
android:key="security_settings_device_admin_category">
- <Preference android:key="manage_device_admin"
- android:title="@string/manage_device_admin"
- android:persistent="false"
- android:fragment="com.android.settings.DeviceAdminSettings" />
+ <Preference
+ android:key="manage_device_admin"
+ android:title="@string/manage_device_admin"
+ android:summary="@string/summary_placeholder"
+ android:fragment="com.android.settings.DeviceAdminSettings" />
- <Preference android:key="enterprise_privacy"
- android:title="@string/enterprise_privacy_settings"
- android:persistent="false"
- android:fragment="com.android.settings.enterprise.EnterprisePrivacySettings" />
+ <Preference
+ android:key="enterprise_privacy"
+ android:title="@string/enterprise_privacy_settings"
+ android:summary="@string/summary_placeholder"
+ android:fragment="com.android.settings.enterprise.EnterprisePrivacySettings" />
</PreferenceCategory>
@@ -144,7 +148,7 @@
android:order="70"
android:key="manage_trust_agents"
android:title="@string/manage_trust_agents"
- android:persistent="false"
+ android:summary="@string/summary_placeholder"
android:fragment="com.android.settings.security.trustagent.TrustAgentSettings" />
<Preference
diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
index 9ef38b8..048f6ed 100644
--- a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
+++ b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
@@ -218,6 +218,10 @@
preference.setSummary(tile.summary);
} else if (tile.metaData != null
&& tile.metaData.containsKey(META_DATA_PREFERENCE_SUMMARY_URI)) {
+ // Set a placeholder summary before starting to fetch real summary, this is necessary
+ // to avoid preference height change.
+ preference.setSummary(R.string.summary_placeholder);
+
ThreadUtils.postOnBackgroundThread(() -> {
final Map<String, IContentProvider> providerMap = new ArrayMap<>();
final String uri = tile.metaData.getString(META_DATA_PREFERENCE_SUMMARY_URI);
diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java
index c4e178f..0207c94 100644
--- a/src/com/android/settings/search/SearchIndexableResources.java
+++ b/src/com/android/settings/search/SearchIndexableResources.java
@@ -75,7 +75,7 @@
import com.android.settings.security.EncryptionAndCredential;
import com.android.settings.security.LockscreenDashboardFragment;
import com.android.settings.security.ScreenPinningSettings;
-import com.android.settings.security.SecuritySettings;
+import com.android.settings.security.SecuritySettingsV2;
import com.android.settings.security.screenlock.ScreenLockSettings;
import com.android.settings.sim.SimSettings;
import com.android.settings.support.SupportDashboardActivity;
@@ -135,7 +135,7 @@
addIndex(LocationSettings.class);
addIndex(LocationMode.class);
addIndex(ScanningSettings.class);
- addIndex(SecuritySettings.class);
+ addIndex(SecuritySettingsV2.class);
addIndex(ScreenLockSettings.class);
addIndex(EncryptionAndCredential.class);
addIndex(ScreenPinningSettings.class);
@@ -179,5 +179,7 @@
private SearchIndexableResources() {
}
- public static Collection<Class> providerValues() { return sProviders;}
+ public static Collection<Class> providerValues() {
+ return sProviders;
+ }
}
\ No newline at end of file
diff --git a/src/com/android/settings/security/ChangeProfileScreenLockPreferenceController.java b/src/com/android/settings/security/ChangeProfileScreenLockPreferenceController.java
index 612dd6d..9a33ec3 100644
--- a/src/com/android/settings/security/ChangeProfileScreenLockPreferenceController.java
+++ b/src/com/android/settings/security/ChangeProfileScreenLockPreferenceController.java
@@ -30,7 +30,6 @@
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.password.ChooseLockGeneric;
-import com.android.settings.widget.GearPreference;
public class ChangeProfileScreenLockPreferenceController extends
ChangeScreenLockPreferenceController {
@@ -42,12 +41,6 @@
super(context, host);
}
- @Override
- public void onGearClick(GearPreference p) {
-
- }
-
- @Override
public boolean isAvailable() {
if (mProfileChallengeUserId == UserHandle.USER_NULL ||
!mLockPatternUtils.isSeparateProfileChallengeAllowed(mProfileChallengeUserId)) {
diff --git a/src/com/android/settings/security/ChangeScreenLockPreferenceController.java b/src/com/android/settings/security/ChangeScreenLockPreferenceController.java
index 3cd235f..67b78fc 100644
--- a/src/com/android/settings/security/ChangeScreenLockPreferenceController.java
+++ b/src/com/android/settings/security/ChangeScreenLockPreferenceController.java
@@ -79,13 +79,19 @@
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
mPreference = (RestrictedPreference) screen.findPreference(getPreferenceKey());
- if (mPreference != null && mPreference instanceof GearPreference) {
- ((GearPreference) mPreference).setOnGearClickListener(this);
- }
}
@Override
public void updateState(Preference preference) {
+ if (mPreference != null && mPreference instanceof GearPreference) {
+ if (mLockPatternUtils.isSecure(mUserId)
+ || !mLockPatternUtils.isLockScreenDisabled(mUserId)) {
+ ((GearPreference) mPreference).setOnGearClickListener(this);
+ } else {
+ ((GearPreference) mPreference).setOnGearClickListener(null);
+ }
+ }
+
updateSummary(preference, mUserId);
disableIfPasswordQualityManaged(mUserId);
if (!mLockPatternUtils.isSeparateProfileChallengeEnabled(mProfileChallengeUserId)) {
@@ -148,6 +154,7 @@
break;
}
}
+ mPreference.setEnabled(true);
}
/**
diff --git a/src/com/android/settings/security/EncryptionAndCredential.java b/src/com/android/settings/security/EncryptionAndCredential.java
index aa35dd3..627cf3e 100644
--- a/src/com/android/settings/security/EncryptionAndCredential.java
+++ b/src/com/android/settings/security/EncryptionAndCredential.java
@@ -66,7 +66,8 @@
Lifecycle lifecycle) {
final List<AbstractPreferenceController> controllers = new ArrayList<>();
final EncryptionStatusPreferenceController encryptStatusController =
- new EncryptionStatusPreferenceController(context, PREF_KEY_ENCRYPTION_DETAIL_PAGE);
+ new EncryptionStatusPreferenceController(context,
+ PREF_KEY_ENCRYPTION_DETAIL_PAGE);
controllers.add(encryptStatusController);
controllers.add(new PreferenceCategoryController(context,
"encryption_and_credentials_status_category",
diff --git a/src/com/android/settings/security/LockScreenPreferenceController.java b/src/com/android/settings/security/LockScreenPreferenceController.java
index 213c39c..156ad81 100644
--- a/src/com/android/settings/security/LockScreenPreferenceController.java
+++ b/src/com/android/settings/security/LockScreenPreferenceController.java
@@ -27,18 +27,32 @@
import com.android.settings.core.BasePreferenceController;
import com.android.settings.notification.LockScreenNotificationPreferenceController;
import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.core.lifecycle.LifecycleObserver;
+import com.android.settingslib.core.lifecycle.events.OnResume;
-public class LockScreenPreferenceController extends BasePreferenceController {
+public class LockScreenPreferenceController extends BasePreferenceController implements
+ LifecycleObserver, OnResume {
static final String KEY_LOCKSCREEN_PREFERENCES = "lockscreen_preferences";
private static final int MY_USER_ID = UserHandle.myUserId();
private final LockPatternUtils mLockPatternUtils;
+ private Preference mPreference;
- public LockScreenPreferenceController(Context context) {
+ public LockScreenPreferenceController(Context context, Lifecycle lifecycle) {
super(context, KEY_LOCKSCREEN_PREFERENCES);
mLockPatternUtils = FeatureFactory.getFactory(context)
.getSecurityFeatureProvider().getLockPatternUtils(context);
+ if (lifecycle != null) {
+ lifecycle.addObserver(this);
+ }
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ mPreference = screen.findPreference(getPreferenceKey());
}
@Override
@@ -54,12 +68,13 @@
}
@Override
- public void displayPreference(PreferenceScreen screen) {
- super.displayPreference(screen);
- final Preference lockscreenPreferences = screen.findPreference(getPreferenceKey());
- if (lockscreenPreferences != null) {
- lockscreenPreferences.setSummary(
- LockScreenNotificationPreferenceController.getSummaryResource(mContext));
- }
+ public void updateState(Preference preference) {
+ preference.setSummary(
+ LockScreenNotificationPreferenceController.getSummaryResource(mContext));
+ }
+
+ @Override
+ public void onResume() {
+ mPreference.setVisible(isAvailable());
}
}
diff --git a/src/com/android/settings/security/SecuritySettingsV2.java b/src/com/android/settings/security/SecuritySettingsV2.java
index 7ae6ca7..9909ccf 100644
--- a/src/com/android/settings/security/SecuritySettingsV2.java
+++ b/src/com/android/settings/security/SecuritySettingsV2.java
@@ -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,60 +38,12 @@
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 @@
return TAG;
}
-
@Override
public int getHelpResource() {
return R.string.help_url_security;
@@ -114,161 +60,7 @@
@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 @@
*/
@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 {
diff --git a/src/com/android/settings/security/VisiblePatternProfilePreferenceController.java b/src/com/android/settings/security/VisiblePatternProfilePreferenceController.java
index 39b1916..a9e56f4 100644
--- a/src/com/android/settings/security/VisiblePatternProfilePreferenceController.java
+++ b/src/com/android/settings/security/VisiblePatternProfilePreferenceController.java
@@ -21,13 +21,19 @@
import android.content.Context;
import android.os.UserHandle;
import android.os.UserManager;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
import com.android.internal.widget.LockPatternUtils;
import com.android.settings.Utils;
import com.android.settings.core.TogglePreferenceController;
import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.core.lifecycle.LifecycleObserver;
+import com.android.settingslib.core.lifecycle.events.OnResume;
-public class VisiblePatternProfilePreferenceController extends TogglePreferenceController {
+public class VisiblePatternProfilePreferenceController extends TogglePreferenceController
+ implements LifecycleObserver, OnResume {
private static final String KEY_VISIBLE_PATTERN_PROFILE = "visiblepattern_profile";
@@ -36,13 +42,18 @@
private final int mUserId = UserHandle.myUserId();
private final int mProfileChallengeUserId;
- public VisiblePatternProfilePreferenceController(Context context) {
+ private Preference mPreference;
+
+ public VisiblePatternProfilePreferenceController(Context context, Lifecycle lifecycle) {
super(context, KEY_VISIBLE_PATTERN_PROFILE);
mUm = (UserManager) context.getSystemService(Context.USER_SERVICE);
mLockPatternUtils = FeatureFactory.getFactory(context)
.getSecurityFeatureProvider()
.getLockPatternUtils(context);
mProfileChallengeUserId = Utils.getManagedProfileId(mUm, mUserId);
+ if (lifecycle != null) {
+ lifecycle.addObserver(this);
+ }
}
@Override
@@ -69,4 +80,15 @@
mLockPatternUtils.setVisiblePatternEnabled(isChecked, mProfileChallengeUserId);
return true;
}
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ mPreference = screen.findPreference(getPreferenceKey());
+ }
+
+ @Override
+ public void onResume() {
+ mPreference.setVisible(isAvailable());
+ }
}
diff --git a/src/com/android/settings/security/trustagent/TrustAgentListPreferenceController.java b/src/com/android/settings/security/trustagent/TrustAgentListPreferenceController.java
index 8d198e7..99aa6a4 100644
--- a/src/com/android/settings/security/trustagent/TrustAgentListPreferenceController.java
+++ b/src/com/android/settings/security/trustagent/TrustAgentListPreferenceController.java
@@ -19,6 +19,7 @@
import static com.android.settings.security.SecuritySettingsV2.CHANGE_TRUST_AGENT_SETTINGS;
import android.app.Activity;
+import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.UserHandle;
@@ -56,20 +57,18 @@
private final LockPatternUtils mLockPatternUtils;
private final TrustAgentManager mTrustAgentManager;
- private final Activity mActivity;
private final SecuritySettingsV2 mHost;
private Intent mTrustAgentClickIntent;
private PreferenceCategory mSecurityCategory;
- public TrustAgentListPreferenceController(Activity activity, SecuritySettingsV2 host,
+ public TrustAgentListPreferenceController(Context context, SecuritySettingsV2 host,
Lifecycle lifecycle) {
- super(activity);
- final SecurityFeatureProvider provider = FeatureFactory.getFactory(activity)
+ super(context);
+ final SecurityFeatureProvider provider = FeatureFactory.getFactory(context)
.getSecurityFeatureProvider();
- mActivity = activity;
mHost = host;
- mLockPatternUtils = provider.getLockPatternUtils(activity);
+ mLockPatternUtils = provider.getLockPatternUtils(context);
mTrustAgentManager = provider.getTrustAgentManager();
if (lifecycle != null) {
lifecycle.addObserver(this);
@@ -90,6 +89,7 @@
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
mSecurityCategory = (PreferenceCategory) screen.findPreference(PREF_KEY_SECURITY_CATEGORY);
+ updateTrustAgents();
}
@Override
@@ -112,7 +112,8 @@
if (!TextUtils.equals(preference.getKey(), getPreferenceKey())) {
return super.handlePreferenceTreeClick(preference);
}
- final ChooseLockSettingsHelper helper = new ChooseLockSettingsHelper(mActivity, mHost);
+ final ChooseLockSettingsHelper helper = new ChooseLockSettingsHelper(
+ mHost.getActivity(), mHost);
mTrustAgentClickIntent = preference.getIntent();
boolean confirmationLaunched = helper.launchConfirmationActivity(
CHANGE_TRUST_AGENT_SETTINGS, preference.getTitle());
@@ -127,6 +128,10 @@
@Override
public void onResume() {
+ updateTrustAgents();
+ }
+
+ private void updateTrustAgents() {
if (mSecurityCategory == null) {
return;
}
@@ -167,7 +172,7 @@
public boolean handleActivityResult(int requestCode, int resultCode) {
if (requestCode == CHANGE_TRUST_AGENT_SETTINGS && resultCode == Activity.RESULT_OK) {
- if (mTrustAgentClickIntent != null){
+ if (mTrustAgentClickIntent != null) {
mHost.startActivity(mTrustAgentClickIntent);
mTrustAgentClickIntent = null;
}
diff --git a/tests/robotests/assets/grandfather_not_in_search_index_provider_registry b/tests/robotests/assets/grandfather_not_in_search_index_provider_registry
index 146893c..6a831b0 100644
--- a/tests/robotests/assets/grandfather_not_in_search_index_provider_registry
+++ b/tests/robotests/assets/grandfather_not_in_search_index_provider_registry
@@ -1,3 +1,3 @@
com.android.settings.display.ScreenZoomPreferenceFragmentForSetupWizard
com.android.settings.search.indexing.FakeSettingsFragment
-com.android.settings.security.SecuritySettingsV2
\ No newline at end of file
+com.android.settings.security.SecuritySettings
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/security/trustagent/TrustAgentListPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/security/trustagent/TrustAgentListPreferenceControllerTest.java
index a97780b..6913c0c 100644
--- a/tests/robotests/src/com/android/settings/security/trustagent/TrustAgentListPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/security/trustagent/TrustAgentListPreferenceControllerTest.java
@@ -23,6 +23,7 @@
.PREF_KEY_TRUST_AGENT;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -127,6 +128,6 @@
mController.displayPreference(mScreen);
mController.onResume();
- verify(mCategory).addPreference(any(Preference.class));
+ verify(mCategory, atLeastOnce()).addPreference(any(Preference.class));
}
}