diff --git a/res/xml/security_settings_v2.xml b/res/xml/security_settings_v2.xml index 86f542c8ed9..571e51f649d 100644 --- a/res/xml/security_settings_v2.xml +++ b/res/xml/security_settings_v2.xml @@ -47,6 +47,7 @@ - + android:summary="@string/summary_placeholder" + android:fragment="com.android.settings.location.LocationSettings" /> - + - + @@ -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" /> { final Map 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 c4e178f764c..0207c94ad95 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.print.PrintSettingsFragment; 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 @@ public final class SearchIndexableResources { 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 @@ public final class SearchIndexableResources { private SearchIndexableResources() { } - public static Collection providerValues() { return sProviders;} + public static Collection 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 612dd6d503f..9a33ec3deaf 100644 --- a/src/com/android/settings/security/ChangeProfileScreenLockPreferenceController.java +++ b/src/com/android/settings/security/ChangeProfileScreenLockPreferenceController.java @@ -30,7 +30,6 @@ import android.text.TextUtils; 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 @@ public class ChangeProfileScreenLockPreferenceController extends 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 3cd235fb7eb..67b78fcab1b 100644 --- a/src/com/android/settings/security/ChangeScreenLockPreferenceController.java +++ b/src/com/android/settings/security/ChangeScreenLockPreferenceController.java @@ -79,13 +79,19 @@ public class ChangeScreenLockPreferenceController extends AbstractPreferenceCont 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 @@ public class ChangeScreenLockPreferenceController extends AbstractPreferenceCont break; } } + mPreference.setEnabled(true); } /** diff --git a/src/com/android/settings/security/EncryptionAndCredential.java b/src/com/android/settings/security/EncryptionAndCredential.java index aa35dd31510..627cf3e7a8b 100644 --- a/src/com/android/settings/security/EncryptionAndCredential.java +++ b/src/com/android/settings/security/EncryptionAndCredential.java @@ -66,7 +66,8 @@ public class EncryptionAndCredential extends DashboardFragment { Lifecycle lifecycle) { final List 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 213c39c1184..156ad81d70b 100644 --- a/src/com/android/settings/security/LockScreenPreferenceController.java +++ b/src/com/android/settings/security/LockScreenPreferenceController.java @@ -27,18 +27,32 @@ import com.android.internal.widget.LockPatternUtils; 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 @@ public class LockScreenPreferenceController extends BasePreferenceController { } @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 7ae6ca7d3fe..9909ccfb12d 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,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 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 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 buildPreferenceControllers(Context context, + Lifecycle lifecycle, SecuritySettingsV2 host) { + final List 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 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 getXmlResourcesToIndex( + Context context, boolean enabled) { + final List 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 getXmlResourcesToIndex( - Context context, boolean enabled) { - final List 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 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 39b1916a072..a9e56f46dca 100644 --- a/src/com/android/settings/security/VisiblePatternProfilePreferenceController.java +++ b/src/com/android/settings/security/VisiblePatternProfilePreferenceController.java @@ -21,13 +21,19 @@ import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_SOMETHING; 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 @@ public class VisiblePatternProfilePreferenceController extends TogglePreferenceC 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 @@ public class VisiblePatternProfilePreferenceController extends TogglePreferenceC 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 8d198e7b269..99aa6a485c2 100644 --- a/src/com/android/settings/security/trustagent/TrustAgentListPreferenceController.java +++ b/src/com/android/settings/security/trustagent/TrustAgentListPreferenceController.java @@ -19,6 +19,7 @@ package com.android.settings.security.trustagent; 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 @@ public class TrustAgentListPreferenceController extends AbstractPreferenceContro 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 class TrustAgentListPreferenceController extends AbstractPreferenceContro public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); mSecurityCategory = (PreferenceCategory) screen.findPreference(PREF_KEY_SECURITY_CATEGORY); + updateTrustAgents(); } @Override @@ -112,7 +112,8 @@ public class TrustAgentListPreferenceController extends AbstractPreferenceContro 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 @@ public class TrustAgentListPreferenceController extends AbstractPreferenceContro @Override public void onResume() { + updateTrustAgents(); + } + + private void updateTrustAgents() { if (mSecurityCategory == null) { return; } @@ -167,7 +172,7 @@ public class TrustAgentListPreferenceController extends AbstractPreferenceContro 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 146893c6064..6a831b0a234 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 a97780b48e8..6913c0c93a0 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 @@ import static com.android.settings.security.trustagent.TrustAgentListPreferenceC .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 @@ public class TrustAgentListPreferenceControllerTest { mController.displayPreference(mScreen); mController.onResume(); - verify(mCategory).addPreference(any(Preference.class)); + verify(mCategory, atLeastOnce()).addPreference(any(Preference.class)); } }