DefaultNetworkEvent.java revision 61cbccc2bf7983b50e7a7f1fdb1858caeab6fd96
12fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi/*
22fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi * Copyright (C) 2016 The Android Open Source Project
32fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi *
42fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi * Licensed under the Apache License, Version 2.0 (the "License");
52fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi * you may not use this file except in compliance with the License.
62fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi * You may obtain a copy of the License at
72fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi *
82fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi *      http://www.apache.org/licenses/LICENSE-2.0
92fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi *
102fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi * Unless required by applicable law or agreed to in writing, software
112fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi * distributed under the License is distributed on an "AS IS" BASIS,
122fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi * See the License for the specific language governing permissions and
142fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi * limitations under the License.
152fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi */
162fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi
172fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggipackage android.net.metrics;
182fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi
192fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggiimport android.annotation.SystemApi;
202fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggiimport android.net.NetworkCapabilities;
212fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggiimport android.os.Parcel;
222fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggiimport android.os.Parcelable;
232fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi
242fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi/**
252fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi * {@hide}
262fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi */
272fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi@SystemApi
282fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggipublic final class DefaultNetworkEvent extends IpConnectivityEvent implements Parcelable {
292fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi    // The ID of the network that has become the new default or NETID_UNSET if none.
302fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi    public final int netId;
312fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi    // The list of transport types of the new default network, for example TRANSPORT_WIFI, as
322fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi    // defined in NetworkCapabilities.java.
332fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi    public final int[] transportTypes;
342fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi    // The ID of the network that was the default before or NETID_UNSET if none.
352fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi    public final int prevNetId;
362fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi    // Whether the previous network had IPv4/IPv6 connectivity.
372fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi    public final boolean prevIPv4;
382fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi    public final boolean prevIPv6;
392fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi
402fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi    private DefaultNetworkEvent(int netId, int[] transportTypes,
412fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi                int prevNetId, boolean prevIPv4, boolean prevIPv6) {
422fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi        this.netId = netId;
432fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi        this.transportTypes = transportTypes;
442fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi        this.prevNetId = prevNetId;
452fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi        this.prevIPv4 = prevIPv4;
462fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi        this.prevIPv6 = prevIPv6;
472fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi    }
482fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi
492fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi    private DefaultNetworkEvent(Parcel in) {
502fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi        this.netId = in.readInt();
512fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi        this.transportTypes = in.createIntArray();
522fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi        this.prevNetId = in.readInt();
532fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi        this.prevIPv4 = (in.readByte() > 0);
542fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi        this.prevIPv6 = (in.readByte() > 0);
552fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi    }
562fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi
572fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi    public void writeToParcel(Parcel out, int flags) {
582fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi        out.writeInt(netId);
592fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi        out.writeIntArray(transportTypes);
602fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi        out.writeInt(prevNetId);
612fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi        out.writeByte(prevIPv4 ? (byte) 1 : (byte) 0);
622fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi        out.writeByte(prevIPv6 ? (byte) 1 : (byte) 0);
632fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi    }
642fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi
652fef6f7b155f2ff0d3531fe63b8e1c745bb3dc9dJorim Jaggi    public int describeContents() {
66        return 0;
67    }
68
69    @Override
70    public String toString() {
71      return String.format("DefaultNetworkEvent(%d -> %d, %s, IPv4: %b, IPv6: %b)", prevNetId,
72              netId, NetworkCapabilities.transportNamesOf(transportTypes), prevIPv4, prevIPv6);
73    }
74
75    public static final Parcelable.Creator<DefaultNetworkEvent> CREATOR
76        = new Parcelable.Creator<DefaultNetworkEvent>() {
77        public DefaultNetworkEvent createFromParcel(Parcel in) {
78            return new DefaultNetworkEvent(in);
79        }
80
81        public DefaultNetworkEvent[] newArray(int size) {
82            return new DefaultNetworkEvent[size];
83        }
84    };
85
86    public static void logEvent(
87            int netId, int[] transports, int prevNetId, boolean hadIPv4, boolean hadIPv6) {
88        logEvent(new DefaultNetworkEvent(netId, transports, prevNetId, hadIPv4, hadIPv6));
89    }
90};
91