blob: cb82fbe71f6b761e2e35a54111ac331644f30b6b [file] [log] [blame]
Hugo Benichicc92c6e2016-04-21 15:02:38 +09001/*
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
Hugo Benichicf6b12f2016-07-04 11:28:05 +090019import android.annotation.IntDef;
Hugo Benichicc92c6e2016-04-21 15:02:38 +090020import android.os.Parcel;
21import android.os.Parcelable;
Hugo Benichi5df9d722016-04-25 17:16:35 +090022import android.util.SparseArray;
23
24import com.android.internal.util.MessageUtils;
Hugo Benichicc92c6e2016-04-21 15:02:38 +090025
Hugo Benichicf6b12f2016-07-04 11:28:05 +090026import java.lang.annotation.Retention;
27import java.lang.annotation.RetentionPolicy;
28
Hugo Benichicc92c6e2016-04-21 15:02:38 +090029/**
30 * {@hide}
31 */
Hugo Benichicfddd682016-05-31 16:28:06 +090032public final class NetworkEvent implements Parcelable {
Hugo Benichicc92c6e2016-04-21 15:02:38 +090033
34 public static final int NETWORK_CONNECTED = 1;
35 public static final int NETWORK_VALIDATED = 2;
36 public static final int NETWORK_VALIDATION_FAILED = 3;
37 public static final int NETWORK_CAPTIVE_PORTAL_FOUND = 4;
38 public static final int NETWORK_LINGER = 5;
39 public static final int NETWORK_UNLINGER = 6;
40 public static final int NETWORK_DISCONNECTED = 7;
41
Hugo Benichi147aa6d2016-11-15 23:23:24 +090042 public static final int NETWORK_FIRST_VALIDATION_SUCCESS = 8;
Hugo Benichi147aa6d2016-11-15 23:23:24 +090043 public static final int NETWORK_REVALIDATION_SUCCESS = 9;
Hugo Benichi147aa6d2016-11-15 23:23:24 +090044 public static final int NETWORK_FIRST_VALIDATION_PORTAL_FOUND = 10;
Hugo Benichi147aa6d2016-11-15 23:23:24 +090045 public static final int NETWORK_REVALIDATION_PORTAL_FOUND = 11;
46
Chiachang Wang7a70a7e2018-11-27 18:00:05 +080047 public static final int NETWORK_CONSECUTIVE_DNS_TIMEOUT_FOUND = 12;
48
Hugo Benichicf6b12f2016-07-04 11:28:05 +090049 @IntDef(value = {
50 NETWORK_CONNECTED,
51 NETWORK_VALIDATED,
52 NETWORK_VALIDATION_FAILED,
53 NETWORK_CAPTIVE_PORTAL_FOUND,
54 NETWORK_LINGER,
55 NETWORK_UNLINGER,
56 NETWORK_DISCONNECTED,
Hugo Benichi147aa6d2016-11-15 23:23:24 +090057 NETWORK_FIRST_VALIDATION_SUCCESS,
58 NETWORK_REVALIDATION_SUCCESS,
59 NETWORK_FIRST_VALIDATION_PORTAL_FOUND,
60 NETWORK_REVALIDATION_PORTAL_FOUND,
Chiachang Wang7a70a7e2018-11-27 18:00:05 +080061 NETWORK_CONSECUTIVE_DNS_TIMEOUT_FOUND,
Hugo Benichicf6b12f2016-07-04 11:28:05 +090062 })
63 @Retention(RetentionPolicy.SOURCE)
64 public @interface EventType {}
65
Hugo Benichicf6b12f2016-07-04 11:28:05 +090066 public final @EventType int eventType;
Hugo Benichicc92c6e2016-04-21 15:02:38 +090067 public final long durationMs;
68
Hugo Benichi97bfd272017-11-11 08:06:43 +090069 public NetworkEvent(@EventType int eventType, long durationMs) {
Hugo Benichicc92c6e2016-04-21 15:02:38 +090070 this.eventType = eventType;
71 this.durationMs = durationMs;
72 }
73
Hugo Benichi97bfd272017-11-11 08:06:43 +090074 public NetworkEvent(@EventType int eventType) {
75 this(eventType, 0);
Hugo Benichicfddd682016-05-31 16:28:06 +090076 }
77
Hugo Benichicc92c6e2016-04-21 15:02:38 +090078 private NetworkEvent(Parcel in) {
Hugo Benichicc92c6e2016-04-21 15:02:38 +090079 eventType = in.readInt();
80 durationMs = in.readLong();
81 }
82
Hugo Benichicf6b12f2016-07-04 11:28:05 +090083 @Override
Hugo Benichicc92c6e2016-04-21 15:02:38 +090084 public void writeToParcel(Parcel out, int flags) {
Hugo Benichicc92c6e2016-04-21 15:02:38 +090085 out.writeInt(eventType);
86 out.writeLong(durationMs);
87 }
88
Hugo Benichicf6b12f2016-07-04 11:28:05 +090089 @Override
Hugo Benichicc92c6e2016-04-21 15:02:38 +090090 public int describeContents() {
91 return 0;
92 }
93
94 public static final Parcelable.Creator<NetworkEvent> CREATOR
95 = new Parcelable.Creator<NetworkEvent>() {
96 public NetworkEvent createFromParcel(Parcel in) {
97 return new NetworkEvent(in);
98 }
99
100 public NetworkEvent[] newArray(int size) {
101 return new NetworkEvent[size];
102 }
103 };
104
Hugo Benichi5df9d722016-04-25 17:16:35 +0900105 @Override
106 public String toString() {
Hugo Benichi97bfd272017-11-11 08:06:43 +0900107 return String.format("NetworkEvent(%s, %dms)",
108 Decoder.constants.get(eventType), durationMs);
Hugo Benichi5df9d722016-04-25 17:16:35 +0900109 }
110
111 final static class Decoder {
112 static final SparseArray<String> constants = MessageUtils.findMessageNames(
113 new Class[]{NetworkEvent.class}, new String[]{"NETWORK_"});
114 }
Hugo Benichicfddd682016-05-31 16:28:06 +0900115}