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

Commit df726741 authored by James Mattis's avatar James Mattis
Browse files

Adding status and end date to SubscriptionPlan

Added a subscription plan status and expiration date to
SusbcriptionPlan.

Flag: com.android.internal.telephony.flags.subscription_plan_allow_status_and_end_date

Test: atest FrameworksTelephonyTests:SubscriptionPlanTest
Test: atest CtsTelephonyTestCases:SubscriptionManagerTest
Bug: 357272015
Merged-In: Ia6d11cb54befdf92dbabb6abe84fd59d18e1c6b3
Change-Id: Ia6d11cb54befdf92dbabb6abe84fd59d18e1c6b3
parent d964bada
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -45982,6 +45982,8 @@ package android.telephony {
    method public long getDataUsageBytes();
    method public long getDataUsageTime();
    method @NonNull public int[] getNetworkTypes();
    method @FlaggedApi("com.android.internal.telephony.flags.subscription_plan_allow_status_and_end_date") @Nullable public java.time.ZonedDateTime getPlanEndDate();
    method @FlaggedApi("com.android.internal.telephony.flags.subscription_plan_allow_status_and_end_date") public int getSubscriptionStatus();
    method @Nullable public CharSequence getSummary();
    method @Nullable public CharSequence getTitle();
    method public void writeToParcel(android.os.Parcel, int);
@@ -45992,6 +45994,11 @@ package android.telephony {
    field public static final int LIMIT_BEHAVIOR_DISABLED = 0; // 0x0
    field public static final int LIMIT_BEHAVIOR_THROTTLED = 2; // 0x2
    field public static final int LIMIT_BEHAVIOR_UNKNOWN = -1; // 0xffffffff
    field @FlaggedApi("com.android.internal.telephony.flags.subscription_plan_allow_status_and_end_date") public static final int SUBSCRIPTION_STATUS_ACTIVE = 1; // 0x1
    field @FlaggedApi("com.android.internal.telephony.flags.subscription_plan_allow_status_and_end_date") public static final int SUBSCRIPTION_STATUS_INACTIVE = 2; // 0x2
    field @FlaggedApi("com.android.internal.telephony.flags.subscription_plan_allow_status_and_end_date") public static final int SUBSCRIPTION_STATUS_SUSPENDED = 4; // 0x4
    field @FlaggedApi("com.android.internal.telephony.flags.subscription_plan_allow_status_and_end_date") public static final int SUBSCRIPTION_STATUS_TRIAL = 3; // 0x3
    field @FlaggedApi("com.android.internal.telephony.flags.subscription_plan_allow_status_and_end_date") public static final int SUBSCRIPTION_STATUS_UNKNOWN = 0; // 0x0
    field public static final long TIME_UNKNOWN = -1L; // 0xffffffffffffffffL
  }
@@ -46003,6 +46010,7 @@ package android.telephony {
    method public android.telephony.SubscriptionPlan.Builder setDataLimit(long, int);
    method public android.telephony.SubscriptionPlan.Builder setDataUsage(long, long);
    method @NonNull public android.telephony.SubscriptionPlan.Builder setNetworkTypes(@NonNull int[]);
    method @FlaggedApi("com.android.internal.telephony.flags.subscription_plan_allow_status_and_end_date") @NonNull public android.telephony.SubscriptionPlan.Builder setSubscriptionStatus(int);
    method public android.telephony.SubscriptionPlan.Builder setSummary(@Nullable CharSequence);
    method public android.telephony.SubscriptionPlan.Builder setTitle(@Nullable CharSequence);
  }
+69 −2
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package android.telephony;

import android.annotation.BytesLong;
import android.annotation.CurrentTimeMillisLong;
import android.annotation.FlaggedApi;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -28,6 +29,7 @@ import android.telephony.Annotation.NetworkType;
import android.util.Range;
import android.util.RecurrenceRule;

import com.android.internal.telephony.flags.Flags;
import com.android.internal.util.Preconditions;

import java.lang.annotation.Retention;
@@ -83,6 +85,33 @@ public final class SubscriptionPlan implements Parcelable {
    /** Value indicating a timestamp is unknown. */
    public static final long TIME_UNKNOWN = -1;

    /** @hide */
    @Retention(RetentionPolicy.SOURCE)
    @IntDef(prefix = { "SUBSCRIPTION_STATUS_" }, value = {
            SUBSCRIPTION_STATUS_UNKNOWN,
            SUBSCRIPTION_STATUS_ACTIVE,
            SUBSCRIPTION_STATUS_INACTIVE,
            SUBSCRIPTION_STATUS_TRIAL,
            SUBSCRIPTION_STATUS_SUSPENDED
    })
    public @interface SubscriptionStatus {}

    /** Subscription status is unknown. */
    @FlaggedApi(Flags.FLAG_SUBSCRIPTION_PLAN_ALLOW_STATUS_AND_END_DATE)
    public static final int SUBSCRIPTION_STATUS_UNKNOWN = 0;
    /** Subscription is active. */
    @FlaggedApi(Flags.FLAG_SUBSCRIPTION_PLAN_ALLOW_STATUS_AND_END_DATE)
    public static final int SUBSCRIPTION_STATUS_ACTIVE = 1;
    /** Subscription is inactive. */
    @FlaggedApi(Flags.FLAG_SUBSCRIPTION_PLAN_ALLOW_STATUS_AND_END_DATE)
    public static final int SUBSCRIPTION_STATUS_INACTIVE = 2;
    /** Subscription is in a trial period. */
    @FlaggedApi(Flags.FLAG_SUBSCRIPTION_PLAN_ALLOW_STATUS_AND_END_DATE)
    public static final int SUBSCRIPTION_STATUS_TRIAL = 3;
    /** Subscription is suspended. */
    @FlaggedApi(Flags.FLAG_SUBSCRIPTION_PLAN_ALLOW_STATUS_AND_END_DATE)
    public static final int SUBSCRIPTION_STATUS_SUSPENDED = 4;

    private final RecurrenceRule cycleRule;
    private CharSequence title;
    private CharSequence summary;
@@ -91,6 +120,7 @@ public final class SubscriptionPlan implements Parcelable {
    private long dataUsageBytes = BYTES_UNKNOWN;
    private long dataUsageTime = TIME_UNKNOWN;
    private @NetworkType int[] networkTypes;
    private int mSubscriptionStatus = SUBSCRIPTION_STATUS_UNKNOWN;

    private SubscriptionPlan(RecurrenceRule cycleRule) {
        this.cycleRule = Preconditions.checkNotNull(cycleRule);
@@ -107,6 +137,7 @@ public final class SubscriptionPlan implements Parcelable {
        dataUsageBytes = source.readLong();
        dataUsageTime = source.readLong();
        networkTypes = source.createIntArray();
        mSubscriptionStatus = source.readInt();
    }

    @Override
@@ -124,6 +155,7 @@ public final class SubscriptionPlan implements Parcelable {
        dest.writeLong(dataUsageBytes);
        dest.writeLong(dataUsageTime);
        dest.writeIntArray(networkTypes);
        dest.writeInt(mSubscriptionStatus);
    }

    @Override
@@ -137,13 +169,14 @@ public final class SubscriptionPlan implements Parcelable {
                .append(" dataUsageBytes=").append(dataUsageBytes)
                .append(" dataUsageTime=").append(dataUsageTime)
                .append(" networkTypes=").append(Arrays.toString(networkTypes))
                .append(" subscriptionStatus=").append(mSubscriptionStatus)
                .append("}").toString();
    }

    @Override
    public int hashCode() {
        return Objects.hash(cycleRule, title, summary, dataLimitBytes, dataLimitBehavior,
                dataUsageBytes, dataUsageTime, Arrays.hashCode(networkTypes));
                dataUsageBytes, dataUsageTime, Arrays.hashCode(networkTypes), mSubscriptionStatus);
    }

    @Override
@@ -157,7 +190,8 @@ public final class SubscriptionPlan implements Parcelable {
                    && dataLimitBehavior == other.dataLimitBehavior
                    && dataUsageBytes == other.dataUsageBytes
                    && dataUsageTime == other.dataUsageTime
                    && Arrays.equals(networkTypes, other.networkTypes);
                    && Arrays.equals(networkTypes, other.networkTypes)
                    && mSubscriptionStatus == other.mSubscriptionStatus;
        }
        return false;
    }
@@ -179,6 +213,13 @@ public final class SubscriptionPlan implements Parcelable {
        return cycleRule;
    }

    /** Return the end date of this plan, or null if no end date exists. */
    @FlaggedApi(Flags.FLAG_SUBSCRIPTION_PLAN_ALLOW_STATUS_AND_END_DATE)
    public @Nullable ZonedDateTime getPlanEndDate() {
        // ZonedDateTime is immutable, so no need to create a defensive copy.
        return cycleRule.end;
    }

    /** Return the short title of this plan. */
    public @Nullable CharSequence getTitle() {
        return title;
@@ -237,6 +278,16 @@ public final class SubscriptionPlan implements Parcelable {
        return cycleRule.cycleIterator();
    }

    /**
     * Returns the status of the subscription plan.
     *
     * @return The subscription status, or {@link #SUBSCRIPTION_STATUS_UNKNOWN} if not available.
     */
    @FlaggedApi(Flags.FLAG_SUBSCRIPTION_PLAN_ALLOW_STATUS_AND_END_DATE)
    public @SubscriptionStatus int getSubscriptionStatus() {
        return mSubscriptionStatus;
    }

    /**
     * Builder for a {@link SubscriptionPlan}.
     */
@@ -382,5 +433,21 @@ public final class SubscriptionPlan implements Parcelable {
                    TelephonyManager.getAllNetworkTypes().length);
            return this;
        }

        /**
         * Set the subscription status.
         *
         * @param subscriptionStatus the current subscription status
         */
        @FlaggedApi(Flags.FLAG_SUBSCRIPTION_PLAN_ALLOW_STATUS_AND_END_DATE)
        public @NonNull Builder setSubscriptionStatus(@SubscriptionStatus int subscriptionStatus) {
            if (subscriptionStatus < SUBSCRIPTION_STATUS_UNKNOWN
                    || subscriptionStatus > SUBSCRIPTION_STATUS_SUSPENDED) {
                throw new IllegalArgumentException(
                        "Subscription status must be defined with a valid value");
            }
            plan.mSubscriptionStatus = subscriptionStatus;
            return this;
        }
    }
}