diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 321eb16..0f39c6c 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -148,6 +148,7 @@
     <uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
     <uses-permission android:name="android.permission.GET_BACKGROUND_INSTALLED_PACKAGES" />
     <uses-permission android:name="android.permission.SATELLITE_COMMUNICATION" />
+    <uses-permission android:name="android.permission.READ_SYSTEM_GRAMMATICAL_GENDER" />
 
     <application
             android:name=".SettingsApplication"
diff --git a/src/com/android/settings/network/SubscriptionUtil.java b/src/com/android/settings/network/SubscriptionUtil.java
index 1ab3ed5..f3eb519 100644
--- a/src/com/android/settings/network/SubscriptionUtil.java
+++ b/src/com/android/settings/network/SubscriptionUtil.java
@@ -76,8 +76,9 @@
     static final String SUB_ID = "sub_id";
     @VisibleForTesting
     static final String KEY_UNIQUE_SUBSCRIPTION_DISPLAYNAME = "unique_subscription_displayName";
-    private static final String REGEX_DISPLAY_NAME_PREFIXES = "^";
-    private static final String REGEX_DISPLAY_NAME_SUFFIXES = "\\s[0-9]+";
+    private static final String REGEX_DISPLAY_NAME_SUFFIX = "\\s[0-9]+";
+    private static final Pattern REGEX_DISPLAY_NAME_SUFFIX_PATTERN =
+            Pattern.compile(REGEX_DISPLAY_NAME_SUFFIX);
 
     private static List<SubscriptionInfo> sAvailableResultsForTesting;
     private static List<SubscriptionInfo> sActiveResultsForTesting;
@@ -461,12 +462,12 @@
 
     @VisibleForTesting
     static boolean isValidCachedDisplayName(String cachedDisplayName, String originalName) {
-        if (TextUtils.isEmpty(cachedDisplayName) || TextUtils.isEmpty(originalName)) {
+        if (TextUtils.isEmpty(cachedDisplayName) || TextUtils.isEmpty(originalName)
+                || !cachedDisplayName.startsWith(originalName)) {
             return false;
         }
-        String regex = REGEX_DISPLAY_NAME_PREFIXES + originalName + REGEX_DISPLAY_NAME_SUFFIXES;
-        Pattern pattern = Pattern.compile(regex);
-        Matcher matcher = pattern.matcher(cachedDisplayName);
+        String displayNameSuffix = cachedDisplayName.substring(originalName.length());
+        Matcher matcher = REGEX_DISPLAY_NAME_SUFFIX_PATTERN.matcher(displayNameSuffix);
         return matcher.matches();
     }
 
diff --git a/src/com/android/settings/wifi/WifiAPITest.java b/src/com/android/settings/wifi/WifiAPITest.java
index c8bcf7f..8953875 100644
--- a/src/com/android/settings/wifi/WifiAPITest.java
+++ b/src/com/android/settings/wifi/WifiAPITest.java
@@ -18,7 +18,10 @@
 
 import static android.content.Context.WIFI_SERVICE;
 
+import static com.android.settingslib.wifi.WifiEnterpriseRestrictionUtils.isChangeWifiStateAllowed;
+
 import android.app.settings.SettingsEnums;
+import android.content.Context;
 import android.content.DialogInterface;
 import android.net.wifi.WifiManager;
 import android.os.Bundle;
@@ -38,7 +41,7 @@
 public class WifiAPITest extends SettingsPreferenceFragment implements
         Preference.OnPreferenceClickListener {
 
-    private static final String TAG = "WifiAPITest";
+    private static final String TAG = "WifiAPITest+++";
     private int netid;
 
     //============================
@@ -69,18 +72,38 @@
 
     @Override
     public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
+        Context context = getContext();
+        if (context == null) {
+            return;
+        }
         addPreferencesFromResource(R.xml.wifi_api_test);
 
+        boolean isChangeWifiStateAllowed = isChangeWifiStateAllowed(context);
         final PreferenceScreen preferenceScreen = getPreferenceScreen();
 
         mWifiDisconnect = (Preference) preferenceScreen.findPreference(KEY_DISCONNECT);
-        mWifiDisconnect.setOnPreferenceClickListener(this);
+        if (mWifiDisconnect != null) {
+            mWifiDisconnect.setEnabled(isChangeWifiStateAllowed);
+            if (isChangeWifiStateAllowed) {
+                mWifiDisconnect.setOnPreferenceClickListener(this);
+            }
+        }
 
         mWifiDisableNetwork = (Preference) preferenceScreen.findPreference(KEY_DISABLE_NETWORK);
-        mWifiDisableNetwork.setOnPreferenceClickListener(this);
+        if (mWifiDisableNetwork != null) {
+            mWifiDisableNetwork.setEnabled(isChangeWifiStateAllowed);
+            if (isChangeWifiStateAllowed) {
+                mWifiDisableNetwork.setOnPreferenceClickListener(this);
+            }
+        }
 
         mWifiEnableNetwork = (Preference) preferenceScreen.findPreference(KEY_ENABLE_NETWORK);
-        mWifiEnableNetwork.setOnPreferenceClickListener(this);
+        if (mWifiEnableNetwork != null) {
+            mWifiEnableNetwork.setEnabled(isChangeWifiStateAllowed);
+            if (isChangeWifiStateAllowed) {
+                mWifiEnableNetwork.setOnPreferenceClickListener(this);
+            }
+        }
 
     }
 
diff --git a/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java b/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java
index 6df281a..46c281f 100644
--- a/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java
+++ b/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java
@@ -636,6 +636,14 @@
     }
 
     @Test
+    public void isValidCachedDisplayName_withBrackets_noCrash() {
+        String originalName = "originalName(";
+        String cacheString = "originalName( 1234";
+
+        assertThat(SubscriptionUtil.isValidCachedDisplayName(cacheString, originalName)).isTrue();
+    }
+
+    @Test
     public void isConnectedToWifi_hasWiFi_returnTrue() {
         addNetworkTransportType(NetworkCapabilities.TRANSPORT_WIFI);
 
