Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 67df665b authored by Jack Yu's avatar Jack Yu
Browse files

Added edited status to APN setting

Expose APN edited status from the database to ApnSetting class.
Also suppress APN related anomaly reports if the APN is edited
by the user.

Fix: 289212683
Test: Manually tested user input APN on T-Mobile
Test: Basic telephony functionality tests
Change-Id: I7fa923a0fd41e31719f89fc94a55ce3b4a6ff1d7
parent 04fc961f
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -32,6 +32,8 @@ import android.os.RemoteException;
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;
@@ -225,6 +227,23 @@ public final class TelephonyUtils {
        }
    }

    /**
     * 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.
     *
+55 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.os.Parcel;
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.ArrayMap;
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;
@@ -570,6 +572,13 @@ public class ApnSetting implements Parcelable {
    private final @InfrastructureBitmask int mInfrastructureBitmask;
    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
@@ -992,6 +1001,22 @@ public class ApnSetting implements Parcelable {
        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 @@ public class ApnSetting implements Parcelable {
        this.mAlwaysOn = builder.mAlwaysOn;
        this.mInfrastructureBitmask = builder.mInfrastructureBitmask;
        this.mEsimBootstrapProvisioning = builder.mEsimBootstrapProvisioning;
        this.mEditedStatus = builder.mEditedStatus;
    }

    /**
@@ -1113,6 +1139,8 @@ public class ApnSetting implements Parcelable {
                        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 @@ public class ApnSetting implements Parcelable {
                .setAlwaysOn(apn.mAlwaysOn)
                .setInfrastructureBitmask(apn.mInfrastructureBitmask)
                .setEsimBootstrapProvisioning(apn.mEsimBootstrapProvisioning)
                .setEditedStatus(apn.mEditedStatus)
                .buildWithoutCheck();
    }

@@ -1202,6 +1231,7 @@ public class ApnSetting implements Parcelable {
        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 @@ public class ApnSetting implements Parcelable {
        dest.writeBoolean(mAlwaysOn);
        dest.writeInt(mInfrastructureBitmask);
        dest.writeBoolean(mEsimBootstrapProvisioning);
        dest.writeInt(mEditedStatus);
    }

    private static ApnSetting readFromParcel(Parcel in) {
@@ -1785,6 +1816,7 @@ public class ApnSetting implements Parcelable {
                .setAlwaysOn(in.readBoolean())
                .setInfrastructureBitmask(in.readInt())
                .setEsimBootstrapProvisioning(in.readBoolean())
                .setEditedStatus(in.readInt())
                .buildWithoutCheck();
    }

@@ -1868,6 +1900,7 @@ public class ApnSetting implements Parcelable {
        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 @@ public class ApnSetting implements Parcelable {
         *
         * @param esimBootstrapProvisioning {@code true} if the APN is used for eSIM bootstrap
         * provisioning, {@code false} otherwise.
         *
         * @return The builder.
         * @hide
         */
        @NonNull
@@ -2318,6 +2353,26 @@ public class ApnSetting implements Parcelable {
            return this;
        }

        /**
         * 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.
         *