Loading res/xml/encryption_and_credential.xml +10 −4 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" xmlns:settings="http://schemas.android.com/apk/res/com.android.settings" android:title="@string/encryption_and_credential_settings_title" android:key="encryption_and_credentials_screen"> Loading @@ -39,7 +40,9 @@ <com.android.settingslib.RestrictedPreference android:key="credential_storage_type" android:title="@string/credential_storage_type" /> android:title="@string/credential_storage_type" android:summary="@string/summary_placeholder" settings:userRestriction="no_config_credentials" /> <Preference android:key="trusted_credentials" Loading @@ -51,12 +54,14 @@ android:key="user_credentials" android:title="@string/user_credentials" android:summary="@string/user_credentials_summary" android:fragment="com.android.settings.UserCredentialsSettings" /> android:fragment="com.android.settings.UserCredentialsSettings" settings:userRestriction="no_config_credentials" /> <com.android.settingslib.RestrictedPreference android:key="credentials_install" android:title="@string/credentials_install" android:summary="@string/credentials_install_summary"> android:summary="@string/credentials_install_summary" settings:userRestriction="no_config_credentials"> <intent android:action="android.credentials.INSTALL" Loading @@ -68,7 +73,8 @@ <com.android.settingslib.RestrictedPreference android:key="credentials_reset" android:title="@string/credentials_reset" android:summary="@string/credentials_reset_summary"> android:summary="@string/credentials_reset_summary" settings:userRestriction="no_config_credentials"> <intent android:action="com.android.credentials.RESET" Loading src/com/android/settings/security/CredentialStoragePreferenceController.java 0 → 100644 +48 −0 Original line number Diff line number Diff line /* * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.security; import android.content.Context; import android.os.UserManager; import android.security.KeyStore; import android.support.v7.preference.Preference; import com.android.settings.R; public class CredentialStoragePreferenceController extends RestrictedEncryptionPreferenceController { private static final String KEY_CREDENTIAL_STORAGE_TYPE = "credential_storage_type"; private final KeyStore mKeyStore; public CredentialStoragePreferenceController(Context context) { super(context, UserManager.DISALLOW_CONFIG_CREDENTIALS); mKeyStore = KeyStore.getInstance(); } @Override public String getPreferenceKey() { return KEY_CREDENTIAL_STORAGE_TYPE; } @Override public void updateState(Preference preference) { preference.setSummary(mKeyStore.isHardwareBacked() ? R.string.credential_storage_type_hardware : R.string.credential_storage_type_software); } } src/com/android/settings/security/EncryptionAndCredential.java +9 −110 Original line number Diff line number Diff line Loading @@ -17,22 +17,16 @@ package com.android.settings.security; import android.content.Context; import android.content.Intent; import android.os.UserHandle; import android.os.UserManager; import android.provider.SearchIndexableResource; import android.security.KeyStore; import android.support.v7.preference.PreferenceGroup; import android.support.v7.preference.PreferenceScreen; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.widget.PreferenceCategoryController; import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedPreference; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.lifecycle.Lifecycle; import java.util.ArrayList; import java.util.Arrays; Loading @@ -40,24 +34,11 @@ import java.util.List; /** * Encryption and Credential settings. * TODO: Extends this from {@link DashboardFragment} instead */ public class EncryptionAndCredential extends DashboardFragment { private static final String TAG = "EncryptionAndCredential"; // Misc Settings private static final String KEY_CREDENTIAL_STORAGE_TYPE = "credential_storage_type"; private static final String KEY_USER_CREDENTIALS = "user_credentials"; private static final String KEY_RESET_CREDENTIALS = "credentials_reset"; private static final String KEY_CREDENTIALS_INSTALL = "credentials_install"; private static final String KEY_CREDENTIALS_MANAGER = "credentials_management"; private static final int MY_USER_ID = UserHandle.myUserId(); private KeyStore mKeyStore; private RestrictedPreference mResetCredentials; @Override public int getMetricsCategory() { return MetricsEvent.ENCRYPTION_AND_CREDENTIAL; Loading @@ -70,7 +51,7 @@ public class EncryptionAndCredential extends DashboardFragment { @Override protected List<AbstractPreferenceController> getPreferenceControllers(Context context) { return buildPreferenceControllers(context); return buildPreferenceControllers(context, getLifecycle()); } @Override Loading @@ -78,7 +59,8 @@ public class EncryptionAndCredential extends DashboardFragment { return R.xml.encryption_and_credential; } private static List<AbstractPreferenceController> buildPreferenceControllers(Context context) { private static List<AbstractPreferenceController> buildPreferenceControllers(Context context, Lifecycle lifecycle) { final List<AbstractPreferenceController> controllers = new ArrayList<>(); final EncryptionStatusPreferenceController encryptStatusController = new EncryptionStatusPreferenceController(context); Loading @@ -86,76 +68,13 @@ public class EncryptionAndCredential extends DashboardFragment { controllers.add(new PreferenceCategoryController(context, "encryption_and_credentials_status_category", Arrays.asList(encryptStatusController))); controllers.add(new CredentialStoragePreferenceController(context)); controllers.add(new UserCredentialsPreferenceController(context)); controllers.add(new ResetCredentialsPreferenceController(context, lifecycle)); controllers.add(new InstallCredentialsPreferenceController(context)); return controllers; } /** * 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(); // Credential storage mKeyStore = KeyStore.getInstance(); // needs to be initialized for onResume() if (!RestrictedLockUtils.hasBaseUserRestriction(getActivity(), UserManager.DISALLOW_CONFIG_CREDENTIALS, MY_USER_ID)) { RestrictedPreference userCredentials = (RestrictedPreference) root.findPreference( KEY_USER_CREDENTIALS); userCredentials.checkRestrictionAndSetDisabled( UserManager.DISALLOW_CONFIG_CREDENTIALS); RestrictedPreference credentialStorageType = (RestrictedPreference) root.findPreference( KEY_CREDENTIAL_STORAGE_TYPE); credentialStorageType.checkRestrictionAndSetDisabled( UserManager.DISALLOW_CONFIG_CREDENTIALS); RestrictedPreference installCredentials = (RestrictedPreference) root.findPreference( KEY_CREDENTIALS_INSTALL); installCredentials.checkRestrictionAndSetDisabled( UserManager.DISALLOW_CONFIG_CREDENTIALS); mResetCredentials = (RestrictedPreference) root.findPreference(KEY_RESET_CREDENTIALS); mResetCredentials.checkRestrictionAndSetDisabled( UserManager.DISALLOW_CONFIG_CREDENTIALS); final int storageSummaryRes = mKeyStore.isHardwareBacked() ? R.string.credential_storage_type_hardware : R.string.credential_storage_type_software; credentialStorageType.setSummary(storageSummaryRes); } else { PreferenceGroup credentialsManager = (PreferenceGroup) root.findPreference(KEY_CREDENTIALS_MANAGER); credentialsManager.removePreference(root.findPreference(KEY_RESET_CREDENTIALS)); credentialsManager.removePreference(root.findPreference(KEY_CREDENTIALS_INSTALL)); credentialsManager.removePreference(root.findPreference(KEY_CREDENTIAL_STORAGE_TYPE)); credentialsManager.removePreference(root.findPreference(KEY_USER_CREDENTIALS)); } return root; } @Override public void onResume() { super.onResume(); // Make sure we reload the preference hierarchy since some of these settings // depend on others... createPreferenceHierarchy(); if (mResetCredentials != null && !mResetCredentials.isDisabledByAdmin()) { mResetCredentials.setEnabled(!mKeyStore.isEmpty()); } } /** * see confirmPatternThenDisableAndClear */ @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); createPreferenceHierarchy(); } @Override protected int getHelpResource() { return R.string.help_url_encryption; Loading @@ -179,7 +98,7 @@ public class EncryptionAndCredential extends DashboardFragment { @Override public List<AbstractPreferenceController> getPreferenceControllers(Context context) { return buildPreferenceControllers(context); return buildPreferenceControllers(context, null /* lifecycle */); } @Override Loading @@ -187,25 +106,5 @@ public class EncryptionAndCredential extends DashboardFragment { final UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE); return um.isAdminUser(); } @Override public List<String> getNonIndexableKeys(Context context) { final List<String> keys = super.getNonIndexableKeys(context); if (!isPageSearchEnabled(context)) { return keys; } final UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE); if (um.hasUserRestriction(UserManager.DISALLOW_CONFIG_CREDENTIALS)) { keys.add(KEY_CREDENTIALS_MANAGER); keys.add(KEY_RESET_CREDENTIALS); keys.add(KEY_CREDENTIALS_INSTALL); keys.add(KEY_CREDENTIAL_STORAGE_TYPE); keys.add(KEY_USER_CREDENTIALS); } return keys; } } } src/com/android/settings/security/InstallCredentialsPreferenceController.java 0 → 100644 +35 −0 Original line number Diff line number Diff line /* * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.security; import android.content.Context; import android.os.UserManager; public class InstallCredentialsPreferenceController extends RestrictedEncryptionPreferenceController { private static final String KEY_CREDENTIALS_INSTALL = "credentials_install"; public InstallCredentialsPreferenceController(Context context) { super(context, UserManager.DISALLOW_CONFIG_CREDENTIALS); } @Override public String getPreferenceKey() { return KEY_CREDENTIALS_INSTALL; } } src/com/android/settings/security/ResetCredentialsPreferenceController.java 0 → 100644 +63 −0 Original line number Diff line number Diff line /* * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.security; import android.content.Context; import android.os.UserManager; import android.security.KeyStore; import android.support.v7.preference.PreferenceScreen; import com.android.settingslib.RestrictedPreference; import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnResume; public class ResetCredentialsPreferenceController extends RestrictedEncryptionPreferenceController implements LifecycleObserver, OnResume { private static final String KEY_RESET_CREDENTIALS = "credentials_reset"; private final KeyStore mKeyStore; private RestrictedPreference mPreference; public ResetCredentialsPreferenceController(Context context, Lifecycle lifecycle) { super(context, UserManager.DISALLOW_CONFIG_CREDENTIALS); mKeyStore = KeyStore.getInstance(); if (lifecycle != null) { lifecycle.addObserver(this); } } @Override public String getPreferenceKey() { return KEY_RESET_CREDENTIALS; } @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); mPreference = (RestrictedPreference) screen.findPreference(getPreferenceKey()); } @Override public void onResume() { if (mPreference != null && !mPreference.isDisabledByAdmin()) { mPreference.setEnabled(!mKeyStore.isEmpty()); } } } Loading
res/xml/encryption_and_credential.xml +10 −4 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" xmlns:settings="http://schemas.android.com/apk/res/com.android.settings" android:title="@string/encryption_and_credential_settings_title" android:key="encryption_and_credentials_screen"> Loading @@ -39,7 +40,9 @@ <com.android.settingslib.RestrictedPreference android:key="credential_storage_type" android:title="@string/credential_storage_type" /> android:title="@string/credential_storage_type" android:summary="@string/summary_placeholder" settings:userRestriction="no_config_credentials" /> <Preference android:key="trusted_credentials" Loading @@ -51,12 +54,14 @@ android:key="user_credentials" android:title="@string/user_credentials" android:summary="@string/user_credentials_summary" android:fragment="com.android.settings.UserCredentialsSettings" /> android:fragment="com.android.settings.UserCredentialsSettings" settings:userRestriction="no_config_credentials" /> <com.android.settingslib.RestrictedPreference android:key="credentials_install" android:title="@string/credentials_install" android:summary="@string/credentials_install_summary"> android:summary="@string/credentials_install_summary" settings:userRestriction="no_config_credentials"> <intent android:action="android.credentials.INSTALL" Loading @@ -68,7 +73,8 @@ <com.android.settingslib.RestrictedPreference android:key="credentials_reset" android:title="@string/credentials_reset" android:summary="@string/credentials_reset_summary"> android:summary="@string/credentials_reset_summary" settings:userRestriction="no_config_credentials"> <intent android:action="com.android.credentials.RESET" Loading
src/com/android/settings/security/CredentialStoragePreferenceController.java 0 → 100644 +48 −0 Original line number Diff line number Diff line /* * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.security; import android.content.Context; import android.os.UserManager; import android.security.KeyStore; import android.support.v7.preference.Preference; import com.android.settings.R; public class CredentialStoragePreferenceController extends RestrictedEncryptionPreferenceController { private static final String KEY_CREDENTIAL_STORAGE_TYPE = "credential_storage_type"; private final KeyStore mKeyStore; public CredentialStoragePreferenceController(Context context) { super(context, UserManager.DISALLOW_CONFIG_CREDENTIALS); mKeyStore = KeyStore.getInstance(); } @Override public String getPreferenceKey() { return KEY_CREDENTIAL_STORAGE_TYPE; } @Override public void updateState(Preference preference) { preference.setSummary(mKeyStore.isHardwareBacked() ? R.string.credential_storage_type_hardware : R.string.credential_storage_type_software); } }
src/com/android/settings/security/EncryptionAndCredential.java +9 −110 Original line number Diff line number Diff line Loading @@ -17,22 +17,16 @@ package com.android.settings.security; import android.content.Context; import android.content.Intent; import android.os.UserHandle; import android.os.UserManager; import android.provider.SearchIndexableResource; import android.security.KeyStore; import android.support.v7.preference.PreferenceGroup; import android.support.v7.preference.PreferenceScreen; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.widget.PreferenceCategoryController; import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedPreference; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.lifecycle.Lifecycle; import java.util.ArrayList; import java.util.Arrays; Loading @@ -40,24 +34,11 @@ import java.util.List; /** * Encryption and Credential settings. * TODO: Extends this from {@link DashboardFragment} instead */ public class EncryptionAndCredential extends DashboardFragment { private static final String TAG = "EncryptionAndCredential"; // Misc Settings private static final String KEY_CREDENTIAL_STORAGE_TYPE = "credential_storage_type"; private static final String KEY_USER_CREDENTIALS = "user_credentials"; private static final String KEY_RESET_CREDENTIALS = "credentials_reset"; private static final String KEY_CREDENTIALS_INSTALL = "credentials_install"; private static final String KEY_CREDENTIALS_MANAGER = "credentials_management"; private static final int MY_USER_ID = UserHandle.myUserId(); private KeyStore mKeyStore; private RestrictedPreference mResetCredentials; @Override public int getMetricsCategory() { return MetricsEvent.ENCRYPTION_AND_CREDENTIAL; Loading @@ -70,7 +51,7 @@ public class EncryptionAndCredential extends DashboardFragment { @Override protected List<AbstractPreferenceController> getPreferenceControllers(Context context) { return buildPreferenceControllers(context); return buildPreferenceControllers(context, getLifecycle()); } @Override Loading @@ -78,7 +59,8 @@ public class EncryptionAndCredential extends DashboardFragment { return R.xml.encryption_and_credential; } private static List<AbstractPreferenceController> buildPreferenceControllers(Context context) { private static List<AbstractPreferenceController> buildPreferenceControllers(Context context, Lifecycle lifecycle) { final List<AbstractPreferenceController> controllers = new ArrayList<>(); final EncryptionStatusPreferenceController encryptStatusController = new EncryptionStatusPreferenceController(context); Loading @@ -86,76 +68,13 @@ public class EncryptionAndCredential extends DashboardFragment { controllers.add(new PreferenceCategoryController(context, "encryption_and_credentials_status_category", Arrays.asList(encryptStatusController))); controllers.add(new CredentialStoragePreferenceController(context)); controllers.add(new UserCredentialsPreferenceController(context)); controllers.add(new ResetCredentialsPreferenceController(context, lifecycle)); controllers.add(new InstallCredentialsPreferenceController(context)); return controllers; } /** * 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(); // Credential storage mKeyStore = KeyStore.getInstance(); // needs to be initialized for onResume() if (!RestrictedLockUtils.hasBaseUserRestriction(getActivity(), UserManager.DISALLOW_CONFIG_CREDENTIALS, MY_USER_ID)) { RestrictedPreference userCredentials = (RestrictedPreference) root.findPreference( KEY_USER_CREDENTIALS); userCredentials.checkRestrictionAndSetDisabled( UserManager.DISALLOW_CONFIG_CREDENTIALS); RestrictedPreference credentialStorageType = (RestrictedPreference) root.findPreference( KEY_CREDENTIAL_STORAGE_TYPE); credentialStorageType.checkRestrictionAndSetDisabled( UserManager.DISALLOW_CONFIG_CREDENTIALS); RestrictedPreference installCredentials = (RestrictedPreference) root.findPreference( KEY_CREDENTIALS_INSTALL); installCredentials.checkRestrictionAndSetDisabled( UserManager.DISALLOW_CONFIG_CREDENTIALS); mResetCredentials = (RestrictedPreference) root.findPreference(KEY_RESET_CREDENTIALS); mResetCredentials.checkRestrictionAndSetDisabled( UserManager.DISALLOW_CONFIG_CREDENTIALS); final int storageSummaryRes = mKeyStore.isHardwareBacked() ? R.string.credential_storage_type_hardware : R.string.credential_storage_type_software; credentialStorageType.setSummary(storageSummaryRes); } else { PreferenceGroup credentialsManager = (PreferenceGroup) root.findPreference(KEY_CREDENTIALS_MANAGER); credentialsManager.removePreference(root.findPreference(KEY_RESET_CREDENTIALS)); credentialsManager.removePreference(root.findPreference(KEY_CREDENTIALS_INSTALL)); credentialsManager.removePreference(root.findPreference(KEY_CREDENTIAL_STORAGE_TYPE)); credentialsManager.removePreference(root.findPreference(KEY_USER_CREDENTIALS)); } return root; } @Override public void onResume() { super.onResume(); // Make sure we reload the preference hierarchy since some of these settings // depend on others... createPreferenceHierarchy(); if (mResetCredentials != null && !mResetCredentials.isDisabledByAdmin()) { mResetCredentials.setEnabled(!mKeyStore.isEmpty()); } } /** * see confirmPatternThenDisableAndClear */ @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); createPreferenceHierarchy(); } @Override protected int getHelpResource() { return R.string.help_url_encryption; Loading @@ -179,7 +98,7 @@ public class EncryptionAndCredential extends DashboardFragment { @Override public List<AbstractPreferenceController> getPreferenceControllers(Context context) { return buildPreferenceControllers(context); return buildPreferenceControllers(context, null /* lifecycle */); } @Override Loading @@ -187,25 +106,5 @@ public class EncryptionAndCredential extends DashboardFragment { final UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE); return um.isAdminUser(); } @Override public List<String> getNonIndexableKeys(Context context) { final List<String> keys = super.getNonIndexableKeys(context); if (!isPageSearchEnabled(context)) { return keys; } final UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE); if (um.hasUserRestriction(UserManager.DISALLOW_CONFIG_CREDENTIALS)) { keys.add(KEY_CREDENTIALS_MANAGER); keys.add(KEY_RESET_CREDENTIALS); keys.add(KEY_CREDENTIALS_INSTALL); keys.add(KEY_CREDENTIAL_STORAGE_TYPE); keys.add(KEY_USER_CREDENTIALS); } return keys; } } }
src/com/android/settings/security/InstallCredentialsPreferenceController.java 0 → 100644 +35 −0 Original line number Diff line number Diff line /* * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.security; import android.content.Context; import android.os.UserManager; public class InstallCredentialsPreferenceController extends RestrictedEncryptionPreferenceController { private static final String KEY_CREDENTIALS_INSTALL = "credentials_install"; public InstallCredentialsPreferenceController(Context context) { super(context, UserManager.DISALLOW_CONFIG_CREDENTIALS); } @Override public String getPreferenceKey() { return KEY_CREDENTIALS_INSTALL; } }
src/com/android/settings/security/ResetCredentialsPreferenceController.java 0 → 100644 +63 −0 Original line number Diff line number Diff line /* * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.security; import android.content.Context; import android.os.UserManager; import android.security.KeyStore; import android.support.v7.preference.PreferenceScreen; import com.android.settingslib.RestrictedPreference; import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnResume; public class ResetCredentialsPreferenceController extends RestrictedEncryptionPreferenceController implements LifecycleObserver, OnResume { private static final String KEY_RESET_CREDENTIALS = "credentials_reset"; private final KeyStore mKeyStore; private RestrictedPreference mPreference; public ResetCredentialsPreferenceController(Context context, Lifecycle lifecycle) { super(context, UserManager.DISALLOW_CONFIG_CREDENTIALS); mKeyStore = KeyStore.getInstance(); if (lifecycle != null) { lifecycle.addObserver(this); } } @Override public String getPreferenceKey() { return KEY_RESET_CREDENTIALS; } @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); mPreference = (RestrictedPreference) screen.findPreference(getPreferenceKey()); } @Override public void onResume() { if (mPreference != null && !mPreference.isDisabledByAdmin()) { mPreference.setEnabled(!mKeyStore.isEmpty()); } } }