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

Commit 215de950 authored by Frank Li's avatar Frank Li Committed by Automerger Merge Worker
Browse files

Merge "[SUBID01-0]Grow NetworkIdentity to include a new mSubId field" am: 8e7b0f1a am: 63210297

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

Change-Id: I441a5bb32bcc491a9c6f8ec06823d4273c36fd72
parents ad1c6840 63210297
Loading
Loading
Loading
Loading
+15 −5
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import static android.net.ConnectivityManager.TYPE_MOBILE_MMS;
import static android.net.ConnectivityManager.TYPE_MOBILE_SUPL;
import static android.net.NetworkStats.SET_DEFAULT;
import static android.net.NetworkStats.TAG_NONE;
import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;

import android.annotation.NonNull;
import android.annotation.SystemApi;
@@ -108,6 +109,7 @@ public class NetworkStatsDataMigrationUtils {
        static final int VERSION_ADD_METERED = 4;
        static final int VERSION_ADD_DEFAULT_NETWORK = 5;
        static final int VERSION_ADD_OEM_MANAGED_NETWORK = 6;
        static final int VERSION_ADD_SUB_ID = 7;
    }

    /**
@@ -448,6 +450,13 @@ public class NetworkStatsDataMigrationUtils {
                oemNetCapabilities = NetworkTemplate.OEM_MANAGED_NO;
            }

            final int subId;
            if (version >= IdentitySetVersion.VERSION_ADD_SUB_ID) {
                subId = in.readInt();
            } else {
                subId = INVALID_SUBSCRIPTION_ID;
            }

            // Legacy files might contain TYPE_MOBILE_* types which were deprecated in later
            // releases. For backward compatibility, record them as TYPE_MOBILE instead.
            final int collapsedLegacyType = getCollapsedLegacyType(type);
@@ -457,7 +466,8 @@ public class NetworkStatsDataMigrationUtils {
                    .setWifiNetworkKey(networkId)
                    .setRoaming(roaming).setMetered(metered)
                    .setDefaultNetwork(defaultNetwork)
                    .setOemManaged(oemNetCapabilities);
                    .setOemManaged(oemNetCapabilities)
                    .setSubId(subId);
            if (type == TYPE_MOBILE && ratType != NetworkTemplate.NETWORK_TYPE_ALL) {
                builder.setRatType(ratType);
            }
@@ -501,10 +511,10 @@ public class NetworkStatsDataMigrationUtils {
     * This is copied from {@code NetworkStatsCollection#readLegacyUid}.
     * See {@code NetworkStatsService#maybeUpgradeLegacyStatsLocked}.
     *
     * @param taggedData whether to read tagged data. For legacy uid files, the tagged
     *                   data was stored in the same binary file with non-tagged data.
     *                   But in later releases, these data should be kept in different
     *                   recorders.
     * @param taggedData whether to read only tagged data (true) or only non-tagged data
     *                   (false). For legacy uid files, the tagged data was stored in
     *                   the same binary file with non-tagged data. But in later releases,
     *                   these data should be kept in different recorders.
     * @hide
     */
    @VisibleForTesting
+34 −5
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static android.annotation.SystemApi.Client.MODULE_LIBRARIES;
import static android.net.ConnectivityManager.TYPE_MOBILE;
import static android.net.ConnectivityManager.TYPE_WIFI;
import static android.net.NetworkTemplate.NETWORK_TYPE_ALL;
import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;

import android.annotation.IntDef;
import android.annotation.NonNull;
@@ -86,6 +87,7 @@ public class NetworkIdentity {

    final int mType;
    final int mRatType;
    final int mSubId;
    final String mSubscriberId;
    final String mWifiNetworkKey;
    final boolean mRoaming;
@@ -96,7 +98,7 @@ public class NetworkIdentity {
    /** @hide */
    public NetworkIdentity(
            int type, int ratType, @Nullable String subscriberId, @Nullable String wifiNetworkKey,
            boolean roaming, boolean metered, boolean defaultNetwork, int oemManaged) {
            boolean roaming, boolean metered, boolean defaultNetwork, int oemManaged, int subId) {
        mType = type;
        mRatType = ratType;
        mSubscriberId = subscriberId;
@@ -105,12 +107,13 @@ public class NetworkIdentity {
        mMetered = metered;
        mDefaultNetwork = defaultNetwork;
        mOemManaged = oemManaged;
        mSubId = subId;
    }

    @Override
    public int hashCode() {
        return Objects.hash(mType, mRatType, mSubscriberId, mWifiNetworkKey, mRoaming, mMetered,
                mDefaultNetwork, mOemManaged);
                mDefaultNetwork, mOemManaged, mSubId);
    }

    @Override
@@ -122,7 +125,8 @@ public class NetworkIdentity {
                    && Objects.equals(mWifiNetworkKey, ident.mWifiNetworkKey)
                    && mMetered == ident.mMetered
                    && mDefaultNetwork == ident.mDefaultNetwork
                    && mOemManaged == ident.mOemManaged;
                    && mOemManaged == ident.mOemManaged
                    && mSubId == ident.mSubId;
        }
        return false;
    }
@@ -150,6 +154,7 @@ public class NetworkIdentity {
        builder.append(", metered=").append(mMetered);
        builder.append(", defaultNetwork=").append(mDefaultNetwork);
        builder.append(", oemManaged=").append(getOemManagedNames(mOemManaged));
        builder.append(", subId=").append(mSubId);
        return builder.append("}").toString();
    }

@@ -256,6 +261,11 @@ public class NetworkIdentity {
        return mOemManaged;
    }

    /** Get the SubId of this instance. */
    public int getSubId() {
        return mSubId;
    }

    /**
     * Assemble a {@link NetworkIdentity} from the passed arguments.
     *
@@ -276,7 +286,8 @@ public class NetworkIdentity {
    public static NetworkIdentity buildNetworkIdentity(Context context,
            @NonNull NetworkStateSnapshot snapshot, boolean defaultNetwork, int ratType) {
        final NetworkIdentity.Builder builder = new NetworkIdentity.Builder()
                .setNetworkStateSnapshot(snapshot).setDefaultNetwork(defaultNetwork);
                .setNetworkStateSnapshot(snapshot).setDefaultNetwork(defaultNetwork)
                .setSubId(snapshot.getSubId());
        if (snapshot.getLegacyType() == TYPE_MOBILE && ratType != NETWORK_TYPE_ALL) {
            builder.setRatType(ratType);
        }
@@ -325,6 +336,9 @@ public class NetworkIdentity {
        if (res == 0) {
            res = Integer.compare(left.mOemManaged, right.mOemManaged);
        }
        if (res == 0) {
            res = Integer.compare(left.mSubId, right.mSubId);
        }
        return res;
    }

@@ -345,6 +359,7 @@ public class NetworkIdentity {
        private boolean mMetered;
        private boolean mDefaultNetwork;
        private int mOemManaged;
        private int mSubId;

        /**
         * Creates a new Builder.
@@ -359,6 +374,7 @@ public class NetworkIdentity {
            mMetered = false;
            mDefaultNetwork = false;
            mOemManaged = NetworkTemplate.OEM_MANAGED_NO;
            mSubId = INVALID_SUBSCRIPTION_ID;
        }

        /**
@@ -537,6 +553,19 @@ public class NetworkIdentity {
            return this;
        }

        /**
         * Set the Subscription Id.
         *
         * @param subId the Subscription Id of the network. Or INVALID_SUBSCRIPTION_ID if not
         *              applicable.
         * @return this builder.
         */
        @NonNull
        public Builder setSubId(int subId) {
            mSubId = subId;
            return this;
        }

        private void ensureValidParameters() {
            // Assert non-mobile network cannot have a ratType.
            if (mType != TYPE_MOBILE && mRatType != NetworkTemplate.NETWORK_TYPE_ALL) {
@@ -559,7 +588,7 @@ public class NetworkIdentity {
        public NetworkIdentity build() {
            ensureValidParameters();
            return new NetworkIdentity(mType, mRatType, mSubscriberId, mWifiNetworkKey,
                    mRoaming, mMetered, mDefaultNetwork, mOemManaged);
                    mRoaming, mMetered, mDefaultNetwork, mOemManaged, mSubId);
        }
    }
}
+12 −2
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package android.net;

import static android.net.ConnectivityManager.TYPE_MOBILE;
import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;

import android.annotation.NonNull;
import android.service.NetworkIdentitySetProto;
@@ -42,6 +43,7 @@ public class NetworkIdentitySet extends HashSet<NetworkIdentity> {
    private static final int VERSION_ADD_METERED = 4;
    private static final int VERSION_ADD_DEFAULT_NETWORK = 5;
    private static final int VERSION_ADD_OEM_MANAGED_NETWORK = 6;
    private static final int VERSION_ADD_SUB_ID = 7;

    /**
     * Construct a {@link NetworkIdentitySet} object.
@@ -103,8 +105,15 @@ public class NetworkIdentitySet extends HashSet<NetworkIdentity> {
                oemNetCapabilities = NetworkIdentity.OEM_NONE;
            }

            final int subId;
            if (version >= VERSION_ADD_SUB_ID) {
                subId = in.readInt();
            } else {
                subId = INVALID_SUBSCRIPTION_ID;
            }

            add(new NetworkIdentity(type, ratType, subscriberId, networkId, roaming, metered,
                    defaultNetwork, oemNetCapabilities));
                    defaultNetwork, oemNetCapabilities, subId));
        }
    }

@@ -113,7 +122,7 @@ public class NetworkIdentitySet extends HashSet<NetworkIdentity> {
     * @hide
     */
    public void writeToStream(DataOutput out) throws IOException {
        out.writeInt(VERSION_ADD_OEM_MANAGED_NETWORK);
        out.writeInt(VERSION_ADD_SUB_ID);
        out.writeInt(size());
        for (NetworkIdentity ident : this) {
            out.writeInt(ident.getType());
@@ -124,6 +133,7 @@ public class NetworkIdentitySet extends HashSet<NetworkIdentity> {
            out.writeBoolean(ident.isMetered());
            out.writeBoolean(ident.isDefaultNetwork());
            out.writeInt(ident.getOemManaged());
            out.writeInt(ident.getSubId());
        }
    }

+20 −1
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
package android.net;

import static android.annotation.SystemApi.Client.MODULE_LIBRARIES;
import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;

import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -98,12 +100,29 @@ public final class NetworkStateSnapshot implements Parcelable {
        return mLinkProperties;
    }

    /** Get the Subscriber Id of the network associated with this snapshot. */
    /**
     * Get the Subscriber Id of the network associated with this snapshot.
     * @deprecated Please use #getSubId, which doesn't return personally identifiable
     * information.
     */
    @Deprecated
    @Nullable
    public String getSubscriberId() {
        return mSubscriberId;
    }

    /** Get the subId of the network associated with this snapshot. */
    public int getSubId() {
        if (mNetworkCapabilities.hasTransport(TRANSPORT_CELLULAR)) {
            final NetworkSpecifier spec = mNetworkCapabilities.getNetworkSpecifier();
            if (spec instanceof TelephonyNetworkSpecifier) {
                return ((TelephonyNetworkSpecifier) spec).getSubscriptionId();
            }
        }
        return INVALID_SUBSCRIPTION_ID;
    }


    /**
     * Get the legacy type of the network associated with this snapshot.
     * @return the legacy network type. See {@code ConnectivityManager#TYPE_*}.
+9 −4
Original line number Diff line number Diff line
@@ -1540,10 +1540,15 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
                        NetworkCapabilities.NET_CAPABILITY_IMS) && !ident.isMetered()) {

                    // Copy the identify from IMS one but mark it as metered.
                    NetworkIdentity vtIdent = new NetworkIdentity(ident.getType(),
                            ident.getRatType(), ident.getSubscriberId(), ident.getWifiNetworkKey(),
                            ident.isRoaming(), true /* metered */,
                            true /* onDefaultNetwork */, ident.getOemManaged());
                    NetworkIdentity vtIdent = new NetworkIdentity.Builder()
                            .setType(ident.getType())
                            .setRatType(ident.getRatType())
                            .setSubscriberId(ident.getSubscriberId())
                            .setWifiNetworkKey(ident.getWifiNetworkKey())
                            .setRoaming(ident.isRoaming()).setMetered(true)
                            .setDefaultNetwork(true)
                            .setOemManaged(ident.getOemManaged())
                            .setSubId(ident.getSubId()).build();
                    final String ifaceVt = IFACE_VT + getSubIdForMobile(snapshot);
                    findOrCreateNetworkIdentitySet(mActiveIfaces, ifaceVt).add(vtIdent);
                    findOrCreateNetworkIdentitySet(mActiveUidIfaces, ifaceVt).add(vtIdent);
Loading