OSDN Git Service

Make ConnectivityMetricsLogger and related classes @SystemApi
[android-x86/frameworks-base.git] / core / java / android / net / NetworkKey.java
1 /*
2  * Copyright (C) 2014 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
17 package android.net;
18
19 import android.annotation.SystemApi;
20 import android.os.Parcel;
21 import android.os.Parcelable;
22
23 import java.util.Objects;
24
25 /**
26  * Information which identifies a specific network.
27  *
28  * @hide
29  */
30 @SystemApi
31 // NOTE: Ideally, we would abstract away the details of what identifies a network of a specific
32 // type, so that all networks appear the same and can be scored without concern to the network type
33 // itself. However, because no such cross-type identifier currently exists in the Android framework,
34 // and because systems might obtain information about networks from sources other than Android
35 // devices, we need to provide identifying details about each specific network type (wifi, cell,
36 // etc.) so that clients can pull out these details depending on the type of network.
37 public class NetworkKey implements Parcelable {
38
39     /** A wifi network, for which {@link #wifiKey} will be populated. */
40     public static final int TYPE_WIFI = 1;
41
42     /**
43      * The type of this network.
44      * @see #TYPE_WIFI
45      */
46     public final int type;
47
48     /**
49      * Information identifying a Wi-Fi network. Only set when {@link #type} equals
50      * {@link #TYPE_WIFI}.
51      */
52     public final WifiKey wifiKey;
53
54     /**
55      * Construct a new {@link NetworkKey} for a Wi-Fi network.
56      * @param wifiKey the {@link WifiKey} identifying this Wi-Fi network.
57      */
58     public NetworkKey(WifiKey wifiKey) {
59         this.type = TYPE_WIFI;
60         this.wifiKey = wifiKey;
61     }
62
63     private NetworkKey(Parcel in) {
64         type = in.readInt();
65         switch (type) {
66             case TYPE_WIFI:
67                 wifiKey = WifiKey.CREATOR.createFromParcel(in);
68                 break;
69             default:
70                 throw new IllegalArgumentException("Parcel has unknown type: " + type);
71         }
72     }
73
74     @Override
75     public int describeContents() {
76         return 0;
77     }
78
79     @Override
80     public void writeToParcel(Parcel out, int flags) {
81         out.writeInt(type);
82         switch (type) {
83             case TYPE_WIFI:
84                 wifiKey.writeToParcel(out, flags);
85                 break;
86             default:
87                 throw new IllegalStateException("NetworkKey has unknown type " + type);
88         }
89     }
90
91     @Override
92     public boolean equals(Object o) {
93         if (this == o) return true;
94         if (o == null || getClass() != o.getClass()) return false;
95
96         NetworkKey that = (NetworkKey) o;
97
98         return type == that.type && Objects.equals(wifiKey, that.wifiKey);
99     }
100
101     @Override
102     public int hashCode() {
103         return Objects.hash(type, wifiKey);
104     }
105
106     @Override
107     public String toString() {
108         switch (type) {
109             case TYPE_WIFI:
110                 return wifiKey.toString();
111             default:
112                 // Don't throw an exception here in case someone is logging this object in a catch
113                 // block for debugging purposes.
114                 return "InvalidKey";
115         }
116     }
117
118     public static final Parcelable.Creator<NetworkKey> CREATOR =
119             new Parcelable.Creator<NetworkKey>() {
120                 @Override
121                 public NetworkKey createFromParcel(Parcel in) {
122                     return new NetworkKey(in);
123                 }
124
125                 @Override
126                 public NetworkKey[] newArray(int size) {
127                     return new NetworkKey[size];
128                 }
129             };
130 }