Make string version of APN_TYPEs a @SystemApi
The string version of Apn Types are used in the carrier config table.
Modules besides Telephony uses this table directly and so it made sense to expose
this as a @SystemApi
Test: ApnSettingsTest
Bug: 147465477
Change-Id: I1c344b3ff482d973b8bf51a33956a7f90f291634
diff --git a/api/system-current.txt b/api/system-current.txt
index e532a3a..3d00ad3 100755
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -10902,6 +10902,23 @@
package android.telephony.data {
+ public class ApnSetting implements android.os.Parcelable {
+ method @NonNull public static String getApnTypesStringFromBitmask(int);
+ field public static final String TYPE_ALL_STRING = "*";
+ field public static final String TYPE_CBS_STRING = "cbs";
+ field public static final String TYPE_DEFAULT_STRING = "default";
+ field public static final String TYPE_DUN_STRING = "dun";
+ field public static final String TYPE_EMERGENCY_STRING = "emergency";
+ field public static final String TYPE_FOTA_STRING = "fota";
+ field public static final String TYPE_HIPRI_STRING = "hipri";
+ field public static final String TYPE_IA_STRING = "ia";
+ field public static final String TYPE_IMS_STRING = "ims";
+ field public static final String TYPE_MCX_STRING = "mcx";
+ field public static final String TYPE_MMS_STRING = "mms";
+ field public static final String TYPE_SUPL_STRING = "supl";
+ field public static final String TYPE_XCAP_STRING = "xcap";
+ }
+
public final class DataCallResponse implements android.os.Parcelable {
method public int describeContents();
method @NonNull public java.util.List<android.net.LinkAddress> getAddresses();
diff --git a/services/core/java/com/android/server/TelephonyRegistry.java b/services/core/java/com/android/server/TelephonyRegistry.java
index 4f03a8e..7324d97 100644
--- a/services/core/java/com/android/server/TelephonyRegistry.java
+++ b/services/core/java/com/android/server/TelephonyRegistry.java
@@ -2413,43 +2413,12 @@
Intent intent = new Intent(ACTION_ANY_DATA_CONNECTION_STATE_CHANGED);
intent.putExtra(PHONE_CONSTANTS_STATE_KEY, dataStateToString(state));
intent.putExtra(PHONE_CONSTANTS_DATA_APN_KEY, apn);
- intent.putExtra(PHONE_CONSTANTS_DATA_APN_TYPE_KEY, getApnTypesStringFromBitmask(apnType));
+ intent.putExtra(PHONE_CONSTANTS_DATA_APN_TYPE_KEY,
+ ApnSetting.getApnTypesStringFromBitmask(apnType));
intent.putExtra(PHONE_CONSTANTS_SUBSCRIPTION_KEY, subId);
mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);
}
- private static final Map<Integer, String> APN_TYPE_INT_MAP;
- static {
- APN_TYPE_INT_MAP = new android.util.ArrayMap<Integer, String>();
- APN_TYPE_INT_MAP.put(ApnSetting.TYPE_DEFAULT, "default");
- APN_TYPE_INT_MAP.put(ApnSetting.TYPE_MMS, "mms");
- APN_TYPE_INT_MAP.put(ApnSetting.TYPE_SUPL, "supl");
- APN_TYPE_INT_MAP.put(ApnSetting.TYPE_DUN, "dun");
- APN_TYPE_INT_MAP.put(ApnSetting.TYPE_HIPRI, "hipri");
- APN_TYPE_INT_MAP.put(ApnSetting.TYPE_FOTA, "fota");
- APN_TYPE_INT_MAP.put(ApnSetting.TYPE_IMS, "ims");
- APN_TYPE_INT_MAP.put(ApnSetting.TYPE_CBS, "cbs");
- APN_TYPE_INT_MAP.put(ApnSetting.TYPE_IA, "ia");
- APN_TYPE_INT_MAP.put(ApnSetting.TYPE_EMERGENCY, "emergency");
- APN_TYPE_INT_MAP.put(ApnSetting.TYPE_MCX, "mcx");
- APN_TYPE_INT_MAP.put(ApnSetting.TYPE_XCAP, "xcap");
- }
-
- /**
- * Copy of ApnSetting#getApnTypesStringFromBitmask for legacy broadcast.
- * @param apnTypeBitmask bitmask of APN types.
- * @return comma delimited list of APN types.
- */
- private static String getApnTypesStringFromBitmask(int apnTypeBitmask) {
- List<String> types = new ArrayList<>();
- for (Integer type : APN_TYPE_INT_MAP.keySet()) {
- if ((apnTypeBitmask & type) == type) {
- types.add(APN_TYPE_INT_MAP.get(type));
- }
- }
- return android.text.TextUtils.join(",", types);
- }
-
private void enforceNotifyPermissionOrCarrierPrivilege(String method) {
if (checkNotifyPermission()) {
return;
diff --git a/telephony/java/android/telephony/data/ApnSetting.java b/telephony/java/android/telephony/data/ApnSetting.java
index fab1bf2..6e630e3 100644
--- a/telephony/java/android/telephony/data/ApnSetting.java
+++ b/telephony/java/android/telephony/data/ApnSetting.java
@@ -18,6 +18,7 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.SystemApi;
import android.content.ContentValues;
import android.database.Cursor;
import android.hardware.radio.V1_5.ApnTypes;
@@ -28,13 +29,14 @@
import android.provider.Telephony.Carriers;
import android.telephony.Annotation.ApnType;
import android.telephony.Annotation.NetworkType;
-import com.android.telephony.Rlog;
import android.telephony.ServiceState;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.Log;
+import com.android.telephony.Rlog;
+
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.net.InetAddress;
@@ -123,6 +125,122 @@
/** Authentication type for PAP or CHAP. */
public static final int AUTH_TYPE_PAP_OR_CHAP = 3;
+ /**
+ * APN types for data connections. These are usage categories for an APN
+ * entry. One APN entry may support multiple APN types, eg, a single APN
+ * may service regular internet traffic ("default") as well as MMS-specific
+ * connections.<br/>
+ * APN_TYPE_ALL is a special type to indicate that this APN entry can
+ * service all data connections.
+ * <p>
+ * Note: The goal is to deprecate this. Due to the Carrier Table being used
+ * directly, this isn't feasible right now.
+ *
+ * @hide
+ */
+ @SystemApi
+ public static final String TYPE_ALL_STRING = "*";
+
+ /**
+ * APN type for default data traffic
+ *
+ * @hide
+ */
+ @SystemApi
+ public static final String TYPE_DEFAULT_STRING = "default";
+
+
+ /**
+ * APN type for MMS traffic
+ *
+ * @hide
+ */
+ @SystemApi
+ public static final String TYPE_MMS_STRING = "mms";
+
+
+ /**
+ * APN type for SUPL assisted GPS
+ *
+ * @hide
+ */
+ @SystemApi
+ public static final String TYPE_SUPL_STRING = "supl";
+
+ /**
+ * APN type for DUN traffic
+ *
+ * @hide
+ */
+ @SystemApi
+ public static final String TYPE_DUN_STRING = "dun";
+
+ /**
+ * APN type for HiPri traffic
+ *
+ * @hide
+ */
+ @SystemApi
+ public static final String TYPE_HIPRI_STRING = "hipri";
+
+ /**
+ * APN type for FOTA
+ *
+ * @hide
+ */
+ @SystemApi
+ public static final String TYPE_FOTA_STRING = "fota";
+
+ /**
+ * APN type for IMS
+ *
+ * @hide
+ */
+ @SystemApi
+ public static final String TYPE_IMS_STRING = "ims";
+
+ /**
+ * APN type for CBS
+ *
+ * @hide
+ */
+ @SystemApi
+ public static final String TYPE_CBS_STRING = "cbs";
+
+ /**
+ * APN type for IA Initial Attach APN
+ *
+ * @hide
+ */
+ @SystemApi
+ public static final String TYPE_IA_STRING = "ia";
+
+ /**
+ * APN type for Emergency PDN. This is not an IA apn, but is used
+ * for access to carrier services in an emergency call situation.
+ *
+ * @hide
+ */
+ @SystemApi
+ public static final String TYPE_EMERGENCY_STRING = "emergency";
+
+ /**
+ * APN type for Mission Critical Services
+ *
+ * @hide
+ */
+ @SystemApi
+ public static final String TYPE_MCX_STRING = "mcx";
+
+ /**
+ * APN type for XCAP
+ *
+ * @hide
+ */
+ @SystemApi
+ public static final String TYPE_XCAP_STRING = "xcap";
+
+
/** @hide */
@IntDef(prefix = { "AUTH_TYPE_" }, value = {
AUTH_TYPE_NONE,
@@ -1289,10 +1407,13 @@
}
/**
+ * Converts the integer value of an APN type to the string version.
* @param apnTypeBitmask bitmask of APN types.
* @return comma delimited list of APN types.
* @hide
*/
+ @SystemApi
+ @NonNull
public static String getApnTypesStringFromBitmask(int apnTypeBitmask) {
List<String> types = new ArrayList<>();
for (Integer type : APN_TYPE_INT_MAP.keySet()) {
diff --git a/telephony/java/com/android/internal/telephony/PhoneConstants.java b/telephony/java/com/android/internal/telephony/PhoneConstants.java
index db8c845..4d67754 100644
--- a/telephony/java/com/android/internal/telephony/PhoneConstants.java
+++ b/telephony/java/com/android/internal/telephony/PhoneConstants.java
@@ -16,6 +16,7 @@
package com.android.internal.telephony;
import android.compat.annotation.UnsupportedAppUsage;
+import android.telephony.data.ApnSetting;
/**
* @hide
@@ -125,32 +126,32 @@
* APN_TYPE_ALL is a special type to indicate that this APN entry can
* service all data connections.
*/
- public static final String APN_TYPE_ALL = "*";
+ public static final String APN_TYPE_ALL = ApnSetting.TYPE_ALL_STRING;
/** APN type for default data traffic */
- public static final String APN_TYPE_DEFAULT = "default";
+ public static final String APN_TYPE_DEFAULT = ApnSetting.TYPE_DEFAULT_STRING;
/** APN type for MMS traffic */
- public static final String APN_TYPE_MMS = "mms";
+ public static final String APN_TYPE_MMS = ApnSetting.TYPE_MMS_STRING;
/** APN type for SUPL assisted GPS */
- public static final String APN_TYPE_SUPL = "supl";
+ public static final String APN_TYPE_SUPL = ApnSetting.TYPE_SUPL_STRING;
/** APN type for DUN traffic */
- public static final String APN_TYPE_DUN = "dun";
+ public static final String APN_TYPE_DUN = ApnSetting.TYPE_DUN_STRING;
/** APN type for HiPri traffic */
- public static final String APN_TYPE_HIPRI = "hipri";
+ public static final String APN_TYPE_HIPRI = ApnSetting.TYPE_HIPRI_STRING;
/** APN type for FOTA */
- public static final String APN_TYPE_FOTA = "fota";
+ public static final String APN_TYPE_FOTA = ApnSetting.TYPE_FOTA_STRING;
/** APN type for IMS */
- public static final String APN_TYPE_IMS = "ims";
+ public static final String APN_TYPE_IMS = ApnSetting.TYPE_IMS_STRING;
/** APN type for CBS */
- public static final String APN_TYPE_CBS = "cbs";
+ public static final String APN_TYPE_CBS = ApnSetting.TYPE_CBS_STRING;
/** APN type for IA Initial Attach APN */
- public static final String APN_TYPE_IA = "ia";
+ public static final String APN_TYPE_IA = ApnSetting.TYPE_IA_STRING;
/** APN type for Emergency PDN. This is not an IA apn, but is used
* for access to carrier services in an emergency call situation. */
- public static final String APN_TYPE_EMERGENCY = "emergency";
+ public static final String APN_TYPE_EMERGENCY = ApnSetting.TYPE_EMERGENCY_STRING;
/** APN type for Mission Critical Services */
- public static final String APN_TYPE_MCX = "mcx";
+ public static final String APN_TYPE_MCX = ApnSetting.TYPE_MCX_STRING;
/** APN type for XCAP */
- public static final String APN_TYPE_XCAP = "xcap";
+ public static final String APN_TYPE_XCAP = ApnSetting.TYPE_XCAP_STRING;
/** Array of all APN types */
public static final String[] APN_TYPES = {APN_TYPE_DEFAULT,
APN_TYPE_MMS,