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