Merge changes from topics "data_retry", "setup_data"
* changes: Added data retry support Added setup/tear down data support
This commit is contained in:
@@ -3583,6 +3583,23 @@ public final class Telephony {
|
|||||||
public static final Uri ENFORCE_MANAGED_URI = Uri.parse(
|
public static final Uri ENFORCE_MANAGED_URI = Uri.parse(
|
||||||
"content://telephony/carriers/enforce_managed");
|
"content://telephony/carriers/enforce_managed");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The {@code content://} style URL for the perferred APN used for internet.
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final Uri PREFERRED_APN_URI = Uri.parse(
|
||||||
|
"content://telephony/carriers/preferapn/subId/");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The {@code content://} style URL for the perferred APN set id.
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final Uri PREFERRED_APN_SET_URI = Uri.parse(
|
||||||
|
"content://telephony/carriers/preferapnset/subId/");
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The column name for ENFORCE_MANAGED_URI, indicates whether DPC-owned APNs are enforced.
|
* The column name for ENFORCE_MANAGED_URI, indicates whether DPC-owned APNs are enforced.
|
||||||
* @hide
|
* @hide
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
package android.telephony;
|
package android.telephony;
|
||||||
|
|
||||||
import android.annotation.IntDef;
|
import android.annotation.IntDef;
|
||||||
|
import android.net.NetworkAgent;
|
||||||
|
import android.net.NetworkCapabilities;
|
||||||
import android.telecom.Connection;
|
import android.telecom.Connection;
|
||||||
import android.telephony.data.ApnSetting;
|
import android.telephony.data.ApnSetting;
|
||||||
|
|
||||||
@@ -664,4 +666,59 @@ public class Annotation {
|
|||||||
TelephonyManager.THERMAL_MITIGATION_RESULT_INVALID_STATE,
|
TelephonyManager.THERMAL_MITIGATION_RESULT_INVALID_STATE,
|
||||||
TelephonyManager.THERMAL_MITIGATION_RESULT_UNKNOWN_ERROR})
|
TelephonyManager.THERMAL_MITIGATION_RESULT_UNKNOWN_ERROR})
|
||||||
public @interface ThermalMitigationResult {}
|
public @interface ThermalMitigationResult {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Per Android API guideline 8.15, annotation can't be public APIs. So duplicate
|
||||||
|
* android.net.NetworkCapabilities.NetCapability here. Must update here when new capabilities
|
||||||
|
* are added in {@link NetworkCapabilities}.
|
||||||
|
*/
|
||||||
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
|
@IntDef(prefix = { "NET_CAPABILITY_" }, value = {
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_MMS,
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_SUPL,
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_DUN,
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_FOTA,
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_IMS,
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_CBS,
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_WIFI_P2P,
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_IA,
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_RCS,
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_XCAP,
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_EIMS,
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_NOT_METERED,
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_INTERNET,
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED,
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_TRUSTED,
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_NOT_VPN,
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_VALIDATED,
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL,
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING,
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_FOREGROUND,
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_NOT_CONGESTED,
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_NOT_SUSPENDED,
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_OEM_PAID,
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_MCX,
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_PARTIAL_CONNECTIVITY,
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_TEMPORARILY_NOT_METERED,
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_OEM_PRIVATE,
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_VEHICLE_INTERNAL,
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_NOT_VCN_MANAGED,
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_ENTERPRISE,
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_VSIM,
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_BIP,
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_HEAD_UNIT,
|
||||||
|
})
|
||||||
|
public @interface NetCapability { }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Per Android API guideline 8.15, annotation can't be public APIs. So duplicate
|
||||||
|
* android.net.NetworkAgent.ValidationStatus here. Must update here when new validation status
|
||||||
|
* are added in {@link NetworkAgent}.
|
||||||
|
*/
|
||||||
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
|
@IntDef(prefix = { "VALIDATION_STATUS_" }, value = {
|
||||||
|
NetworkAgent.VALIDATION_STATUS_VALID,
|
||||||
|
NetworkAgent.VALIDATION_STATUS_NOT_VALID
|
||||||
|
})
|
||||||
|
public @interface ValidationStatus {}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5465,13 +5465,11 @@ public class CarrierConfigManager {
|
|||||||
public static final String KEY_APN_PRIORITY_STRING_ARRAY = "apn_priority_string_array";
|
public static final String KEY_APN_PRIORITY_STRING_ARRAY = "apn_priority_string_array";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Network capability priority for determine the satisfy order in telephony. This is used when
|
* Network capability priority for determine the satisfy order in telephony. The priority is
|
||||||
* the network only allows single PDN. The priority is from the lowest 0 to the highest 100.
|
* from the lowest 0 to the highest 100. The long-lived network shall have the lowest priority.
|
||||||
* The long-lived network request usually has the lowest priority. This allows other short-lived
|
* This allows other short-lived requests like MMS requests to be established. Emergency request
|
||||||
* requests like MMS requests to be established. Emergency request always has the highest
|
* always has the highest priority.
|
||||||
* priority.
|
|
||||||
*
|
*
|
||||||
* // TODO: Remove KEY_APN_PRIORITY_STRING_ARRAY
|
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
public static final String KEY_TELEPHONY_NETWORK_CAPABILITY_PRIORITIES_STRING_ARRAY =
|
public static final String KEY_TELEPHONY_NETWORK_CAPABILITY_PRIORITIES_STRING_ARRAY =
|
||||||
@@ -5481,17 +5479,17 @@ public class CarrierConfigManager {
|
|||||||
* Defines the rules for data retry.
|
* Defines the rules for data retry.
|
||||||
*
|
*
|
||||||
* The syntax of the retry rule:
|
* The syntax of the retry rule:
|
||||||
* 1. Retry based on {@link NetworkCapabilities}
|
* 1. Retry based on {@link NetworkCapabilities}. Note that only APN-type network capabilities
|
||||||
* "capabilities=[netCaps1|netCaps2|...], [retry_interval=x], [backoff=[true|false]],
|
* are supported.
|
||||||
* [maximum_retries=y]"
|
* "capabilities=[netCaps1|netCaps2|...], [retry_interval=n1|n2|n3|n4...], [maximum_retries=n]"
|
||||||
*
|
*
|
||||||
* 2. Retry based on {@link DataFailCause}
|
* 2. Retry based on {@link DataFailCause}
|
||||||
* "fail_causes=[cause1|cause2|cause3|...], [retry_interval=x], [backoff=[true|false]],
|
* "fail_causes=[cause1|cause2|cause3|..], [retry_interval=n1|n2|n3|n4...], [maximum_retries=n]"
|
||||||
* [maximum_retries=y]"
|
|
||||||
*
|
*
|
||||||
* 3. Retry based on {@link NetworkCapabilities} and {@link DataFailCause}
|
* 3. Retry based on {@link NetworkCapabilities} and {@link DataFailCause}. Note that only
|
||||||
|
* APN-type network capabilities are supported.
|
||||||
* "capabilities=[netCaps1|netCaps2|...], fail_causes=[cause1|cause2|cause3|...],
|
* "capabilities=[netCaps1|netCaps2|...], fail_causes=[cause1|cause2|cause3|...],
|
||||||
* [retry_interval=x], [backoff=[true|false]], [maximum_retries=y]"
|
* [retry_interval=n1|n2|n3|n4...], [maximum_retries=n]"
|
||||||
*
|
*
|
||||||
* For example,
|
* For example,
|
||||||
* "capabilities=eims, retry_interval=1000, maximum_retries=20" means if the attached
|
* "capabilities=eims, retry_interval=1000, maximum_retries=20" means if the attached
|
||||||
@@ -5500,7 +5498,12 @@ public class CarrierConfigManager {
|
|||||||
*
|
*
|
||||||
* "fail_causes=8|27|28|29|30|32|33|35|50|51|111|-5|-6|65537|65538|-3|2253|2254
|
* "fail_causes=8|27|28|29|30|32|33|35|50|51|111|-5|-6|65537|65538|-3|2253|2254
|
||||||
* , maximum_retries=0" means for those fail causes, never retry with timers. Note that
|
* , maximum_retries=0" means for those fail causes, never retry with timers. Note that
|
||||||
* when environment changes, retry can still happens.
|
* when environment changes, retry can still happen.
|
||||||
|
*
|
||||||
|
* "capabilities=internet|enterprise|dun|ims|fota, retry_interval=2500|3000|"
|
||||||
|
* "5000|10000|15000|20000|40000|60000|120000|240000|600000|1200000|1800000"
|
||||||
|
* "1800000, maximum_retries=20" means for those capabilities, retry happens in 2.5s, 3s, 5s,
|
||||||
|
* 10s, 15s, 20s, 40s, 1m, 2m, 4m, 10m, 20m, 30m, 30m, 30m, until reaching 20 retries.
|
||||||
*
|
*
|
||||||
* // TODO: remove KEY_CARRIER_DATA_CALL_RETRY_CONFIG_STRINGS
|
* // TODO: remove KEY_CARRIER_DATA_CALL_RETRY_CONFIG_STRINGS
|
||||||
* @hide
|
* @hide
|
||||||
@@ -6276,6 +6279,9 @@ public class CarrierConfigManager {
|
|||||||
"enterprise:0", "default:1", "mms:2", "supl:2", "dun:2", "hipri:3", "fota:2",
|
"enterprise:0", "default:1", "mms:2", "supl:2", "dun:2", "hipri:3", "fota:2",
|
||||||
"ims:2", "cbs:2", "ia:2", "emergency:2", "mcx:3", "xcap:3"
|
"ims:2", "cbs:2", "ia:2", "emergency:2", "mcx:3", "xcap:3"
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Do not modify the priority unless you know what you are doing. This will have significant
|
||||||
|
// impacts on the order of data network setup.
|
||||||
sDefaults.putStringArray(
|
sDefaults.putStringArray(
|
||||||
KEY_TELEPHONY_NETWORK_CAPABILITY_PRIORITIES_STRING_ARRAY, new String[] {
|
KEY_TELEPHONY_NETWORK_CAPABILITY_PRIORITIES_STRING_ARRAY, new String[] {
|
||||||
"eims:90", "supl:80", "mms:70", "xcap:70", "cbs:50", "mcx:50", "fota:50",
|
"eims:90", "supl:80", "mms:70", "xcap:70", "cbs:50", "mcx:50", "fota:50",
|
||||||
@@ -6286,9 +6292,10 @@ public class CarrierConfigManager {
|
|||||||
"capabilities=eims, retry_interval=1000, maximum_retries=20",
|
"capabilities=eims, retry_interval=1000, maximum_retries=20",
|
||||||
"fail_causes=8|27|28|29|30|32|33|35|50|51|111|-5|-6|65537|65538|-3|2253|"
|
"fail_causes=8|27|28|29|30|32|33|35|50|51|111|-5|-6|65537|65538|-3|2253|"
|
||||||
+ "2254, maximum_retries=0", // No retry for those causes
|
+ "2254, maximum_retries=0", // No retry for those causes
|
||||||
"capabilities=internet|enterprise|dun|ims|fota, retry_interval=2000, "
|
"capabilities=mms|supl|cbs, retry_interval=2000",
|
||||||
+ "backoff=true, maximum_retries=13",
|
"capabilities=internet|enterprise|dun|ims|fota, retry_interval=2500|3000|"
|
||||||
"capabilities=mms|supl|cbs, retry_interval=2000"
|
+ "5000|10000|15000|20000|40000|60000|120000|240000|"
|
||||||
|
+ "600000|1200000|1800000, maximum_retries=20"
|
||||||
});
|
});
|
||||||
sDefaults.putStringArray(KEY_MISSED_INCOMING_CALL_SMS_PATTERN_STRING_ARRAY, new String[0]);
|
sDefaults.putStringArray(KEY_MISSED_INCOMING_CALL_SMS_PATTERN_STRING_ARRAY, new String[0]);
|
||||||
sDefaults.putBoolean(KEY_DISABLE_DUN_APN_WHILE_ROAMING_WITH_PRESET_APN_BOOL, false);
|
sDefaults.putBoolean(KEY_DISABLE_DUN_APN_WHILE_ROAMING_WITH_PRESET_APN_BOOL, false);
|
||||||
|
|||||||
@@ -1076,6 +1076,13 @@ public final class DataFailCause {
|
|||||||
*/
|
*/
|
||||||
public static final int SERVICE_TEMPORARILY_UNAVAILABLE = 0x10009;
|
public static final int SERVICE_TEMPORARILY_UNAVAILABLE = 0x10009;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The request is not supported by the vendor.
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final int REQUEST_NOT_SUPPORTED = 0x1000A;
|
||||||
|
|
||||||
private static final Map<Integer, String> sFailCauseMap;
|
private static final Map<Integer, String> sFailCauseMap;
|
||||||
static {
|
static {
|
||||||
sFailCauseMap = new HashMap<>();
|
sFailCauseMap = new HashMap<>();
|
||||||
|
|||||||
@@ -18,13 +18,16 @@ package android.telephony.data;
|
|||||||
|
|
||||||
import static android.telephony.data.ApnSetting.ProtocolType;
|
import static android.telephony.data.ApnSetting.ProtocolType;
|
||||||
|
|
||||||
|
import android.annotation.ElapsedRealtimeLong;
|
||||||
import android.annotation.IntDef;
|
import android.annotation.IntDef;
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
import android.annotation.SystemApi;
|
import android.annotation.SystemApi;
|
||||||
|
import android.net.NetworkCapabilities;
|
||||||
import android.os.Parcel;
|
import android.os.Parcel;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
import android.telephony.Annotation.ApnType;
|
import android.telephony.Annotation.ApnType;
|
||||||
|
import android.telephony.Annotation.NetCapability;
|
||||||
import android.telephony.TelephonyManager;
|
import android.telephony.TelephonyManager;
|
||||||
import android.telephony.TelephonyManager.NetworkTypeBitMask;
|
import android.telephony.TelephonyManager.NetworkTypeBitMask;
|
||||||
import android.telephony.data.ApnSetting.AuthType;
|
import android.telephony.data.ApnSetting.AuthType;
|
||||||
@@ -66,7 +69,13 @@ public final class DataProfile implements Parcelable {
|
|||||||
|
|
||||||
private final @Nullable TrafficDescriptor mTrafficDescriptor;
|
private final @Nullable TrafficDescriptor mTrafficDescriptor;
|
||||||
|
|
||||||
private final boolean mPreferred;
|
private boolean mPreferred;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The last timestamp of this data profile being used for data network setup. Never add this
|
||||||
|
* to {@link #equals(Object)} and {@link #hashCode()}.
|
||||||
|
*/
|
||||||
|
private @ElapsedRealtimeLong long mSetupTimestamp;
|
||||||
|
|
||||||
private DataProfile(@NonNull Builder builder) {
|
private DataProfile(@NonNull Builder builder) {
|
||||||
mApnSetting = builder.mApnSetting;
|
mApnSetting = builder.mApnSetting;
|
||||||
@@ -99,6 +108,7 @@ public final class DataProfile implements Parcelable {
|
|||||||
mApnSetting = source.readParcelable(ApnSetting.class.getClassLoader());
|
mApnSetting = source.readParcelable(ApnSetting.class.getClassLoader());
|
||||||
mTrafficDescriptor = source.readParcelable(TrafficDescriptor.class.getClassLoader());
|
mTrafficDescriptor = source.readParcelable(TrafficDescriptor.class.getClassLoader());
|
||||||
mPreferred = source.readBoolean();
|
mPreferred = source.readBoolean();
|
||||||
|
mSetupTimestamp = source.readLong();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -290,6 +300,16 @@ public final class DataProfile implements Parcelable {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the preferred flag for the data profile.
|
||||||
|
*
|
||||||
|
* @param preferred {@code true} if this data profile is preferred for internet.
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public void setPreferred(boolean preferred) {
|
||||||
|
mPreferred = preferred;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return {@code true} if this data profile was used to bring up the last default
|
* @return {@code true} if this data profile was used to bring up the last default
|
||||||
* (i.e internet) data connection successfully, or the one chosen by the user in Settings'
|
* (i.e internet) data connection successfully, or the one chosen by the user in Settings'
|
||||||
@@ -315,6 +335,94 @@ public final class DataProfile implements Parcelable {
|
|||||||
return mTrafficDescriptor;
|
return mTrafficDescriptor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if this data profile can satisfy certain network capabilities
|
||||||
|
*
|
||||||
|
* @param networkCapabilities The network capabilities. Note that the non-APN-type capabilities
|
||||||
|
* will be ignored.
|
||||||
|
*
|
||||||
|
* @return {@code true} if this data profile can satisfy the given network capabilities.
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public boolean canSatisfy(@NonNull @NetCapability int[] networkCapabilities) {
|
||||||
|
if (mApnSetting != null) {
|
||||||
|
for (int netCap : networkCapabilities) {
|
||||||
|
if (!canSatisfy(netCap)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if this data profile can satisfy a certain network capability.
|
||||||
|
*
|
||||||
|
* @param networkCapability The network capability. Note that the non-APN-type capability
|
||||||
|
* will always be satisfied.
|
||||||
|
* @return {@code true} if this data profile can satisfy the given network capability.
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public boolean canSatisfy(@NetCapability int networkCapability) {
|
||||||
|
return mApnSetting != null && mApnSetting.canHandleType(
|
||||||
|
networkCapabilityToApnType(networkCapability));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert network capability into APN type.
|
||||||
|
*
|
||||||
|
* @param networkCapability Network capability.
|
||||||
|
* @return APN type.
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
private static @ApnType int networkCapabilityToApnType(@NetCapability int networkCapability) {
|
||||||
|
switch (networkCapability) {
|
||||||
|
case NetworkCapabilities.NET_CAPABILITY_MMS:
|
||||||
|
return ApnSetting.TYPE_MMS;
|
||||||
|
case NetworkCapabilities.NET_CAPABILITY_SUPL:
|
||||||
|
return ApnSetting.TYPE_SUPL;
|
||||||
|
case NetworkCapabilities.NET_CAPABILITY_DUN:
|
||||||
|
return ApnSetting.TYPE_DUN;
|
||||||
|
case NetworkCapabilities.NET_CAPABILITY_FOTA:
|
||||||
|
return ApnSetting.TYPE_FOTA;
|
||||||
|
case NetworkCapabilities.NET_CAPABILITY_IMS:
|
||||||
|
return ApnSetting.TYPE_IMS;
|
||||||
|
case NetworkCapabilities.NET_CAPABILITY_CBS:
|
||||||
|
return ApnSetting.TYPE_CBS;
|
||||||
|
case NetworkCapabilities.NET_CAPABILITY_XCAP:
|
||||||
|
return ApnSetting.TYPE_XCAP;
|
||||||
|
case NetworkCapabilities.NET_CAPABILITY_EIMS:
|
||||||
|
return ApnSetting.TYPE_EMERGENCY;
|
||||||
|
case NetworkCapabilities.NET_CAPABILITY_INTERNET:
|
||||||
|
return ApnSetting.TYPE_DEFAULT;
|
||||||
|
case NetworkCapabilities.NET_CAPABILITY_MCX:
|
||||||
|
return ApnSetting.TYPE_MCX;
|
||||||
|
case NetworkCapabilities.NET_CAPABILITY_IA:
|
||||||
|
return ApnSetting.TYPE_IA;
|
||||||
|
default:
|
||||||
|
return ApnSetting.TYPE_NONE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the timestamp of this data profile being used for data network setup.
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public void setLastSetupTimestamp(@ElapsedRealtimeLong long timestamp) {
|
||||||
|
mSetupTimestamp = timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the timestamp of this data profile being used for data network setup.
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public @ElapsedRealtimeLong long getLastSetupTimestamp() {
|
||||||
|
return mSetupTimestamp;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int describeContents() {
|
public int describeContents() {
|
||||||
return 0;
|
return 0;
|
||||||
@@ -323,8 +431,8 @@ public final class DataProfile implements Parcelable {
|
|||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "DataProfile=" + mApnSetting + ", " + mTrafficDescriptor + ", preferred="
|
return "[DataProfile=" + mApnSetting + ", " + mTrafficDescriptor + ", preferred="
|
||||||
+ mPreferred;
|
+ mPreferred + "]";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -333,6 +441,7 @@ public final class DataProfile implements Parcelable {
|
|||||||
dest.writeParcelable(mApnSetting, flags);
|
dest.writeParcelable(mApnSetting, flags);
|
||||||
dest.writeParcelable(mTrafficDescriptor, flags);
|
dest.writeParcelable(mTrafficDescriptor, flags);
|
||||||
dest.writeBoolean(mPreferred);
|
dest.writeBoolean(mPreferred);
|
||||||
|
dest.writeLong(mSetupTimestamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final @android.annotation.NonNull Parcelable.Creator<DataProfile> CREATOR =
|
public static final @android.annotation.NonNull Parcelable.Creator<DataProfile> CREATOR =
|
||||||
|
|||||||
Reference in New Issue
Block a user