DefaultNetworkEvent.java revision 5df9d729f6c78215f287701d7e136dfc922e2bd3
1/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.net.metrics;
18
19import android.annotation.SystemApi;
20import android.net.NetworkCapabilities;
21import android.os.Parcel;
22import android.os.Parcelable;
23
24/**
25 * {@hide}
26 */
27@SystemApi
28public final class DefaultNetworkEvent extends IpConnectivityEvent implements Parcelable {
29    // The ID of the network that has become the new default or NETID_UNSET if none.
30    public final int netId;
31    // The list of transport types of the new default network, for example TRANSPORT_WIFI, as
32    // defined in NetworkCapabilities.java.
33    public final int[] transportTypes;
34    // The ID of the network that was the default before or NETID_UNSET if none.
35    public final int prevNetId;
36    // Whether the previous network had IPv4/IPv6 connectivity.
37    public final boolean prevIPv4;
38    public final boolean prevIPv6;
39
40    private DefaultNetworkEvent(int netId, int[] transportTypes,
41                int prevNetId, boolean prevIPv4, boolean prevIPv6) {
42        this.netId = netId;
43        this.transportTypes = transportTypes;
44        this.prevNetId = prevNetId;
45        this.prevIPv4 = prevIPv4;
46        this.prevIPv6 = prevIPv6;
47    }
48
49    private DefaultNetworkEvent(Parcel in) {
50        this.netId = in.readInt();
51        this.transportTypes = in.createIntArray();
52        this.prevNetId = in.readInt();
53        this.prevIPv4 = (in.readByte() > 0);
54        this.prevIPv6 = (in.readByte() > 0);
55    }
56
57    public void writeToParcel(Parcel out, int flags) {
58        out.writeInt(netId);
59        out.writeIntArray(transportTypes);
60        out.writeInt(prevNetId);
61        out.writeByte(prevIPv4 ? (byte) 1 : (byte) 0);
62        out.writeByte(prevIPv6 ? (byte) 1 : (byte) 0);
63    }
64
65    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        final DefaultNetworkEvent ev =
89                new DefaultNetworkEvent(netId, transports, prevNetId, hadIPv4, hadIPv6);
90        logEvent(IPCE_CONSRV_DEFAULT_NET_CHANGE, ev);
91    }
92};
93