summaryrefslogtreecommitdiff
path: root/java/com/android/contacts/common/compat/TelephonyManagerCompat.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/android/contacts/common/compat/TelephonyManagerCompat.java')
-rw-r--r--java/com/android/contacts/common/compat/TelephonyManagerCompat.java23
1 files changed, 23 insertions, 0 deletions
diff --git a/java/com/android/contacts/common/compat/TelephonyManagerCompat.java b/java/com/android/contacts/common/compat/TelephonyManagerCompat.java
index c8665af51..84002256a 100644
--- a/java/com/android/contacts/common/compat/TelephonyManagerCompat.java
+++ b/java/com/android/contacts/common/compat/TelephonyManagerCompat.java
@@ -16,10 +16,13 @@
package com.android.contacts.common.compat;
+import android.content.Context;
+import android.content.Intent;
import android.net.Uri;
import android.os.Build.VERSION;
import android.os.Build.VERSION_CODES;
import android.support.annotation.Nullable;
+import android.support.v4.os.BuildCompat;
import android.telecom.PhoneAccountHandle;
import android.telephony.TelephonyManager;
import com.android.dialer.common.Assert;
@@ -40,6 +43,8 @@ public class TelephonyManagerCompat {
public static final String TELEPHONY_MANAGER_CLASS = "android.telephony.TelephonyManager";
+ private static final String SECRET_CODE_ACTION = "android.provider.Telephony.SECRET_CODE";
+
/**
* @param telephonyManager The telephony manager instance to use for method calls.
* @return true if the current device is "voice capable".
@@ -210,4 +215,22 @@ public class TelephonyManagerCompat {
}
return false;
}
+
+ /**
+ * Handles secret codes to launch arbitrary activities.
+ *
+ * @param context the context to use
+ * @param secretCode the secret code without the "*#*#" prefix and "#*#*" suffix
+ */
+ public static void handleSecretCode(Context context, String secretCode) {
+ // Must use system service on O+ to avoid using broadcasts, which are not allowed on O+.
+ if (BuildCompat.isAtLeastO()) {
+ context.getSystemService(TelephonyManager.class).sendDialerSpecialCode(secretCode);
+ } else {
+ // System service call is not supported pre-O, so must use a broadcast for N-.
+ Intent intent =
+ new Intent(SECRET_CODE_ACTION, Uri.parse("android_secret_code://" + secretCode));
+ context.sendBroadcast(intent);
+ }
+ }
}