Not include user input in regex

Check prefix and remove prefix first, to avoid include user input in
the regex to fix.

Fix: 335136289
Test: manual - on SIMs
Test: unit test
Change-Id: Iff4dcfc3662c744d00b586d05e64b4f5fe33a0d8
diff --git a/src/com/android/settings/network/SubscriptionUtil.java b/src/com/android/settings/network/SubscriptionUtil.java
index 56381e2..9277417 100644
--- a/src/com/android/settings/network/SubscriptionUtil.java
+++ b/src/com/android/settings/network/SubscriptionUtil.java
@@ -75,8 +75,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;
@@ -460,12 +461,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/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);