diff --git a/src/com/android/settings/UserCredentialsSettings.java b/src/com/android/settings/UserCredentialsSettings.java
index 5f72ca5..80b97e4 100644
--- a/src/com/android/settings/UserCredentialsSettings.java
+++ b/src/com/android/settings/UserCredentialsSettings.java
@@ -34,7 +34,6 @@
 import android.security.IKeyChainService;
 import android.security.KeyChain;
 import android.security.KeyChain.KeyChainConnection;
-import android.security.keystore.AndroidKeyStoreProvider;
 import android.security.keystore.KeyProperties;
 import android.security.keystore2.AndroidKeyStoreLoadStoreParameter;
 import android.util.Log;
@@ -74,6 +73,8 @@
         implements View.OnClickListener {
     private static final String TAG = "UserCredentialsSettings";
 
+    private static final String KEYSTORE_PROVIDER = "AndroidKeyStore";
+
     @Override
     public int getMetricsCategory() {
         return SettingsEnums.USER_CREDENTIALS;
@@ -210,15 +211,10 @@
 
             private void deleteWifiCredential(final Credential credential) {
                 try {
-                    KeyStore keyStore = null;
-                    if (AndroidKeyStoreProvider.isKeystore2Enabled()) {
-                        keyStore = KeyStore.getInstance("AndroidKeyStore");
-                        keyStore.load(
-                                new AndroidKeyStoreLoadStoreParameter(
-                                        KeyProperties.NAMESPACE_WIFI));
-                    } else {
-                        keyStore = AndroidKeyStoreProvider.getKeyStoreForUid(Process.WIFI_UID);
-                    }
+                    final KeyStore keyStore = KeyStore.getInstance(KEYSTORE_PROVIDER);
+                    keyStore.load(
+                            new AndroidKeyStoreLoadStoreParameter(
+                                    KeyProperties.NAMESPACE_WIFI));
                     keyStore.deleteEntry(credential.getAlias());
                 } catch (Exception e) {
                     throw new RuntimeException("Failed to delete keys from keystore.");
@@ -278,18 +274,13 @@
             final int wifiUid = UserHandle.getUid(myUserId, Process.WIFI_UID);
 
             try {
-                KeyStore processKeystore = KeyStore.getInstance("AndroidKeyStore");
+                KeyStore processKeystore = KeyStore.getInstance(KEYSTORE_PROVIDER);
                 processKeystore.load(null);
                 KeyStore wifiKeystore = null;
                 if (myUserId == 0) {
-                    // Only the primary user may see wifi configurations.
-                    if (AndroidKeyStoreProvider.isKeystore2Enabled()) {
-                        wifiKeystore = KeyStore.getInstance("AndroidKeyStore");
-                        wifiKeystore.load(new AndroidKeyStoreLoadStoreParameter(
-                                KeyProperties.NAMESPACE_WIFI));
-                    } else {
-                        wifiKeystore = AndroidKeyStoreProvider.getKeyStoreForUid(Process.WIFI_UID);
-                    }
+                    wifiKeystore = KeyStore.getInstance(KEYSTORE_PROVIDER);
+                    wifiKeystore.load(new AndroidKeyStoreLoadStoreParameter(
+                            KeyProperties.NAMESPACE_WIFI));
                 }
 
                 List<Credential> credentials = new ArrayList<>();
diff --git a/src/com/android/settings/utils/AndroidKeystoreAliasLoader.java b/src/com/android/settings/utils/AndroidKeystoreAliasLoader.java
index bb9abb9..c4e8124 100644
--- a/src/com/android/settings/utils/AndroidKeystoreAliasLoader.java
+++ b/src/com/android/settings/utils/AndroidKeystoreAliasLoader.java
@@ -16,8 +16,6 @@
 
 package com.android.settings.utils;
 
-import android.os.Process;
-import android.security.keystore.AndroidKeyStoreProvider;
 import android.security.keystore.KeyProperties;
 import android.security.keystore2.AndroidKeyStoreLoadStoreParameter;
 import android.util.Log;
@@ -41,6 +39,8 @@
 public class AndroidKeystoreAliasLoader {
     private static final String TAG = "SettingsKeystoreUtils";
 
+    private static final String KEYSTORE_PROVIDER = "AndroidKeyStore";
+
     private final Collection<String> mKeyCertAliases;
     private final Collection<String> mCaCertAliases;
     /**
@@ -58,21 +58,13 @@
     public AndroidKeystoreAliasLoader(Integer namespace) {
         mKeyCertAliases = new ArrayList<>();
         mCaCertAliases = new ArrayList<>();
-        KeyStore keyStore = null;
+        final KeyStore keyStore;
         final Enumeration<String> aliases;
         try {
+            keyStore = KeyStore.getInstance(KEYSTORE_PROVIDER);
             if (namespace != null && namespace != KeyProperties.NAMESPACE_APPLICATION) {
-                if (AndroidKeyStoreProvider.isKeystore2Enabled()) {
-                    keyStore = KeyStore.getInstance("AndroidKeyStore");
-                    keyStore.load(new AndroidKeyStoreLoadStoreParameter(namespace));
-                } else {
-                    // In the legacy case we pass in the WIFI UID because that is the only
-                    // possible special namespace that existed as of this writing,
-                    // and new namespaces must only be added using the new mechanism.
-                    keyStore = AndroidKeyStoreProvider.getKeyStoreForUid(Process.WIFI_UID);
-                }
+                keyStore.load(new AndroidKeyStoreLoadStoreParameter(namespace));
             } else {
-                keyStore = KeyStore.getInstance("AndroidKeyStore");
                 keyStore.load(null);
             }
             aliases = keyStore.aliases();
