Enable the clear credentials buttons when wifi keys are installed.
This patch updates the ResetCredentialsPreferenceController to check the
WIFI keystore namespace if called by the primary user.
Test: Install a WIFI certificate or key and watch the
"Clear credentials" button become enabled in the credential
storage dialog of Settings.
Bug: 189601008
Merged-In: I69828b64a7e3c707c27b4582d64ff0ddb863a4ff
Change-Id: I69828b64a7e3c707c27b4582d64ff0ddb863a4ff
diff --git a/src/com/android/settings/security/ResetCredentialsPreferenceController.java b/src/com/android/settings/security/ResetCredentialsPreferenceController.java
index 48e7f84..5234ba8 100644
--- a/src/com/android/settings/security/ResetCredentialsPreferenceController.java
+++ b/src/com/android/settings/security/ResetCredentialsPreferenceController.java
@@ -18,6 +18,8 @@
import android.content.Context;
import android.os.UserManager;
+import android.security.keystore.KeyProperties;
+import android.security.keystore2.AndroidKeyStoreLoadStoreParameter;
import androidx.preference.PreferenceScreen;
@@ -35,6 +37,7 @@
private static final String KEY_RESET_CREDENTIALS = "credentials_reset";
private final KeyStore mKeyStore;
+ private final KeyStore mWifiKeyStore;
private RestrictedPreference mPreference;
@@ -45,8 +48,19 @@
keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
} catch (Exception e) {
+ keyStore = null;
}
mKeyStore = keyStore;
+ keyStore = null;
+ if (context.getUser().isSystem()) {
+ try {
+ keyStore = KeyStore.getInstance("AndroidKeyStore");
+ keyStore.load(new AndroidKeyStoreLoadStoreParameter(KeyProperties.NAMESPACE_WIFI));
+ } catch (Exception e) {
+ keyStore = null;
+ }
+ }
+ mWifiKeyStore = keyStore;
if (lifecycle != null) {
lifecycle.addObserver(this);
}
@@ -68,9 +82,11 @@
if (mPreference != null && !mPreference.isDisabledByAdmin()) {
boolean isEnabled = false;
try {
- if (mKeyStore != null) {
- isEnabled = mKeyStore.aliases().hasMoreElements();
- }
+ isEnabled = (mKeyStore != null
+ && mKeyStore.aliases().hasMoreElements())
+ || (mWifiKeyStore != null
+ && mWifiKeyStore.aliases().hasMoreElements());
+
} catch (KeyStoreException e) {
// If access to keystore fails, treat as disabled.
}