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

Commit d0c8d621 authored by Ricardo Cerqueira's avatar Ricardo Cerqueira Committed by Gerrit Code Review
Browse files

Merge "frameworks/base: Day and week on data usage (1/2)" into cm-11.0

parents a72b73ea 671f99c7
Loading
Loading
Loading
Loading
+26 −3
Original line number Diff line number Diff line
@@ -31,12 +31,16 @@ import com.android.internal.util.Objects;
 */
public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> {
    public static final int CYCLE_NONE = -1;
    public static final int CYCLE_DAILY = 0;
    public static final int CYCLE_WEEKLY = 1;
    public static final int CYCLE_MONTHLY = 2;
    public static final long WARNING_DISABLED = -1;
    public static final long LIMIT_DISABLED = -1;
    public static final long SNOOZE_NEVER = -1;

    public final NetworkTemplate template;
    public int cycleDay;
    public int cycleLength;
    public String cycleTimezone;
    public long warningBytes;
    public long limitBytes;
@@ -54,11 +58,26 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> {
                SNOOZE_NEVER, metered, false);
    }

    @Deprecated
    public NetworkPolicy(NetworkTemplate template, int cycleDay, int cycleLength,
            String cycleTimezone, long warningBytes, long limitBytes, boolean metered) {
        this(template, cycleDay, cycleLength, cycleTimezone, warningBytes, limitBytes, SNOOZE_NEVER,
                SNOOZE_NEVER, metered, false);
    }

    public NetworkPolicy(NetworkTemplate template, int cycleDay, String cycleTimezone,
            long warningBytes, long limitBytes, long lastWarningSnooze, long lastLimitSnooze,
            boolean metered, boolean inferred) {
        this(template, cycleDay, CYCLE_MONTHLY, cycleTimezone, warningBytes, limitBytes,
                SNOOZE_NEVER, SNOOZE_NEVER, metered, false);
    }

    public NetworkPolicy(NetworkTemplate template, int cycleDay, int cycleLength,
            String cycleTimezone, long warningBytes, long limitBytes, long lastWarningSnooze,
            long lastLimitSnooze, boolean metered, boolean inferred) {
        this.template = checkNotNull(template, "missing NetworkTemplate");
        this.cycleDay = cycleDay;
        this.cycleLength = cycleLength;
        this.cycleTimezone = checkNotNull(cycleTimezone, "missing cycleTimezone");
        this.warningBytes = warningBytes;
        this.limitBytes = limitBytes;
@@ -71,6 +90,7 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> {
    public NetworkPolicy(Parcel in) {
        template = in.readParcelable(null);
        cycleDay = in.readInt();
        cycleLength = in.readInt();
        cycleTimezone = in.readString();
        warningBytes = in.readLong();
        limitBytes = in.readLong();
@@ -84,6 +104,7 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> {
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeParcelable(template, flags);
        dest.writeInt(cycleDay);
        dest.writeInt(cycleLength);
        dest.writeString(cycleTimezone);
        dest.writeLong(warningBytes);
        dest.writeLong(limitBytes);
@@ -146,15 +167,16 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> {

    @Override
    public int hashCode() {
        return Objects.hashCode(template, cycleDay, cycleTimezone, warningBytes, limitBytes,
                lastWarningSnooze, lastLimitSnooze, metered, inferred);
        return Objects.hashCode(template, cycleDay, cycleLength, cycleTimezone, warningBytes,
                limitBytes, lastWarningSnooze, lastLimitSnooze, metered, inferred);
    }

    @Override
    public boolean equals(Object obj) {
        if (obj instanceof NetworkPolicy) {
            final NetworkPolicy other = (NetworkPolicy) obj;
            return cycleDay == other.cycleDay && warningBytes == other.warningBytes
            return cycleDay == other.cycleDay && cycleLength == other.cycleLength
                    && warningBytes == other.warningBytes
                    && limitBytes == other.limitBytes
                    && lastWarningSnooze == other.lastWarningSnooze
                    && lastLimitSnooze == other.lastLimitSnooze && metered == other.metered
@@ -170,6 +192,7 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> {
        final StringBuilder builder = new StringBuilder("NetworkPolicy");
        builder.append("[").append(template).append("]:");
        builder.append(" cycleDay=").append(cycleDay);
        builder.append(", cycleLength=").append(cycleLength);
        builder.append(", cycleTimezone=").append(cycleTimezone);
        builder.append(", warningBytes=").append(warningBytes);
        builder.append(", limitBytes=").append(limitBytes);
+55 −22
Original line number Diff line number Diff line
@@ -18,6 +18,9 @@ package android.net;

import static android.content.pm.PackageManager.GET_SIGNATURES;
import static android.net.NetworkPolicy.CYCLE_NONE;
import static android.net.NetworkPolicy.CYCLE_DAILY;
import static android.net.NetworkPolicy.CYCLE_MONTHLY;
import static android.net.NetworkPolicy.CYCLE_WEEKLY;
import static android.text.format.Time.MONTH_DAY;

import android.content.Context;
@@ -161,22 +164,30 @@ public class NetworkPolicyManager {
        final Time now = new Time(policy.cycleTimezone);
        now.set(currentTime);

        // first, find cycle boundary for current month
        // first, find cycle boundary for current cycle
        final Time cycle = new Time(now);
        cycle.hour = cycle.minute = cycle.second = 0;
        snapToCycleDay(cycle, policy.cycleDay);
        snapToCycleDay(cycle, policy.cycleDay, policy.cycleLength);

        if (Time.compare(cycle, now) >= 0) {
            // cycle boundary is beyond now, use last cycle boundary; start by
            // pushing ourselves squarely into last month.
            final Time lastMonth = new Time(now);
            lastMonth.hour = lastMonth.minute = lastMonth.second = 0;
            lastMonth.monthDay = 1;
            lastMonth.month -= 1;
            lastMonth.normalize(true);
            // pushing ourselves squarely into last month, week or day
            final Time last = new Time(now);
            last.hour = last.minute = last.second = 0;

            cycle.set(lastMonth);
            snapToCycleDay(cycle, policy.cycleDay);
            if (policy.cycleLength == CYCLE_MONTHLY) {
                last.monthDay = 1;
                last.month -= 1;
            } else if (policy.cycleLength == CYCLE_WEEKLY) {
                last.monthDay -= 7;
            } else if (policy.cycleLength == CYCLE_DAILY) {
                last.monthDay -= 1;
            }

            last.normalize(true);

            cycle.set(last);
            snapToCycleDay(cycle, policy.cycleDay, policy.cycleLength);
        }

        return cycle.toMillis(true);
@@ -191,22 +202,30 @@ public class NetworkPolicyManager {
        final Time now = new Time(policy.cycleTimezone);
        now.set(currentTime);

        // first, find cycle boundary for current month
        // first, find cycle boundary for current cycle
        final Time cycle = new Time(now);
        cycle.hour = cycle.minute = cycle.second = 0;
        snapToCycleDay(cycle, policy.cycleDay);
        snapToCycleDay(cycle, policy.cycleDay, policy.cycleLength);

        if (Time.compare(cycle, now) <= 0) {
            // cycle boundary is before now, use next cycle boundary; start by
            // pushing ourselves squarely into next month.
            final Time nextMonth = new Time(now);
            nextMonth.hour = nextMonth.minute = nextMonth.second = 0;
            nextMonth.monthDay = 1;
            nextMonth.month += 1;
            nextMonth.normalize(true);
            // pushing ourselves squarely into next month, week or day
            final Time next = new Time(now);
            next.hour = next.minute = next.second = 0;

            cycle.set(nextMonth);
            snapToCycleDay(cycle, policy.cycleDay);
            if (policy.cycleLength == CYCLE_MONTHLY) {
                next.monthDay = 1;
                next.month += 1;
            } else if (policy.cycleLength == CYCLE_WEEKLY) {
                next.monthDay += 7;
            } else if (policy.cycleLength == CYCLE_DAILY) {
                next.monthDay += 1;
            }

            next.normalize(true);

            cycle.set(next);
            snapToCycleDay(cycle, policy.cycleDay, policy.cycleLength);
        }

        return cycle.toMillis(true);
@@ -230,6 +249,20 @@ public class NetworkPolicyManager {
        time.normalize(true);
    }

    /**
     * Snap to the cycle day for the current cycle length
     *
     * @hide
     */
    public static void snapToCycleDay(Time time, int cycleDay, int cycleLength) {
        if (cycleLength == CYCLE_MONTHLY) {
            snapToCycleDay(time, cycleDay);
        } else if (cycleLength == CYCLE_WEEKLY) {
            time.monthDay += (cycleDay - time.weekDay);
            time.normalize(true);
        }
    }

    /**
     * Check if given UID can have a {@link #setUidPolicy(int, int)} defined,
     * usually to protect critical system services.
+20 −8
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import static android.net.ConnectivityManager.TYPE_WIFI;
import static android.net.ConnectivityManager.TYPE_WIMAX;
import static android.net.ConnectivityManager.isNetworkTypeMobile;
import static android.net.NetworkPolicy.CYCLE_NONE;
import static android.net.NetworkPolicy.CYCLE_MONTHLY;
import static android.net.NetworkPolicy.LIMIT_DISABLED;
import static android.net.NetworkPolicy.SNOOZE_NEVER;
import static android.net.NetworkPolicy.WARNING_DISABLED;
@@ -183,7 +184,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
    private static final int VERSION_SWITCH_APP_ID = 8;
    private static final int VERSION_ADDED_NETWORK_ID = 9;
    private static final int VERSION_SWITCH_UID = 10;
    private static final int VERSION_LATEST = VERSION_SWITCH_UID;
    private static final int VERSION_ADDED_DATA_USAGE_CYCLE_LENGTH = 11;
    private static final int VERSION_LATEST = VERSION_ADDED_DATA_USAGE_CYCLE_LENGTH;

    @VisibleForTesting
    public static final int TYPE_WARNING = 0x1;
@@ -203,6 +205,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
    private static final String ATTR_SUBSCRIBER_ID = "subscriberId";
    private static final String ATTR_NETWORK_ID = "networkId";
    private static final String ATTR_CYCLE_DAY = "cycleDay";
    private static final String ATTR_CYCLE_LENGTH = "cycleLength";
    private static final String ATTR_CYCLE_TIMEZONE = "cycleTimezone";
    private static final String ATTR_WARNING_BYTES = "warningBytes";
    private static final String ATTR_LIMIT_BYTES = "limitBytes";
@@ -585,9 +588,9 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
                if (policy == null && meteredHint) {
                    // policy doesn't exist, and AP is hinting that it's
                    // metered: create an inferred policy.
                    policy = new NetworkPolicy(template, CYCLE_NONE, Time.TIMEZONE_UTC,
                            WARNING_DISABLED, LIMIT_DISABLED, SNOOZE_NEVER, SNOOZE_NEVER,
                            meteredHint, true);
                    policy = new NetworkPolicy(template, CYCLE_NONE, CYCLE_MONTHLY,
                            Time.TIMEZONE_UTC, WARNING_DISABLED, LIMIT_DISABLED, SNOOZE_NEVER,
                            SNOOZE_NEVER, meteredHint, true);
                    addNetworkPolicyLocked(policy);

                } else if (policy != null && policy.inferred) {
@@ -1125,11 +1128,13 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
            time.setToNow();

            final int cycleDay = time.monthDay;
            final int cycleLength = CYCLE_MONTHLY;
            final String cycleTimezone = time.timezone;

            final NetworkTemplate template = buildTemplateMobileAll(subscriberId);
            final NetworkPolicy policy = new NetworkPolicy(template, cycleDay, cycleTimezone,
                    warningBytes, LIMIT_DISABLED, SNOOZE_NEVER, SNOOZE_NEVER, true, true);
            final NetworkPolicy policy = new NetworkPolicy(template, cycleDay, cycleLength, 
                    cycleTimezone, warningBytes, LIMIT_DISABLED, SNOOZE_NEVER, SNOOZE_NEVER, 
                    true, true);
            addNetworkPolicyLocked(policy);
        }
    }
@@ -1171,6 +1176,12 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
                            networkId = null;
                        }
                        final int cycleDay = readIntAttribute(in, ATTR_CYCLE_DAY);
                        final int cycleLength;
                        if (version >= VERSION_ADDED_DATA_USAGE_CYCLE_LENGTH) {
                            cycleLength = readIntAttribute(in, ATTR_CYCLE_LENGTH);
                        } else {
                            cycleLength = CYCLE_MONTHLY;
                        }
                        final String cycleTimezone;
                        if (version >= VERSION_ADDED_TIMEZONE) {
                            cycleTimezone = in.getAttributeValue(null, ATTR_CYCLE_TIMEZONE);
@@ -1217,8 +1228,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
                        final NetworkTemplate template = new NetworkTemplate(
                                networkTemplate, subscriberId, networkId);
                        mNetworkPolicy.put(template, new NetworkPolicy(template, cycleDay,
                                cycleTimezone, warningBytes, limitBytes, lastWarningSnooze,
                                lastLimitSnooze, metered, inferred));
                                cycleLength, cycleTimezone, warningBytes, limitBytes, 
                                lastWarningSnooze, lastLimitSnooze, metered, inferred));

                    } else if (TAG_UID_POLICY.equals(tag)) {
                        final int uid = readIntAttribute(in, ATTR_UID);
@@ -1302,6 +1313,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
                    out.attribute(null, ATTR_NETWORK_ID, networkId);
                }
                writeIntAttribute(out, ATTR_CYCLE_DAY, policy.cycleDay);
                writeIntAttribute(out, ATTR_CYCLE_LENGTH, policy.cycleLength);
                out.attribute(null, ATTR_CYCLE_TIMEZONE, policy.cycleTimezone);
                writeLongAttribute(out, ATTR_WARNING_BYTES, policy.warningBytes);
                writeLongAttribute(out, ATTR_LIMIT_BYTES, policy.limitBytes);