NetworkInfo.java revision 07573b32494acbabd21979d8b9584c1ed3f7a6ad
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.net; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.EnumMap; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 25671644c3ef92a9153ea5bd495e132d5fe6674234Scott Main * Describes the status of a network interface. 26671644c3ef92a9153ea5bd495e132d5fe6674234Scott Main * <p>Use {@link ConnectivityManager#getActiveNetworkInfo()} to get an instance that represents 27671644c3ef92a9153ea5bd495e132d5fe6674234Scott Main * the current network connection. 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class NetworkInfo implements Parcelable { 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Coarse-grained network state. This is probably what most applications should 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * use, rather than {@link android.net.NetworkInfo.DetailedState DetailedState}. 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The mapping between the two is as follows: 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <br/><br/> 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <table> 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td><b>Detailed state</b></td><td><b>Coarse-grained state</b></td></tr> 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td><code>IDLE</code></td><td><code>DISCONNECTED</code></td></tr> 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td><code>SCANNING</code></td><td><code>CONNECTING</code></td></tr> 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td><code>CONNECTING</code></td><td><code>CONNECTING</code></td></tr> 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td><code>AUTHENTICATING</code></td><td><code>CONNECTING</code></td></tr> 42671644c3ef92a9153ea5bd495e132d5fe6674234Scott Main * <tr><td><code>CONNECTED</code></td><td><code>CONNECTED</code></td></tr> 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td><code>DISCONNECTING</code></td><td><code>DISCONNECTING</code></td></tr> 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td><code>DISCONNECTED</code></td><td><code>DISCONNECTED</code></td></tr> 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td><code>UNAVAILABLE</code></td><td><code>DISCONNECTED</code></td></tr> 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td><code>FAILED</code></td><td><code>DISCONNECTED</code></td></tr> 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </table> 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public enum State { 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CONNECTING, CONNECTED, SUSPENDED, DISCONNECTING, DISCONNECTED, UNKNOWN 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The fine-grained state of a network connection. This level of detail 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is probably of interest to few applications. Most should use 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.net.NetworkInfo.State State} instead. 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public enum DetailedState { 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Ready to start data connection setup. */ 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IDLE, 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Searching for an available access point. */ 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SCANNING, 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Currently setting up data connection. */ 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CONNECTING, 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Network link established, performing authentication. */ 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AUTHENTICATING, 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Awaiting response from DHCP server in order to assign IP address information. */ 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project OBTAINING_IPADDR, 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** IP traffic should be available. */ 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CONNECTED, 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** IP traffic is suspended */ 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SUSPENDED, 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Currently tearing down data connection. */ 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DISCONNECTING, 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** IP traffic not available. */ 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DISCONNECTED, 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Attempt to connect failed. */ 78c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey FAILED, 79c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey /** Access to this network is blocked. */ 8007573b32494acbabd21979d8b9584c1ed3f7a6adIrfan Sheriff BLOCKED, 8107573b32494acbabd21979d8b9584c1ed3f7a6adIrfan Sheriff /** Link has poor connectivity. */ 8207573b32494acbabd21979d8b9584c1ed3f7a6adIrfan Sheriff VERIFYING_POOR_LINK 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is the map described in the Javadoc comment above. The positions 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of the elements of the array must correspond to the ordinal values 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of <code>DetailedState</code>. 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final EnumMap<DetailedState, State> stateMap = 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new EnumMap<DetailedState, State>(DetailedState.class); 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static { 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(DetailedState.IDLE, State.DISCONNECTED); 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(DetailedState.SCANNING, State.DISCONNECTED); 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(DetailedState.CONNECTING, State.CONNECTING); 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(DetailedState.AUTHENTICATING, State.CONNECTING); 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(DetailedState.OBTAINING_IPADDR, State.CONNECTING); 9907573b32494acbabd21979d8b9584c1ed3f7a6adIrfan Sheriff stateMap.put(DetailedState.VERIFYING_POOR_LINK, State.CONNECTING); 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(DetailedState.CONNECTED, State.CONNECTED); 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(DetailedState.SUSPENDED, State.SUSPENDED); 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(DetailedState.DISCONNECTING, State.DISCONNECTING); 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(DetailedState.DISCONNECTED, State.DISCONNECTED); 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(DetailedState.FAILED, State.DISCONNECTED); 105c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey stateMap.put(DetailedState.BLOCKED, State.DISCONNECTED); 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 107a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mNetworkType; 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mSubtype; 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String mTypeName; 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String mSubtypeName; 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private State mState; 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private DetailedState mDetailedState; 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String mReason; 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String mExtraInfo; 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mIsFailover; 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mIsRoaming; 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Indicates whether network connectivity is possible: 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mIsAvailable; 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param type network type 1252ecc74f330959be0a3bde10e55110a8218c0887cEric Shienbrood * @deprecated 1262ecc74f330959be0a3bde10e55110a8218c0887cEric Shienbrood * @hide because this constructor was only meant for internal use (and 1272ecc74f330959be0a3bde10e55110a8218c0887cEric Shienbrood * has now been superseded by the package-private constructor below). 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public NetworkInfo(int type) {} 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 131d649c12815bcf944b2c97371f3f60716a42a1557Irfan Sheriff /** 132d649c12815bcf944b2c97371f3f60716a42a1557Irfan Sheriff * @hide 133d649c12815bcf944b2c97371f3f60716a42a1557Irfan Sheriff */ 134d649c12815bcf944b2c97371f3f60716a42a1557Irfan Sheriff public NetworkInfo(int type, int subtype, String typeName, String subtypeName) { 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!ConnectivityManager.isNetworkTypeValid(type)) { 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalArgumentException("Invalid network type: " + type); 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mNetworkType = type; 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSubtype = subtype; 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTypeName = typeName; 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSubtypeName = subtypeName; 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setDetailedState(DetailedState.IDLE, null, null); 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mState = State.UNKNOWN; 1448206ff30c23c76851bebc8d72a65e65b0f7f9a29Robert Greenwalt mIsAvailable = false; // until we're told otherwise, assume unavailable 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIsRoaming = false; 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 148c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey /** {@hide} */ 149c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey public NetworkInfo(NetworkInfo source) { 150c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey if (source != null) { 151c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey mNetworkType = source.mNetworkType; 152c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey mSubtype = source.mSubtype; 153c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey mTypeName = source.mTypeName; 154c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey mSubtypeName = source.mSubtypeName; 155c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey mState = source.mState; 156c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey mDetailedState = source.mDetailedState; 157c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey mReason = source.mReason; 158c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey mExtraInfo = source.mExtraInfo; 159c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey mIsFailover = source.mIsFailover; 160c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey mIsRoaming = source.mIsRoaming; 161c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey mIsAvailable = source.mIsAvailable; 162c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey } 163c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey } 164c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 166671644c3ef92a9153ea5bd495e132d5fe6674234Scott Main * Reports the type of network to which the 167671644c3ef92a9153ea5bd495e132d5fe6674234Scott Main * info in this {@code NetworkInfo} pertains. 168671644c3ef92a9153ea5bd495e132d5fe6674234Scott Main * @return one of {@link ConnectivityManager#TYPE_MOBILE}, {@link 169671644c3ef92a9153ea5bd495e132d5fe6674234Scott Main * ConnectivityManager#TYPE_WIFI}, {@link ConnectivityManager#TYPE_WIMAX}, {@link 170671644c3ef92a9153ea5bd495e132d5fe6674234Scott Main * ConnectivityManager#TYPE_ETHERNET}, {@link ConnectivityManager#TYPE_BLUETOOTH}, or other 171671644c3ef92a9153ea5bd495e132d5fe6674234Scott Main * types defined by {@link ConnectivityManager} 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getType() { 174a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 175a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mNetworkType; 176a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return a network-type-specific integer describing the subtype 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of the network. 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the network subtype 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getSubtype() { 185a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 186a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mSubtype; 187a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setSubtype(int subtype, String subtypeName) { 191a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 192a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff mSubtype = subtype; 193a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff mSubtypeName = subtypeName; 194a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return a human-readable name describe the type of the network, 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for example "WIFI" or "MOBILE". 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the name of the network type 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getTypeName() { 203a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 204a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mTypeName; 205a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return a human-readable name describing the subtype of the network. 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the name of the network subtype 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getSubtypeName() { 213a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 214a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mSubtypeName; 215a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Indicates whether network connectivity exists or is in the process 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of being established. This is good for applications that need to 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * do anything related to the network other than read or write data. 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * For the latter, call {@link #isConnected()} instead, which guarantees 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that the network is fully usable. 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return {@code true} if network connectivity exists or is in the process 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of being established, {@code false} otherwise. 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isConnectedOrConnecting() { 228a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 229a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mState == State.CONNECTED || mState == State.CONNECTING; 230a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Indicates whether network connectivity exists and it is possible to establish 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * connections and pass data. 236671644c3ef92a9153ea5bd495e132d5fe6674234Scott Main * <p>Always call this before attempting to perform data transactions. 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return {@code true} if network connectivity exists, {@code false} otherwise. 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isConnected() { 240a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 241a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mState == State.CONNECTED; 242a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Indicates whether network connectivity is possible. A network is unavailable 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * when a persistent or semi-persistent condition prevents the possibility 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of connecting to that network. Examples include 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ul> 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>The device is out of the coverage area for any network of this type.</li> 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>The device is on a network other than the home network (i.e., roaming), and 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * data roaming has been disabled.</li> 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>The device's radio is turned off, e.g., because airplane mode is enabled.</li> 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ul> 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return {@code true} if the network is available, {@code false} otherwise 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isAvailable() { 258a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 259a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mIsAvailable; 260a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets if the network is available, ie, if the connectivity is possible. 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param isAvailable the new availability value. 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setIsAvailable(boolean isAvailable) { 270a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 271a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff mIsAvailable = isAvailable; 272a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Indicates whether the current attempt to connect to the network 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * resulted from the ConnectivityManager trying to fail over to this 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * network following a disconnect from another network. 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return {@code true} if this is a failover attempt, {@code false} 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * otherwise. 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isFailover() { 283a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 284a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mIsFailover; 285a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the failover boolean. 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param isFailover {@code true} to mark the current connection attempt 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as a failover. 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setFailover(boolean isFailover) { 295a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 296a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff mIsFailover = isFailover; 297a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Indicates whether the device is currently roaming on this network. 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * When {@code true}, it suggests that use of data on this network 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * may incur extra costs. 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return {@code true} if roaming is in effect, {@code false} otherwise. 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isRoaming() { 307a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 308a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mIsRoaming; 309a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setRoaming(boolean isRoaming) { 313a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 314a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff mIsRoaming = isRoaming; 315a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Reports the current coarse-grained state of the network. 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the coarse-grained state 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public State getState() { 323a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 324a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mState; 325a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Reports the current fine-grained state of the network. 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the fine-grained state 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public DetailedState getDetailedState() { 333a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 334a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mDetailedState; 335a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the fine-grained state of the network. 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param detailedState the {@link DetailedState}. 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param reason a {@code String} indicating the reason for the state change, 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if one was supplied. May be {@code null}. 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param extraInfo an optional {@code String} providing addditional network state 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * information passed up from the lower networking layers. 345d649c12815bcf944b2c97371f3f60716a42a1557Irfan Sheriff * @hide 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 347d649c12815bcf944b2c97371f3f60716a42a1557Irfan Sheriff public void setDetailedState(DetailedState detailedState, String reason, String extraInfo) { 348a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 349a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff this.mDetailedState = detailedState; 350a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff this.mState = stateMap.get(detailedState); 351a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff this.mReason = reason; 352a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff this.mExtraInfo = extraInfo; 353a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 357d60ae7f6688ea83df536c2eb1101a74ae1914ac6Doug Zongker * Set the extraInfo field. 358d60ae7f6688ea83df536c2eb1101a74ae1914ac6Doug Zongker * @param extraInfo an optional {@code String} providing addditional network state 359d60ae7f6688ea83df536c2eb1101a74ae1914ac6Doug Zongker * information passed up from the lower networking layers. 360d60ae7f6688ea83df536c2eb1101a74ae1914ac6Doug Zongker * @hide 361d60ae7f6688ea83df536c2eb1101a74ae1914ac6Doug Zongker */ 362d60ae7f6688ea83df536c2eb1101a74ae1914ac6Doug Zongker public void setExtraInfo(String extraInfo) { 363d60ae7f6688ea83df536c2eb1101a74ae1914ac6Doug Zongker synchronized (this) { 364d60ae7f6688ea83df536c2eb1101a74ae1914ac6Doug Zongker this.mExtraInfo = extraInfo; 365d60ae7f6688ea83df536c2eb1101a74ae1914ac6Doug Zongker } 366d60ae7f6688ea83df536c2eb1101a74ae1914ac6Doug Zongker } 367d60ae7f6688ea83df536c2eb1101a74ae1914ac6Doug Zongker 368d60ae7f6688ea83df536c2eb1101a74ae1914ac6Doug Zongker /** 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Report the reason an attempt to establish connectivity failed, 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if one is available. 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the reason for failure, or null if not available 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getReason() { 374a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 375a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mReason; 376a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Report the extra information about the network state, if any was 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * provided by the lower networking layers., 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if one is available. 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the extra information, or null if not available 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getExtraInfo() { 386a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 387a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mExtraInfo; 388a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 393a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 394a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff StringBuilder builder = new StringBuilder("NetworkInfo: "); 395a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff builder.append("type: ").append(getTypeName()).append("[").append(getSubtypeName()). 396a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff append("], state: ").append(mState).append("/").append(mDetailedState). 397a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff append(", reason: ").append(mReason == null ? "(unspecified)" : mReason). 398a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff append(", extra: ").append(mExtraInfo == null ? "(none)" : mExtraInfo). 399a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff append(", roaming: ").append(mIsRoaming). 400a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff append(", failover: ").append(mIsFailover). 401a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff append(", isAvailable: ").append(mIsAvailable); 402a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return builder.toString(); 403a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Implement the Parcelable interface 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Implement the Parcelable interface. 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 419a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 420a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff dest.writeInt(mNetworkType); 421a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff dest.writeInt(mSubtype); 422a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff dest.writeString(mTypeName); 423a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff dest.writeString(mSubtypeName); 424a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff dest.writeString(mState.name()); 425a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff dest.writeString(mDetailedState.name()); 426a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff dest.writeInt(mIsFailover ? 1 : 0); 427a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff dest.writeInt(mIsAvailable ? 1 : 0); 428a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff dest.writeInt(mIsRoaming ? 1 : 0); 429a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff dest.writeString(mReason); 430a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff dest.writeString(mExtraInfo); 431a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Implement the Parcelable interface. 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Creator<NetworkInfo> CREATOR = 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new Creator<NetworkInfo>() { 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public NetworkInfo createFromParcel(Parcel in) { 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int netType = in.readInt(); 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int subtype = in.readInt(); 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String typeName = in.readString(); 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String subtypeName = in.readString(); 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NetworkInfo netInfo = new NetworkInfo(netType, subtype, typeName, subtypeName); 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project netInfo.mState = State.valueOf(in.readString()); 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project netInfo.mDetailedState = DetailedState.valueOf(in.readString()); 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project netInfo.mIsFailover = in.readInt() != 0; 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project netInfo.mIsAvailable = in.readInt() != 0; 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project netInfo.mIsRoaming = in.readInt() != 0; 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project netInfo.mReason = in.readString(); 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project netInfo.mExtraInfo = in.readString(); 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return netInfo; 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public NetworkInfo[] newArray(int size) { 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new NetworkInfo[size]; 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 461