Merge "Import translations. DO NOT MERGE"
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index d7e18ba..b2adf00 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -2203,6 +2203,21 @@
     }
 
     /**
+     * Send the dialer code if called from the current default dialer or the caller has
+     * carrier privilege.
+     * @param inputCode The dialer code to send
+     */
+    @Override
+    public void sendDialerSpecialCode(String callingPackage, String inputCode) {
+        mAppOps.checkPackage(Binder.getCallingUid(), callingPackage);
+        String defaultDialer = TelecomManager.from(mPhone.getContext()).getDefaultDialerPackage();
+        if (!TextUtils.equals(callingPackage, defaultDialer)) {
+            enforceCarrierPrivilege(getDefaultSubscription());
+        }
+        mPhone.sendDialerSpecialCode(inputCode);
+    }
+
+    /**
      * Returns the data network type.
      * Legacy call, permission-free.
      *
diff --git a/src/com/android/phone/SpecialCharSequenceMgr.java b/src/com/android/phone/SpecialCharSequenceMgr.java
index 2aa1043..3c02a30 100644
--- a/src/com/android/phone/SpecialCharSequenceMgr.java
+++ b/src/com/android/phone/SpecialCharSequenceMgr.java
@@ -151,8 +151,14 @@
      * @return true if a secret code was encountered and intent is sent out
      */
     static private boolean handleSecretCode(String input) {
-        Phone phone = PhoneGlobals.getPhone();
-        return phone.sendDialerCode(input);
+        // Secret codes are in the form *#*#<code>#*#*
+        int len = input.length();
+        if (len > 8 && input.startsWith("*#*#") && input.endsWith("#*#*")) {
+            final Phone phone = PhoneGlobals.getPhone();
+            phone.sendDialerSpecialCode(input.substring(4, len - 4));
+            return true;
+        }
+        return false;
     }
 
     static private boolean handleAdnEntry(Context context, String input) {