Merge "Added edited status to APN setting" into main
diff --git a/telephony/common/com/android/internal/telephony/util/TelephonyUtils.java b/telephony/common/com/android/internal/telephony/util/TelephonyUtils.java
index aed8fb8..a63db88 100644
--- a/telephony/common/com/android/internal/telephony/util/TelephonyUtils.java
+++ b/telephony/common/com/android/internal/telephony/util/TelephonyUtils.java
@@ -32,6 +32,8 @@
import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.UserManager;
+import android.provider.Telephony;
+import android.provider.Telephony.Carriers.EditStatus;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyFrameworkInitializer;
import android.telephony.TelephonyManager;
@@ -226,6 +228,23 @@
}
/**
+ * Convert APN edited status to string.
+ *
+ * @param apnEditStatus APN edited status.
+ * @return APN edited status in string format.
+ */
+ public static @NonNull String apnEditedStatusToString(@EditStatus int apnEditStatus) {
+ return switch (apnEditStatus) {
+ case Telephony.Carriers.UNEDITED -> "UNEDITED";
+ case Telephony.Carriers.USER_EDITED -> "USER_EDITED";
+ case Telephony.Carriers.USER_DELETED -> "USER_DELETED";
+ case Telephony.Carriers.CARRIER_EDITED -> "CARRIER_EDITED";
+ case Telephony.Carriers.CARRIER_DELETED -> "CARRIER_DELETED";
+ default -> "UNKNOWN(" + apnEditStatus + ")";
+ };
+ }
+
+ /**
* Utility method to get user handle associated with this subscription.
*
* This method should be used internally as it returns null instead of throwing
diff --git a/telephony/java/android/telephony/data/ApnSetting.java b/telephony/java/android/telephony/data/ApnSetting.java
index 8679bd4..44d3fca 100644
--- a/telephony/java/android/telephony/data/ApnSetting.java
+++ b/telephony/java/android/telephony/data/ApnSetting.java
@@ -29,6 +29,7 @@
import android.os.Parcelable;
import android.provider.Telephony;
import android.provider.Telephony.Carriers;
+import android.provider.Telephony.Carriers.EditStatus;
import android.telephony.Annotation.NetworkType;
import android.telephony.ServiceState;
import android.telephony.TelephonyManager;
@@ -37,6 +38,7 @@
import android.util.Log;
import com.android.internal.telephony.flags.Flags;
+import com.android.internal.telephony.util.TelephonyUtils;
import com.android.telephony.Rlog;
import java.lang.annotation.Retention;
@@ -571,6 +573,13 @@
private final boolean mEsimBootstrapProvisioning;
/**
+ * The APN edited status.
+ *
+ * Note it is intended not using this field for {@link #equals(Object)} or {@link #hashCode()}.
+ */
+ private final @EditStatus int mEditedStatus;
+
+ /**
* Returns the default MTU (Maximum Transmission Unit) size in bytes of the IPv4 routes brought
* up by this APN setting. Note this value will only be used when MTU size is not provided
* in {@code DataCallResponse#getMtuV4()} during network bring up.
@@ -992,6 +1001,22 @@
return mEsimBootstrapProvisioning;
}
+ /**
+ * @return APN edited status. APN could be added/edited/deleted by a user or carrier.
+ *
+ * @see Carriers#UNEDITED
+ * @see Carriers#USER_EDITED
+ * @see Carriers#USER_DELETED
+ * @see Carriers#CARRIER_EDITED
+ * @see Carriers#CARRIER_DELETED
+ *
+ * @hide
+ */
+ @EditStatus
+ public int getEditedStatus() {
+ return mEditedStatus;
+ }
+
private ApnSetting(Builder builder) {
this.mEntryName = builder.mEntryName;
this.mApnName = builder.mApnName;
@@ -1030,6 +1055,7 @@
this.mAlwaysOn = builder.mAlwaysOn;
this.mInfrastructureBitmask = builder.mInfrastructureBitmask;
this.mEsimBootstrapProvisioning = builder.mEsimBootstrapProvisioning;
+ this.mEditedStatus = builder.mEditedStatus;
}
/**
@@ -1113,6 +1139,8 @@
Telephony.Carriers.INFRASTRUCTURE_BITMASK)))
.setEsimBootstrapProvisioning(cursor.getInt(
cursor.getColumnIndexOrThrow(Carriers.ESIM_BOOTSTRAP_PROVISIONING)) == 1)
+ .setEditedStatus(cursor.getInt(
+ cursor.getColumnIndexOrThrow(Carriers.EDITED_STATUS)))
.buildWithoutCheck();
}
@@ -1154,6 +1182,7 @@
.setAlwaysOn(apn.mAlwaysOn)
.setInfrastructureBitmask(apn.mInfrastructureBitmask)
.setEsimBootstrapProvisioning(apn.mEsimBootstrapProvisioning)
+ .setEditedStatus(apn.mEditedStatus)
.buildWithoutCheck();
}
@@ -1202,6 +1231,7 @@
sb.append(", ").append(mInfrastructureBitmask);
sb.append(", ").append(Objects.hash(mUser, mPassword));
sb.append(", ").append(mEsimBootstrapProvisioning);
+ sb.append(", ").append(TelephonyUtils.apnEditedStatusToString(mEditedStatus));
return sb.toString();
}
@@ -1748,6 +1778,7 @@
dest.writeBoolean(mAlwaysOn);
dest.writeInt(mInfrastructureBitmask);
dest.writeBoolean(mEsimBootstrapProvisioning);
+ dest.writeInt(mEditedStatus);
}
private static ApnSetting readFromParcel(Parcel in) {
@@ -1785,6 +1816,7 @@
.setAlwaysOn(in.readBoolean())
.setInfrastructureBitmask(in.readInt())
.setEsimBootstrapProvisioning(in.readBoolean())
+ .setEditedStatus(in.readInt())
.buildWithoutCheck();
}
@@ -1868,6 +1900,7 @@
private boolean mAlwaysOn;
private int mInfrastructureBitmask = INFRASTRUCTURE_CELLULAR | INFRASTRUCTURE_SATELLITE;
private boolean mEsimBootstrapProvisioning;
+ private @EditStatus int mEditedStatus = Carriers.UNEDITED;
/**
* Default constructor for Builder.
@@ -2310,6 +2343,8 @@
*
* @param esimBootstrapProvisioning {@code true} if the APN is used for eSIM bootstrap
* provisioning, {@code false} otherwise.
+ *
+ * @return The builder.
* @hide
*/
@NonNull
@@ -2319,6 +2354,26 @@
}
/**
+ * Set the edited status. APN could be added/edited/deleted by a user or carrier.
+ *
+ * @param editedStatus The APN edited status
+ * @return The builder.
+ *
+ * @see Carriers#UNEDITED
+ * @see Carriers#USER_EDITED
+ * @see Carriers#USER_DELETED
+ * @see Carriers#CARRIER_EDITED
+ * @see Carriers#CARRIER_DELETED
+ *
+ * @hide
+ */
+ @NonNull
+ public Builder setEditedStatus(@EditStatus int editedStatus) {
+ this.mEditedStatus = editedStatus;
+ return this;
+ }
+
+ /**
* Builds {@link ApnSetting} from this builder.
*
* @return {@code null} if {@link #setApnName(String)} or {@link #setEntryName(String)}