Merge "Expose ApnSetting#TYPE_*_STRING constants"

This commit is contained in:
Hall Liu
2021-03-02 23:20:15 +00:00
committed by Gerrit Code Review
3 changed files with 141 additions and 18 deletions

View File

@@ -10392,6 +10392,24 @@ package android.telephony.cdma {
package android.telephony.data {
public class ApnSetting implements android.os.Parcelable {
method public static int getApnTypeInt(@NonNull String);
method @NonNull public static String getApnTypeString(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();

View File

@@ -77,6 +77,7 @@ import android.telephony.TelephonyManager;
import android.telephony.data.ApnSetting;
import android.telephony.emergency.EmergencyNumber;
import android.telephony.ims.ImsReasonInfo;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.LocalLog;
@@ -2656,12 +2657,33 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
TelephonyUtils.dataStateToString(pdcs.getState()));
intent.putExtra(PHONE_CONSTANTS_DATA_APN_KEY, pdcs.getApnSetting().getApnName());
intent.putExtra(PHONE_CONSTANTS_DATA_APN_TYPE_KEY,
ApnSetting.getApnTypesStringFromBitmask(pdcs.getApnSetting().getApnTypeBitmask()));
getApnTypesStringFromBitmask(pdcs.getApnSetting().getApnTypeBitmask()));
intent.putExtra(PHONE_CONSTANTS_SLOT_KEY, slotIndex);
intent.putExtra(PHONE_CONSTANTS_SUBSCRIPTION_KEY, subId);
mContext.sendBroadcastAsUser(intent, UserHandle.ALL, Manifest.permission.READ_PHONE_STATE);
}
/**
* Reimplementation of {@link ApnSetting#getApnTypesStringFromBitmask}.
*/
@VisibleForTesting
public static String getApnTypesStringFromBitmask(int apnTypeBitmask) {
List<String> types = new ArrayList<>();
int remainingApnTypes = apnTypeBitmask;
// special case for DEFAULT since it's not a pure bit
if ((remainingApnTypes & ApnSetting.TYPE_DEFAULT) == ApnSetting.TYPE_DEFAULT) {
types.add(ApnSetting.TYPE_DEFAULT_STRING);
remainingApnTypes &= ~ApnSetting.TYPE_DEFAULT;
}
while (remainingApnTypes != 0) {
int highestApnTypeBit = Integer.highestOneBit(remainingApnTypes);
String apnString = ApnSetting.getApnTypeString(highestApnTypeBit);
if (!TextUtils.isEmpty(apnString)) types.add(apnString);
remainingApnTypes &= ~highestApnTypeBit;
}
return TextUtils.join(",", types);
}
private void enforceNotifyPermissionOrCarrierPrivilege(String method) {
if (checkNotifyPermission()) {
return;

View File

@@ -18,6 +18,8 @@ package android.telephony.data;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.StringDef;
import android.annotation.SystemApi;
import android.content.ContentValues;
import android.database.Cursor;
import android.hardware.radio.V1_5.ApnTypes;
@@ -26,6 +28,7 @@ import android.os.Parcel;
import android.os.Parcelable;
import android.provider.Telephony;
import android.provider.Telephony.Carriers;
import android.telephony.Annotation;
import android.telephony.Annotation.ApnType;
import android.telephony.Annotation.NetworkType;
import android.telephony.ServiceState;
@@ -133,6 +136,25 @@ public class ApnSetting implements Parcelable {
@Retention(RetentionPolicy.SOURCE)
public @interface Skip464XlatStatus {}
/** @hide */
@StringDef(value = {
TYPE_ALL_STRING,
TYPE_CBS_STRING,
TYPE_DEFAULT_STRING,
TYPE_DUN_STRING,
TYPE_EMERGENCY_STRING,
TYPE_FOTA_STRING,
TYPE_HIPRI_STRING,
TYPE_IA_STRING,
TYPE_IMS_STRING,
TYPE_MCX_STRING,
TYPE_MMS_STRING,
TYPE_SUPL_STRING,
TYPE_XCAP_STRING,
}, prefix = "TYPE_", suffix = "_STRING")
@Retention(RetentionPolicy.SOURCE)
public @interface ApnTypeString {}
/**
* 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
@@ -140,99 +162,133 @@ public class ApnSetting implements Parcelable {
* 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
*
* Note: String representations of APN types are intended for system apps to communicate with
* modem components or carriers. Non-system apps should use the integer variants instead.
* @hide
*/
@SystemApi
public static final String TYPE_DEFAULT_STRING = "default";
/**
* APN type for MMS traffic
* APN type for MMS (Multimedia Messaging Service) traffic.
*
* Note: String representations of APN types are intended for system apps to communicate with
* modem components or carriers. Non-system apps should use the integer variants instead.
* @hide
*/
@SystemApi
public static final String TYPE_MMS_STRING = "mms";
/**
* APN type for SUPL assisted GPS
* APN type for SUPL (Secure User Plane Location) assisted GPS.
*
* Note: String representations of APN types are intended for system apps to communicate with
* modem components or carriers. Non-system apps should use the integer variants instead.
* @hide
*/
@SystemApi
public static final String TYPE_SUPL_STRING = "supl";
/**
* APN type for DUN traffic
* APN type for DUN (Dial-up networking) traffic
*
* Note: String representations of APN types are intended for system apps to communicate with
* modem components or carriers. Non-system apps should use the integer variants instead.
* @hide
*/
@SystemApi
public static final String TYPE_DUN_STRING = "dun";
/**
* APN type for HiPri traffic
* APN type for high-priority traffic
*
* Note: String representations of APN types are intended for system apps to communicate with
* modem components or carriers. Non-system apps should use the integer variants instead.
* @hide
*/
@SystemApi
public static final String TYPE_HIPRI_STRING = "hipri";
/**
* APN type for FOTA
* APN type for FOTA (Firmware over-the-air) traffic.
*
* Note: String representations of APN types are intended for system apps to communicate with
* modem components or carriers. Non-system apps should use the integer variants instead.
* @hide
*/
@SystemApi
public static final String TYPE_FOTA_STRING = "fota";
/**
* APN type for IMS
* APN type for IMS (IP Multimedia Subsystem) traffic.
*
* Note: String representations of APN types are intended for system apps to communicate with
* modem components or carriers. Non-system apps should use the integer variants instead.
* @hide
*/
@SystemApi
public static final String TYPE_IMS_STRING = "ims";
/**
* APN type for CBS
* APN type for CBS (Carrier Branded Services) traffic.
*
* Note: String representations of APN types are intended for system apps to communicate with
* modem components or carriers. Non-system apps should use the integer variants instead.
* @hide
*/
@SystemApi
public static final String TYPE_CBS_STRING = "cbs";
/**
* APN type for IA Initial Attach APN
* APN type for the IA (Initial Attach) APN
*
* Note: String representations of APN types are intended for system apps to communicate with
* modem components or carriers. Non-system apps should use the integer variants instead.
* @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.
*
* Note: String representations of APN types are intended for system apps to communicate with
* modem components or carriers. Non-system apps should use the integer variants instead.
* @hide
*/
@SystemApi
public static final String TYPE_EMERGENCY_STRING = "emergency";
/**
* APN type for Mission Critical Services
* APN type for Mission Critical Services.
*
* Note: String representations of APN types are intended for system apps to communicate with
* modem components or carriers. Non-system apps should use the integer variants instead.
* @hide
*/
@SystemApi
public static final String TYPE_MCX_STRING = "mcx";
/**
* APN type for XCAP
* APN type for XCAP (XML Configuration Access Protocol) traffic.
*
* Note: String representations of APN types are intended for system apps to communicate with
* modem components or carriers. Non-system apps should use the integer variants instead.
* @hide
*/
@SystemApi
public static final String TYPE_XCAP_STRING = "xcap";
@@ -1426,16 +1482,43 @@ public class ApnSetting implements Parcelable {
}
/**
* @param apnType APN type
* @return APN type in string format
* Converts the integer representation of APN type to its string representation.
*
* @param apnType APN type as an integer
* @return String representation of the APN type, or an empty string if the provided integer is
* not a valid APN type.
* @hide
*/
public static String getApnTypeString(int apnType) {
@SystemApi
public static @NonNull @ApnTypeString String getApnTypeString(@Annotation.ApnType int apnType) {
if (apnType == TYPE_ALL) {
return "*";
}
String apnTypeString = APN_TYPE_INT_MAP.get(apnType);
return apnTypeString == null ? "Unknown" : apnTypeString;
return apnTypeString == null ? "" : apnTypeString;
}
/**
* Same as {@link #getApnTypeString(int)}, but returns "Unknown" instead of an empty string
* when provided with an invalid int for compatibility purposes.
* @hide
*/
public static @NonNull String getApnTypeStringInternal(@Annotation.ApnType int apnType) {
String result = getApnTypeString(apnType);
return TextUtils.isEmpty(result) ? "Unknown" : result;
}
/**
* Converts the string representation of an APN type to its integer representation.
*
* @param apnType APN type as a string
* @return Integer representation of the APN type, or 0 if the provided string is not a valid
* APN type.
* @hide
*/
@SystemApi
public static @Annotation.ApnType int getApnTypeInt(@NonNull @ApnTypeString String apnType) {
return APN_TYPE_STRING_MAP.getOrDefault(apnType.toLowerCase(), 0);
}
/**