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

Commit 0fc6d03b authored by Jeff Sharkey's avatar Jeff Sharkey
Browse files

API council requested tweaks to SubscriptionPlan.

Return new shiny Range<> object instead of Pair<>.  Tell developers
what permission to check on refresh broadcast.  Describe what
exceptions might be thrown, and that an empty list is okay.

Allow creation of plans with richer Period object, instead of forcing
them into rigid week or day options.

Protect SubscriptionPlan broadcast.

Test: atest android.util.RecurrenceRuleTest
Test: atest com.android.server.NetworkPolicyManagerServiceTest
Bug: 74945820
Change-Id: I7e555798e0cfaa214ca93d9df627c6443fc5d986
parent b622906d
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -42387,7 +42387,7 @@ package android.telephony {
  }
  public final class SubscriptionPlan implements android.os.Parcelable {
    method public java.util.Iterator<android.util.Pair<java.time.ZonedDateTime, java.time.ZonedDateTime>> cycleIterator();
    method public java.util.Iterator<android.util.Range<java.time.ZonedDateTime>> cycleIterator();
    method public int describeContents();
    method public int getDataLimitBehavior();
    method public long getDataLimitBytes();
@@ -42409,9 +42409,7 @@ package android.telephony {
  public static class SubscriptionPlan.Builder {
    method public android.telephony.SubscriptionPlan build();
    method public static android.telephony.SubscriptionPlan.Builder createNonrecurring(java.time.ZonedDateTime, java.time.ZonedDateTime);
    method public static android.telephony.SubscriptionPlan.Builder createRecurringDaily(java.time.ZonedDateTime);
    method public static android.telephony.SubscriptionPlan.Builder createRecurringMonthly(java.time.ZonedDateTime);
    method public static android.telephony.SubscriptionPlan.Builder createRecurringWeekly(java.time.ZonedDateTime);
    method public static android.telephony.SubscriptionPlan.Builder createRecurring(java.time.ZonedDateTime, java.time.Period);
    method public android.telephony.SubscriptionPlan.Builder setDataLimit(long, int);
    method public android.telephony.SubscriptionPlan.Builder setDataUsage(long, long);
    method public android.telephony.SubscriptionPlan.Builder setSummary(java.lang.CharSequence);
+5 −4
Original line number Diff line number Diff line
@@ -5187,7 +5187,7 @@ package android.telephony {
  }

  public final class SubscriptionPlan implements android.os.Parcelable {
    method public java.util.Iterator<android.util.Pair<java.time.ZonedDateTime, java.time.ZonedDateTime>> cycleIterator();
    method public java.util.Iterator<android.util.Range<java.time.ZonedDateTime>> cycleIterator();
    method public int describeContents();
    method public int getDataLimitBehavior();
    method public long getDataLimitBytes();
@@ -5209,9 +5209,10 @@ package android.telephony {
  public static class SubscriptionPlan.Builder {
    method public android.telephony.SubscriptionPlan build();
    method public static android.telephony.SubscriptionPlan.Builder createNonrecurring(java.time.ZonedDateTime, java.time.ZonedDateTime);
    method public static android.telephony.SubscriptionPlan.Builder createRecurringDaily(java.time.ZonedDateTime);
    method public static android.telephony.SubscriptionPlan.Builder createRecurringMonthly(java.time.ZonedDateTime);
    method public static android.telephony.SubscriptionPlan.Builder createRecurringWeekly(java.time.ZonedDateTime);
    method public static android.telephony.SubscriptionPlan.Builder createRecurring(java.time.ZonedDateTime, java.time.Period);
    method public static deprecated android.telephony.SubscriptionPlan.Builder createRecurringDaily(java.time.ZonedDateTime);
    method public static deprecated android.telephony.SubscriptionPlan.Builder createRecurringMonthly(java.time.ZonedDateTime);
    method public static deprecated android.telephony.SubscriptionPlan.Builder createRecurringWeekly(java.time.ZonedDateTime);
    method public android.telephony.SubscriptionPlan.Builder setDataLimit(long, int);
    method public android.telephony.SubscriptionPlan.Builder setDataUsage(long, long);
    method public android.telephony.SubscriptionPlan.Builder setSummary(java.lang.CharSequence);
+2 −2
Original line number Diff line number Diff line
@@ -19,7 +19,7 @@ package android.net;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.BackupUtils;
import android.util.Pair;
import android.util.Range;
import android.util.RecurrenceRule;

import com.android.internal.util.Preconditions;
@@ -136,7 +136,7 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> {
        return 0;
    }

    public Iterator<Pair<ZonedDateTime, ZonedDateTime>> cycleIterator() {
    public Iterator<Range<ZonedDateTime>> cycleIterator() {
        return cycleRule.cycleIterator();
    }

+15 −1
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import android.os.RemoteException;
import android.os.UserHandle;
import android.util.DebugUtils;
import android.util.Pair;
import android.util.Range;

import com.google.android.collect.Sets;

@@ -258,8 +259,21 @@ public class NetworkPolicyManager {
    }

    /** {@hide} */
    @Deprecated
    public static Iterator<Pair<ZonedDateTime, ZonedDateTime>> cycleIterator(NetworkPolicy policy) {
        return policy.cycleIterator();
        final Iterator<Range<ZonedDateTime>> it = policy.cycleIterator();
        return new Iterator<Pair<ZonedDateTime, ZonedDateTime>>() {
            @Override
            public boolean hasNext() {
                return it.hasNext();
            }

            @Override
            public Pair<ZonedDateTime, ZonedDateTime> next() {
                final Range<ZonedDateTime> r = it.next();
                return Pair.create(r.getLower(), r.getUpper());
            }
        };
    }

    /**
+8 −8
Original line number Diff line number Diff line
@@ -158,7 +158,7 @@ public class RecurrenceRule implements Parcelable {
                && period.getDays() == 0;
    }

    public Iterator<Pair<ZonedDateTime, ZonedDateTime>> cycleIterator() {
    public Iterator<Range<ZonedDateTime>> cycleIterator() {
        if (period != null) {
            return new RecurringIterator();
        } else {
@@ -166,7 +166,7 @@ public class RecurrenceRule implements Parcelable {
        }
    }

    private class NonrecurringIterator implements Iterator<Pair<ZonedDateTime, ZonedDateTime>> {
    private class NonrecurringIterator implements Iterator<Range<ZonedDateTime>> {
        boolean hasNext;

        public NonrecurringIterator() {
@@ -179,13 +179,13 @@ public class RecurrenceRule implements Parcelable {
        }

        @Override
        public Pair<ZonedDateTime, ZonedDateTime> next() {
        public Range<ZonedDateTime> next() {
            hasNext = false;
            return new Pair<>(start, end);
            return new Range<>(start, end);
        }
    }

    private class RecurringIterator implements Iterator<Pair<ZonedDateTime, ZonedDateTime>> {
    private class RecurringIterator implements Iterator<Range<ZonedDateTime>> {
        int i;
        ZonedDateTime cycleStart;
        ZonedDateTime cycleEnd;
@@ -231,12 +231,12 @@ public class RecurrenceRule implements Parcelable {
        }

        @Override
        public Pair<ZonedDateTime, ZonedDateTime> next() {
        public Range<ZonedDateTime> next() {
            if (LOGD) Log.d(TAG, "Cycle " + i + " from " + cycleStart + " to " + cycleEnd);
            Pair<ZonedDateTime, ZonedDateTime> p = new Pair<>(cycleStart, cycleEnd);
            Range<ZonedDateTime> r = new Range<>(cycleStart, cycleEnd);
            i--;
            updateCycle();
            return p;
            return r;
        }
    }

Loading