Merge "Use config provider for OEM MMI codes"
diff --git a/java/com/android/dialer/dialpadview/SpecialCharSequenceMgr.java b/java/com/android/dialer/dialpadview/SpecialCharSequenceMgr.java
index 3321d93..d88bac3 100644
--- a/java/com/android/dialer/dialpadview/SpecialCharSequenceMgr.java
+++ b/java/com/android/dialer/dialpadview/SpecialCharSequenceMgr.java
@@ -59,14 +59,15 @@
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.compat.telephony.TelephonyManagerCompat;
+import com.android.dialer.configprovider.ConfigProviderBindings;
 import com.android.dialer.oem.MotorolaUtils;
 import com.android.dialer.telecom.TelecomUtil;
 import com.android.dialer.util.PermissionsUtil;
+import com.google.common.collect.ImmutableSet;
 import com.google.zxing.BarcodeFormat;
 import com.google.zxing.MultiFormatWriter;
 import com.google.zxing.WriterException;
 import com.google.zxing.common.BitMatrix;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Locale;
@@ -93,17 +94,8 @@
   private static final String ADN_NAME_COLUMN_NAME = "name";
   private static final int ADN_QUERY_TOKEN = -1;
 
-  @VisibleForTesting
-  static final List<String> TRANSSION_CODES =
-      new ArrayList<String>() {
-        {
-          add("*#07#");
-          add("*#87#");
-          add("*#43#");
-          add("*#2727#");
-          add("*#88#");
-        }
-      };
+  /** Comma separated MMI codes specific to OEM/device. */
+  @VisibleForTesting static final String CONFIG_OEM_MMI_CODES_CSV = "oem_mmi_codes_csv";
 
   /**
    * Remembers the previous {@link QueryHandler} and cancel the operation when needed, to prevent
@@ -172,7 +164,8 @@
       TelephonyManagerCompat.handleSecretCode(context, secretCode);
       return true;
     }
-    if (TRANSSION_CODES.contains(input)) {
+
+    if (getOemSecretCodes(context).contains(input)) {
       String secretCode = input.substring(2, input.length() - 1);
       TelephonyManagerCompat.handleSecretCode(context, secretCode);
       return true;
@@ -181,6 +174,18 @@
   }
 
   /**
+   * Get the OEM codes from the config provider. The config provider should be aware of the device
+   * and manufacturer.
+   */
+  private static ImmutableSet<String> getOemSecretCodes(Context context) {
+    String csv = ConfigProviderBindings.get(context).getString(CONFIG_OEM_MMI_CODES_CSV, null);
+    if (TextUtils.isEmpty(csv)) {
+      return ImmutableSet.of();
+    }
+    return ImmutableSet.copyOf(csv.split(","));
+  }
+
+  /**
    * Handle ADN requests by filling in the SIM contact number into the requested EditText.
    *
    * <p>This code works alongside the Asynchronous query handler {@link QueryHandler} and query