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

Commit 0262cb77 authored by Sarah Chin's avatar Sarah Chin Committed by Gerrit Code Review
Browse files

Merge "5G meteredness for telephony framework"

parents 7b511f0d 80b73b9e
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -45422,6 +45422,7 @@ package android.telephony {
    method public long getDataLimitBytes();
    method public long getDataUsageBytes();
    method public long getDataUsageTime();
    method @Nullable public int[] getNetworkTypes();
    method @Nullable public CharSequence getSummary();
    method @Nullable public CharSequence getTitle();
    method public void writeToParcel(android.os.Parcel, int);
@@ -45441,6 +45442,7 @@ package android.telephony {
    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 @NonNull public android.telephony.SubscriptionPlan.Builder setNetworkTypes(@Nullable int[]);
    method public android.telephony.SubscriptionPlan.Builder setSummary(@Nullable CharSequence);
    method public android.telephony.SubscriptionPlan.Builder setTitle(@Nullable CharSequence);
  }
+3 −1
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
 */

package android.net;
import android.telephony.SubscriptionPlan;

/** {@hide} */
oneway interface INetworkPolicyListener {
@@ -22,5 +23,6 @@ oneway interface INetworkPolicyListener {
    void onMeteredIfacesChanged(in String[] meteredIfaces);
    void onRestrictBackgroundChanged(boolean restrictBackground);
    void onUidPoliciesChanged(int uid, int uidPolicies);
    void onSubscriptionOverride(int subId, int overrideMask, int overrideValue, long networkTypeMask);
    void onSubscriptionOverride(int subId, int overrideMask, int overrideValue);
    void onSubscriptionPlansChanged(int subId, in SubscriptionPlan[] plans);
}
+1 −1
Original line number Diff line number Diff line
@@ -76,7 +76,7 @@ interface INetworkPolicyManager {
    SubscriptionPlan[] getSubscriptionPlans(int subId, String callingPackage);
    void setSubscriptionPlans(int subId, in SubscriptionPlan[] plans, String callingPackage);
    String getSubscriptionPlansOwner(int subId);
    void setSubscriptionOverride(int subId, int overrideMask, int overrideValue, long networkTypeMask, long timeoutMillis, String callingPackage);
    void setSubscriptionOverride(int subId, int overrideMask, int overrideValue, long timeoutMillis, String callingPackage);

    void factoryReset(String subscriber);

+4 −2
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import android.net.wifi.WifiInfo;
import android.os.Build;
import android.os.RemoteException;
import android.os.UserHandle;
import android.telephony.SubscriptionPlan;
import android.util.DebugUtils;
import android.util.Pair;
import android.util.Range;
@@ -380,7 +381,8 @@ public class NetworkPolicyManager {
        @Override public void onMeteredIfacesChanged(String[] meteredIfaces) { }
        @Override public void onRestrictBackgroundChanged(boolean restrictBackground) { }
        @Override public void onUidPoliciesChanged(int uid, int uidPolicies) { }
        @Override public void onSubscriptionOverride(int subId, int overrideMask, int overrideValue,
                long networkTypeMask) { }
        @Override public void onSubscriptionOverride(int subId, int overrideMask,
                int overrideValue) { }
        @Override public void onSubscriptionPlansChanged(int subId, SubscriptionPlan[] plans) { }
    }
}
+55 −2
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
import android.telephony.Annotation.NetworkType;
import android.util.Range;
import android.util.RecurrenceRule;

@@ -33,6 +34,7 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.time.Period;
import java.time.ZonedDateTime;
import java.util.Arrays;
import java.util.Iterator;
import java.util.Objects;

@@ -80,6 +82,8 @@ public final class SubscriptionPlan implements Parcelable {
    private int dataLimitBehavior = LIMIT_BEHAVIOR_UNKNOWN;
    private long dataUsageBytes = BYTES_UNKNOWN;
    private long dataUsageTime = TIME_UNKNOWN;
    private @NetworkType int[] networkTypes;
    private long networkTypesBitMask;

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

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

    @Override
@@ -121,13 +127,14 @@ public final class SubscriptionPlan implements Parcelable {
                .append(" dataLimitBehavior=").append(dataLimitBehavior)
                .append(" dataUsageBytes=").append(dataUsageBytes)
                .append(" dataUsageTime=").append(dataUsageTime)
                .append(" networkTypes=").append(Arrays.toString(networkTypes))
                .append("}").toString();
    }

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

    @Override
@@ -140,7 +147,8 @@ public final class SubscriptionPlan implements Parcelable {
                    && dataLimitBytes == other.dataLimitBytes
                    && dataLimitBehavior == other.dataLimitBehavior
                    && dataUsageBytes == other.dataUsageBytes
                    && dataUsageTime == other.dataUsageTime;
                    && dataUsageTime == other.dataUsageTime
                    && Arrays.equals(networkTypes, other.networkTypes);
        }
        return false;
    }
@@ -203,6 +211,32 @@ public final class SubscriptionPlan implements Parcelable {
        return dataUsageTime;
    }

    /**
     * Return an array containing all {@link NetworkType}s this SubscriptionPlan applies to.
     * A null array means this SubscriptionPlan applies to all network types.
     */
    public @Nullable @NetworkType int[] getNetworkTypes() {
        return networkTypes;
    }

    /**
     * Return the networkTypes array converted to a {@link TelephonyManager.NetworkTypeBitMask}
     * @hide
     */
    public long getNetworkTypesBitMask() {
        // calculate bitmask the first time and save for future calls
        if (networkTypesBitMask == 0) {
            if (networkTypes == null) {
                networkTypesBitMask = ~0;
            } else {
                for (int networkType : networkTypes) {
                    networkTypesBitMask |= TelephonyManager.getBitMaskForNetworkType(networkType);
                }
            }
        }
        return networkTypesBitMask;
    }

    /**
     * Return an iterator that will return all valid data usage cycles based on
     * any recurrence rules. The iterator starts from the currently active cycle
@@ -335,5 +369,24 @@ public final class SubscriptionPlan implements Parcelable {
            plan.dataUsageTime = dataUsageTime;
            return this;
        }

        /**
         * Set the network types this SubscriptionPlan applies to.
         * The developer must supply at least one plan that applies to all network types (default),
         * and all additional plans may not include a particular network type more than once.
         * Plan selection will prefer plans that have specific network types defined
         * over plans that apply to all network types.
         *
         * @param networkTypes a set of all {@link NetworkType}s that apply to this plan.
         *            A null value or empty array means the plan applies to all network types.
         */
        public @NonNull Builder setNetworkTypes(@Nullable @NetworkType int[] networkTypes) {
            if (networkTypes == null || networkTypes.length == 0) {
                plan.networkTypes = null;
            } else {
                plan.networkTypes = networkTypes;
            }
            return this;
        }
    }
}
Loading