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

Commit e4bf049e authored by Sarah Chin's avatar Sarah Chin Committed by android-build-merger
Browse files

Merge "5G meteredness for telephony framework"

am: 0262cb77

Change-Id: Ic8b37a1f0a6899c2648000941f1bd25557179dac
parents 1e62d2dd 0262cb77
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