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 22836ecb539f32bcb5b404fb74897f23574f272bb8Jeff Sharkeyimport com.android.internal.annotations.VisibleForTesting; 23836ecb539f32bcb5b404fb74897f23574f272bb8Jeff Sharkey 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.EnumMap; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 27671644c3ef92a9153ea5bd495e132d5fe6674234Scott Main * Describes the status of a network interface. 28671644c3ef92a9153ea5bd495e132d5fe6674234Scott Main * <p>Use {@link ConnectivityManager#getActiveNetworkInfo()} to get an instance that represents 29671644c3ef92a9153ea5bd495e132d5fe6674234Scott Main * the current network connection. 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class NetworkInfo implements Parcelable { 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Coarse-grained network state. This is probably what most applications should 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * use, rather than {@link android.net.NetworkInfo.DetailedState DetailedState}. 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The mapping between the two is as follows: 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <br/><br/> 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <table> 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td><b>Detailed state</b></td><td><b>Coarse-grained state</b></td></tr> 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td><code>IDLE</code></td><td><code>DISCONNECTED</code></td></tr> 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td><code>SCANNING</code></td><td><code>CONNECTING</code></td></tr> 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td><code>CONNECTING</code></td><td><code>CONNECTING</code></td></tr> 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td><code>AUTHENTICATING</code></td><td><code>CONNECTING</code></td></tr> 44671644c3ef92a9153ea5bd495e132d5fe6674234Scott Main * <tr><td><code>CONNECTED</code></td><td><code>CONNECTED</code></td></tr> 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td><code>DISCONNECTING</code></td><td><code>DISCONNECTING</code></td></tr> 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td><code>DISCONNECTED</code></td><td><code>DISCONNECTED</code></td></tr> 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td><code>UNAVAILABLE</code></td><td><code>DISCONNECTED</code></td></tr> 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td><code>FAILED</code></td><td><code>DISCONNECTED</code></td></tr> 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </table> 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public enum State { 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CONNECTING, CONNECTED, SUSPENDED, DISCONNECTING, DISCONNECTED, UNKNOWN 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The fine-grained state of a network connection. This level of detail 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is probably of interest to few applications. Most should use 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.net.NetworkInfo.State State} instead. 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public enum DetailedState { 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Ready to start data connection setup. */ 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IDLE, 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Searching for an available access point. */ 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SCANNING, 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Currently setting up data connection. */ 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CONNECTING, 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Network link established, performing authentication. */ 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AUTHENTICATING, 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Awaiting response from DHCP server in order to assign IP address information. */ 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project OBTAINING_IPADDR, 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** IP traffic should be available. */ 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CONNECTED, 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** IP traffic is suspended */ 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SUSPENDED, 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Currently tearing down data connection. */ 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DISCONNECTING, 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** IP traffic not available. */ 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DISCONNECTED, 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Attempt to connect failed. */ 80c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey FAILED, 81c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey /** Access to this network is blocked. */ 8207573b32494acbabd21979d8b9584c1ed3f7a6adIrfan Sheriff BLOCKED, 8307573b32494acbabd21979d8b9584c1ed3f7a6adIrfan Sheriff /** Link has poor connectivity. */ 84da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff VERIFYING_POOR_LINK, 85da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff /** Checking if network is a captive portal */ 8667c382192614dfab821666c4f35f1e2c8b97271bWink Saville CAPTIVE_PORTAL_CHECK 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is the map described in the Javadoc comment above. The positions 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of the elements of the array must correspond to the ordinal values 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of <code>DetailedState</code>. 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final EnumMap<DetailedState, State> stateMap = 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new EnumMap<DetailedState, State>(DetailedState.class); 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static { 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(DetailedState.IDLE, State.DISCONNECTED); 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(DetailedState.SCANNING, State.DISCONNECTED); 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(DetailedState.CONNECTING, State.CONNECTING); 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(DetailedState.AUTHENTICATING, State.CONNECTING); 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(DetailedState.OBTAINING_IPADDR, State.CONNECTING); 10307573b32494acbabd21979d8b9584c1ed3f7a6adIrfan Sheriff stateMap.put(DetailedState.VERIFYING_POOR_LINK, State.CONNECTING); 104da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff stateMap.put(DetailedState.CAPTIVE_PORTAL_CHECK, State.CONNECTING); 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(DetailedState.CONNECTED, State.CONNECTED); 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(DetailedState.SUSPENDED, State.SUSPENDED); 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(DetailedState.DISCONNECTING, State.DISCONNECTING); 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(DetailedState.DISCONNECTED, State.DISCONNECTED); 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(DetailedState.FAILED, State.DISCONNECTED); 110c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey stateMap.put(DetailedState.BLOCKED, State.DISCONNECTED); 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 112a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mNetworkType; 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mSubtype; 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String mTypeName; 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String mSubtypeName; 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private State mState; 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private DetailedState mDetailedState; 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String mReason; 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String mExtraInfo; 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mIsFailover; 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mIsRoaming; 12367c382192614dfab821666c4f35f1e2c8b97271bWink Saville private boolean mIsConnectedToProvisioningNetwork; 12467c382192614dfab821666c4f35f1e2c8b97271bWink Saville 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Indicates whether network connectivity is possible: 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mIsAvailable; 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 131d649c12815bcf944b2c97371f3f60716a42a1557Irfan Sheriff * @hide 132d649c12815bcf944b2c97371f3f60716a42a1557Irfan Sheriff */ 133d649c12815bcf944b2c97371f3f60716a42a1557Irfan Sheriff public NetworkInfo(int type, int subtype, String typeName, String subtypeName) { 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!ConnectivityManager.isNetworkTypeValid(type)) { 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalArgumentException("Invalid network type: " + type); 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mNetworkType = type; 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSubtype = subtype; 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTypeName = typeName; 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSubtypeName = subtypeName; 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setDetailedState(DetailedState.IDLE, null, null); 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mState = State.UNKNOWN; 1438206ff30c23c76851bebc8d72a65e65b0f7f9a29Robert Greenwalt mIsAvailable = false; // until we're told otherwise, assume unavailable 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIsRoaming = false; 14567c382192614dfab821666c4f35f1e2c8b97271bWink Saville mIsConnectedToProvisioningNetwork = 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) { 15112b28ce4e82fcd3ed46ffac77fb866bb5aee4408Narayan Kamath synchronized (source) { 15212b28ce4e82fcd3ed46ffac77fb866bb5aee4408Narayan Kamath mNetworkType = source.mNetworkType; 15312b28ce4e82fcd3ed46ffac77fb866bb5aee4408Narayan Kamath mSubtype = source.mSubtype; 15412b28ce4e82fcd3ed46ffac77fb866bb5aee4408Narayan Kamath mTypeName = source.mTypeName; 15512b28ce4e82fcd3ed46ffac77fb866bb5aee4408Narayan Kamath mSubtypeName = source.mSubtypeName; 15612b28ce4e82fcd3ed46ffac77fb866bb5aee4408Narayan Kamath mState = source.mState; 15712b28ce4e82fcd3ed46ffac77fb866bb5aee4408Narayan Kamath mDetailedState = source.mDetailedState; 15812b28ce4e82fcd3ed46ffac77fb866bb5aee4408Narayan Kamath mReason = source.mReason; 15912b28ce4e82fcd3ed46ffac77fb866bb5aee4408Narayan Kamath mExtraInfo = source.mExtraInfo; 16012b28ce4e82fcd3ed46ffac77fb866bb5aee4408Narayan Kamath mIsFailover = source.mIsFailover; 16112b28ce4e82fcd3ed46ffac77fb866bb5aee4408Narayan Kamath mIsRoaming = source.mIsRoaming; 16212b28ce4e82fcd3ed46ffac77fb866bb5aee4408Narayan Kamath mIsAvailable = source.mIsAvailable; 16312b28ce4e82fcd3ed46ffac77fb866bb5aee4408Narayan Kamath mIsConnectedToProvisioningNetwork = source.mIsConnectedToProvisioningNetwork; 16412b28ce4e82fcd3ed46ffac77fb866bb5aee4408Narayan Kamath } 165c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey } 166c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey } 167c006f1aec15454782c35e028ad64d79a5c161cc1Jeff Sharkey 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 169671644c3ef92a9153ea5bd495e132d5fe6674234Scott Main * Reports the type of network to which the 170671644c3ef92a9153ea5bd495e132d5fe6674234Scott Main * info in this {@code NetworkInfo} pertains. 171671644c3ef92a9153ea5bd495e132d5fe6674234Scott Main * @return one of {@link ConnectivityManager#TYPE_MOBILE}, {@link 172671644c3ef92a9153ea5bd495e132d5fe6674234Scott Main * ConnectivityManager#TYPE_WIFI}, {@link ConnectivityManager#TYPE_WIMAX}, {@link 173671644c3ef92a9153ea5bd495e132d5fe6674234Scott Main * ConnectivityManager#TYPE_ETHERNET}, {@link ConnectivityManager#TYPE_BLUETOOTH}, or other 174671644c3ef92a9153ea5bd495e132d5fe6674234Scott Main * types defined by {@link ConnectivityManager} 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getType() { 177a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 178a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mNetworkType; 179a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 183b90b20b5d57809da5c91bac9ff45c2ac323d9637Robert Greenwalt * @hide 184b90b20b5d57809da5c91bac9ff45c2ac323d9637Robert Greenwalt */ 185b90b20b5d57809da5c91bac9ff45c2ac323d9637Robert Greenwalt public void setType(int type) { 186b90b20b5d57809da5c91bac9ff45c2ac323d9637Robert Greenwalt synchronized (this) { 187b90b20b5d57809da5c91bac9ff45c2ac323d9637Robert Greenwalt mNetworkType = type; 188b90b20b5d57809da5c91bac9ff45c2ac323d9637Robert Greenwalt } 189b90b20b5d57809da5c91bac9ff45c2ac323d9637Robert Greenwalt } 190b90b20b5d57809da5c91bac9ff45c2ac323d9637Robert Greenwalt 191b90b20b5d57809da5c91bac9ff45c2ac323d9637Robert Greenwalt /** 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return a network-type-specific integer describing the subtype 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of the network. 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the network subtype 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getSubtype() { 197a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 198a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mSubtype; 199a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2023192dec32180f56733e631c2d9ec62fa1359283dRobert Greenwalt /** 2033192dec32180f56733e631c2d9ec62fa1359283dRobert Greenwalt * @hide 2043192dec32180f56733e631c2d9ec62fa1359283dRobert Greenwalt */ 2053192dec32180f56733e631c2d9ec62fa1359283dRobert Greenwalt public void setSubtype(int subtype, String subtypeName) { 206a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 207a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff mSubtype = subtype; 208a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff mSubtypeName = subtypeName; 209a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return a human-readable name describe the type of the network, 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for example "WIFI" or "MOBILE". 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the name of the network type 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getTypeName() { 218a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 219a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mTypeName; 220a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return a human-readable name describing the subtype of the network. 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the name of the network subtype 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getSubtypeName() { 228a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 229a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mSubtypeName; 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 or is in the process 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of being established. This is good for applications that need to 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * do anything related to the network other than read or write data. 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * For the latter, call {@link #isConnected()} instead, which guarantees 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that the network is fully usable. 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return {@code true} if network connectivity exists or is in the process 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of being established, {@code false} otherwise. 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isConnectedOrConnecting() { 243a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 244a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mState == State.CONNECTED || mState == State.CONNECTING; 245a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Indicates whether network connectivity exists and it is possible to establish 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * connections and pass data. 251671644c3ef92a9153ea5bd495e132d5fe6674234Scott Main * <p>Always call this before attempting to perform data transactions. 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return {@code true} if network connectivity exists, {@code false} otherwise. 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isConnected() { 255a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 256a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mState == State.CONNECTED; 257a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Indicates whether network connectivity is possible. A network is unavailable 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * when a persistent or semi-persistent condition prevents the possibility 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of connecting to that network. Examples include 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ul> 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>The device is out of the coverage area for any network of this type.</li> 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>The device is on a network other than the home network (i.e., roaming), and 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * data roaming has been disabled.</li> 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>The device's radio is turned off, e.g., because airplane mode is enabled.</li> 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ul> 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return {@code true} if the network is available, {@code false} otherwise 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isAvailable() { 273a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 274a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mIsAvailable; 275a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets if the network is available, ie, if the connectivity is possible. 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param isAvailable the new availability value. 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setIsAvailable(boolean isAvailable) { 285a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 286a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff mIsAvailable = isAvailable; 287a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Indicates whether the current attempt to connect to the network 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * resulted from the ConnectivityManager trying to fail over to this 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * network following a disconnect from another network. 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return {@code true} if this is a failover attempt, {@code false} 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * otherwise. 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isFailover() { 298a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 299a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mIsFailover; 300a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the failover boolean. 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param isFailover {@code true} to mark the current connection attempt 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as a failover. 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setFailover(boolean isFailover) { 310a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 311a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff mIsFailover = isFailover; 312a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Indicates whether the device is currently roaming on this network. 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * When {@code true}, it suggests that use of data on this network 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * may incur extra costs. 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return {@code true} if roaming is in effect, {@code false} otherwise. 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isRoaming() { 322a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 323a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mIsRoaming; 324a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 327836ecb539f32bcb5b404fb74897f23574f272bb8Jeff Sharkey /** {@hide} */ 328836ecb539f32bcb5b404fb74897f23574f272bb8Jeff Sharkey @VisibleForTesting 329836ecb539f32bcb5b404fb74897f23574f272bb8Jeff Sharkey public void setRoaming(boolean isRoaming) { 330a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 331a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff mIsRoaming = isRoaming; 332a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 33567c382192614dfab821666c4f35f1e2c8b97271bWink Saville /** {@hide} */ 33667c382192614dfab821666c4f35f1e2c8b97271bWink Saville @VisibleForTesting 33767c382192614dfab821666c4f35f1e2c8b97271bWink Saville public boolean isConnectedToProvisioningNetwork() { 33867c382192614dfab821666c4f35f1e2c8b97271bWink Saville synchronized (this) { 33967c382192614dfab821666c4f35f1e2c8b97271bWink Saville return mIsConnectedToProvisioningNetwork; 34067c382192614dfab821666c4f35f1e2c8b97271bWink Saville } 34167c382192614dfab821666c4f35f1e2c8b97271bWink Saville } 34267c382192614dfab821666c4f35f1e2c8b97271bWink Saville 34367c382192614dfab821666c4f35f1e2c8b97271bWink Saville /** {@hide} */ 34467c382192614dfab821666c4f35f1e2c8b97271bWink Saville @VisibleForTesting 34567c382192614dfab821666c4f35f1e2c8b97271bWink Saville public void setIsConnectedToProvisioningNetwork(boolean val) { 34667c382192614dfab821666c4f35f1e2c8b97271bWink Saville synchronized (this) { 34767c382192614dfab821666c4f35f1e2c8b97271bWink Saville mIsConnectedToProvisioningNetwork = val; 34867c382192614dfab821666c4f35f1e2c8b97271bWink Saville } 34967c382192614dfab821666c4f35f1e2c8b97271bWink Saville } 35067c382192614dfab821666c4f35f1e2c8b97271bWink Saville 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Reports the current coarse-grained state of the network. 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the coarse-grained state 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public State getState() { 356a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 357a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mState; 358a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Reports the current fine-grained state of the network. 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the fine-grained state 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public DetailedState getDetailedState() { 366a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 367a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mDetailedState; 368a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the fine-grained state of the network. 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param detailedState the {@link DetailedState}. 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param reason a {@code String} indicating the reason for the state change, 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if one was supplied. May be {@code null}. 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param extraInfo an optional {@code String} providing addditional network state 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * information passed up from the lower networking layers. 378d649c12815bcf944b2c97371f3f60716a42a1557Irfan Sheriff * @hide 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 380d649c12815bcf944b2c97371f3f60716a42a1557Irfan Sheriff public void setDetailedState(DetailedState detailedState, String reason, String extraInfo) { 381a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 382a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff this.mDetailedState = detailedState; 383a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff this.mState = stateMap.get(detailedState); 384a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff this.mReason = reason; 385a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff this.mExtraInfo = extraInfo; 386a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 390d60ae7f6688ea83df536c2eb1101a74ae1914ac6Doug Zongker * Set the extraInfo field. 391d60ae7f6688ea83df536c2eb1101a74ae1914ac6Doug Zongker * @param extraInfo an optional {@code String} providing addditional network state 392d60ae7f6688ea83df536c2eb1101a74ae1914ac6Doug Zongker * information passed up from the lower networking layers. 393d60ae7f6688ea83df536c2eb1101a74ae1914ac6Doug Zongker * @hide 394d60ae7f6688ea83df536c2eb1101a74ae1914ac6Doug Zongker */ 395d60ae7f6688ea83df536c2eb1101a74ae1914ac6Doug Zongker public void setExtraInfo(String extraInfo) { 396d60ae7f6688ea83df536c2eb1101a74ae1914ac6Doug Zongker synchronized (this) { 397d60ae7f6688ea83df536c2eb1101a74ae1914ac6Doug Zongker this.mExtraInfo = extraInfo; 398d60ae7f6688ea83df536c2eb1101a74ae1914ac6Doug Zongker } 399d60ae7f6688ea83df536c2eb1101a74ae1914ac6Doug Zongker } 400d60ae7f6688ea83df536c2eb1101a74ae1914ac6Doug Zongker 401d60ae7f6688ea83df536c2eb1101a74ae1914ac6Doug Zongker /** 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Report the reason an attempt to establish connectivity failed, 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if one is available. 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the reason for failure, or null if not available 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getReason() { 407a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 408a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mReason; 409a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Report the extra information about the network state, if any was 414953b5625d5342cb20d44bfc67fb822d54abda927Ang Li * provided by the lower networking layers. 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the extra information, or null if not available 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getExtraInfo() { 418a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 419a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mExtraInfo; 420a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 425a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 426c9c90c771c9cd1381a49b714df9a2bc392959fccRobert Greenwalt StringBuilder builder = new StringBuilder("["); 427a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff builder.append("type: ").append(getTypeName()).append("[").append(getSubtypeName()). 428a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff append("], state: ").append(mState).append("/").append(mDetailedState). 429a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff append(", reason: ").append(mReason == null ? "(unspecified)" : mReason). 430a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff append(", extra: ").append(mExtraInfo == null ? "(none)" : mExtraInfo). 431a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff append(", roaming: ").append(mIsRoaming). 432a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff append(", failover: ").append(mIsFailover). 43367c382192614dfab821666c4f35f1e2c8b97271bWink Saville append(", isAvailable: ").append(mIsAvailable). 43467c382192614dfab821666c4f35f1e2c8b97271bWink Saville append(", isConnectedToProvisioningNetwork: "). 435c9c90c771c9cd1381a49b714df9a2bc392959fccRobert Greenwalt append(mIsConnectedToProvisioningNetwork). 436c9c90c771c9cd1381a49b714df9a2bc392959fccRobert Greenwalt append("]"); 437a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return builder.toString(); 438a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Implement the Parcelable interface 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Implement the Parcelable interface. 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 454a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 455a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff dest.writeInt(mNetworkType); 456a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff dest.writeInt(mSubtype); 457a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff dest.writeString(mTypeName); 458a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff dest.writeString(mSubtypeName); 459a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff dest.writeString(mState.name()); 460a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff dest.writeString(mDetailedState.name()); 461a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff dest.writeInt(mIsFailover ? 1 : 0); 462a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff dest.writeInt(mIsAvailable ? 1 : 0); 463a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff dest.writeInt(mIsRoaming ? 1 : 0); 46467c382192614dfab821666c4f35f1e2c8b97271bWink Saville dest.writeInt(mIsConnectedToProvisioningNetwork ? 1 : 0); 465a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff dest.writeString(mReason); 466a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff dest.writeString(mExtraInfo); 467a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Implement the Parcelable interface. 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Creator<NetworkInfo> CREATOR = 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new Creator<NetworkInfo>() { 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public NetworkInfo createFromParcel(Parcel in) { 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int netType = in.readInt(); 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int subtype = in.readInt(); 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String typeName = in.readString(); 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String subtypeName = in.readString(); 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NetworkInfo netInfo = new NetworkInfo(netType, subtype, typeName, subtypeName); 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project netInfo.mState = State.valueOf(in.readString()); 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project netInfo.mDetailedState = DetailedState.valueOf(in.readString()); 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project netInfo.mIsFailover = in.readInt() != 0; 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project netInfo.mIsAvailable = in.readInt() != 0; 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project netInfo.mIsRoaming = in.readInt() != 0; 48767c382192614dfab821666c4f35f1e2c8b97271bWink Saville netInfo.mIsConnectedToProvisioningNetwork = in.readInt() != 0; 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project netInfo.mReason = in.readString(); 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project netInfo.mExtraInfo = in.readString(); 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return netInfo; 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public NetworkInfo[] newArray(int size) { 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new NetworkInfo[size]; 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 498