blob: ed5884378cc5f2f9cd4def16e1676852af7045ea [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;
Remi NGUYEN VAN7b84fb32019-01-19 21:13:24 +090020import android.annotation.SystemApi;
21import android.annotation.TestApi;
Hugo Benichicc92c6e2016-04-21 15:02:38 +090022import android.os.Parcel;
23import android.os.Parcelable;
Hugo Benichi5df9d722016-04-25 17:16:35 +090024import android.util.SparseArray;
25
26import com.android.internal.util.MessageUtils;
Hugo Benichicc92c6e2016-04-21 15:02:38 +090027
Hugo Benichicf6b12f2016-07-04 11:28:05 +090028import java.lang.annotation.Retention;
29import java.lang.annotation.RetentionPolicy;
30
Hugo Benichicc92c6e2016-04-21 15:02:38 +090031/**
32 * {@hide}
33 */
Remi NGUYEN VAN7b84fb32019-01-19 21:13:24 +090034@SystemApi
35@TestApi
36public final class NetworkEvent implements IpConnectivityLog.Event {
Hugo Benichicc92c6e2016-04-21 15:02:38 +090037
38 public static final int NETWORK_CONNECTED = 1;
39 public static final int NETWORK_VALIDATED = 2;
40 public static final int NETWORK_VALIDATION_FAILED = 3;
41 public static final int NETWORK_CAPTIVE_PORTAL_FOUND = 4;
42 public static final int NETWORK_LINGER = 5;
43 public static final int NETWORK_UNLINGER = 6;
44 public static final int NETWORK_DISCONNECTED = 7;
45
Hugo Benichi147aa6d2016-11-15 23:23:24 +090046 public static final int NETWORK_FIRST_VALIDATION_SUCCESS = 8;
Hugo Benichi147aa6d2016-11-15 23:23:24 +090047 public static final int NETWORK_REVALIDATION_SUCCESS = 9;
Hugo Benichi147aa6d2016-11-15 23:23:24 +090048 public static final int NETWORK_FIRST_VALIDATION_PORTAL_FOUND = 10;
Hugo Benichi147aa6d2016-11-15 23:23:24 +090049 public static final int NETWORK_REVALIDATION_PORTAL_FOUND = 11;
50
Chiachang Wang7a70a7e2018-11-27 18:00:05 +080051 public static final int NETWORK_CONSECUTIVE_DNS_TIMEOUT_FOUND = 12;
52
Remi NGUYEN VAN7b84fb32019-01-19 21:13:24 +090053 /** @hide */
Hugo Benichicf6b12f2016-07-04 11:28:05 +090054 @IntDef(value = {
55 NETWORK_CONNECTED,
56 NETWORK_VALIDATED,
57 NETWORK_VALIDATION_FAILED,
58 NETWORK_CAPTIVE_PORTAL_FOUND,
59 NETWORK_LINGER,
60 NETWORK_UNLINGER,
61 NETWORK_DISCONNECTED,
Hugo Benichi147aa6d2016-11-15 23:23:24 +090062 NETWORK_FIRST_VALIDATION_SUCCESS,
63 NETWORK_REVALIDATION_SUCCESS,
64 NETWORK_FIRST_VALIDATION_PORTAL_FOUND,
65 NETWORK_REVALIDATION_PORTAL_FOUND,
Chiachang Wang7a70a7e2018-11-27 18:00:05 +080066 NETWORK_CONSECUTIVE_DNS_TIMEOUT_FOUND,
Hugo Benichicf6b12f2016-07-04 11:28:05 +090067 })
68 @Retention(RetentionPolicy.SOURCE)
69 public @interface EventType {}
70
Remi NGUYEN VAN7b84fb32019-01-19 21:13:24 +090071 /** @hide */
Hugo Benichicf6b12f2016-07-04 11:28:05 +090072 public final @EventType int eventType;
Remi NGUYEN VAN7b84fb32019-01-19 21:13:24 +090073 /** @hide */
Hugo Benichicc92c6e2016-04-21 15:02:38 +090074 public final long durationMs;
75
Hugo Benichi97bfd272017-11-11 08:06:43 +090076 public NetworkEvent(@EventType int eventType, long durationMs) {
Hugo Benichicc92c6e2016-04-21 15:02:38 +090077 this.eventType = eventType;
78 this.durationMs = durationMs;
79 }
80
Hugo Benichi97bfd272017-11-11 08:06:43 +090081 public NetworkEvent(@EventType int eventType) {
82 this(eventType, 0);
Hugo Benichicfddd682016-05-31 16:28:06 +090083 }
84
Hugo Benichicc92c6e2016-04-21 15:02:38 +090085 private NetworkEvent(Parcel in) {
Hugo Benichicc92c6e2016-04-21 15:02:38 +090086 eventType = in.readInt();
87 durationMs = in.readLong();
88 }
89
Remi NGUYEN VAN7b84fb32019-01-19 21:13:24 +090090 /** @hide */
Hugo Benichicf6b12f2016-07-04 11:28:05 +090091 @Override
Hugo Benichicc92c6e2016-04-21 15:02:38 +090092 public void writeToParcel(Parcel out, int flags) {
Hugo Benichicc92c6e2016-04-21 15:02:38 +090093 out.writeInt(eventType);
94 out.writeLong(durationMs);
95 }
96
Remi NGUYEN VAN7b84fb32019-01-19 21:13:24 +090097 /** @hide */
Hugo Benichicf6b12f2016-07-04 11:28:05 +090098 @Override
Hugo Benichicc92c6e2016-04-21 15:02:38 +090099 public int describeContents() {
100 return 0;
101 }
102
Remi NGUYEN VAN7b84fb32019-01-19 21:13:24 +0900103 /** @hide */
Jeff Sharkey9e8f83d2019-02-28 12:06:45 -0700104 public static final @android.annotation.NonNull Parcelable.Creator<NetworkEvent> CREATOR
Hugo Benichicc92c6e2016-04-21 15:02:38 +0900105 = new Parcelable.Creator<NetworkEvent>() {
106 public NetworkEvent createFromParcel(Parcel in) {
107 return new NetworkEvent(in);
108 }
109
110 public NetworkEvent[] newArray(int size) {
111 return new NetworkEvent[size];
112 }
113 };
114
Hugo Benichi5df9d722016-04-25 17:16:35 +0900115 @Override
116 public String toString() {
Hugo Benichi97bfd272017-11-11 08:06:43 +0900117 return String.format("NetworkEvent(%s, %dms)",
118 Decoder.constants.get(eventType), durationMs);
Hugo Benichi5df9d722016-04-25 17:16:35 +0900119 }
120
121 final static class Decoder {
122 static final SparseArray<String> constants = MessageUtils.findMessageNames(
123 new Class[]{NetworkEvent.class}, new String[]{"NETWORK_"});
124 }
Hugo Benichicfddd682016-05-31 16:28:06 +0900125}