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

Commit e30047b0 authored by Junyu Lai's avatar Junyu Lai Committed by Automerger Merge Worker
Browse files

Merge "[MS15.1] Remove get/setSubscriberIdMatchRule dependencies" am:...

Merge "[MS15.1] Remove get/setSubscriberIdMatchRule dependencies" am: d159c1ea am: d0c50a49 am: 157b8f7a am: 5dddce9a

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1926944

Change-Id: I3fc3b45ac97b1f3a60cba1f2700fe7dcd73ad43b
parents a1709120 5dddce9a
Loading
Loading
Loading
Loading
+19 −20
Original line number Diff line number Diff line
@@ -23,7 +23,6 @@ import static android.net.NetworkTemplate.MATCH_CARRIER;
import static android.net.NetworkTemplate.MATCH_ETHERNET;
import static android.net.NetworkTemplate.MATCH_MOBILE;
import static android.net.NetworkTemplate.MATCH_WIFI;
import static android.net.NetworkTemplate.SUBSCRIBER_ID_MATCH_RULE_EXACT;

import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -45,6 +44,7 @@ import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Iterator;
import java.util.Objects;
import java.util.Set;

/**
 * Policy for networks matching a {@link NetworkTemplate}, including usage cycle
@@ -62,15 +62,16 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> {
     * Initial Version of the NetworkTemplate backup serializer.
     */
    private static final int TEMPLATE_BACKUP_VERSION_1_INIT = 1;
    private static final int TEMPLATE_BACKUP_VERSION_2_UNSUPPORTED = 2;
    /**
     * Version of the NetworkTemplate backup serializer that added carrier template support.
     */
    private static final int TEMPLATE_BACKUP_VERSION_2_SUPPORT_CARRIER_TEMPLATE = 2;
    private static final int TEMPLATE_BACKUP_VERSION_3_SUPPORT_CARRIER_TEMPLATE = 3;
    /**
     * Latest Version of the NetworkTemplate Backup Serializer.
     */
    private static final int TEMPLATE_BACKUP_VERSION_LATEST =
            TEMPLATE_BACKUP_VERSION_2_SUPPORT_CARRIER_TEMPLATE;
            TEMPLATE_BACKUP_VERSION_3_SUPPORT_CARRIER_TEMPLATE;

    public static final int CYCLE_NONE = -1;
    public static final long WARNING_DISABLED = -1;
@@ -337,10 +338,9 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> {
        out.writeInt(TEMPLATE_BACKUP_VERSION_LATEST);

        out.writeInt(template.getMatchRule());
        BackupUtils.writeString(out, template.getSubscriberId());
        BackupUtils.writeString(out, template.getNetworkId());
        BackupUtils.writeString(out, template.getSubscriberIds().iterator().next());
        BackupUtils.writeString(out, template.getWifiNetworkKey());
        out.writeInt(template.getMeteredness());
        out.writeInt(template.getSubscriberIdMatchRule());

        return baos.toByteArray();
    }
@@ -349,33 +349,32 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> {
    private static NetworkTemplate getNetworkTemplateFromBackup(DataInputStream in)
            throws IOException, BackupUtils.BadVersionException {
        int version = in.readInt();
        if (version < TEMPLATE_BACKUP_VERSION_1_INIT || version > TEMPLATE_BACKUP_VERSION_LATEST) {
        if (version < TEMPLATE_BACKUP_VERSION_1_INIT || version > TEMPLATE_BACKUP_VERSION_LATEST
                || version == TEMPLATE_BACKUP_VERSION_2_UNSUPPORTED) {
            throw new BackupUtils.BadVersionException("Unknown Backup Serialization Version");
        }

        int matchRule = in.readInt();
        final String subscriberId = BackupUtils.readString(in);
        final String networkId = BackupUtils.readString(in);
        final String wifiNetworkKey = BackupUtils.readString(in);

        final int metered;
        final int subscriberIdMatchRule;
        if (version >= TEMPLATE_BACKUP_VERSION_2_SUPPORT_CARRIER_TEMPLATE) {
        if (version >= TEMPLATE_BACKUP_VERSION_3_SUPPORT_CARRIER_TEMPLATE) {
            metered = in.readInt();
            subscriberIdMatchRule = in.readInt();
        } else {
            // For backward compatibility, fill the missing filters from match rules.
            metered = (matchRule == MATCH_MOBILE
                    || matchRule == NetworkTemplate.MATCH_MOBILE_WILDCARD
                    || matchRule == MATCH_CARRIER) ? METERED_YES : METERED_ALL;
            subscriberIdMatchRule = SUBSCRIBER_ID_MATCH_RULE_EXACT;
            metered = (matchRule == MATCH_MOBILE || matchRule == MATCH_CARRIER)
                    ? METERED_YES : METERED_ALL;
        }

        try {
            return new NetworkTemplate(matchRule,
                    subscriberId, new String[]{subscriberId},
                    networkId, metered, NetworkStats.ROAMING_ALL,
                    NetworkStats.DEFAULT_NETWORK_ALL, NetworkTemplate.NETWORK_TYPE_ALL,
                    NetworkTemplate.OEM_MANAGED_ALL, subscriberIdMatchRule);
            final NetworkTemplate.Builder builder = new NetworkTemplate.Builder(matchRule)
                    .setWifiNetworkKey(wifiNetworkKey)
                    .setMeteredness(metered);
            if (subscriberId != null) {
                builder.setSubscriberIds(Set.of(subscriberId));
            }
            return builder.build();
        } catch (IllegalArgumentException e) {
            throw new BackupUtils.BadVersionException(
                    "Restored network template contains unknown match rule " + matchRule, e);
+15 −42
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ import android.util.ArraySet;

import com.android.internal.util.ArrayUtils;
import com.android.net.module.util.NetworkIdentityUtils;
import com.android.net.module.util.NetworkStatsUtils;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -114,27 +115,6 @@ public final class NetworkTemplate implements Parcelable {
     */
    public static final int MATCH_CARRIER = 10;

    /** @hide */
    @Retention(RetentionPolicy.SOURCE)
    @IntDef(prefix = { "SUBSCRIBER_ID_MATCH_RULE_" }, value = {
            SUBSCRIBER_ID_MATCH_RULE_EXACT,
            SUBSCRIBER_ID_MATCH_RULE_ALL
    })
    public @interface SubscriberIdMatchRule{}
    /**
     * Value of the match rule of the subscriberId to match networks with specific subscriberId.
     *
     * @hide
     */
    public static final int SUBSCRIBER_ID_MATCH_RULE_EXACT = 0;
    /**
     * Value of the match rule of the subscriberId to match networks with any subscriberId which
     * includes null and non-null.
     *
     * @hide
     */
    public static final int SUBSCRIBER_ID_MATCH_RULE_ALL = 1;

    // TODO: Remove this and replace all callers with WIFI_NETWORK_KEY_ALL.
    /** @hide */
    public static final String WIFI_NETWORKID_ALL = null;
@@ -235,11 +215,11 @@ public final class NetworkTemplate implements Parcelable {
        if (TextUtils.isEmpty(subscriberId)) {
            return new NetworkTemplate(MATCH_MOBILE_WILDCARD, null, null, null,
                    metered, ROAMING_ALL, DEFAULT_NETWORK_ALL, ratType, OEM_MANAGED_ALL,
                    SUBSCRIBER_ID_MATCH_RULE_EXACT);
                    NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT);
        }
        return new NetworkTemplate(MATCH_MOBILE, subscriberId, new String[]{subscriberId}, null,
                metered, ROAMING_ALL, DEFAULT_NETWORK_ALL, ratType, OEM_MANAGED_ALL,
                SUBSCRIBER_ID_MATCH_RULE_EXACT);
                NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT);
    }

    /**
@@ -285,7 +265,7 @@ public final class NetworkTemplate implements Parcelable {
                new String[] { null } /* matchSubscriberIds */,
                networkId, METERED_ALL, ROAMING_ALL,
                DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, OEM_MANAGED_ALL,
                SUBSCRIBER_ID_MATCH_RULE_ALL);
                NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_ALL);
    }

    /**
@@ -302,7 +282,7 @@ public final class NetworkTemplate implements Parcelable {
        return new NetworkTemplate(MATCH_WIFI, subscriberId, new String[] { subscriberId },
                networkId, METERED_ALL, ROAMING_ALL,
                DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, OEM_MANAGED_ALL,
                SUBSCRIBER_ID_MATCH_RULE_EXACT);
                NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT);
    }

    /**
@@ -346,7 +326,7 @@ public final class NetworkTemplate implements Parcelable {
        return new NetworkTemplate(MATCH_CARRIER, subscriberId,
                new String[] { subscriberId }, null /* networkId */, METERED_YES, ROAMING_ALL,
                DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL, OEM_MANAGED_ALL,
                SUBSCRIBER_ID_MATCH_RULE_EXACT);
                NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT);
    }

    private final int mMatchRule;
@@ -384,7 +364,7 @@ public final class NetworkTemplate implements Parcelable {
            case MATCH_MOBILE:
            case MATCH_CARRIER:
                // MOBILE and CARRIER templates must always specify a subscriber ID.
                if (subscriberIdMatchRule == SUBSCRIBER_ID_MATCH_RULE_ALL) {
                if (subscriberIdMatchRule == NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_ALL) {
                    throw new IllegalArgumentException("Invalid SubscriberIdMatchRule "
                            + "on match rule: " + getMatchRuleName(matchRule));
                }
@@ -411,7 +391,7 @@ public final class NetworkTemplate implements Parcelable {
        this(matchRule, subscriberId, matchSubscriberIds, networkId,
                (matchRule == MATCH_MOBILE || matchRule == MATCH_MOBILE_WILDCARD) ? METERED_YES
                : METERED_ALL , ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL,
                OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT);
                OEM_MANAGED_ALL, NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT);
    }

    /** @hide */
@@ -420,7 +400,8 @@ public final class NetworkTemplate implements Parcelable {
            String networkId, int metered, int roaming, int defaultNetwork, int subType,
            int oemManaged) {
        this(matchRule, subscriberId, matchSubscriberIds, networkId, metered, roaming,
                defaultNetwork, subType, oemManaged, SUBSCRIBER_ID_MATCH_RULE_EXACT);
                defaultNetwork, subType, oemManaged,
                NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT);
    }

    /** @hide */
@@ -539,9 +520,9 @@ public final class NetworkTemplate implements Parcelable {

    private static String subscriberIdMatchRuleToString(int rule) {
        switch (rule) {
            case SUBSCRIBER_ID_MATCH_RULE_EXACT:
            case NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT:
                return "EXACT_MATCH";
            case SUBSCRIBER_ID_MATCH_RULE_ALL:
            case NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_ALL:
                return "ALL";
            default:
                return "Unknown rule " + rule;
@@ -608,15 +589,6 @@ public final class NetworkTemplate implements Parcelable {
        return mNetworkId;
    }

    /**
     * Get Subscriber Id Match Rule of the template.
     *
     * @hide
     */
    public int getSubscriberIdMatchRule() {
        return mSubscriberIdMatchRule;
    }

    /**
     * Get meteredness filter of the template.
     */
@@ -730,7 +702,7 @@ public final class NetworkTemplate implements Parcelable {
     * @hide
     */
    public boolean matchesSubscriberId(@Nullable String subscriberId) {
        return mSubscriberIdMatchRule == SUBSCRIBER_ID_MATCH_RULE_ALL
        return mSubscriberIdMatchRule == NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_ALL
                || ArrayUtils.contains(mMatchSubscriberIds, subscriberId);
    }

@@ -1176,7 +1148,8 @@ public final class NetworkTemplate implements Parcelable {
        public NetworkTemplate build() {
            assertRequestableParameters();
            final int subscriberIdMatchRule = mMatchSubscriberIds.isEmpty()
                    ? SUBSCRIBER_ID_MATCH_RULE_ALL : SUBSCRIBER_ID_MATCH_RULE_EXACT;
                    ? NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_ALL
                    : NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT;
            return new NetworkTemplate(getWildcardDeducedMatchRule(),
                    mMatchSubscriberIds.isEmpty() ? null : mMatchSubscriberIds.iterator().next(),
                    mMatchSubscriberIds.toArray(new String[0]),
+9 −8
Original line number Diff line number Diff line
@@ -25,9 +25,7 @@ import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING;
import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
import static android.net.NetworkPolicy.LIMIT_DISABLED;
import static android.net.NetworkPolicy.WARNING_DISABLED;
import static android.net.NetworkTemplate.NETWORK_TYPE_ALL;
import static android.net.NetworkTemplate.OEM_MANAGED_ALL;
import static android.net.NetworkTemplate.SUBSCRIBER_ID_MATCH_RULE_EXACT;
import static android.provider.Settings.Global.NETWORK_DEFAULT_DAILY_MULTIPATH_QUOTA_BYTES;
import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;

@@ -77,6 +75,8 @@ import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.temporal.ChronoUnit;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;

@@ -224,12 +224,13 @@ public class MultipathPolicyTracker {
                        "Can't get TelephonyManager for subId %d", subId));
            }

            subscriberId = tele.getSubscriberId();
            mNetworkTemplate = new NetworkTemplate(
                    NetworkTemplate.MATCH_MOBILE, subscriberId, new String[] { subscriberId },
                    null, NetworkStats.METERED_YES, NetworkStats.ROAMING_ALL,
                    NetworkStats.DEFAULT_NETWORK_NO, NETWORK_TYPE_ALL, OEM_MANAGED_ALL,
                    SUBSCRIBER_ID_MATCH_RULE_EXACT);
            subscriberId = Objects.requireNonNull(tele.getSubscriberId(),
                    "Null subscriber Id for subId " + subId);
            mNetworkTemplate = new NetworkTemplate.Builder(NetworkTemplate.MATCH_MOBILE)
                    .setSubscriberIds(Set.of(subscriberId))
                    .setMeteredness(NetworkStats.METERED_YES)
                    .setDefaultNetworkStatus(NetworkStats.DEFAULT_NETWORK_NO)
                    .build();
            mUsageCallback = new UsageCallback() {
                @Override
                public void onThresholdReached(int networkType, String subscriberId) {
+18 −8
Original line number Diff line number Diff line
@@ -255,6 +255,7 @@ import com.android.internal.util.IndentingPrintWriter;
import com.android.internal.util.StatLogger;
import com.android.internal.util.XmlUtils;
import com.android.net.module.util.NetworkIdentityUtils;
import com.android.net.module.util.NetworkStatsUtils;
import com.android.net.module.util.PermissionUtils;
import com.android.server.EventLogTags;
import com.android.server.LocalServices;
@@ -2368,7 +2369,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
                            templateMeteredness = readIntAttribute(in, ATTR_TEMPLATE_METERED);

                        } else {
                            subscriberIdMatchRule = NetworkTemplate.SUBSCRIBER_ID_MATCH_RULE_EXACT;
                            subscriberIdMatchRule =
                                    NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT;
                            if (templateType == MATCH_MOBILE) {
                                Log.d(TAG, "Update template match rule from mobile to carrier and"
                                        + " force to metered");
@@ -2431,11 +2433,17 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
                        } else {
                            inferred = false;
                        }
                        final NetworkTemplate template = new NetworkTemplate(templateType,
                                subscriberId, new String[] { subscriberId },
                                networkId, templateMeteredness, NetworkStats.ROAMING_ALL,
                                NetworkStats.DEFAULT_NETWORK_ALL, NetworkTemplate.NETWORK_TYPE_ALL,
                                NetworkTemplate.OEM_MANAGED_ALL, subscriberIdMatchRule);
                        final NetworkTemplate.Builder builder =
                                new NetworkTemplate.Builder(templateType)
                                        .setWifiNetworkKey(networkId)
                                        .setMeteredness(templateMeteredness);
                        if (subscriberIdMatchRule
                                == NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT) {
                            final ArraySet<String> ids = new ArraySet<>();
                            ids.add(subscriberId);
                            builder.setSubscriberIds(ids);
                        }
                        final NetworkTemplate template = builder.build();
                        if (NetworkPolicy.isTemplatePersistable(template)) {
                            mNetworkPolicy.put(template, new NetworkPolicy(template, cycleRule,
                                    warningBytes, limitBytes, lastWarningSnooze,
@@ -2651,8 +2659,10 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
                if (subscriberId != null) {
                    out.attribute(null, ATTR_SUBSCRIBER_ID, subscriberId);
                }
                writeIntAttribute(out, ATTR_SUBSCRIBER_ID_MATCH_RULE,
                        template.getSubscriberIdMatchRule());
                final int subscriberIdMatchRule = template.getSubscriberIds().isEmpty()
                        ? NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_ALL
                        : NetworkStatsUtils.SUBSCRIBER_ID_MATCH_RULE_EXACT;
                writeIntAttribute(out, ATTR_SUBSCRIBER_ID_MATCH_RULE, subscriberIdMatchRule);
                final String networkId = template.getNetworkId();
                if (networkId != null) {
                    out.attribute(null, ATTR_NETWORK_ID, networkId);
+4 −6
Original line number Diff line number Diff line
@@ -1986,9 +1986,8 @@ public class NetworkPolicyManagerServiceTest {
        assertEquals("Unexpected template match rule in network policies",
                NetworkTemplate.MATCH_CARRIER,
                actualPolicy.template.getMatchRule());
        assertEquals("Unexpected subscriberId match rule in network policies",
                NetworkTemplate.SUBSCRIBER_ID_MATCH_RULE_EXACT,
                actualPolicy.template.getSubscriberIdMatchRule());
        assertTrue("Unexpected subscriberIds size in network policies",
                actualPolicy.template.getSubscriberIds().size() > 0);
        assertEquals("Unexpected template meteredness in network policies",
                METERED_YES, actualPolicy.template.getMeteredness());
    }
@@ -2003,9 +2002,8 @@ public class NetworkPolicyManagerServiceTest {
        assertEquals("Unexpected template match rule in network policies",
                NetworkTemplate.MATCH_WIFI,
                actualPolicy.template.getMatchRule());
        assertEquals("Unexpected subscriberId match rule in network policies",
                NetworkTemplate.SUBSCRIBER_ID_MATCH_RULE_ALL,
                actualPolicy.template.getSubscriberIdMatchRule());
        assertEquals("Unexpected subscriberIds size in network policies",
                actualPolicy.template.getSubscriberIds().size(), 0);
        assertEquals("Unexpected template meteredness in network policies",
                METERED_NO, actualPolicy.template.getMeteredness());
    }