102b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak/* 202b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak * Copyright (C) 2016 The Android Open Source Project 302b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak * 402b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak * Licensed under the Apache License, Version 2.0 (the "License"); 502b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak * you may not use this file except in compliance with the License. 602b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak * You may obtain a copy of the License at 702b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak * 802b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak * http://www.apache.org/licenses/LICENSE-2.0 902b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak * 1002b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak * Unless required by applicable law or agreed to in writing, software 1102b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak * distributed under the License is distributed on an "AS IS" BASIS, 1202b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1302b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak * See the License for the specific language governing permissions and 1402b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak * limitations under the License. 1502b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak */ 1602b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak 1702b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiakpackage android.net; 1802b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak 1902b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiakimport android.os.Parcel; 2002b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiakimport android.os.Parcelable; 21a365bace7a8e3e6da016531e26a6046a827acaa5Hugo Benichiimport com.android.internal.util.BitUtils; 2202b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak 23946b7e424e0e4d5bffc65ef405f32b966d192d3cHugo Benichi/** 24946b7e424e0e4d5bffc65ef405f32b966d192d3cHugo Benichi * Represents a core networking event defined in package android.net.metrics. 25946b7e424e0e4d5bffc65ef405f32b966d192d3cHugo Benichi * Logged by IpConnectivityLog and managed by ConnectivityMetrics service. 26946b7e424e0e4d5bffc65ef405f32b966d192d3cHugo Benichi * {@hide} 27946b7e424e0e4d5bffc65ef405f32b966d192d3cHugo Benichi * */ 2850d1c044b5ce4b6fef532dc6e083cef903f554b2Jeff Sharkeypublic final class ConnectivityMetricsEvent implements Parcelable { 2902b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak 30946b7e424e0e4d5bffc65ef405f32b966d192d3cHugo Benichi /** Time when this event was collected, as returned by System.currentTimeMillis(). */ 31ec27c4d9f33615be1f94d6bb5c5fd1358580ac05Hugo Benichi public long timestamp; 32946b7e424e0e4d5bffc65ef405f32b966d192d3cHugo Benichi /** Transports of the network associated with the event, as defined in NetworkCapabilities. */ 33946b7e424e0e4d5bffc65ef405f32b966d192d3cHugo Benichi public long transports; 34946b7e424e0e4d5bffc65ef405f32b966d192d3cHugo Benichi /** Network id of the network associated with the event, or 0 if unspecified. */ 35946b7e424e0e4d5bffc65ef405f32b966d192d3cHugo Benichi public int netId; 36946b7e424e0e4d5bffc65ef405f32b966d192d3cHugo Benichi /** Name of the network interface associated with the event, or null if unspecified. */ 37946b7e424e0e4d5bffc65ef405f32b966d192d3cHugo Benichi public String ifname; 3802b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak /** Opaque event-specific data. */ 39ec27c4d9f33615be1f94d6bb5c5fd1358580ac05Hugo Benichi public Parcelable data; 40ec27c4d9f33615be1f94d6bb5c5fd1358580ac05Hugo Benichi 41ec27c4d9f33615be1f94d6bb5c5fd1358580ac05Hugo Benichi public ConnectivityMetricsEvent() { 42ec27c4d9f33615be1f94d6bb5c5fd1358580ac05Hugo Benichi } 4302b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak 44946b7e424e0e4d5bffc65ef405f32b966d192d3cHugo Benichi private ConnectivityMetricsEvent(Parcel in) { 45ec27c4d9f33615be1f94d6bb5c5fd1358580ac05Hugo Benichi timestamp = in.readLong(); 46946b7e424e0e4d5bffc65ef405f32b966d192d3cHugo Benichi transports = in.readLong(); 47946b7e424e0e4d5bffc65ef405f32b966d192d3cHugo Benichi netId = in.readInt(); 48946b7e424e0e4d5bffc65ef405f32b966d192d3cHugo Benichi ifname = in.readString(); 49ec27c4d9f33615be1f94d6bb5c5fd1358580ac05Hugo Benichi data = in.readParcelable(null); 5002b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak } 5102b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak 5202b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak /** Implement the Parcelable interface */ 5302b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak public static final Parcelable.Creator<ConnectivityMetricsEvent> CREATOR 5402b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak = new Parcelable.Creator<ConnectivityMetricsEvent> (){ 5502b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak public ConnectivityMetricsEvent createFromParcel(Parcel source) { 56ec27c4d9f33615be1f94d6bb5c5fd1358580ac05Hugo Benichi return new ConnectivityMetricsEvent(source); 5702b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak } 5802b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak 5902b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak public ConnectivityMetricsEvent[] newArray(int size) { 6002b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak return new ConnectivityMetricsEvent[size]; 6102b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak } 6202b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak }; 6302b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak 6402b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak @Override 6502b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak public int describeContents() { 6602b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak return 0; 6702b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak } 6802b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak 6902b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak @Override 7002b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak public void writeToParcel(Parcel dest, int flags) { 7102b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak dest.writeLong(timestamp); 72946b7e424e0e4d5bffc65ef405f32b966d192d3cHugo Benichi dest.writeLong(transports); 73946b7e424e0e4d5bffc65ef405f32b966d192d3cHugo Benichi dest.writeInt(netId); 74946b7e424e0e4d5bffc65ef405f32b966d192d3cHugo Benichi dest.writeString(ifname); 7502b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak dest.writeParcelable(data, 0); 7602b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak } 7702b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak 78ec27c4d9f33615be1f94d6bb5c5fd1358580ac05Hugo Benichi @Override 7902b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak public String toString() { 80948a85948dcccea4aaa9d70a74405308581b0925Hugo Benichi StringBuilder buffer = new StringBuilder("ConnectivityMetricsEvent("); 81948a85948dcccea4aaa9d70a74405308581b0925Hugo Benichi buffer.append(String.format("%tT.%tL", timestamp, timestamp)); 82f927f0c52e7df5b057e7d28888c3cfed164d241aHugo Benichi if (netId != 0) { 83f927f0c52e7df5b057e7d28888c3cfed164d241aHugo Benichi buffer.append(", ").append(netId); 84f927f0c52e7df5b057e7d28888c3cfed164d241aHugo Benichi } 85948a85948dcccea4aaa9d70a74405308581b0925Hugo Benichi if (ifname != null) { 86948a85948dcccea4aaa9d70a74405308581b0925Hugo Benichi buffer.append(", ").append(ifname); 87948a85948dcccea4aaa9d70a74405308581b0925Hugo Benichi } 88a365bace7a8e3e6da016531e26a6046a827acaa5Hugo Benichi for (int t : BitUtils.unpackBits(transports)) { 89a365bace7a8e3e6da016531e26a6046a827acaa5Hugo Benichi buffer.append(", ").append(NetworkCapabilities.transportNameOf(t)); 90a365bace7a8e3e6da016531e26a6046a827acaa5Hugo Benichi } 91948a85948dcccea4aaa9d70a74405308581b0925Hugo Benichi buffer.append("): ").append(data.toString()); 92948a85948dcccea4aaa9d70a74405308581b0925Hugo Benichi return buffer.toString(); 9302b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak } 9402b3e6bfc5bbd5f1a8ce1ce68976e59142073b6fPavel Zhamaitsiak} 95