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.wifi; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19adae06be9bfd8cb756e1793b52e682eb87258968Chelsea Derrickimport android.annotation.SystemApi; 203e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faberimport android.content.pm.PackageManager; 216346155c5a48495944041e65ec279c88b0fa1391Jaewan Kimimport android.net.IpConfiguration; 226346155c5a48495944041e65ec279c88b0fa1391Jaewan Kimimport android.net.IpConfiguration.ProxySettings; 236346155c5a48495944041e65ec279c88b0fa1391Jaewan Kimimport android.net.ProxyInfo; 240a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colittiimport android.net.StaticIpConfiguration; 251375ede09255e04141f680c3e90526e9f34bf061Glen Kuhneimport android.net.Uri; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 276346155c5a48495944041e65ec279c88b0fa1391Jaewan Kimimport android.os.Parcelable; 286fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowskiimport android.os.UserHandle; 2926d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriffimport android.text.TextUtils; 30aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddyimport android.util.BackupUtils; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 32aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddyimport java.io.ByteArrayOutputStream; 33aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddyimport java.io.DataInputStream; 34aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddyimport java.io.DataOutputStream; 35aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddyimport java.io.IOException; 368d106780b6a638552749e54e169fc72537d4bcccxinheimport java.util.Arrays; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.BitSet; 388d106780b6a638552749e54e169fc72537d4bcccxinheimport java.util.HashMap; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A class representing a configured Wi-Fi network, including the 429b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff * security configuration. 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 44678979748585c5903125a404e448ad6c111dedadJaewan Kimpublic class WifiConfiguration implements Parcelable { 459b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff private static final String TAG = "WifiConfiguration"; 46aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy /** 47aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy * Current Version of the Backup Serializer. 48aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy */ 49aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy private static final int BACKUP_VERSION = 2; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ssidVarName = "ssid"; 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String bssidVarName = "bssid"; 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String pskVarName = "psk"; 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String[] wepKeyVarNames = { "wep_key0", "wep_key1", "wep_key2", "wep_key3" }; 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String wepTxKeyIdxVarName = "wep_tx_keyidx"; 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String priorityVarName = "priority"; 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String hiddenSSIDVarName = "scan_ssid"; 645ee89800bee7c6c755778795a536e0e2f12b85ffIrfan Sheriff /** {@hide} */ 655f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng public static final String pmfVarName = "ieee80211w"; 665f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng /** {@hide} */ 675f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng public static final String updateIdentiferVarName = "update_identifier"; 685f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng /** {@hide} */ 695ee89800bee7c6c755778795a536e0e2f12b85ffIrfan Sheriff public static final int INVALID_NETWORK_ID = -1; 70544eff2d23fdb73b993a2525414326fbd44d3428Rebecca Silberstein /** {@hide} */ 71544eff2d23fdb73b993a2525414326fbd44d3428Rebecca Silberstein public static final int LOCAL_ONLY_NETWORK_ID = -2; 72a0be0fb2709124a567f89114b1d8e80f74452edcxinhe 73a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande /** {@hide} */ 74a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande private String mPasspointManagementObjectTree; 75a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Recognized key management schemes. 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class KeyMgmt { 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private KeyMgmt() { } 815069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WPA is not used; plaintext or static WEP could be used. */ 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int NONE = 0; 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WPA pre-shared key (requires {@code preSharedKey} to be specified). */ 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WPA_PSK = 1; 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WPA using EAP authentication. Generally used with an external authentication server. */ 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WPA_EAP = 2; 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** IEEE 802.1X using EAP authentication and (optionally) dynamically 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * generated WEP keys. */ 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int IEEE8021X = 3; 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 92ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff /** WPA2 pre-shared key for use with soft access point 93ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff * (requires {@code preSharedKey} to be specified). 94ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff * @hide 95ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff */ 96b625377b1a9b324254fcde9928eade4473712486Jeremy Klein @SystemApi 97ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff public static final int WPA2_PSK = 4; 98a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande /** 99a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande * Hotspot 2.0 r2 OSEN: 100a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande * @hide 101a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande */ 102a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande public static final int OSEN = 5; 103ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff 104e72f7dc385bf0d8ae2c5015aaa7de74b5ef769ebPaul Stewart /** 105e72f7dc385bf0d8ae2c5015aaa7de74b5ef769ebPaul Stewart * IEEE 802.11r Fast BSS Transition with PSK authentication. 106e72f7dc385bf0d8ae2c5015aaa7de74b5ef769ebPaul Stewart * @hide 107e72f7dc385bf0d8ae2c5015aaa7de74b5ef769ebPaul Stewart */ 108e72f7dc385bf0d8ae2c5015aaa7de74b5ef769ebPaul Stewart public static final int FT_PSK = 6; 109e72f7dc385bf0d8ae2c5015aaa7de74b5ef769ebPaul Stewart 110e72f7dc385bf0d8ae2c5015aaa7de74b5ef769ebPaul Stewart /** 111e72f7dc385bf0d8ae2c5015aaa7de74b5ef769ebPaul Stewart * IEEE 802.11r Fast BSS Transition with EAP authentication. 112e72f7dc385bf0d8ae2c5015aaa7de74b5ef769ebPaul Stewart * @hide 113e72f7dc385bf0d8ae2c5015aaa7de74b5ef769ebPaul Stewart */ 114e72f7dc385bf0d8ae2c5015aaa7de74b5ef769ebPaul Stewart public static final int FT_EAP = 7; 115e72f7dc385bf0d8ae2c5015aaa7de74b5ef769ebPaul Stewart 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String varName = "key_mgmt"; 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 118ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff public static final String[] strings = { "NONE", "WPA_PSK", "WPA_EAP", "IEEE8021X", 119e72f7dc385bf0d8ae2c5015aaa7de74b5ef769ebPaul Stewart "WPA2_PSK", "OSEN", "FT_PSK", "FT_EAP" }; 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1215069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Recognized security protocols. 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class Protocol { 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Protocol() { } 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WPA/IEEE 802.11i/D3.0 */ 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WPA = 0; 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WPA2/IEEE 802.11i */ 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RSN = 1; 132a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande /** HS2.0 r2 OSEN 133a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande * @hide 134a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande */ 135a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande public static final int OSEN = 2; 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String varName = "proto"; 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 139a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande public static final String[] strings = { "WPA", "RSN", "OSEN" }; 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Recognized IEEE 802.11 authentication algorithms. 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class AuthAlgorithm { 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private AuthAlgorithm() { } 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Open System authentication (required for WPA/WPA2) */ 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int OPEN = 0; 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Shared Key authentication (requires static WEP keys) */ 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SHARED = 1; 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** LEAP/Network EAP (only used with LEAP) */ 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int LEAP = 2; 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String varName = "auth_alg"; 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String[] strings = { "OPEN", "SHARED", "LEAP" }; 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Recognized pairwise ciphers for WPA. 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class PairwiseCipher { 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private PairwiseCipher() { } 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Use only Group keys (deprecated) */ 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int NONE = 0; 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Temporal Key Integrity Protocol [IEEE 802.11i/D7.0] */ 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TKIP = 1; 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0] */ 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int CCMP = 2; 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String varName = "pairwise"; 1745069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String[] strings = { "NONE", "TKIP", "CCMP" }; 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Recognized group ciphers. 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <pre> 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * CCMP = AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0] 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * TKIP = Temporal Key Integrity Protocol [IEEE 802.11i/D7.0] 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WEP104 = WEP (Wired Equivalent Privacy) with 104-bit key 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WEP40 = WEP (Wired Equivalent Privacy) with 40-bit key (original 802.11) 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </pre> 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class GroupCipher { 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private GroupCipher() { } 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WEP40 = WEP (Wired Equivalent Privacy) with 40-bit key (original 802.11) */ 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WEP40 = 0; 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WEP104 = WEP (Wired Equivalent Privacy) with 104-bit key */ 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WEP104 = 1; 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Temporal Key Integrity Protocol [IEEE 802.11i/D7.0] */ 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TKIP = 2; 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0] */ 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int CCMP = 3; 198a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande /** Hotspot 2.0 r2 OSEN 199a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande * @hide 200a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande */ 201a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande public static final int GTK_NOT_USED = 4; 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String varName = "group"; 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 205a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande public static final String[] strings = 206a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande { "WEP40", "WEP104", "TKIP", "CCMP", "GTK_NOT_USED" }; 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Possible status of a network configuration. */ 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class Status { 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Status() { } 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** this is the network we are currently connected to */ 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int CURRENT = 0; 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** supplicant will not attempt to use this network */ 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int DISABLED = 1; 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** supplicant will consider this network available for association */ 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ENABLED = 2; 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String[] strings = { "current", "disabled", "enabled" }; 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2238dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy /** @hide */ 2241ac50cb32c08388540f53833c04a02f13fed0824Lorenzo Colitti public static final int UNKNOWN_UID = -1; 2251ac50cb32c08388540f53833c04a02f13fed0824Lorenzo Colitti 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The ID number that the supplicant uses to identify this 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * network configuration entry. This must be passed as an argument 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to most calls into the supplicant. 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int networkId; 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 233d4b072159de3a4042e813b043e07b2c125c1d6d9David Farrow // Fixme We need remove this field to use only Quality network selection status only 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The current status of this network configuration entry. 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see Status 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int status; 2398dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy 2408dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy /** 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The network's SSID. Can either be an ASCII string, 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * which must be enclosed in double quotation marks 243d4b072159de3a4042e813b043e07b2c125c1d6d9David Farrow * (e.g., {@code "MyNetwork"}), or a string of 244d4b072159de3a4042e813b043e07b2c125c1d6d9David Farrow * hex digits, which are not enclosed in quotes 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (e.g., {@code 01a243f405}). 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String SSID; 24843d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * When set, this network configuration entry should only be used when 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * associating with the AP having the specified BSSID. The value is 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a string in the format of an Ethernet MAC address, e.g., 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>XX:XX:XX:XX:XX:XX</code> where each <code>X</code> is a hex digit. 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String BSSID; 256a0be0fb2709124a567f89114b1d8e80f74452edcxinhe 257a0be0fb2709124a567f89114b1d8e80f74452edcxinhe /** 258d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu * 2GHz band. 259d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu * @hide 260d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu */ 261d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu public static final int AP_BAND_2GHZ = 0; 262d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu 263d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu /** 264d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu * 5GHz band. 265d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu * @hide 266d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu */ 267d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu public static final int AP_BAND_5GHZ = 1; 268d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu 269d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu /** 270a0be0fb2709124a567f89114b1d8e80f74452edcxinhe * The band which AP resides on 271a0be0fb2709124a567f89114b1d8e80f74452edcxinhe * 0-2G 1-5G 272a0be0fb2709124a567f89114b1d8e80f74452edcxinhe * By default, 2G is chosen 2737e5e791d22e76eb576fd5cf6dd5437b8050b0438xinhe * @hide 274a0be0fb2709124a567f89114b1d8e80f74452edcxinhe */ 275d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu public int apBand = AP_BAND_2GHZ; 276a0be0fb2709124a567f89114b1d8e80f74452edcxinhe 277a0be0fb2709124a567f89114b1d8e80f74452edcxinhe /** 278a0be0fb2709124a567f89114b1d8e80f74452edcxinhe * The channel which AP resides on,currently, US only 279a0be0fb2709124a567f89114b1d8e80f74452edcxinhe * 2G 1-11 280a0be0fb2709124a567f89114b1d8e80f74452edcxinhe * 5G 36,40,44,48,149,153,157,161,165 281a0be0fb2709124a567f89114b1d8e80f74452edcxinhe * 0 - find a random available channel according to the apBand 2827e5e791d22e76eb576fd5cf6dd5437b8050b0438xinhe * @hide 283a0be0fb2709124a567f89114b1d8e80f74452edcxinhe */ 284a0be0fb2709124a567f89114b1d8e80f74452edcxinhe public int apChannel = 0; 285a0be0fb2709124a567f89114b1d8e80f74452edcxinhe 2868a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng /** 287a3406db72c14efd9610efc911e337ad3eb45b1c6Roshan Pius * Pre-shared key for use with WPA-PSK. Either an ASCII string enclosed in 288a3406db72c14efd9610efc911e337ad3eb45b1c6Roshan Pius * double quotation marks (e.g., {@code "abcdefghij"} for PSK passphrase or 289a3406db72c14efd9610efc911e337ad3eb45b1c6Roshan Pius * a string of 64 hex digits for raw PSK. 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p/> 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * When the value of this key is read, the actual key is 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not returned, just a "*" if the key has a value, or the null 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * string otherwise. 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String preSharedKey; 296d4b072159de3a4042e813b043e07b2c125c1d6d9David Farrow 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Up to four WEP keys. Either an ASCII string enclosed in double 299d4b072159de3a4042e813b043e07b2c125c1d6d9David Farrow * quotation marks (e.g., {@code "abcdef"}) or a string 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of hex digits (e.g., {@code 0102030405}). 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p/> 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * When the value of one of these keys is read, the actual key is 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not returned, just a "*" if the key has a value, or the null 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * string otherwise. 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String[] wepKeys; 3075069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Default WEP key index, ranging from 0 to 3. */ 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int wepTxKeyIndex; 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Priority determines the preference given to a network by {@code wpa_supplicant} 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * when choosing an access point with which to associate. 31426300afd75eeb5d57ca1019058a0ab54bf2be733Roshan Pius * @deprecated This field does not exist anymore. 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 316c082d63a3b62b7231f86d871ac16e0a24586f907Roshan Pius @Deprecated 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int priority; 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is a network that does not broadcast its SSID, so an 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * SSID-specific probe request must be used for scans. 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean hiddenSSID; 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3265f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng * This is a network that requries Protected Management Frames (PMF). 3275f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng * @hide 3285f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng */ 3295f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng public boolean requirePMF; 3305f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng 3315f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng /** 3325f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng * Update identifier, for Passpoint network. 3335f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng * @hide 3345f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng */ 3355f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng public String updateIdentifier; 3365f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng 3375f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng /** 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The set of key management protocols supported by this configuration. 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See {@link KeyMgmt} for descriptions of the values. 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defaults to WPA-PSK WPA-EAP. 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BitSet allowedKeyManagement; 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The set of security protocols supported by this configuration. 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See {@link Protocol} for descriptions of the values. 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defaults to WPA RSN. 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BitSet allowedProtocols; 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The set of authentication protocols supported by this configuration. 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See {@link AuthAlgorithm} for descriptions of the values. 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defaults to automatic selection. 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BitSet allowedAuthAlgorithms; 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The set of pairwise ciphers for WPA supported by this configuration. 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See {@link PairwiseCipher} for descriptions of the values. 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defaults to CCMP TKIP. 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BitSet allowedPairwiseCiphers; 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The set of group ciphers supported by this configuration. 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See {@link GroupCipher} for descriptions of the values. 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defaults to CCMP TKIP WEP104 WEP40. 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BitSet allowedGroupCiphers; 3679b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff /** 36826d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * The enterprise configuration details specifying the EAP method, 36926d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * certificates and other settings associated with the EAP. 3709b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff */ 3719b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff public WifiEnterpriseConfig enterpriseConfig; 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 373678979748585c5903125a404e448ad6c111dedadJaewan Kim /** 3746bbc8955c17ed44f63ddbf78d0e4d24b60ac05cdPeter Qiu * Fully qualified domain name of a Passpoint configuration 375b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande */ 376b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande public String FQDN; 377b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande 378b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande /** 3796bbc8955c17ed44f63ddbf78d0e4d24b60ac05cdPeter Qiu * Name of Passpoint credential provider 380b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande */ 381b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande public String providerFriendlyName; 382b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande 383b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande /** 3841379fd0b1ef952547934846f4b6c40780f885e47Peter Qiu * Flag indicating if this network is provided by a home Passpoint provider or a roaming 385f7303ba18e1c6631da4e41a2b571e32f93f01844Peter Qiu * Passpoint provider. This flag will be {@code true} if this network is provided by 386f7303ba18e1c6631da4e41a2b571e32f93f01844Peter Qiu * a home Passpoint provider and {@code false} if is provided by a roaming Passpoint provider 387f7303ba18e1c6631da4e41a2b571e32f93f01844Peter Qiu * or is a non-Passpoint network. 3881379fd0b1ef952547934846f4b6c40780f885e47Peter Qiu */ 3891379fd0b1ef952547934846f4b6c40780f885e47Peter Qiu public boolean isHomeProviderNetwork; 3901379fd0b1ef952547934846f4b6c40780f885e47Peter Qiu 3911379fd0b1ef952547934846f4b6c40780f885e47Peter Qiu /** 3926bbc8955c17ed44f63ddbf78d0e4d24b60ac05cdPeter Qiu * Roaming Consortium Id list for Passpoint credential; identifies a set of networks where 3936bbc8955c17ed44f63ddbf78d0e4d24b60ac05cdPeter Qiu * Passpoint credential will be considered valid 394b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande */ 3957226c8f95b5971af2710c8d2f8a8b6f2210e2420Vinit Deshpande public long[] roamingConsortiumIds; 396b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande 397b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande /** 398678979748585c5903125a404e448ad6c111dedadJaewan Kim * @hide 3996fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski * This network configuration is visible to and usable by other users on the 4006fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski * same device. 4016fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski */ 4026fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski public boolean shared; 4036fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski 4046fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski /** 4056fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski * @hide 406678979748585c5903125a404e448ad6c111dedadJaewan Kim */ 4076346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim private IpConfiguration mIpConfiguration; 408678979748585c5903125a404e448ad6c111dedadJaewan Kim 409678979748585c5903125a404e448ad6c111dedadJaewan Kim /** 410678979748585c5903125a404e448ad6c111dedadJaewan Kim * @hide 4117c3606c103e95d3991267cca2592402a68779cafvandwalle * dhcp server MAC address if known 4127c3606c103e95d3991267cca2592402a68779cafvandwalle */ 4137c3606c103e95d3991267cca2592402a68779cafvandwalle public String dhcpServer; 4147c3606c103e95d3991267cca2592402a68779cafvandwalle 4157c3606c103e95d3991267cca2592402a68779cafvandwalle /** 4167c3606c103e95d3991267cca2592402a68779cafvandwalle * @hide 4177c3606c103e95d3991267cca2592402a68779cafvandwalle * default Gateway MAC address if known 4187c3606c103e95d3991267cca2592402a68779cafvandwalle */ 4197c3606c103e95d3991267cca2592402a68779cafvandwalle public String defaultGwMacAddress; 4207c3606c103e95d3991267cca2592402a68779cafvandwalle 4217c3606c103e95d3991267cca2592402a68779cafvandwalle /** 4227c3606c103e95d3991267cca2592402a68779cafvandwalle * @hide 423ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle * last time we connected, this configuration had validated internet access 424448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle */ 425ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle public boolean validatedInternetAccess; 426448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle 427448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle /** 428448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * @hide 429b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne * The number of beacon intervals between Delivery Traffic Indication Maps (DTIM) 430b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne * This value is populated from scan results that contain Beacon Frames, which are infrequent. 431b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne * The value is not guaranteed to be set or current (Although it SHOULDNT change once set) 432b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne * Valid values are from 1 - 255. Initialized here as 0, use this to check if set. 433b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne */ 434b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne public int dtimInterval = 0; 435b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne 436b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne /** 437580a1bdfbc6a8c4ca25e796af234711184c13871Peter Qiu * Flag indicating if this configuration represents a legacy Passpoint configuration 438580a1bdfbc6a8c4ca25e796af234711184c13871Peter Qiu * (Release N or older). This is used for migrating Passpoint configuration from N to O. 439580a1bdfbc6a8c4ca25e796af234711184c13871Peter Qiu * This will no longer be needed after O. 440580a1bdfbc6a8c4ca25e796af234711184c13871Peter Qiu * @hide 441580a1bdfbc6a8c4ca25e796af234711184c13871Peter Qiu */ 442580a1bdfbc6a8c4ca25e796af234711184c13871Peter Qiu public boolean isLegacyPasspointConfig = false; 443580a1bdfbc6a8c4ca25e796af234711184c13871Peter Qiu /** 444b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne * @hide 4458f13548615f647a1208ace5369b504cb41149965vandwalle * Uid of app creating the configuration 4468f13548615f647a1208ace5369b504cb41149965vandwalle */ 447adae06be9bfd8cb756e1793b52e682eb87258968Chelsea Derrick @SystemApi 4488f13548615f647a1208ace5369b504cb41149965vandwalle public int creatorUid; 4498f13548615f647a1208ace5369b504cb41149965vandwalle 4508f13548615f647a1208ace5369b504cb41149965vandwalle /** 4518f13548615f647a1208ace5369b504cb41149965vandwalle * @hide 4528f13548615f647a1208ace5369b504cb41149965vandwalle * Uid of last app issuing a connection related command 4538f13548615f647a1208ace5369b504cb41149965vandwalle */ 4548f13548615f647a1208ace5369b504cb41149965vandwalle public int lastConnectUid; 4558f13548615f647a1208ace5369b504cb41149965vandwalle 4568f13548615f647a1208ace5369b504cb41149965vandwalle /** 4578f13548615f647a1208ace5369b504cb41149965vandwalle * @hide 4588f13548615f647a1208ace5369b504cb41149965vandwalle * Uid of last app modifying the configuration 4598f13548615f647a1208ace5369b504cb41149965vandwalle */ 460eb8f329a5e8d4df80447ab9676761f9743d20cd4Chelsea Derrick @SystemApi 4618f13548615f647a1208ace5369b504cb41149965vandwalle public int lastUpdateUid; 4628f13548615f647a1208ace5369b504cb41149965vandwalle 4638f13548615f647a1208ace5369b504cb41149965vandwalle /** 4648f13548615f647a1208ace5369b504cb41149965vandwalle * @hide 4653e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * Universal name for app creating the configuration 4663e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * see {#link {@link PackageManager#getNameForUid(int)} 4673e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber */ 4683e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber @SystemApi 4693e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber public String creatorName; 4703e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber 4713e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber /** 4723e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * @hide 4733e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * Universal name for app updating the configuration 4743e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * see {#link {@link PackageManager#getNameForUid(int)} 4753e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber */ 4763e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber @SystemApi 4773e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber public String lastUpdateName; 4783e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber 4793e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber /** 4803e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * @hide 4813e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * Status of user approval for connection 4823e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber */ 4833e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber public int userApproved = USER_UNSPECIFIED; 4843e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber 4852ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle /** The Below RSSI thresholds are used to configure AutoJoin 4862ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle * - GOOD/LOW/BAD thresholds are used so as to calculate link score 4872e93c38fa6fad224e56a45ff4244bdd538aec846vandwalle * - UNWANTED_SOFT are used by the blacklisting logic so as to handle 4882e93c38fa6fad224e56a45ff4244bdd538aec846vandwalle * the unwanted network message coming from CS 4892e93c38fa6fad224e56a45ff4244bdd538aec846vandwalle * - UNBLACKLIST thresholds are used so as to tweak the speed at which 4902e93c38fa6fad224e56a45ff4244bdd538aec846vandwalle * the network is unblacklisted (i.e. if 4912ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle * it is seen with good RSSI, it is blacklisted faster) 4922e93c38fa6fad224e56a45ff4244bdd538aec846vandwalle * - INITIAL_AUTOJOIN_ATTEMPT, used to determine how close from 4932e93c38fa6fad224e56a45ff4244bdd538aec846vandwalle * the network we need to be before autojoin kicks in 4942ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle */ 4957c3606c103e95d3991267cca2592402a68779cafvandwalle /** @hide **/ 4967c3606c103e95d3991267cca2592402a68779cafvandwalle public static int INVALID_RSSI = -127; 4977c3606c103e95d3991267cca2592402a68779cafvandwalle 4987c3606c103e95d3991267cca2592402a68779cafvandwalle /** 4997c3606c103e95d3991267cca2592402a68779cafvandwalle * @hide 5007c3606c103e95d3991267cca2592402a68779cafvandwalle * A summary of the RSSI and Band status for that configuration 5017c3606c103e95d3991267cca2592402a68779cafvandwalle * This is used as a temporary value by the auto-join controller 5027c3606c103e95d3991267cca2592402a68779cafvandwalle */ 5036f6c781cca66cabc1f06be368a6dfedceb88ed0eVinit Deshpande public static final class Visibility { 5047c3606c103e95d3991267cca2592402a68779cafvandwalle public int rssi5; // strongest 5GHz RSSI 5057c3606c103e95d3991267cca2592402a68779cafvandwalle public int rssi24; // strongest 2.4GHz RSSI 5067c3606c103e95d3991267cca2592402a68779cafvandwalle public int num5; // number of BSSIDs on 5GHz 5077c3606c103e95d3991267cca2592402a68779cafvandwalle public int num24; // number of BSSIDs on 2.4GHz 508e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle public long age5; // timestamp of the strongest 5GHz BSSID (last time it was seen) 509e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle public long age24; // timestamp of the strongest 2.4GHz BSSID (last time it was seen) 510e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle public String BSSID24; 511e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle public String BSSID5; 51272e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle public int score; // Debug only, indicate last score used for autojoin/cell-handover 51372e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle public int currentNetworkBoost; // Debug only, indicate boost applied to RSSI if current 51472e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle public int bandPreferenceBoost; // Debug only, indicate boost applied to RSSI if current 51572e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle public int lastChoiceBoost; // Debug only, indicate last choice applied to this configuration 51672e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle public String lastChoiceConfig; // Debug only, indicate last choice applied to this configuration 5175fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle 5185fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle public Visibility() { 5197c3606c103e95d3991267cca2592402a68779cafvandwalle rssi5 = INVALID_RSSI; 5207c3606c103e95d3991267cca2592402a68779cafvandwalle rssi24 = INVALID_RSSI; 5217c3606c103e95d3991267cca2592402a68779cafvandwalle } 5225fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle 5235fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle public Visibility(Visibility source) { 5247c3606c103e95d3991267cca2592402a68779cafvandwalle rssi5 = source.rssi5; 5257c3606c103e95d3991267cca2592402a68779cafvandwalle rssi24 = source.rssi24; 5267c3606c103e95d3991267cca2592402a68779cafvandwalle age24 = source.age24; 5277c3606c103e95d3991267cca2592402a68779cafvandwalle age5 = source.age5; 5287c3606c103e95d3991267cca2592402a68779cafvandwalle num24 = source.num24; 5297c3606c103e95d3991267cca2592402a68779cafvandwalle num5 = source.num5; 530e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle BSSID5 = source.BSSID5; 531e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle BSSID24 = source.BSSID24; 5327c3606c103e95d3991267cca2592402a68779cafvandwalle } 5335fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle 5345fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle @Override 5355fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle public String toString() { 5365fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle StringBuilder sbuf = new StringBuilder(); 5375fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append("["); 5385fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle if (rssi24 > INVALID_RSSI) { 5395fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append(Integer.toString(rssi24)); 5405fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append(","); 5415fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append(Integer.toString(num24)); 542e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle if (BSSID24 != null) sbuf.append(",").append(BSSID24); 5435fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle } 54472e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle sbuf.append("; "); 5455fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle if (rssi5 > INVALID_RSSI) { 5465fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append(Integer.toString(rssi5)); 5475fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append(","); 5485fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append(Integer.toString(num5)); 549e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle if (BSSID5 != null) sbuf.append(",").append(BSSID5); 5505fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle } 55172e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle if (score != 0) { 55272e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle sbuf.append("; ").append(score); 55372e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle sbuf.append(", ").append(currentNetworkBoost); 55472e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle sbuf.append(", ").append(bandPreferenceBoost); 55572e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle if (lastChoiceConfig != null) { 55672e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle sbuf.append(", ").append(lastChoiceBoost); 55772e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle sbuf.append(", ").append(lastChoiceConfig); 55872e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle } 55972e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle } 5605fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append("]"); 5615fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle return sbuf.toString(); 5625fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle } 5637c3606c103e95d3991267cca2592402a68779cafvandwalle } 5647c3606c103e95d3991267cca2592402a68779cafvandwalle 5657c3606c103e95d3991267cca2592402a68779cafvandwalle /** @hide 5667c3606c103e95d3991267cca2592402a68779cafvandwalle * Cache the visibility status of this configuration. 5677c3606c103e95d3991267cca2592402a68779cafvandwalle * Visibility can change at any time depending on scan results availability. 5687c3606c103e95d3991267cca2592402a68779cafvandwalle * Owner of the WifiConfiguration is responsible to set this field based on 5697c3606c103e95d3991267cca2592402a68779cafvandwalle * recent scan results. 5707c3606c103e95d3991267cca2592402a68779cafvandwalle ***/ 5717c3606c103e95d3991267cca2592402a68779cafvandwalle public Visibility visibility; 5727c3606c103e95d3991267cca2592402a68779cafvandwalle 5737c3606c103e95d3991267cca2592402a68779cafvandwalle /** @hide 5747c3606c103e95d3991267cca2592402a68779cafvandwalle * calculate and set Visibility for that configuration. 5757c3606c103e95d3991267cca2592402a68779cafvandwalle * 5767c3606c103e95d3991267cca2592402a68779cafvandwalle * age in milliseconds: we will consider only ScanResults that are more recent, 5777c3606c103e95d3991267cca2592402a68779cafvandwalle * i.e. younger. 5787c3606c103e95d3991267cca2592402a68779cafvandwalle ***/ 5796f6c781cca66cabc1f06be368a6dfedceb88ed0eVinit Deshpande public void setVisibility(Visibility status) { 5807c3606c103e95d3991267cca2592402a68779cafvandwalle visibility = status; 5817c3606c103e95d3991267cca2592402a68779cafvandwalle } 5827c3606c103e95d3991267cca2592402a68779cafvandwalle 5833e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber // States for the userApproved field 5843e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber /** 5853e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * @hide 5863e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * User hasn't specified if connection is okay 5873e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber */ 5883e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber public static final int USER_UNSPECIFIED = 0; 5893e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber /** 5903e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * @hide 5913e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * User has approved this for connection 5923e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber */ 5933e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber public static final int USER_APPROVED = 1; 5943e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber /** 5953e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * @hide 5963e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * User has banned this from connection 5973e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber */ 5983e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber public static final int USER_BANNED = 2; 5993e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber /** 6003e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * @hide 6013e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * Waiting for user input 6023e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber */ 6033e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber public static final int USER_PENDING = 3; 6043e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber 6057c3606c103e95d3991267cca2592402a68779cafvandwalle /** 6067c3606c103e95d3991267cca2592402a68779cafvandwalle * @hide 607ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle * Number of reports indicating no Internet Access 608ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle */ 609ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle public int numNoInternetAccessReports; 610ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle 611ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle /** 612ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle * @hide 613ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle * For debug: date at which the config was last updated 614ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle */ 615ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle public String updateTime; 616ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle 617ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle /** 618ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle * @hide 619ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle * For debug: date at which the config was last updated 620ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle */ 621ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle public String creationTime; 622ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle 623ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle /** 624ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle * @hide 625ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle * The WiFi configuration is considered to have no internet access for purpose of autojoining 626ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle * if there has been a report of it having no internet access, and, it never have had 627ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle * internet access in the past. 628ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle */ 6295ac6650d4aa8dd6fa16a568bd86b0e38aca32161Amin Shaikh @SystemApi 630ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle public boolean hasNoInternetAccess() { 631ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle return numNoInternetAccessReports > 0 && !validatedInternetAccess; 632ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle } 633ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle 634ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle /** 6351248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti * The WiFi configuration is expected not to have Internet access (e.g., a wireless printer, a 6361248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti * Chromecast hotspot, etc.). This will be set if the user explicitly confirms a connection to 6371248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti * this configuration and selects "don't ask again". 6381248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti * @hide 6391248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti */ 6401248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti public boolean noInternetAccessExpected; 6411248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti 6421248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti /** 6435ac6650d4aa8dd6fa16a568bd86b0e38aca32161Amin Shaikh * The WiFi configuration is expected not to have Internet access (e.g., a wireless printer, a 6445ac6650d4aa8dd6fa16a568bd86b0e38aca32161Amin Shaikh * Chromecast hotspot, etc.). This will be set if the user explicitly confirms a connection to 6455ac6650d4aa8dd6fa16a568bd86b0e38aca32161Amin Shaikh * this configuration and selects "don't ask again". 6465ac6650d4aa8dd6fa16a568bd86b0e38aca32161Amin Shaikh * @hide 6475ac6650d4aa8dd6fa16a568bd86b0e38aca32161Amin Shaikh */ 6485ac6650d4aa8dd6fa16a568bd86b0e38aca32161Amin Shaikh @SystemApi 6495ac6650d4aa8dd6fa16a568bd86b0e38aca32161Amin Shaikh public boolean isNoInternetAccessExpected() { 6505ac6650d4aa8dd6fa16a568bd86b0e38aca32161Amin Shaikh return noInternetAccessExpected; 6515ac6650d4aa8dd6fa16a568bd86b0e38aca32161Amin Shaikh } 6525ac6650d4aa8dd6fa16a568bd86b0e38aca32161Amin Shaikh 6535ac6650d4aa8dd6fa16a568bd86b0e38aca32161Amin Shaikh /** 654ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle * @hide 655154b2cf6bbb99ee258b289846183172139a87dbavandwalle * Last time the system was connected to this configuration. 656111fa0274d1d6620f9634783585387f3b773949evandwalle */ 657111fa0274d1d6620f9634783585387f3b773949evandwalle public long lastConnected; 658111fa0274d1d6620f9634783585387f3b773949evandwalle 659111fa0274d1d6620f9634783585387f3b773949evandwalle /** 660111fa0274d1d6620f9634783585387f3b773949evandwalle * @hide 661154b2cf6bbb99ee258b289846183172139a87dbavandwalle * Last time the system tried to connect and failed. 662154b2cf6bbb99ee258b289846183172139a87dbavandwalle */ 663154b2cf6bbb99ee258b289846183172139a87dbavandwalle public long lastConnectionFailure; 664154b2cf6bbb99ee258b289846183172139a87dbavandwalle 665154b2cf6bbb99ee258b289846183172139a87dbavandwalle /** 666154b2cf6bbb99ee258b289846183172139a87dbavandwalle * @hide 6678650c035609507340e3a66459cea16ef08cd03a6vandwalle * Last time the system tried to roam and failed because of authentication failure or DHCP 6688650c035609507340e3a66459cea16ef08cd03a6vandwalle * RENEW failure. 6698650c035609507340e3a66459cea16ef08cd03a6vandwalle */ 6708650c035609507340e3a66459cea16ef08cd03a6vandwalle public long lastRoamingFailure; 6718650c035609507340e3a66459cea16ef08cd03a6vandwalle 6728650c035609507340e3a66459cea16ef08cd03a6vandwalle /** @hide */ 6738650c035609507340e3a66459cea16ef08cd03a6vandwalle public static int ROAMING_FAILURE_IP_CONFIG = 1; 6748650c035609507340e3a66459cea16ef08cd03a6vandwalle /** @hide */ 6758650c035609507340e3a66459cea16ef08cd03a6vandwalle public static int ROAMING_FAILURE_AUTH_FAILURE = 2; 6768650c035609507340e3a66459cea16ef08cd03a6vandwalle 6778650c035609507340e3a66459cea16ef08cd03a6vandwalle /** 6788650c035609507340e3a66459cea16ef08cd03a6vandwalle * @hide 6798650c035609507340e3a66459cea16ef08cd03a6vandwalle * Initial amount of time this Wifi configuration gets blacklisted for network switching 6808650c035609507340e3a66459cea16ef08cd03a6vandwalle * because of roaming failure 6818650c035609507340e3a66459cea16ef08cd03a6vandwalle */ 6828650c035609507340e3a66459cea16ef08cd03a6vandwalle public long roamingFailureBlackListTimeMilli = 1000; 6838650c035609507340e3a66459cea16ef08cd03a6vandwalle 6848650c035609507340e3a66459cea16ef08cd03a6vandwalle /** 6858650c035609507340e3a66459cea16ef08cd03a6vandwalle * @hide 6868650c035609507340e3a66459cea16ef08cd03a6vandwalle * Last roaming failure reason code 6878650c035609507340e3a66459cea16ef08cd03a6vandwalle */ 6888650c035609507340e3a66459cea16ef08cd03a6vandwalle public int lastRoamingFailureReason; 6898650c035609507340e3a66459cea16ef08cd03a6vandwalle 6908650c035609507340e3a66459cea16ef08cd03a6vandwalle /** 6918650c035609507340e3a66459cea16ef08cd03a6vandwalle * @hide 692154b2cf6bbb99ee258b289846183172139a87dbavandwalle * Last time the system was disconnected to this configuration. 693111fa0274d1d6620f9634783585387f3b773949evandwalle */ 694111fa0274d1d6620f9634783585387f3b773949evandwalle public long lastDisconnected; 6952ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle 6967c3606c103e95d3991267cca2592402a68779cafvandwalle /** 697e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle * Set if the configuration was self added by the framework 6988f13548615f647a1208ace5369b504cb41149965vandwalle * This boolean is cleared if we get a connect/save/ update or 6998f13548615f647a1208ace5369b504cb41149965vandwalle * any wifiManager command that indicate the user interacted with the configuration 7008f13548615f647a1208ace5369b504cb41149965vandwalle * since we will now consider that the configuration belong to him. 701e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle * @hide 702e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle */ 703e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle public boolean selfAdded; 704e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle 705e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle /** 7068f13548615f647a1208ace5369b504cb41149965vandwalle * Set if the configuration was self added by the framework 7078f13548615f647a1208ace5369b504cb41149965vandwalle * This boolean is set once and never cleared. It is used 7088f13548615f647a1208ace5369b504cb41149965vandwalle * so as we never loose track of who created the 7098f13548615f647a1208ace5369b504cb41149965vandwalle * configuration in the first place. 7108f13548615f647a1208ace5369b504cb41149965vandwalle * @hide 7118f13548615f647a1208ace5369b504cb41149965vandwalle */ 7128f13548615f647a1208ace5369b504cb41149965vandwalle public boolean didSelfAdd; 7138f13548615f647a1208ace5369b504cb41149965vandwalle 7148f13548615f647a1208ace5369b504cb41149965vandwalle /** 715154b2cf6bbb99ee258b289846183172139a87dbavandwalle * Peer WifiConfiguration this WifiConfiguration was added for 7162d0f71eea20470985abde98d759910a1ac40b257vandwalle * @hide 7172d0f71eea20470985abde98d759910a1ac40b257vandwalle */ 7182d0f71eea20470985abde98d759910a1ac40b257vandwalle public String peerWifiConfiguration; 7192d0f71eea20470985abde98d759910a1ac40b257vandwalle 7202d0f71eea20470985abde98d759910a1ac40b257vandwalle /** 7217c3606c103e95d3991267cca2592402a68779cafvandwalle * @hide 7227c3606c103e95d3991267cca2592402a68779cafvandwalle * Indicate that a WifiConfiguration is temporary and should not be saved 7237c3606c103e95d3991267cca2592402a68779cafvandwalle * nor considered by AutoJoin. 7247c3606c103e95d3991267cca2592402a68779cafvandwalle */ 7257c3606c103e95d3991267cca2592402a68779cafvandwalle public boolean ephemeral; 7267c3606c103e95d3991267cca2592402a68779cafvandwalle 7277c3606c103e95d3991267cca2592402a68779cafvandwalle /** 7287c3606c103e95d3991267cca2592402a68779cafvandwalle * @hide 7299f65210780d89a39245c01a2c52447512fbdd950Amin Shaikh * Indicate that a WifiConfiguration is temporary and should not be saved 7309f65210780d89a39245c01a2c52447512fbdd950Amin Shaikh * nor considered by AutoJoin. 7319f65210780d89a39245c01a2c52447512fbdd950Amin Shaikh */ 7329f65210780d89a39245c01a2c52447512fbdd950Amin Shaikh @SystemApi 7339f65210780d89a39245c01a2c52447512fbdd950Amin Shaikh public boolean isEphemeral() { 7349f65210780d89a39245c01a2c52447512fbdd950Amin Shaikh return ephemeral; 7359f65210780d89a39245c01a2c52447512fbdd950Amin Shaikh } 7369f65210780d89a39245c01a2c52447512fbdd950Amin Shaikh 7379f65210780d89a39245c01a2c52447512fbdd950Amin Shaikh /** 73843d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey * Indicates if the creator of this configuration has expressed that it 73943d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey * should be considered metered. 74043d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey * 74143d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey * @see #isMetered(WifiConfiguration, WifiInfo) 7429f65210780d89a39245c01a2c52447512fbdd950Amin Shaikh * @hide 743f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin */ 74414965357b7e5b1c6ac8334dc83a06e603c0e2740Amin Shaikh @SystemApi 745f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin public boolean meteredHint; 746f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin 74743d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey /** {@hide} */ 74843d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey public static final int METERED_OVERRIDE_NONE = 0; 74943d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey /** {@hide} */ 75043d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey public static final int METERED_OVERRIDE_METERED = 1; 75143d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey /** {@hide} */ 75243d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey public static final int METERED_OVERRIDE_NOT_METERED = 2; 75343d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey 75443d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey /** 75543d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey * Indicates if the end user has expressed an explicit opinion about the 75643d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey * meteredness of this network, such as through the Settings app. 75743d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey * <p> 75843d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey * This should always override any values from {@link #meteredHint} or 75943d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey * {@link WifiInfo#getMeteredHint()}. 76043d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey * 76143d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey * @see #isMetered(WifiConfiguration, WifiInfo) 76243d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey * @hide 76343d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey */ 76443d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey public int meteredOverride = METERED_OVERRIDE_NONE; 76543d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey 766f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin /** 76743d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey * Blend together all the various opinions to decide if the given network 76843d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey * should be considered metered or not. 76943d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey * 770f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin * @hide 771c76fda726973693c6168ada797943070eac2f04bStephen Chen */ 77243d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey public static boolean isMetered(WifiConfiguration config, WifiInfo info) { 77343d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey boolean metered = false; 77443d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey if (info != null && info.getMeteredHint()) { 77543d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey metered = true; 77643d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey } 77743d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey if (config != null && config.meteredHint) { 77843d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey metered = true; 77943d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey } 78043d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey if (config != null 78143d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey && config.meteredOverride == WifiConfiguration.METERED_OVERRIDE_METERED) { 78243d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey metered = true; 78343d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey } 78443d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey if (config != null 78543d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey && config.meteredOverride == WifiConfiguration.METERED_OVERRIDE_NOT_METERED) { 78643d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey metered = false; 78743d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey } 78843d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey return metered; 78943d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey } 790c76fda726973693c6168ada797943070eac2f04bStephen Chen 791c76fda726973693c6168ada797943070eac2f04bStephen Chen /** 792c76fda726973693c6168ada797943070eac2f04bStephen Chen * @hide 7931f6029bd6f45e98d8ba6b761ad5e08e3044f0fb5Jeremy Joslin * Returns true if this WiFi config is for an open network. 7941f6029bd6f45e98d8ba6b761ad5e08e3044f0fb5Jeremy Joslin */ 7951f6029bd6f45e98d8ba6b761ad5e08e3044f0fb5Jeremy Joslin public boolean isOpenNetwork() { 7961f6029bd6f45e98d8ba6b761ad5e08e3044f0fb5Jeremy Joslin final int cardinality = allowedKeyManagement.cardinality(); 7971f6029bd6f45e98d8ba6b761ad5e08e3044f0fb5Jeremy Joslin final boolean hasNoKeyMgmt = cardinality == 0 7981f6029bd6f45e98d8ba6b761ad5e08e3044f0fb5Jeremy Joslin || (cardinality == 1 && allowedKeyManagement.get(KeyMgmt.NONE)); 7991f6029bd6f45e98d8ba6b761ad5e08e3044f0fb5Jeremy Joslin 8001f6029bd6f45e98d8ba6b761ad5e08e3044f0fb5Jeremy Joslin boolean hasNoWepKeys = true; 8011f6029bd6f45e98d8ba6b761ad5e08e3044f0fb5Jeremy Joslin if (wepKeys != null) { 8021f6029bd6f45e98d8ba6b761ad5e08e3044f0fb5Jeremy Joslin for (int i = 0; i < wepKeys.length; i++) { 8031f6029bd6f45e98d8ba6b761ad5e08e3044f0fb5Jeremy Joslin if (wepKeys[i] != null) { 8041f6029bd6f45e98d8ba6b761ad5e08e3044f0fb5Jeremy Joslin hasNoWepKeys = false; 8051f6029bd6f45e98d8ba6b761ad5e08e3044f0fb5Jeremy Joslin break; 8061f6029bd6f45e98d8ba6b761ad5e08e3044f0fb5Jeremy Joslin } 8071f6029bd6f45e98d8ba6b761ad5e08e3044f0fb5Jeremy Joslin } 8081f6029bd6f45e98d8ba6b761ad5e08e3044f0fb5Jeremy Joslin } 8091f6029bd6f45e98d8ba6b761ad5e08e3044f0fb5Jeremy Joslin 8101f6029bd6f45e98d8ba6b761ad5e08e3044f0fb5Jeremy Joslin return hasNoKeyMgmt && hasNoWepKeys; 8111f6029bd6f45e98d8ba6b761ad5e08e3044f0fb5Jeremy Joslin } 8121f6029bd6f45e98d8ba6b761ad5e08e3044f0fb5Jeremy Joslin 8131f6029bd6f45e98d8ba6b761ad5e08e3044f0fb5Jeremy Joslin /** 8141f6029bd6f45e98d8ba6b761ad5e08e3044f0fb5Jeremy Joslin * @hide 815fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin * Setting this value will force scan results associated with this configuration to 816fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin * be included in the bucket of networks that are externally scored. 817fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin * If not set, associated scan results will be treated as legacy saved networks and 818fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin * will take precedence over networks in the scored category. 819fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin */ 820fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin @SystemApi 821fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin public boolean useExternalScores; 822fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin 823fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin /** 824fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin * @hide 825154b2cf6bbb99ee258b289846183172139a87dbavandwalle * Number of time the scorer overrode a the priority based choice, when comparing two 826154b2cf6bbb99ee258b289846183172139a87dbavandwalle * WifiConfigurations, note that since comparing WifiConfiguration happens very often 827154b2cf6bbb99ee258b289846183172139a87dbavandwalle * potentially at every scan, this number might become very large, even on an idle 828154b2cf6bbb99ee258b289846183172139a87dbavandwalle * system. 829154b2cf6bbb99ee258b289846183172139a87dbavandwalle */ 830154b2cf6bbb99ee258b289846183172139a87dbavandwalle @SystemApi 831154b2cf6bbb99ee258b289846183172139a87dbavandwalle public int numScorerOverride; 832154b2cf6bbb99ee258b289846183172139a87dbavandwalle 833154b2cf6bbb99ee258b289846183172139a87dbavandwalle /** 834154b2cf6bbb99ee258b289846183172139a87dbavandwalle * @hide 835154b2cf6bbb99ee258b289846183172139a87dbavandwalle * Number of time the scorer overrode a the priority based choice, and the comparison 836154b2cf6bbb99ee258b289846183172139a87dbavandwalle * triggered a network switch 837154b2cf6bbb99ee258b289846183172139a87dbavandwalle */ 838154b2cf6bbb99ee258b289846183172139a87dbavandwalle @SystemApi 839154b2cf6bbb99ee258b289846183172139a87dbavandwalle public int numScorerOverrideAndSwitchedNetwork; 840154b2cf6bbb99ee258b289846183172139a87dbavandwalle 841154b2cf6bbb99ee258b289846183172139a87dbavandwalle /** 842154b2cf6bbb99ee258b289846183172139a87dbavandwalle * @hide 8434eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle * Number of time we associated to this configuration. 8444eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle */ 8454eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle @SystemApi 8464eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle public int numAssociation; 8474eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle 8488d106780b6a638552749e54e169fc72537d4bcccxinhe /** @hide 8498d106780b6a638552749e54e169fc72537d4bcccxinhe * Boost given to RSSI on a home network for the purpose of calculating the score 8508d106780b6a638552749e54e169fc72537d4bcccxinhe * This adds stickiness to home networks, as defined by: 8518d106780b6a638552749e54e169fc72537d4bcccxinhe * - less than 4 known BSSIDs 8528d106780b6a638552749e54e169fc72537d4bcccxinhe * - PSK only 8538d106780b6a638552749e54e169fc72537d4bcccxinhe * - TODO: add a test to verify that all BSSIDs are behind same gateway 8548d106780b6a638552749e54e169fc72537d4bcccxinhe ***/ 8558d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int HOME_NETWORK_RSSI_BOOST = 5; 8568d106780b6a638552749e54e169fc72537d4bcccxinhe 8578d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8588d106780b6a638552749e54e169fc72537d4bcccxinhe * @hide 8598d106780b6a638552749e54e169fc72537d4bcccxinhe * This class is used to contain all the information and API used for quality network selection 8608d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8618d106780b6a638552749e54e169fc72537d4bcccxinhe public static class NetworkSelectionStatus { 8628d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8638d106780b6a638552749e54e169fc72537d4bcccxinhe * Quality Network Selection Status enable, temporary disabled, permanently disabled 8648d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8658d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8668d106780b6a638552749e54e169fc72537d4bcccxinhe * This network is allowed to join Quality Network Selection 8678d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8688d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int NETWORK_SELECTION_ENABLED = 0; 8698d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8708d106780b6a638552749e54e169fc72537d4bcccxinhe * network was temporary disabled. Can be re-enabled after a time period expire 8718d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8728d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int NETWORK_SELECTION_TEMPORARY_DISABLED = 1; 8738d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8748d106780b6a638552749e54e169fc72537d4bcccxinhe * network was permanently disabled. 8758d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8768d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int NETWORK_SELECTION_PERMANENTLY_DISABLED = 2; 8778d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8788d106780b6a638552749e54e169fc72537d4bcccxinhe * Maximum Network selection status 8798d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8808d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int NETWORK_SELECTION_STATUS_MAX = 3; 8818d106780b6a638552749e54e169fc72537d4bcccxinhe 8828d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8838d106780b6a638552749e54e169fc72537d4bcccxinhe * Quality network selection status String (for debug purpose). Use Quality network 8848d106780b6a638552749e54e169fc72537d4bcccxinhe * selection status value as index to extec the corresponding debug string 8858d106780b6a638552749e54e169fc72537d4bcccxinhe */ 88647fb68bd24ada11cb5f3b2f987134fa2ce3ee1dcRoshan Pius public static final String[] QUALITY_NETWORK_SELECTION_STATUS = { 88790a3841994b40aeb1c3a7a6b78dd804e49eb5e13xinhe "NETWORK_SELECTION_ENABLED", 88890a3841994b40aeb1c3a7a6b78dd804e49eb5e13xinhe "NETWORK_SELECTION_TEMPORARY_DISABLED", 8898d106780b6a638552749e54e169fc72537d4bcccxinhe "NETWORK_SELECTION_PERMANENTLY_DISABLED"}; 8908d106780b6a638552749e54e169fc72537d4bcccxinhe 8918d106780b6a638552749e54e169fc72537d4bcccxinhe //Quality Network disabled reasons 8928d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8938d106780b6a638552749e54e169fc72537d4bcccxinhe * Default value. Means not disabled 8948d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8958d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int NETWORK_SELECTION_ENABLE = 0; 8968d106780b6a638552749e54e169fc72537d4bcccxinhe /** 897f4315fed7e2f6e3bb1a55000dc58106fa647d82dRandy Pan * The starting index for network selection disabled reasons 898f4315fed7e2f6e3bb1a55000dc58106fa647d82dRandy Pan */ 899f4315fed7e2f6e3bb1a55000dc58106fa647d82dRandy Pan public static final int NETWORK_SELECTION_DISABLED_STARTING_INDEX = 1; 900f4315fed7e2f6e3bb1a55000dc58106fa647d82dRandy Pan /** 90122de5aaca9b3d976d3f3cdf8b0a02f3b3ccb6d99Randy Pan * @deprecated it is not used any more. 9028d106780b6a638552749e54e169fc72537d4bcccxinhe * This network is disabled because higher layer (>2) network is bad 9038d106780b6a638552749e54e169fc72537d4bcccxinhe */ 9048d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int DISABLED_BAD_LINK = 1; 9058d106780b6a638552749e54e169fc72537d4bcccxinhe /** 9068d106780b6a638552749e54e169fc72537d4bcccxinhe * This network is disabled because multiple association rejects 9078d106780b6a638552749e54e169fc72537d4bcccxinhe */ 9088d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int DISABLED_ASSOCIATION_REJECTION = 2; 9098d106780b6a638552749e54e169fc72537d4bcccxinhe /** 9108d106780b6a638552749e54e169fc72537d4bcccxinhe * This network is disabled because multiple authentication failure 9118d106780b6a638552749e54e169fc72537d4bcccxinhe */ 9128d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int DISABLED_AUTHENTICATION_FAILURE = 3; 9138d106780b6a638552749e54e169fc72537d4bcccxinhe /** 9148d106780b6a638552749e54e169fc72537d4bcccxinhe * This network is disabled because multiple DHCP failure 9158d106780b6a638552749e54e169fc72537d4bcccxinhe */ 9168d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int DISABLED_DHCP_FAILURE = 4; 9178d106780b6a638552749e54e169fc72537d4bcccxinhe /** 9188d106780b6a638552749e54e169fc72537d4bcccxinhe * This network is disabled because of security network but no credentials 9198d106780b6a638552749e54e169fc72537d4bcccxinhe */ 9208d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int DISABLED_DNS_FAILURE = 5; 9218d106780b6a638552749e54e169fc72537d4bcccxinhe /** 92272baa1de4dadecf9ff309dc5e58c59b5bed654e0Roshan Pius * This network is disabled because we started WPS 92372baa1de4dadecf9ff309dc5e58c59b5bed654e0Roshan Pius */ 92472baa1de4dadecf9ff309dc5e58c59b5bed654e0Roshan Pius public static final int DISABLED_WPS_START = 6; 92572baa1de4dadecf9ff309dc5e58c59b5bed654e0Roshan Pius /** 9268d106780b6a638552749e54e169fc72537d4bcccxinhe * This network is disabled because EAP-TLS failure 9278d106780b6a638552749e54e169fc72537d4bcccxinhe */ 92872baa1de4dadecf9ff309dc5e58c59b5bed654e0Roshan Pius public static final int DISABLED_TLS_VERSION_MISMATCH = 7; 92998773d4837922715c740d06bfd02666dceaf350bAmin Shaikh // Values above are for temporary disablement; values below are for permanent disablement. 9308d106780b6a638552749e54e169fc72537d4bcccxinhe /** 93172baa1de4dadecf9ff309dc5e58c59b5bed654e0Roshan Pius * This network is disabled due to absence of user credentials 9328d106780b6a638552749e54e169fc72537d4bcccxinhe */ 93372baa1de4dadecf9ff309dc5e58c59b5bed654e0Roshan Pius public static final int DISABLED_AUTHENTICATION_NO_CREDENTIALS = 8; 9348d106780b6a638552749e54e169fc72537d4bcccxinhe /** 9358d106780b6a638552749e54e169fc72537d4bcccxinhe * This network is disabled because no Internet connected and user do not want 9368d106780b6a638552749e54e169fc72537d4bcccxinhe */ 93772baa1de4dadecf9ff309dc5e58c59b5bed654e0Roshan Pius public static final int DISABLED_NO_INTERNET = 9; 9388d106780b6a638552749e54e169fc72537d4bcccxinhe /** 9398d106780b6a638552749e54e169fc72537d4bcccxinhe * This network is disabled due to WifiManager disable it explicitly 9408d106780b6a638552749e54e169fc72537d4bcccxinhe */ 94172baa1de4dadecf9ff309dc5e58c59b5bed654e0Roshan Pius public static final int DISABLED_BY_WIFI_MANAGER = 10; 94272baa1de4dadecf9ff309dc5e58c59b5bed654e0Roshan Pius /** 94372baa1de4dadecf9ff309dc5e58c59b5bed654e0Roshan Pius * This network is disabled due to user switching 94472baa1de4dadecf9ff309dc5e58c59b5bed654e0Roshan Pius */ 94572baa1de4dadecf9ff309dc5e58c59b5bed654e0Roshan Pius public static final int DISABLED_DUE_TO_USER_SWITCH = 11; 9468d106780b6a638552749e54e169fc72537d4bcccxinhe /** 947873edc6e768492d715f3658e9a93491e3732391dPeter Qiu * This network is disabled due to wrong password 948873edc6e768492d715f3658e9a93491e3732391dPeter Qiu */ 949873edc6e768492d715f3658e9a93491e3732391dPeter Qiu public static final int DISABLED_BY_WRONG_PASSWORD = 12; 950873edc6e768492d715f3658e9a93491e3732391dPeter Qiu /** 9518d106780b6a638552749e54e169fc72537d4bcccxinhe * This Maximum disable reason value 9528d106780b6a638552749e54e169fc72537d4bcccxinhe */ 953873edc6e768492d715f3658e9a93491e3732391dPeter Qiu public static final int NETWORK_SELECTION_DISABLED_MAX = 13; 9548d106780b6a638552749e54e169fc72537d4bcccxinhe 9558d106780b6a638552749e54e169fc72537d4bcccxinhe /** 9568d106780b6a638552749e54e169fc72537d4bcccxinhe * Quality network selection disable reason String (for debug purpose) 9578d106780b6a638552749e54e169fc72537d4bcccxinhe */ 95847fb68bd24ada11cb5f3b2f987134fa2ce3ee1dcRoshan Pius public static final String[] QUALITY_NETWORK_SELECTION_DISABLE_REASON = { 95990a3841994b40aeb1c3a7a6b78dd804e49eb5e13xinhe "NETWORK_SELECTION_ENABLE", 96022de5aaca9b3d976d3f3cdf8b0a02f3b3ccb6d99Randy Pan "NETWORK_SELECTION_DISABLED_BAD_LINK", // deprecated 9618d106780b6a638552749e54e169fc72537d4bcccxinhe "NETWORK_SELECTION_DISABLED_ASSOCIATION_REJECTION ", 9628d106780b6a638552749e54e169fc72537d4bcccxinhe "NETWORK_SELECTION_DISABLED_AUTHENTICATION_FAILURE", 9638d106780b6a638552749e54e169fc72537d4bcccxinhe "NETWORK_SELECTION_DISABLED_DHCP_FAILURE", 96490a3841994b40aeb1c3a7a6b78dd804e49eb5e13xinhe "NETWORK_SELECTION_DISABLED_DNS_FAILURE", 96572baa1de4dadecf9ff309dc5e58c59b5bed654e0Roshan Pius "NETWORK_SELECTION_DISABLED_WPS_START", 96690a3841994b40aeb1c3a7a6b78dd804e49eb5e13xinhe "NETWORK_SELECTION_DISABLED_TLS_VERSION", 9678d106780b6a638552749e54e169fc72537d4bcccxinhe "NETWORK_SELECTION_DISABLED_AUTHENTICATION_NO_CREDENTIALS", 96890a3841994b40aeb1c3a7a6b78dd804e49eb5e13xinhe "NETWORK_SELECTION_DISABLED_NO_INTERNET", 96972baa1de4dadecf9ff309dc5e58c59b5bed654e0Roshan Pius "NETWORK_SELECTION_DISABLED_BY_WIFI_MANAGER", 970873edc6e768492d715f3658e9a93491e3732391dPeter Qiu "NETWORK_SELECTION_DISABLED_BY_USER_SWITCH", 971873edc6e768492d715f3658e9a93491e3732391dPeter Qiu "NETWORK_SELECTION_DISABLED_BY_WRONG_PASSWORD" 97272baa1de4dadecf9ff309dc5e58c59b5bed654e0Roshan Pius }; 9738d106780b6a638552749e54e169fc72537d4bcccxinhe 9748d106780b6a638552749e54e169fc72537d4bcccxinhe /** 9758d106780b6a638552749e54e169fc72537d4bcccxinhe * Invalid time stamp for network selection disable 9768d106780b6a638552749e54e169fc72537d4bcccxinhe */ 9778d106780b6a638552749e54e169fc72537d4bcccxinhe public static final long INVALID_NETWORK_SELECTION_DISABLE_TIMESTAMP = -1L; 9788d106780b6a638552749e54e169fc72537d4bcccxinhe 979584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 980584dc6b8b9628d930de4ea3ad94894886294b855xinhe * This constant indicates the current configuration has connect choice set 981584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 982584dc6b8b9628d930de4ea3ad94894886294b855xinhe private static final int CONNECT_CHOICE_EXISTS = 1; 983584dc6b8b9628d930de4ea3ad94894886294b855xinhe 984584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 985584dc6b8b9628d930de4ea3ad94894886294b855xinhe * This constant indicates the current configuration does not have connect choice set 986584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 987584dc6b8b9628d930de4ea3ad94894886294b855xinhe private static final int CONNECT_CHOICE_NOT_EXISTS = -1; 988584dc6b8b9628d930de4ea3ad94894886294b855xinhe 9898d106780b6a638552749e54e169fc72537d4bcccxinhe // fields for QualityNetwork Selection 9908d106780b6a638552749e54e169fc72537d4bcccxinhe /** 9918d106780b6a638552749e54e169fc72537d4bcccxinhe * Network selection status, should be in one of three status: enable, temporaily disabled 9928d106780b6a638552749e54e169fc72537d4bcccxinhe * or permanently disabled 9938d106780b6a638552749e54e169fc72537d4bcccxinhe */ 9948d106780b6a638552749e54e169fc72537d4bcccxinhe private int mStatus; 9958d106780b6a638552749e54e169fc72537d4bcccxinhe 9968d106780b6a638552749e54e169fc72537d4bcccxinhe /** 9978d106780b6a638552749e54e169fc72537d4bcccxinhe * Reason for disable this network 9988d106780b6a638552749e54e169fc72537d4bcccxinhe */ 9998d106780b6a638552749e54e169fc72537d4bcccxinhe private int mNetworkSelectionDisableReason; 10008d106780b6a638552749e54e169fc72537d4bcccxinhe 10018d106780b6a638552749e54e169fc72537d4bcccxinhe /** 10028d106780b6a638552749e54e169fc72537d4bcccxinhe * Last time we temporarily disabled the configuration 10038d106780b6a638552749e54e169fc72537d4bcccxinhe */ 10048d106780b6a638552749e54e169fc72537d4bcccxinhe private long mTemporarilyDisabledTimestamp = INVALID_NETWORK_SELECTION_DISABLE_TIMESTAMP; 10058d106780b6a638552749e54e169fc72537d4bcccxinhe 10068d106780b6a638552749e54e169fc72537d4bcccxinhe /** 10078d106780b6a638552749e54e169fc72537d4bcccxinhe * counter for each Network selection disable reason 10088d106780b6a638552749e54e169fc72537d4bcccxinhe */ 10098d106780b6a638552749e54e169fc72537d4bcccxinhe private int[] mNetworkSeclectionDisableCounter = new int[NETWORK_SELECTION_DISABLED_MAX]; 10108d106780b6a638552749e54e169fc72537d4bcccxinhe 10118d106780b6a638552749e54e169fc72537d4bcccxinhe /** 1012584dc6b8b9628d930de4ea3ad94894886294b855xinhe * Connect Choice over this configuration 1013584dc6b8b9628d930de4ea3ad94894886294b855xinhe * 1014584dc6b8b9628d930de4ea3ad94894886294b855xinhe * When current wifi configuration is visible to the user but user explicitly choose to 1015584dc6b8b9628d930de4ea3ad94894886294b855xinhe * connect to another network X, the another networks X's configure key will be stored here. 1016584dc6b8b9628d930de4ea3ad94894886294b855xinhe * We will consider user has a preference of X over this network. And in the future, 1017584dc6b8b9628d930de4ea3ad94894886294b855xinhe * network selection will always give X a higher preference over this configuration. 1018584dc6b8b9628d930de4ea3ad94894886294b855xinhe * configKey is : "SSID"-WEP-WPA_PSK-WPA_EAP 1019584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 1020584dc6b8b9628d930de4ea3ad94894886294b855xinhe private String mConnectChoice; 1021584dc6b8b9628d930de4ea3ad94894886294b855xinhe 1022584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 1023584dc6b8b9628d930de4ea3ad94894886294b855xinhe * The system timestamp when we records the connectChoice. This value is obtained from 1024584dc6b8b9628d930de4ea3ad94894886294b855xinhe * System.currentTimeMillis 1025584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 1026584dc6b8b9628d930de4ea3ad94894886294b855xinhe private long mConnectChoiceTimestamp = INVALID_NETWORK_SELECTION_DISABLE_TIMESTAMP; 1027584dc6b8b9628d930de4ea3ad94894886294b855xinhe 1028584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 1029584dc6b8b9628d930de4ea3ad94894886294b855xinhe * Used to cache the temporary candidate during the network selection procedure. It will be 1030584dc6b8b9628d930de4ea3ad94894886294b855xinhe * kept updating once a new scan result has a higher score than current one 1031584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 1032584dc6b8b9628d930de4ea3ad94894886294b855xinhe private ScanResult mCandidate; 1033584dc6b8b9628d930de4ea3ad94894886294b855xinhe 1034584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 1035584dc6b8b9628d930de4ea3ad94894886294b855xinhe * Used to cache the score of the current temporary candidate during the network 1036584dc6b8b9628d930de4ea3ad94894886294b855xinhe * selection procedure. 1037584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 1038584dc6b8b9628d930de4ea3ad94894886294b855xinhe private int mCandidateScore; 1039584dc6b8b9628d930de4ea3ad94894886294b855xinhe 1040584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 1041584dc6b8b9628d930de4ea3ad94894886294b855xinhe * Indicate whether this network is visible in latest Qualified Network Selection. This 1042584dc6b8b9628d930de4ea3ad94894886294b855xinhe * means there is scan result found related to this Configuration and meet the minimum 1043584dc6b8b9628d930de4ea3ad94894886294b855xinhe * requirement. The saved network need not join latest Qualified Network Selection. For 1044584dc6b8b9628d930de4ea3ad94894886294b855xinhe * example, it is disabled. True means network is visible in latest Qualified Network 1045584dc6b8b9628d930de4ea3ad94894886294b855xinhe * Selection and false means network is invisible 1046584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 1047584dc6b8b9628d930de4ea3ad94894886294b855xinhe private boolean mSeenInLastQualifiedNetworkSelection; 1048584dc6b8b9628d930de4ea3ad94894886294b855xinhe 1049584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 1050cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein * Boolean indicating if we have ever successfully connected to this network. 1051cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein * 1052cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein * This value will be set to true upon a successful connection. 1053cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein * This value will be set to false if a previous value was not stored in the config or if 1054cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein * the credentials are updated (ex. a password change). 1055cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein */ 1056cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein private boolean mHasEverConnected; 1057cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein 1058cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein /** 105998773d4837922715c740d06bfd02666dceaf350bAmin Shaikh * Boolean indicating whether {@link com.android.server.wifi.RecommendedNetworkEvaluator} 106098773d4837922715c740d06bfd02666dceaf350bAmin Shaikh * chose not to connect to this network in the last qualified network selection process. 106198773d4837922715c740d06bfd02666dceaf350bAmin Shaikh */ 106298773d4837922715c740d06bfd02666dceaf350bAmin Shaikh private boolean mNotRecommended; 106398773d4837922715c740d06bfd02666dceaf350bAmin Shaikh 106498773d4837922715c740d06bfd02666dceaf350bAmin Shaikh /** 106598773d4837922715c740d06bfd02666dceaf350bAmin Shaikh * Set whether {@link com.android.server.wifi.RecommendedNetworkEvaluator} does not 106698773d4837922715c740d06bfd02666dceaf350bAmin Shaikh * recommend connecting to this network. 106798773d4837922715c740d06bfd02666dceaf350bAmin Shaikh */ 106898773d4837922715c740d06bfd02666dceaf350bAmin Shaikh public void setNotRecommended(boolean notRecommended) { 106998773d4837922715c740d06bfd02666dceaf350bAmin Shaikh mNotRecommended = notRecommended; 107098773d4837922715c740d06bfd02666dceaf350bAmin Shaikh } 107198773d4837922715c740d06bfd02666dceaf350bAmin Shaikh 107298773d4837922715c740d06bfd02666dceaf350bAmin Shaikh /** 107398773d4837922715c740d06bfd02666dceaf350bAmin Shaikh * Returns whether {@link com.android.server.wifi.RecommendedNetworkEvaluator} does not 107498773d4837922715c740d06bfd02666dceaf350bAmin Shaikh * recommend connecting to this network. 107598773d4837922715c740d06bfd02666dceaf350bAmin Shaikh */ 107698773d4837922715c740d06bfd02666dceaf350bAmin Shaikh public boolean isNotRecommended() { 107798773d4837922715c740d06bfd02666dceaf350bAmin Shaikh return mNotRecommended; 107898773d4837922715c740d06bfd02666dceaf350bAmin Shaikh } 107998773d4837922715c740d06bfd02666dceaf350bAmin Shaikh 108098773d4837922715c740d06bfd02666dceaf350bAmin Shaikh /** 1081584dc6b8b9628d930de4ea3ad94894886294b855xinhe * set whether this network is visible in latest Qualified Network Selection 1082584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @param seen value set to candidate 1083584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 1084584dc6b8b9628d930de4ea3ad94894886294b855xinhe public void setSeenInLastQualifiedNetworkSelection(boolean seen) { 1085584dc6b8b9628d930de4ea3ad94894886294b855xinhe mSeenInLastQualifiedNetworkSelection = seen; 1086584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 1087584dc6b8b9628d930de4ea3ad94894886294b855xinhe 1088584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 1089584dc6b8b9628d930de4ea3ad94894886294b855xinhe * get whether this network is visible in latest Qualified Network Selection 1090584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @return returns true -- network is visible in latest Qualified Network Selection 1091584dc6b8b9628d930de4ea3ad94894886294b855xinhe * false -- network is invisible in latest Qualified Network Selection 1092584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 1093584dc6b8b9628d930de4ea3ad94894886294b855xinhe public boolean getSeenInLastQualifiedNetworkSelection() { 1094584dc6b8b9628d930de4ea3ad94894886294b855xinhe return mSeenInLastQualifiedNetworkSelection; 1095584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 1096584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 1097584dc6b8b9628d930de4ea3ad94894886294b855xinhe * set the temporary candidate of current network selection procedure 1098584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @param scanCandidate {@link ScanResult} the candidate set to mCandidate 1099584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 1100584dc6b8b9628d930de4ea3ad94894886294b855xinhe public void setCandidate(ScanResult scanCandidate) { 1101584dc6b8b9628d930de4ea3ad94894886294b855xinhe mCandidate = scanCandidate; 1102584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 1103584dc6b8b9628d930de4ea3ad94894886294b855xinhe 1104584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 1105584dc6b8b9628d930de4ea3ad94894886294b855xinhe * get the temporary candidate of current network selection procedure 1106584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @return returns {@link ScanResult} temporary candidate of current network selection 1107584dc6b8b9628d930de4ea3ad94894886294b855xinhe * procedure 1108584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 1109584dc6b8b9628d930de4ea3ad94894886294b855xinhe public ScanResult getCandidate() { 1110584dc6b8b9628d930de4ea3ad94894886294b855xinhe return mCandidate; 1111584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 1112584dc6b8b9628d930de4ea3ad94894886294b855xinhe 1113584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 1114584dc6b8b9628d930de4ea3ad94894886294b855xinhe * set the score of the temporary candidate of current network selection procedure 1115584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @param score value set to mCandidateScore 1116584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 1117584dc6b8b9628d930de4ea3ad94894886294b855xinhe public void setCandidateScore(int score) { 1118584dc6b8b9628d930de4ea3ad94894886294b855xinhe mCandidateScore = score; 1119584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 1120584dc6b8b9628d930de4ea3ad94894886294b855xinhe 1121584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 1122584dc6b8b9628d930de4ea3ad94894886294b855xinhe * get the score of the temporary candidate of current network selection procedure 1123584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @return returns score of the temporary candidate of current network selection procedure 1124584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 1125584dc6b8b9628d930de4ea3ad94894886294b855xinhe public int getCandidateScore() { 1126584dc6b8b9628d930de4ea3ad94894886294b855xinhe return mCandidateScore; 1127584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 1128584dc6b8b9628d930de4ea3ad94894886294b855xinhe 1129584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 1130584dc6b8b9628d930de4ea3ad94894886294b855xinhe * get user preferred choice over this configuration 1131584dc6b8b9628d930de4ea3ad94894886294b855xinhe *@return returns configKey of user preferred choice over this configuration 1132584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 1133584dc6b8b9628d930de4ea3ad94894886294b855xinhe public String getConnectChoice() { 1134584dc6b8b9628d930de4ea3ad94894886294b855xinhe return mConnectChoice; 1135584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 1136584dc6b8b9628d930de4ea3ad94894886294b855xinhe 1137584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 1138584dc6b8b9628d930de4ea3ad94894886294b855xinhe * set user preferred choice over this configuration 1139584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @param newConnectChoice, the configKey of user preferred choice over this configuration 1140584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 1141584dc6b8b9628d930de4ea3ad94894886294b855xinhe public void setConnectChoice(String newConnectChoice) { 1142584dc6b8b9628d930de4ea3ad94894886294b855xinhe mConnectChoice = newConnectChoice; 1143584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 1144584dc6b8b9628d930de4ea3ad94894886294b855xinhe 1145584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 1146584dc6b8b9628d930de4ea3ad94894886294b855xinhe * get the timeStamp when user select a choice over this configuration 1147584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @return returns when current connectChoice is set (time from System.currentTimeMillis) 1148584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 1149584dc6b8b9628d930de4ea3ad94894886294b855xinhe public long getConnectChoiceTimestamp() { 1150584dc6b8b9628d930de4ea3ad94894886294b855xinhe return mConnectChoiceTimestamp; 1151584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 1152584dc6b8b9628d930de4ea3ad94894886294b855xinhe 1153584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 1154584dc6b8b9628d930de4ea3ad94894886294b855xinhe * set the timeStamp when user select a choice over this configuration 1155584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @param timeStamp, the timestamp set to connectChoiceTimestamp, expected timestamp should 1156584dc6b8b9628d930de4ea3ad94894886294b855xinhe * be obtained from System.currentTimeMillis 1157584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 1158584dc6b8b9628d930de4ea3ad94894886294b855xinhe public void setConnectChoiceTimestamp(long timeStamp) { 1159584dc6b8b9628d930de4ea3ad94894886294b855xinhe mConnectChoiceTimestamp = timeStamp; 1160584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 1161584dc6b8b9628d930de4ea3ad94894886294b855xinhe 1162584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 1163584dc6b8b9628d930de4ea3ad94894886294b855xinhe * get current Quality network selection status 1164584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @return returns current Quality network selection status in String (for debug purpose) 11658d106780b6a638552749e54e169fc72537d4bcccxinhe */ 11668d106780b6a638552749e54e169fc72537d4bcccxinhe public String getNetworkStatusString() { 11678d106780b6a638552749e54e169fc72537d4bcccxinhe return QUALITY_NETWORK_SELECTION_STATUS[mStatus]; 11688d106780b6a638552749e54e169fc72537d4bcccxinhe } 11698d106780b6a638552749e54e169fc72537d4bcccxinhe 1170cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein public void setHasEverConnected(boolean value) { 1171cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein mHasEverConnected = value; 1172cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein } 1173cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein 1174cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein public boolean getHasEverConnected() { 1175cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein return mHasEverConnected; 1176cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein } 1177cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein 1178311a72164b1060445b4067090c0bfd6615747093Roshan Pius public NetworkSelectionStatus() { 1179cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein // previously stored configs will not have this parameter, so we default to false. 1180cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein mHasEverConnected = false; 1181cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein }; 11828d106780b6a638552749e54e169fc72537d4bcccxinhe 11838d106780b6a638552749e54e169fc72537d4bcccxinhe /** 11848d106780b6a638552749e54e169fc72537d4bcccxinhe * @param reason specific error reason 11858d106780b6a638552749e54e169fc72537d4bcccxinhe * @return corresponding network disable reason String (for debug purpose) 11868d106780b6a638552749e54e169fc72537d4bcccxinhe */ 11878d106780b6a638552749e54e169fc72537d4bcccxinhe public static String getNetworkDisableReasonString(int reason) { 11888d106780b6a638552749e54e169fc72537d4bcccxinhe if (reason >= NETWORK_SELECTION_ENABLE && reason < NETWORK_SELECTION_DISABLED_MAX) { 11898d106780b6a638552749e54e169fc72537d4bcccxinhe return QUALITY_NETWORK_SELECTION_DISABLE_REASON[reason]; 11908d106780b6a638552749e54e169fc72537d4bcccxinhe } else { 11918d106780b6a638552749e54e169fc72537d4bcccxinhe return null; 11928d106780b6a638552749e54e169fc72537d4bcccxinhe } 11938d106780b6a638552749e54e169fc72537d4bcccxinhe } 11948d106780b6a638552749e54e169fc72537d4bcccxinhe /** 1195584dc6b8b9628d930de4ea3ad94894886294b855xinhe * get current network disable reason 11968d106780b6a638552749e54e169fc72537d4bcccxinhe * @return current network disable reason in String (for debug purpose) 11978d106780b6a638552749e54e169fc72537d4bcccxinhe */ 11988d106780b6a638552749e54e169fc72537d4bcccxinhe public String getNetworkDisableReasonString() { 11998d106780b6a638552749e54e169fc72537d4bcccxinhe return QUALITY_NETWORK_SELECTION_DISABLE_REASON[mNetworkSelectionDisableReason]; 12008d106780b6a638552749e54e169fc72537d4bcccxinhe } 12018d106780b6a638552749e54e169fc72537d4bcccxinhe 12028d106780b6a638552749e54e169fc72537d4bcccxinhe /** 12038d106780b6a638552749e54e169fc72537d4bcccxinhe * get current network network selection status 1204584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @return return current network network selection status 12058d106780b6a638552749e54e169fc72537d4bcccxinhe */ 12068d106780b6a638552749e54e169fc72537d4bcccxinhe public int getNetworkSelectionStatus() { 12078d106780b6a638552749e54e169fc72537d4bcccxinhe return mStatus; 12088d106780b6a638552749e54e169fc72537d4bcccxinhe } 12098d106780b6a638552749e54e169fc72537d4bcccxinhe /** 12108d106780b6a638552749e54e169fc72537d4bcccxinhe * @return whether current network is enabled to join network selection 12118d106780b6a638552749e54e169fc72537d4bcccxinhe */ 12128d106780b6a638552749e54e169fc72537d4bcccxinhe public boolean isNetworkEnabled() { 12138d106780b6a638552749e54e169fc72537d4bcccxinhe return mStatus == NETWORK_SELECTION_ENABLED; 12148d106780b6a638552749e54e169fc72537d4bcccxinhe } 12158d106780b6a638552749e54e169fc72537d4bcccxinhe 12168d106780b6a638552749e54e169fc72537d4bcccxinhe /** 12178d106780b6a638552749e54e169fc72537d4bcccxinhe * @return whether current network is temporary disabled 12188d106780b6a638552749e54e169fc72537d4bcccxinhe */ 12198d106780b6a638552749e54e169fc72537d4bcccxinhe public boolean isNetworkTemporaryDisabled() { 12208d106780b6a638552749e54e169fc72537d4bcccxinhe return mStatus == NETWORK_SELECTION_TEMPORARY_DISABLED; 12218d106780b6a638552749e54e169fc72537d4bcccxinhe } 12228d106780b6a638552749e54e169fc72537d4bcccxinhe 12238d106780b6a638552749e54e169fc72537d4bcccxinhe /** 1224584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @return returns whether current network is permanently disabled 12258d106780b6a638552749e54e169fc72537d4bcccxinhe */ 12268d106780b6a638552749e54e169fc72537d4bcccxinhe public boolean isNetworkPermanentlyDisabled() { 12278d106780b6a638552749e54e169fc72537d4bcccxinhe return mStatus == NETWORK_SELECTION_PERMANENTLY_DISABLED; 12288d106780b6a638552749e54e169fc72537d4bcccxinhe } 1229584dc6b8b9628d930de4ea3ad94894886294b855xinhe 12308d106780b6a638552749e54e169fc72537d4bcccxinhe /** 1231584dc6b8b9628d930de4ea3ad94894886294b855xinhe * set current networ work selection status 12328d106780b6a638552749e54e169fc72537d4bcccxinhe * @param status network selection status to set 12338d106780b6a638552749e54e169fc72537d4bcccxinhe */ 12348d106780b6a638552749e54e169fc72537d4bcccxinhe public void setNetworkSelectionStatus(int status) { 12358d106780b6a638552749e54e169fc72537d4bcccxinhe if (status >= 0 && status < NETWORK_SELECTION_STATUS_MAX) { 12368d106780b6a638552749e54e169fc72537d4bcccxinhe mStatus = status; 12378d106780b6a638552749e54e169fc72537d4bcccxinhe } 12388d106780b6a638552749e54e169fc72537d4bcccxinhe } 1239584dc6b8b9628d930de4ea3ad94894886294b855xinhe 12408d106780b6a638552749e54e169fc72537d4bcccxinhe /** 1241584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @return returns current network's disable reason 12428d106780b6a638552749e54e169fc72537d4bcccxinhe */ 12438d106780b6a638552749e54e169fc72537d4bcccxinhe public int getNetworkSelectionDisableReason() { 12448d106780b6a638552749e54e169fc72537d4bcccxinhe return mNetworkSelectionDisableReason; 12458d106780b6a638552749e54e169fc72537d4bcccxinhe } 12468d106780b6a638552749e54e169fc72537d4bcccxinhe 12478d106780b6a638552749e54e169fc72537d4bcccxinhe /** 1248584dc6b8b9628d930de4ea3ad94894886294b855xinhe * set Network disable reason 12498d106780b6a638552749e54e169fc72537d4bcccxinhe * @param reason Network disable reason 12508d106780b6a638552749e54e169fc72537d4bcccxinhe */ 12518d106780b6a638552749e54e169fc72537d4bcccxinhe public void setNetworkSelectionDisableReason(int reason) { 12528d106780b6a638552749e54e169fc72537d4bcccxinhe if (reason >= 0 && reason < NETWORK_SELECTION_DISABLED_MAX) { 12538d106780b6a638552749e54e169fc72537d4bcccxinhe mNetworkSelectionDisableReason = reason; 12548d106780b6a638552749e54e169fc72537d4bcccxinhe } else { 12558d106780b6a638552749e54e169fc72537d4bcccxinhe throw new IllegalArgumentException("Illegal reason value: " + reason); 12568d106780b6a638552749e54e169fc72537d4bcccxinhe } 12578d106780b6a638552749e54e169fc72537d4bcccxinhe } 1258584dc6b8b9628d930de4ea3ad94894886294b855xinhe 12598d106780b6a638552749e54e169fc72537d4bcccxinhe /** 1260584dc6b8b9628d930de4ea3ad94894886294b855xinhe * check whether network is disabled by this reason 1261584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @param reason a specific disable reason 1262584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @return true -- network is disabled for this reason 1263584dc6b8b9628d930de4ea3ad94894886294b855xinhe * false -- network is not disabled for this reason 12648d106780b6a638552749e54e169fc72537d4bcccxinhe */ 12658d106780b6a638552749e54e169fc72537d4bcccxinhe public boolean isDisabledByReason(int reason) { 12668d106780b6a638552749e54e169fc72537d4bcccxinhe return mNetworkSelectionDisableReason == reason; 12678d106780b6a638552749e54e169fc72537d4bcccxinhe } 1268584dc6b8b9628d930de4ea3ad94894886294b855xinhe 12698d106780b6a638552749e54e169fc72537d4bcccxinhe /** 12708d106780b6a638552749e54e169fc72537d4bcccxinhe * @param timeStamp Set when current network is disabled in millisecond since January 1, 12718d106780b6a638552749e54e169fc72537d4bcccxinhe * 1970 00:00:00.0 UTC 12728d106780b6a638552749e54e169fc72537d4bcccxinhe */ 12738d106780b6a638552749e54e169fc72537d4bcccxinhe public void setDisableTime(long timeStamp) { 12748d106780b6a638552749e54e169fc72537d4bcccxinhe mTemporarilyDisabledTimestamp = timeStamp; 12758d106780b6a638552749e54e169fc72537d4bcccxinhe } 12768d106780b6a638552749e54e169fc72537d4bcccxinhe 12778d106780b6a638552749e54e169fc72537d4bcccxinhe /** 1278584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @return returns when current network is disabled in millisecond since January 1, 12798d106780b6a638552749e54e169fc72537d4bcccxinhe * 1970 00:00:00.0 UTC 12808d106780b6a638552749e54e169fc72537d4bcccxinhe */ 12818d106780b6a638552749e54e169fc72537d4bcccxinhe public long getDisableTime() { 12828d106780b6a638552749e54e169fc72537d4bcccxinhe return mTemporarilyDisabledTimestamp; 12838d106780b6a638552749e54e169fc72537d4bcccxinhe } 12848d106780b6a638552749e54e169fc72537d4bcccxinhe 12858d106780b6a638552749e54e169fc72537d4bcccxinhe /** 1286584dc6b8b9628d930de4ea3ad94894886294b855xinhe * get the disable counter of a specific reason 12878d106780b6a638552749e54e169fc72537d4bcccxinhe * @param reason specific failure reason 12888d106780b6a638552749e54e169fc72537d4bcccxinhe * @exception throw IllegalArgumentException for illegal input 12898d106780b6a638552749e54e169fc72537d4bcccxinhe * @return counter number for specific error reason. 12908d106780b6a638552749e54e169fc72537d4bcccxinhe */ 12918d106780b6a638552749e54e169fc72537d4bcccxinhe public int getDisableReasonCounter(int reason) { 12928d106780b6a638552749e54e169fc72537d4bcccxinhe if (reason >= NETWORK_SELECTION_ENABLE && reason < NETWORK_SELECTION_DISABLED_MAX) { 12938d106780b6a638552749e54e169fc72537d4bcccxinhe return mNetworkSeclectionDisableCounter[reason]; 12948d106780b6a638552749e54e169fc72537d4bcccxinhe } else { 12958d106780b6a638552749e54e169fc72537d4bcccxinhe throw new IllegalArgumentException("Illegal reason value: " + reason); 12968d106780b6a638552749e54e169fc72537d4bcccxinhe } 12978d106780b6a638552749e54e169fc72537d4bcccxinhe } 12988d106780b6a638552749e54e169fc72537d4bcccxinhe 12998d106780b6a638552749e54e169fc72537d4bcccxinhe /** 13008d106780b6a638552749e54e169fc72537d4bcccxinhe * set the counter of a specific failure reason 13018d106780b6a638552749e54e169fc72537d4bcccxinhe * @param reason reason for disable error 13028d106780b6a638552749e54e169fc72537d4bcccxinhe * @param value the counter value for this specific reason 13038d106780b6a638552749e54e169fc72537d4bcccxinhe * @exception throw IllegalArgumentException for illegal input 13048d106780b6a638552749e54e169fc72537d4bcccxinhe */ 13058d106780b6a638552749e54e169fc72537d4bcccxinhe public void setDisableReasonCounter(int reason, int value) { 13068d106780b6a638552749e54e169fc72537d4bcccxinhe if (reason >= NETWORK_SELECTION_ENABLE && reason < NETWORK_SELECTION_DISABLED_MAX) { 13078d106780b6a638552749e54e169fc72537d4bcccxinhe mNetworkSeclectionDisableCounter[reason] = value; 13088d106780b6a638552749e54e169fc72537d4bcccxinhe } else { 13098d106780b6a638552749e54e169fc72537d4bcccxinhe throw new IllegalArgumentException("Illegal reason value: " + reason); 13108d106780b6a638552749e54e169fc72537d4bcccxinhe } 13118d106780b6a638552749e54e169fc72537d4bcccxinhe } 13128d106780b6a638552749e54e169fc72537d4bcccxinhe 13138d106780b6a638552749e54e169fc72537d4bcccxinhe /** 13148d106780b6a638552749e54e169fc72537d4bcccxinhe * increment the counter of a specific failure reason 13158d106780b6a638552749e54e169fc72537d4bcccxinhe * @param reason a specific failure reason 13168d106780b6a638552749e54e169fc72537d4bcccxinhe * @exception throw IllegalArgumentException for illegal input 13178d106780b6a638552749e54e169fc72537d4bcccxinhe */ 13188d106780b6a638552749e54e169fc72537d4bcccxinhe public void incrementDisableReasonCounter(int reason) { 13198d106780b6a638552749e54e169fc72537d4bcccxinhe if (reason >= NETWORK_SELECTION_ENABLE && reason < NETWORK_SELECTION_DISABLED_MAX) { 13208d106780b6a638552749e54e169fc72537d4bcccxinhe mNetworkSeclectionDisableCounter[reason]++; 13218d106780b6a638552749e54e169fc72537d4bcccxinhe } else { 13228d106780b6a638552749e54e169fc72537d4bcccxinhe throw new IllegalArgumentException("Illegal reason value: " + reason); 13238d106780b6a638552749e54e169fc72537d4bcccxinhe } 13248d106780b6a638552749e54e169fc72537d4bcccxinhe } 1325584dc6b8b9628d930de4ea3ad94894886294b855xinhe 13268d106780b6a638552749e54e169fc72537d4bcccxinhe /** 13278d106780b6a638552749e54e169fc72537d4bcccxinhe * clear the counter of a specific failure reason 13288d106780b6a638552749e54e169fc72537d4bcccxinhe * @hide 13298d106780b6a638552749e54e169fc72537d4bcccxinhe * @param reason a specific failure reason 13308d106780b6a638552749e54e169fc72537d4bcccxinhe * @exception throw IllegalArgumentException for illegal input 13318d106780b6a638552749e54e169fc72537d4bcccxinhe */ 13328d106780b6a638552749e54e169fc72537d4bcccxinhe public void clearDisableReasonCounter(int reason) { 13338d106780b6a638552749e54e169fc72537d4bcccxinhe if (reason >= NETWORK_SELECTION_ENABLE && reason < NETWORK_SELECTION_DISABLED_MAX) { 13348d106780b6a638552749e54e169fc72537d4bcccxinhe mNetworkSeclectionDisableCounter[reason] = NETWORK_SELECTION_ENABLE; 13358d106780b6a638552749e54e169fc72537d4bcccxinhe } else { 13368d106780b6a638552749e54e169fc72537d4bcccxinhe throw new IllegalArgumentException("Illegal reason value: " + reason); 13378d106780b6a638552749e54e169fc72537d4bcccxinhe } 13388d106780b6a638552749e54e169fc72537d4bcccxinhe } 1339584dc6b8b9628d930de4ea3ad94894886294b855xinhe 13408d106780b6a638552749e54e169fc72537d4bcccxinhe /** 13418d106780b6a638552749e54e169fc72537d4bcccxinhe * clear all the failure reason counters 13428d106780b6a638552749e54e169fc72537d4bcccxinhe */ 13438d106780b6a638552749e54e169fc72537d4bcccxinhe public void clearDisableReasonCounter() { 13448d106780b6a638552749e54e169fc72537d4bcccxinhe Arrays.fill(mNetworkSeclectionDisableCounter, NETWORK_SELECTION_ENABLE); 13458d106780b6a638552749e54e169fc72537d4bcccxinhe } 13468d106780b6a638552749e54e169fc72537d4bcccxinhe 13478d106780b6a638552749e54e169fc72537d4bcccxinhe /** 13488d106780b6a638552749e54e169fc72537d4bcccxinhe * BSSID for connection to this network (through network selection procedure) 13498d106780b6a638552749e54e169fc72537d4bcccxinhe */ 13508d106780b6a638552749e54e169fc72537d4bcccxinhe private String mNetworkSelectionBSSID; 13518d106780b6a638552749e54e169fc72537d4bcccxinhe 13528d106780b6a638552749e54e169fc72537d4bcccxinhe /** 13538d106780b6a638552749e54e169fc72537d4bcccxinhe * get current network Selection BSSID 13548d106780b6a638552749e54e169fc72537d4bcccxinhe * @return current network Selection BSSID 13558d106780b6a638552749e54e169fc72537d4bcccxinhe */ 13568d106780b6a638552749e54e169fc72537d4bcccxinhe public String getNetworkSelectionBSSID() { 13578d106780b6a638552749e54e169fc72537d4bcccxinhe return mNetworkSelectionBSSID; 13588d106780b6a638552749e54e169fc72537d4bcccxinhe } 13598d106780b6a638552749e54e169fc72537d4bcccxinhe 13608d106780b6a638552749e54e169fc72537d4bcccxinhe /** 13618d106780b6a638552749e54e169fc72537d4bcccxinhe * set network Selection BSSID 13628d106780b6a638552749e54e169fc72537d4bcccxinhe * @param bssid The target BSSID for assocaition 13638d106780b6a638552749e54e169fc72537d4bcccxinhe */ 13648d106780b6a638552749e54e169fc72537d4bcccxinhe public void setNetworkSelectionBSSID(String bssid) { 13658d106780b6a638552749e54e169fc72537d4bcccxinhe mNetworkSelectionBSSID = bssid; 13668d106780b6a638552749e54e169fc72537d4bcccxinhe } 13678d106780b6a638552749e54e169fc72537d4bcccxinhe 13688d106780b6a638552749e54e169fc72537d4bcccxinhe public void copy(NetworkSelectionStatus source) { 13698d106780b6a638552749e54e169fc72537d4bcccxinhe mStatus = source.mStatus; 13708d106780b6a638552749e54e169fc72537d4bcccxinhe mNetworkSelectionDisableReason = source.mNetworkSelectionDisableReason; 13718d106780b6a638552749e54e169fc72537d4bcccxinhe for (int index = NETWORK_SELECTION_ENABLE; index < NETWORK_SELECTION_DISABLED_MAX; 13728d106780b6a638552749e54e169fc72537d4bcccxinhe index++) { 13738d106780b6a638552749e54e169fc72537d4bcccxinhe mNetworkSeclectionDisableCounter[index] = 13748d106780b6a638552749e54e169fc72537d4bcccxinhe source.mNetworkSeclectionDisableCounter[index]; 13758d106780b6a638552749e54e169fc72537d4bcccxinhe } 13768d106780b6a638552749e54e169fc72537d4bcccxinhe mTemporarilyDisabledTimestamp = source.mTemporarilyDisabledTimestamp; 13778d106780b6a638552749e54e169fc72537d4bcccxinhe mNetworkSelectionBSSID = source.mNetworkSelectionBSSID; 1378d2d667275d4565e6c56a324b17f72fb4f5448ad5Roshan Pius setSeenInLastQualifiedNetworkSelection(source.getSeenInLastQualifiedNetworkSelection()); 1379521c66e73cbd48b11c2fe4b28ffcf4279acb045cRoshan Pius setCandidate(source.getCandidate()); 1380521c66e73cbd48b11c2fe4b28ffcf4279acb045cRoshan Pius setCandidateScore(source.getCandidateScore()); 1381584dc6b8b9628d930de4ea3ad94894886294b855xinhe setConnectChoice(source.getConnectChoice()); 1382584dc6b8b9628d930de4ea3ad94894886294b855xinhe setConnectChoiceTimestamp(source.getConnectChoiceTimestamp()); 1383cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein setHasEverConnected(source.getHasEverConnected()); 138434cfdb26a62e114d13749d392d56cabcccc8cdb8Amin Shaikh setNotRecommended(source.isNotRecommended()); 13858d106780b6a638552749e54e169fc72537d4bcccxinhe } 13868d106780b6a638552749e54e169fc72537d4bcccxinhe 13878d106780b6a638552749e54e169fc72537d4bcccxinhe public void writeToParcel(Parcel dest) { 13888d106780b6a638552749e54e169fc72537d4bcccxinhe dest.writeInt(getNetworkSelectionStatus()); 13898d106780b6a638552749e54e169fc72537d4bcccxinhe dest.writeInt(getNetworkSelectionDisableReason()); 13908d106780b6a638552749e54e169fc72537d4bcccxinhe for (int index = NETWORK_SELECTION_ENABLE; index < NETWORK_SELECTION_DISABLED_MAX; 13918d106780b6a638552749e54e169fc72537d4bcccxinhe index++) { 13928d106780b6a638552749e54e169fc72537d4bcccxinhe dest.writeInt(getDisableReasonCounter(index)); 13938d106780b6a638552749e54e169fc72537d4bcccxinhe } 13948d106780b6a638552749e54e169fc72537d4bcccxinhe dest.writeLong(getDisableTime()); 13958d106780b6a638552749e54e169fc72537d4bcccxinhe dest.writeString(getNetworkSelectionBSSID()); 1396584dc6b8b9628d930de4ea3ad94894886294b855xinhe if (getConnectChoice() != null) { 1397584dc6b8b9628d930de4ea3ad94894886294b855xinhe dest.writeInt(CONNECT_CHOICE_EXISTS); 1398584dc6b8b9628d930de4ea3ad94894886294b855xinhe dest.writeString(getConnectChoice()); 1399584dc6b8b9628d930de4ea3ad94894886294b855xinhe dest.writeLong(getConnectChoiceTimestamp()); 1400584dc6b8b9628d930de4ea3ad94894886294b855xinhe } else { 1401584dc6b8b9628d930de4ea3ad94894886294b855xinhe dest.writeInt(CONNECT_CHOICE_NOT_EXISTS); 1402584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 1403cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein dest.writeInt(getHasEverConnected() ? 1 : 0); 140498773d4837922715c740d06bfd02666dceaf350bAmin Shaikh dest.writeInt(isNotRecommended() ? 1 : 0); 14058d106780b6a638552749e54e169fc72537d4bcccxinhe } 14068d106780b6a638552749e54e169fc72537d4bcccxinhe 14078d106780b6a638552749e54e169fc72537d4bcccxinhe public void readFromParcel(Parcel in) { 14088d106780b6a638552749e54e169fc72537d4bcccxinhe setNetworkSelectionStatus(in.readInt()); 14098d106780b6a638552749e54e169fc72537d4bcccxinhe setNetworkSelectionDisableReason(in.readInt()); 14108d106780b6a638552749e54e169fc72537d4bcccxinhe for (int index = NETWORK_SELECTION_ENABLE; index < NETWORK_SELECTION_DISABLED_MAX; 14118d106780b6a638552749e54e169fc72537d4bcccxinhe index++) { 14128d106780b6a638552749e54e169fc72537d4bcccxinhe setDisableReasonCounter(index, in.readInt()); 14138d106780b6a638552749e54e169fc72537d4bcccxinhe } 14148d106780b6a638552749e54e169fc72537d4bcccxinhe setDisableTime(in.readLong()); 14158d106780b6a638552749e54e169fc72537d4bcccxinhe setNetworkSelectionBSSID(in.readString()); 1416584dc6b8b9628d930de4ea3ad94894886294b855xinhe if (in.readInt() == CONNECT_CHOICE_EXISTS) { 1417584dc6b8b9628d930de4ea3ad94894886294b855xinhe setConnectChoice(in.readString()); 1418584dc6b8b9628d930de4ea3ad94894886294b855xinhe setConnectChoiceTimestamp(in.readLong()); 1419584dc6b8b9628d930de4ea3ad94894886294b855xinhe } else { 1420584dc6b8b9628d930de4ea3ad94894886294b855xinhe setConnectChoice(null); 1421584dc6b8b9628d930de4ea3ad94894886294b855xinhe setConnectChoiceTimestamp(INVALID_NETWORK_SELECTION_DISABLE_TIMESTAMP); 1422584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 1423cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein setHasEverConnected(in.readInt() != 0); 142498773d4837922715c740d06bfd02666dceaf350bAmin Shaikh setNotRecommended(in.readInt() != 0); 14258d106780b6a638552749e54e169fc72537d4bcccxinhe } 14268d106780b6a638552749e54e169fc72537d4bcccxinhe } 14278d106780b6a638552749e54e169fc72537d4bcccxinhe 14288d106780b6a638552749e54e169fc72537d4bcccxinhe /** 14298d106780b6a638552749e54e169fc72537d4bcccxinhe * @hide 14308d106780b6a638552749e54e169fc72537d4bcccxinhe * network selection related member 14318d106780b6a638552749e54e169fc72537d4bcccxinhe */ 1432311a72164b1060445b4067090c0bfd6615747093Roshan Pius private NetworkSelectionStatus mNetworkSelectionStatus = new NetworkSelectionStatus(); 14338d106780b6a638552749e54e169fc72537d4bcccxinhe 14348d106780b6a638552749e54e169fc72537d4bcccxinhe /** 14358d106780b6a638552749e54e169fc72537d4bcccxinhe * @hide 1436446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne * This class is intended to store extra failure reason information for the most recent 1437446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne * connection attempt, so that it may be surfaced to the settings UI 1438446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne */ 1439446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne public static class RecentFailure { 1440446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne 1441446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne /** 1442446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne * No recent failure, or no specific reason given for the recent connection failure 1443446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne */ 1444446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne public static final int NONE = 0; 1445446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne /** 1446446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne * Connection to this network recently failed due to Association Rejection Status 17 1447446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne * (AP is full) 1448446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne */ 1449446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne public static final int STATUS_AP_UNABLE_TO_HANDLE_NEW_STA = 17; 1450446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne /** 1451446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne * Association Rejection Status code (NONE for success/non-association-rejection-fail) 1452446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne */ 1453446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne private int mAssociationStatus = NONE; 1454446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne 1455446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne /** 1456446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne * @param status the association status code for the recent failure 1457446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne */ 1458446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne public void setAssociationStatus(int status) { 1459446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne mAssociationStatus = status; 1460446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne } 1461446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne /** 1462446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne * Sets the RecentFailure to NONE 1463446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne */ 1464446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne public void clear() { 1465446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne mAssociationStatus = NONE; 1466446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne } 1467446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne /** 1468446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne * Get the recent failure code 1469446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne */ 1470446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne public int getAssociationStatus() { 1471446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne return mAssociationStatus; 1472446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne } 1473446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne } 1474446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne 1475446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne /** 1476446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne * @hide 1477446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne * RecentFailure member 1478446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne */ 1479446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne final public RecentFailure recentFailure = new RecentFailure(); 1480446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne 1481446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne /** 1482446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne * @hide 14838d106780b6a638552749e54e169fc72537d4bcccxinhe * @return network selection status 14848d106780b6a638552749e54e169fc72537d4bcccxinhe */ 14858d106780b6a638552749e54e169fc72537d4bcccxinhe public NetworkSelectionStatus getNetworkSelectionStatus() { 14868d106780b6a638552749e54e169fc72537d4bcccxinhe return mNetworkSelectionStatus; 14878d106780b6a638552749e54e169fc72537d4bcccxinhe } 1488311a72164b1060445b4067090c0bfd6615747093Roshan Pius 1489311a72164b1060445b4067090c0bfd6615747093Roshan Pius /** 1490311a72164b1060445b4067090c0bfd6615747093Roshan Pius * Set the network selection status 1491311a72164b1060445b4067090c0bfd6615747093Roshan Pius * @hide 1492311a72164b1060445b4067090c0bfd6615747093Roshan Pius */ 1493311a72164b1060445b4067090c0bfd6615747093Roshan Pius public void setNetworkSelectionStatus(NetworkSelectionStatus status) { 1494311a72164b1060445b4067090c0bfd6615747093Roshan Pius mNetworkSelectionStatus = status; 1495311a72164b1060445b4067090c0bfd6615747093Roshan Pius } 1496311a72164b1060445b4067090c0bfd6615747093Roshan Pius 14977c3606c103e95d3991267cca2592402a68779cafvandwalle /** 14987c3606c103e95d3991267cca2592402a68779cafvandwalle * @hide 14997c3606c103e95d3991267cca2592402a68779cafvandwalle * Linked Configurations: represent the set of Wificonfigurations that are equivalent 15007c3606c103e95d3991267cca2592402a68779cafvandwalle * regarding roaming and auto-joining. 15017c3606c103e95d3991267cca2592402a68779cafvandwalle * The linked configuration may or may not have same SSID, and may or may not have same 15027c3606c103e95d3991267cca2592402a68779cafvandwalle * credentials. 15037c3606c103e95d3991267cca2592402a68779cafvandwalle * For instance, linked configurations will have same defaultGwMacAddress or same dhcp server. 15047c3606c103e95d3991267cca2592402a68779cafvandwalle */ 15057c3606c103e95d3991267cca2592402a68779cafvandwalle public HashMap<String, Integer> linkedConfigurations; 15067c3606c103e95d3991267cca2592402a68779cafvandwalle 15079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public WifiConfiguration() { 15085ee89800bee7c6c755778795a536e0e2f12b85ffIrfan Sheriff networkId = INVALID_NETWORK_ID; 15099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SSID = null; 15109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BSSID = null; 15118a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng FQDN = null; 15127226c8f95b5971af2710c8d2f8a8b6f2210e2420Vinit Deshpande roamingConsortiumIds = new long[0]; 15139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project priority = 0; 15149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project hiddenSSID = false; 15159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project allowedKeyManagement = new BitSet(); 15169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project allowedProtocols = new BitSet(); 15179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project allowedAuthAlgorithms = new BitSet(); 15189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project allowedPairwiseCiphers = new BitSet(); 15199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project allowedGroupCiphers = new BitSet(); 15209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wepKeys = new String[4]; 15219b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff for (int i = 0; i < wepKeys.length; i++) { 15229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wepKeys[i] = null; 15234337476a6669ce52549ce4a60f5e4d07f8e3033fChung-yih Wang } 15249b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff enterpriseConfig = new WifiEnterpriseConfig(); 1525e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle selfAdded = false; 15268f13548615f647a1208ace5369b504cb41149965vandwalle didSelfAdd = false; 1527e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle ephemeral = false; 1528f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin meteredHint = false; 152943d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey meteredOverride = METERED_OVERRIDE_NONE; 1530fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin useExternalScores = false; 1531ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle validatedInternetAccess = false; 15326346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim mIpConfiguration = new IpConfiguration(); 15333e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber lastUpdateUid = -1; 15343e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber creatorUid = -1; 15356fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski shared = true; 1536b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne dtimInterval = 0; 15379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 153910652a95b16909acf26f31cdafc0c6aa09212f26Vinit Deshapnde /** 15406bbc8955c17ed44f63ddbf78d0e4d24b60ac05cdPeter Qiu * Identify if this configuration represents a Passpoint network 15412522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande */ 15422522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande public boolean isPasspoint() { 1543ad25bb89251c0552cfbc6c254853c79b7d9c121aVinit Deshpande return !TextUtils.isEmpty(FQDN) 15442522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande && !TextUtils.isEmpty(providerFriendlyName) 15452522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande && enterpriseConfig != null 15462522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande && enterpriseConfig.getEapMethod() != WifiEnterpriseConfig.Eap.NONE; 15472522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande } 15482522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande 15492522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande /** 1550111fa0274d1d6620f9634783585387f3b773949evandwalle * Helper function, identify if a configuration is linked 1551111fa0274d1d6620f9634783585387f3b773949evandwalle * @hide 1552111fa0274d1d6620f9634783585387f3b773949evandwalle */ 1553111fa0274d1d6620f9634783585387f3b773949evandwalle public boolean isLinked(WifiConfiguration config) { 15548d106780b6a638552749e54e169fc72537d4bcccxinhe if (config != null) { 15558d106780b6a638552749e54e169fc72537d4bcccxinhe if (config.linkedConfigurations != null && linkedConfigurations != null) { 15568d106780b6a638552749e54e169fc72537d4bcccxinhe if (config.linkedConfigurations.get(configKey()) != null 15578d106780b6a638552749e54e169fc72537d4bcccxinhe && linkedConfigurations.get(config.configKey()) != null) { 15588d106780b6a638552749e54e169fc72537d4bcccxinhe return true; 15598d106780b6a638552749e54e169fc72537d4bcccxinhe } 1560111fa0274d1d6620f9634783585387f3b773949evandwalle } 1561111fa0274d1d6620f9634783585387f3b773949evandwalle } 1562111fa0274d1d6620f9634783585387f3b773949evandwalle return false; 15637c3606c103e95d3991267cca2592402a68779cafvandwalle } 15647c3606c103e95d3991267cca2592402a68779cafvandwalle 15657c3606c103e95d3991267cca2592402a68779cafvandwalle /** 1566c55cd103708493f9d45122236affbf08b49456f0Sky Faber * Helper function, idenfity if a configuration should be treated as an enterprise network 1567c55cd103708493f9d45122236affbf08b49456f0Sky Faber * @hide 1568c55cd103708493f9d45122236affbf08b49456f0Sky Faber */ 1569c55cd103708493f9d45122236affbf08b49456f0Sky Faber public boolean isEnterprise() { 157029ce1dab5a97a8ec266d8314f552c2ecdf9bd99fRoshan Pius return (allowedKeyManagement.get(KeyMgmt.WPA_EAP) 157129ce1dab5a97a8ec266d8314f552c2ecdf9bd99fRoshan Pius || allowedKeyManagement.get(KeyMgmt.IEEE8021X)) 157229ce1dab5a97a8ec266d8314f552c2ecdf9bd99fRoshan Pius && enterpriseConfig != null 157329ce1dab5a97a8ec266d8314f552c2ecdf9bd99fRoshan Pius && enterpriseConfig.getEapMethod() != WifiEnterpriseConfig.Eap.NONE; 1574c55cd103708493f9d45122236affbf08b49456f0Sky Faber } 1575c55cd103708493f9d45122236affbf08b49456f0Sky Faber 15768dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy @Override 15779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 15788dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy StringBuilder sbuf = new StringBuilder(); 15799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.status == WifiConfiguration.Status.CURRENT) { 15809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("* "); 15819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (this.status == WifiConfiguration.Status.DISABLED) { 158263edd98d2eb744cc78dc3a3f8ec1ce7e6164d69dvandwalle sbuf.append("- DSBLE "); 15839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("ID: ").append(this.networkId).append(" SSID: ").append(this.SSID). 1585b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande append(" PROVIDER-NAME: ").append(this.providerFriendlyName). 15868d106780b6a638552749e54e169fc72537d4bcccxinhe append(" BSSID: ").append(this.BSSID).append(" FQDN: ").append(this.FQDN) 15878d106780b6a638552749e54e169fc72537d4bcccxinhe .append(" PRIO: ").append(this.priority) 1588e23993848c65c7fb2c91bb89989117d35dabe5c3mukesh agrawal .append(" HIDDEN: ").append(this.hiddenSSID) 15898d106780b6a638552749e54e169fc72537d4bcccxinhe .append('\n'); 15908d106780b6a638552749e54e169fc72537d4bcccxinhe 15918d106780b6a638552749e54e169fc72537d4bcccxinhe 15928d106780b6a638552749e54e169fc72537d4bcccxinhe sbuf.append(" NetworkSelectionStatus ") 15938d106780b6a638552749e54e169fc72537d4bcccxinhe .append(mNetworkSelectionStatus.getNetworkStatusString() + "\n"); 15948d106780b6a638552749e54e169fc72537d4bcccxinhe if (mNetworkSelectionStatus.getNetworkSelectionDisableReason() > 0) { 15958d106780b6a638552749e54e169fc72537d4bcccxinhe sbuf.append(" mNetworkSelectionDisableReason ") 15968d106780b6a638552749e54e169fc72537d4bcccxinhe .append(mNetworkSelectionStatus.getNetworkDisableReasonString() + "\n"); 15978d106780b6a638552749e54e169fc72537d4bcccxinhe 15988d106780b6a638552749e54e169fc72537d4bcccxinhe for (int index = mNetworkSelectionStatus.NETWORK_SELECTION_ENABLE; 15998d106780b6a638552749e54e169fc72537d4bcccxinhe index < mNetworkSelectionStatus.NETWORK_SELECTION_DISABLED_MAX; index++) { 16008d106780b6a638552749e54e169fc72537d4bcccxinhe if (mNetworkSelectionStatus.getDisableReasonCounter(index) != 0) { 16018d106780b6a638552749e54e169fc72537d4bcccxinhe sbuf.append(NetworkSelectionStatus.getNetworkDisableReasonString(index) 16028d106780b6a638552749e54e169fc72537d4bcccxinhe + " counter:" + mNetworkSelectionStatus.getDisableReasonCounter(index) 16038d106780b6a638552749e54e169fc72537d4bcccxinhe + "\n"); 16048d106780b6a638552749e54e169fc72537d4bcccxinhe } 16058d106780b6a638552749e54e169fc72537d4bcccxinhe } 16060561030490e418fcead83606249d8cfdc344a163Mike Lockwood } 1607584dc6b8b9628d930de4ea3ad94894886294b855xinhe if (mNetworkSelectionStatus.getConnectChoice() != null) { 1608584dc6b8b9628d930de4ea3ad94894886294b855xinhe sbuf.append(" connect choice: ").append(mNetworkSelectionStatus.getConnectChoice()); 1609584dc6b8b9628d930de4ea3ad94894886294b855xinhe sbuf.append(" connect choice set time: ").append(mNetworkSelectionStatus 1610584dc6b8b9628d930de4ea3ad94894886294b855xinhe .getConnectChoiceTimestamp()); 1611584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 1612cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein sbuf.append(" hasEverConnected: ") 1613cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein .append(mNetworkSelectionStatus.getHasEverConnected()).append("\n"); 16148d106780b6a638552749e54e169fc72537d4bcccxinhe 16150561030490e418fcead83606249d8cfdc344a163Mike Lockwood if (this.numAssociation > 0) { 16160561030490e418fcead83606249d8cfdc344a163Mike Lockwood sbuf.append(" numAssociation ").append(this.numAssociation).append("\n"); 161716a40cc7b597f0492f633cc0f742dc796955e7fdvandwalle } 1618ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle if (this.numNoInternetAccessReports > 0) { 1619ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle sbuf.append(" numNoInternetAccessReports "); 1620ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle sbuf.append(this.numNoInternetAccessReports).append("\n"); 1621ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle } 1622ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle if (this.updateTime != null) { 162343d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey sbuf.append(" update ").append(this.updateTime).append("\n"); 1624ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle } 1625ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle if (this.creationTime != null) { 162643d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey sbuf.append(" creation ").append(this.creationTime).append("\n"); 1627ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle } 162894fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle if (this.didSelfAdd) sbuf.append(" didSelfAdd"); 162994fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle if (this.selfAdded) sbuf.append(" selfAdded"); 1630ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle if (this.validatedInternetAccess) sbuf.append(" validatedInternetAccess"); 16318faf2a2a15853368a14babf935c156664b5f0b6cJeff Davidson if (this.ephemeral) sbuf.append(" ephemeral"); 1632f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin if (this.meteredHint) sbuf.append(" meteredHint"); 1633fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin if (this.useExternalScores) sbuf.append(" useExternalScores"); 1634f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin if (this.didSelfAdd || this.selfAdded || this.validatedInternetAccess 163543d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey || this.ephemeral || this.meteredHint || this.useExternalScores) { 163616a40cc7b597f0492f633cc0f742dc796955e7fdvandwalle sbuf.append("\n"); 163716a40cc7b597f0492f633cc0f742dc796955e7fdvandwalle } 163843d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey if (this.meteredOverride != METERED_OVERRIDE_NONE) { 163943d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey sbuf.append(" meteredOverride ").append(meteredOverride).append("\n"); 164043d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey } 16419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" KeyMgmt:"); 16429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int k = 0; k < this.allowedKeyManagement.size(); k++) { 16439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.allowedKeyManagement.get(k)) { 16449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" "); 16459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (k < KeyMgmt.strings.length) { 16469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(KeyMgmt.strings[k]); 16479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 16489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("??"); 16499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" Protocols:"); 16539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int p = 0; p < this.allowedProtocols.size(); p++) { 16549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.allowedProtocols.get(p)) { 16559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" "); 16569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (p < Protocol.strings.length) { 16579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(Protocol.strings[p]); 16589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 16599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("??"); 16609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append('\n'); 16649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" AuthAlgorithms:"); 16659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int a = 0; a < this.allowedAuthAlgorithms.size(); a++) { 16669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.allowedAuthAlgorithms.get(a)) { 16679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" "); 16689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (a < AuthAlgorithm.strings.length) { 16699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(AuthAlgorithm.strings[a]); 16709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 16719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("??"); 16729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append('\n'); 16769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" PairwiseCiphers:"); 16779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int pc = 0; pc < this.allowedPairwiseCiphers.size(); pc++) { 16789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.allowedPairwiseCiphers.get(pc)) { 16799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" "); 16809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (pc < PairwiseCipher.strings.length) { 16819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(PairwiseCipher.strings[pc]); 16829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 16839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("??"); 16849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append('\n'); 16889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" GroupCiphers:"); 16899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int gc = 0; gc < this.allowedGroupCiphers.size(); gc++) { 16909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.allowedGroupCiphers.get(gc)) { 16919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" "); 16929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (gc < GroupCipher.strings.length) { 16939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(GroupCipher.strings[gc]); 16949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 16959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("??"); 16969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16995069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang sbuf.append('\n').append(" PSK: "); 17009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.preSharedKey != null) { 17015069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang sbuf.append('*'); 17025069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang } 170394fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append("\nEnterprise config:\n"); 17049b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff sbuf.append(enterpriseConfig); 17059b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff 170694fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append("IP config:\n"); 17076346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim sbuf.append(mIpConfiguration.toString()); 1708128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff 17098d106780b6a638552749e54e169fc72537d4bcccxinhe if (mNetworkSelectionStatus.getNetworkSelectionBSSID() != null) { 17108d106780b6a638552749e54e169fc72537d4bcccxinhe sbuf.append(" networkSelectionBSSID=" 17118d106780b6a638552749e54e169fc72537d4bcccxinhe + mNetworkSelectionStatus.getNetworkSelectionBSSID()); 17128d106780b6a638552749e54e169fc72537d4bcccxinhe } 171394fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle long now_ms = System.currentTimeMillis(); 17148d106780b6a638552749e54e169fc72537d4bcccxinhe if (mNetworkSelectionStatus.getDisableTime() != NetworkSelectionStatus 17158d106780b6a638552749e54e169fc72537d4bcccxinhe .INVALID_NETWORK_SELECTION_DISABLE_TIMESTAMP) { 171694fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append('\n'); 17178d106780b6a638552749e54e169fc72537d4bcccxinhe long diff = now_ms - mNetworkSelectionStatus.getDisableTime(); 17182ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle if (diff <= 0) { 171994fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append(" blackListed since <incorrect>"); 17202ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle } else { 1721aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy sbuf.append(" blackListed: ").append(Long.toString(diff / 1000)).append("sec "); 172294fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle } 172394fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle } 1724aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy if (creatorUid != 0) sbuf.append(" cuid=" + creatorUid); 17253e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber if (creatorName != null) sbuf.append(" cname=" + creatorName); 17263e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber if (lastUpdateUid != 0) sbuf.append(" luid=" + lastUpdateUid); 17273e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber if (lastUpdateName != null) sbuf.append(" lname=" + lastUpdateName); 17281ac50cb32c08388540f53833c04a02f13fed0824Lorenzo Colitti sbuf.append(" lcuid=" + lastConnectUid); 17291ac50cb32c08388540f53833c04a02f13fed0824Lorenzo Colitti sbuf.append(" userApproved=" + userApprovedAsString(userApproved)); 17301ac50cb32c08388540f53833c04a02f13fed0824Lorenzo Colitti sbuf.append(" noInternetAccessExpected=" + noInternetAccessExpected); 17311248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti sbuf.append(" "); 17323e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber 173394fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle if (this.lastConnected != 0) { 173494fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append('\n'); 173594fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle long diff = now_ms - this.lastConnected; 173694fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle if (diff <= 0) { 173794fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append("lastConnected since <incorrect>"); 173894fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle } else { 1739aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy sbuf.append("lastConnected: ").append(Long.toString(diff / 1000)).append("sec "); 174094fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle } 174194fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle } 174294fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle if (this.lastConnectionFailure != 0) { 174394fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append('\n'); 174494fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle long diff = now_ms - this.lastConnectionFailure; 174594fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle if (diff <= 0) { 17465ddc65b9860b7ef39a0921bcbca3cbc50abe3a2cPierre Vandwalle sbuf.append("lastConnectionFailure since <incorrect> "); 174794fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle } else { 1748aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy sbuf.append("lastConnectionFailure: ").append(Long.toString(diff / 1000)); 1749aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy sbuf.append("sec "); 17502ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle } 17512ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle } 17528650c035609507340e3a66459cea16ef08cd03a6vandwalle if (this.lastRoamingFailure != 0) { 17538650c035609507340e3a66459cea16ef08cd03a6vandwalle sbuf.append('\n'); 17548650c035609507340e3a66459cea16ef08cd03a6vandwalle long diff = now_ms - this.lastRoamingFailure; 17558650c035609507340e3a66459cea16ef08cd03a6vandwalle if (diff <= 0) { 17565ddc65b9860b7ef39a0921bcbca3cbc50abe3a2cPierre Vandwalle sbuf.append("lastRoamingFailure since <incorrect> "); 17578650c035609507340e3a66459cea16ef08cd03a6vandwalle } else { 1758aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy sbuf.append("lastRoamingFailure: ").append(Long.toString(diff / 1000)); 1759aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy sbuf.append("sec "); 17608650c035609507340e3a66459cea16ef08cd03a6vandwalle } 17618650c035609507340e3a66459cea16ef08cd03a6vandwalle } 17628650c035609507340e3a66459cea16ef08cd03a6vandwalle sbuf.append("roamingFailureBlackListTimeMilli: "). 17638650c035609507340e3a66459cea16ef08cd03a6vandwalle append(Long.toString(this.roamingFailureBlackListTimeMilli)); 1764448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle sbuf.append('\n'); 1765448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle if (this.linkedConfigurations != null) { 1766aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy for (String key : this.linkedConfigurations.keySet()) { 1767448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle sbuf.append(" linked: ").append(key); 1768448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle sbuf.append('\n'); 1769448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle } 1770448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle } 1771446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne sbuf.append("recentFailure: ").append("Association Rejection code: ") 1772446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne .append(recentFailure.getAssociationStatus()).append("\n"); 17739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return sbuf.toString(); 17749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1776b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff /** {@hide} */ 1777b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff public String getPrintableSsid() { 1778b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff if (SSID == null) return ""; 1779b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff final int length = SSID.length(); 1780b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff if (length > 2 && (SSID.charAt(0) == '"') && SSID.charAt(length - 1) == '"') { 1781b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff return SSID.substring(1, length - 1); 1782b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 1783b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 1784b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff /** The ascii-encoded string format is P"<ascii-encoded-string>" 1785b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff * The decoding is implemented in the supplicant for a newly configured 1786b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff * network. 1787b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff */ 1788b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff if (length > 3 && (SSID.charAt(0) == 'P') && (SSID.charAt(1) == '"') && 1789b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff (SSID.charAt(length-1) == '"')) { 1790b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff WifiSsid wifiSsid = WifiSsid.createFromAsciiEncoded( 1791b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff SSID.substring(2, length - 1)); 1792b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff return wifiSsid.toString(); 1793b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 1794b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff return SSID; 1795b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 1796b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 17973e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber /** @hide **/ 17983e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber public static String userApprovedAsString(int userApproved) { 17993e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber switch (userApproved) { 18003e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber case USER_APPROVED: 18013e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber return "USER_APPROVED"; 18023e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber case USER_BANNED: 18033e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber return "USER_BANNED"; 18043e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber case USER_UNSPECIFIED: 18053e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber return "USER_UNSPECIFIED"; 18063e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber default: 18073e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber return "INVALID"; 18083e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber } 18093e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber } 18103e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber 181126d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff /** 181226d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * Get an identifier for associating credentials with this config 181326d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * @param current configuration contains values for additional fields 181426d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * that are not part of this configuration. Used 181526d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * when a config with some fields is passed by an application. 181626d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * @throws IllegalStateException if config is invalid for key id generation 181726d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * @hide 181826d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff */ 1819ffadfb9ffdced62db215319d3edc7717802088fbVinit Deshapnde public String getKeyIdForCredentials(WifiConfiguration current) { 182026d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff String keyMgmt = null; 182126d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff 182226d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff try { 182326d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff // Get current config details for fields that are not initialized 182426d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff if (TextUtils.isEmpty(SSID)) SSID = current.SSID; 182526d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff if (allowedKeyManagement.cardinality() == 0) { 182626d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff allowedKeyManagement = current.allowedKeyManagement; 182726d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 182826d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff if (allowedKeyManagement.get(KeyMgmt.WPA_EAP)) { 182926d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff keyMgmt = KeyMgmt.strings[KeyMgmt.WPA_EAP]; 183026d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 183161b5a7689320274ce5fff9a9eae1866d8d696b9bJan Nordqvist if (allowedKeyManagement.get(KeyMgmt.OSEN)) { 183261b5a7689320274ce5fff9a9eae1866d8d696b9bJan Nordqvist keyMgmt = KeyMgmt.strings[KeyMgmt.OSEN]; 183361b5a7689320274ce5fff9a9eae1866d8d696b9bJan Nordqvist } 183426d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff if (allowedKeyManagement.get(KeyMgmt.IEEE8021X)) { 183526d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff keyMgmt += KeyMgmt.strings[KeyMgmt.IEEE8021X]; 183626d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 183726d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff 183826d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff if (TextUtils.isEmpty(keyMgmt)) { 183926d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff throw new IllegalStateException("Not an EAP network"); 184026d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 184126d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff 184226d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff return trimStringForKeyId(SSID) + "_" + keyMgmt + "_" + 184326d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff trimStringForKeyId(enterpriseConfig.getKeyId(current != null ? 184426d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff current.enterpriseConfig : null)); 184526d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } catch (NullPointerException e) { 184626d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff throw new IllegalStateException("Invalid config details"); 184726d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 184826d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 184926d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff 185026d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff private String trimStringForKeyId(String string) { 185126d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff // Remove quotes and spaces 185226d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff return string.replace("\"", "").replace(" ", ""); 185326d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 185426d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff 18559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static BitSet readBitSet(Parcel src) { 18569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int cardinality = src.readInt(); 18579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BitSet set = new BitSet(); 18599b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff for (int i = 0; i < cardinality; i++) { 18609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project set.set(src.readInt()); 18619b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff } 18629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return set; 18649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static void writeBitSet(Parcel dest, BitSet set) { 18679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int nextSetBit = -1; 18689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(set.cardinality()); 18709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18719b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff while ((nextSetBit = set.nextSetBit(nextSetBit + 1)) != -1) { 18729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(nextSetBit); 18739b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff } 18749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1876ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff /** @hide */ 1877ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff public int getAuthType() { 1878d49288352908e8cbc9a001e13df2eb35e78deb1aJan Nordqvist if (allowedKeyManagement.cardinality() > 1) { 1879d49288352908e8cbc9a001e13df2eb35e78deb1aJan Nordqvist throw new IllegalStateException("More than one auth type set"); 188026d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 1881ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff if (allowedKeyManagement.get(KeyMgmt.WPA_PSK)) { 1882ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff return KeyMgmt.WPA_PSK; 1883ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff } else if (allowedKeyManagement.get(KeyMgmt.WPA2_PSK)) { 1884ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff return KeyMgmt.WPA2_PSK; 1885ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff } else if (allowedKeyManagement.get(KeyMgmt.WPA_EAP)) { 1886ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff return KeyMgmt.WPA_EAP; 1887ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff } else if (allowedKeyManagement.get(KeyMgmt.IEEE8021X)) { 1888ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff return KeyMgmt.IEEE8021X; 1889ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff } 1890ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff return KeyMgmt.NONE; 1891ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff } 1892ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff 18937c3606c103e95d3991267cca2592402a68779cafvandwalle /* @hide 18947c3606c103e95d3991267cca2592402a68779cafvandwalle * Cache the config key, this seems useful as a speed up since a lot of 18957c3606c103e95d3991267cca2592402a68779cafvandwalle * lookups in the config store are done and based on this key. 18967c3606c103e95d3991267cca2592402a68779cafvandwalle */ 18977c3606c103e95d3991267cca2592402a68779cafvandwalle String mCachedConfigKey; 18987c3606c103e95d3991267cca2592402a68779cafvandwalle 18997c3606c103e95d3991267cca2592402a68779cafvandwalle /** @hide 19007c3606c103e95d3991267cca2592402a68779cafvandwalle * return the string used to calculate the hash in WifiConfigStore 19017c3606c103e95d3991267cca2592402a68779cafvandwalle * and uniquely identify this WifiConfiguration 19027c3606c103e95d3991267cca2592402a68779cafvandwalle */ 19037c3606c103e95d3991267cca2592402a68779cafvandwalle public String configKey(boolean allowCached) { 19047c3606c103e95d3991267cca2592402a68779cafvandwalle String key; 19057c3606c103e95d3991267cca2592402a68779cafvandwalle if (allowCached && mCachedConfigKey != null) { 19067c3606c103e95d3991267cca2592402a68779cafvandwalle key = mCachedConfigKey; 1907b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande } else if (providerFriendlyName != null) { 1908b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande key = FQDN + KeyMgmt.strings[KeyMgmt.WPA_EAP]; 19096fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski if (!shared) { 19106fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski key += "-" + Integer.toString(UserHandle.getUserId(creatorUid)); 19116fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski } 19127c3606c103e95d3991267cca2592402a68779cafvandwalle } else { 19138e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti if (allowedKeyManagement.get(KeyMgmt.WPA_PSK)) { 19148e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti key = SSID + KeyMgmt.strings[KeyMgmt.WPA_PSK]; 19158e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti } else if (allowedKeyManagement.get(KeyMgmt.WPA_EAP) || 19168e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti allowedKeyManagement.get(KeyMgmt.IEEE8021X)) { 19178e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti key = SSID + KeyMgmt.strings[KeyMgmt.WPA_EAP]; 19188e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti } else if (wepKeys[0] != null) { 19198e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti key = SSID + "WEP"; 19208e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti } else { 19218e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti key = SSID + KeyMgmt.strings[KeyMgmt.NONE]; 19227c3606c103e95d3991267cca2592402a68779cafvandwalle } 19236fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski if (!shared) { 19246fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski key += "-" + Integer.toString(UserHandle.getUserId(creatorUid)); 19256fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski } 19267c3606c103e95d3991267cca2592402a68779cafvandwalle mCachedConfigKey = key; 19277c3606c103e95d3991267cca2592402a68779cafvandwalle } 19287c3606c103e95d3991267cca2592402a68779cafvandwalle return key; 19297c3606c103e95d3991267cca2592402a68779cafvandwalle } 19307c3606c103e95d3991267cca2592402a68779cafvandwalle 19317c3606c103e95d3991267cca2592402a68779cafvandwalle /** @hide 19327c3606c103e95d3991267cca2592402a68779cafvandwalle * get configKey, force calculating the config string 19337c3606c103e95d3991267cca2592402a68779cafvandwalle */ 19347c3606c103e95d3991267cca2592402a68779cafvandwalle public String configKey() { 19357c3606c103e95d3991267cca2592402a68779cafvandwalle return configKey(false); 19367c3606c103e95d3991267cca2592402a68779cafvandwalle } 19377c3606c103e95d3991267cca2592402a68779cafvandwalle 19386346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 19396346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public IpConfiguration getIpConfiguration() { 19406346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim return mIpConfiguration; 19416346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 19426346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 19436346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 19446346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public void setIpConfiguration(IpConfiguration ipConfiguration) { 19456346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim mIpConfiguration = ipConfiguration; 19466346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 19476346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 19486346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 19490a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti public StaticIpConfiguration getStaticIpConfiguration() { 19500a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti return mIpConfiguration.getStaticIpConfiguration(); 19516346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 19526346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 19536346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 19540a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti public void setStaticIpConfiguration(StaticIpConfiguration staticIpConfiguration) { 19550a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti mIpConfiguration.setStaticIpConfiguration(staticIpConfiguration); 19566346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 19576346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 19586346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 19596346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public IpConfiguration.IpAssignment getIpAssignment() { 19606346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim return mIpConfiguration.ipAssignment; 19616346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 19626346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 19636346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 19646346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public void setIpAssignment(IpConfiguration.IpAssignment ipAssignment) { 19656346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim mIpConfiguration.ipAssignment = ipAssignment; 19666346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 19676346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 19686346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 19696346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public IpConfiguration.ProxySettings getProxySettings() { 19706346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim return mIpConfiguration.proxySettings; 19716346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 19726346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 19736346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 19746346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public void setProxySettings(IpConfiguration.ProxySettings proxySettings) { 19756346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim mIpConfiguration.proxySettings = proxySettings; 19766346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 19776346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 19781375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne /** 19791375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne * Returns the HTTP proxy used by this object. 19801375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne * @return a {@link ProxyInfo httpProxy} representing the proxy specified by this 19811375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne * WifiConfiguration, or {@code null} if no proxy is specified. 19821375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne */ 19830a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti public ProxyInfo getHttpProxy() { 19841375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne if (mIpConfiguration.proxySettings == IpConfiguration.ProxySettings.NONE) { 19851375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne return null; 19861375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne } 19871375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne return new ProxyInfo(mIpConfiguration.httpProxy); 19880a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti } 19890a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti 19901375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne /** 19911375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne * Set the {@link ProxyInfo} for this WifiConfiguration. 19921375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne * @param httpProxy {@link ProxyInfo} representing the httpProxy to be used by this 19931375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne * WifiConfiguration. Setting this {@code null} will explicitly set no proxy, 19941375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne * removing any proxy that was previously set. 19951375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne * @exception throw IllegalArgumentException for invalid httpProxy 19961375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne */ 19970a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti public void setHttpProxy(ProxyInfo httpProxy) { 19981375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne if (httpProxy == null) { 19991375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne mIpConfiguration.setProxySettings(IpConfiguration.ProxySettings.NONE); 20001375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne mIpConfiguration.setHttpProxy(null); 20011375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne return; 20021375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne } 20031375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne ProxyInfo httpProxyCopy; 20041375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne ProxySettings proxySettingCopy; 20051375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne if (!Uri.EMPTY.equals(httpProxy.getPacFileUrl())) { 20061375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne proxySettingCopy = IpConfiguration.ProxySettings.PAC; 20071375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne // Construct a new PAC URL Proxy 20081375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne httpProxyCopy = new ProxyInfo(httpProxy.getPacFileUrl(), httpProxy.getPort()); 20091375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne } else { 20101375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne proxySettingCopy = IpConfiguration.ProxySettings.STATIC; 20111375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne // Construct a new HTTP Proxy 20121375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne httpProxyCopy = new ProxyInfo(httpProxy.getHost(), httpProxy.getPort(), 20131375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne httpProxy.getExclusionListAsString()); 20141375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne } 20151375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne if (!httpProxyCopy.isValid()) { 20161375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne throw new IllegalArgumentException("Invalid ProxyInfo: " + httpProxyCopy.toString()); 20171375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne } 20181375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne mIpConfiguration.setProxySettings(proxySettingCopy); 20191375ede09255e04141f680c3e90526e9f34bf061Glen Kuhne mIpConfiguration.setHttpProxy(httpProxyCopy); 20200a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti } 20210a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti 20220a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti /** @hide */ 20236346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public void setProxy(ProxySettings settings, ProxyInfo proxy) { 20246346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim mIpConfiguration.proxySettings = settings; 20250a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti mIpConfiguration.httpProxy = proxy; 20266346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 20276346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 202813f48ffab8c24d18a0a83e488a9b358a730580d4vandwalle /** Implement the Parcelable interface {@hide} */ 2029678979748585c5903125a404e448ad6c111dedadJaewan Kim public int describeContents() { 2030678979748585c5903125a404e448ad6c111dedadJaewan Kim return 0; 2031678979748585c5903125a404e448ad6c111dedadJaewan Kim } 2032678979748585c5903125a404e448ad6c111dedadJaewan Kim 20336fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski /** @hide */ 2034a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande public void setPasspointManagementObjectTree(String passpointManagementObjectTree) { 2035a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande mPasspointManagementObjectTree = passpointManagementObjectTree; 2036a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande } 2037a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande 2038a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande /** @hide */ 2039a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande public String getMoTree() { 2040a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande return mPasspointManagementObjectTree; 2041a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande } 2042a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande 2043128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff /** copy constructor {@hide} */ 2044128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff public WifiConfiguration(WifiConfiguration source) { 2045128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff if (source != null) { 2046128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff networkId = source.networkId; 2047128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff status = source.status; 2048128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff SSID = source.SSID; 2049128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff BSSID = source.BSSID; 20508a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng FQDN = source.FQDN; 2051a0d929e505432a8c84f3899696c910db16bd73bfVinit Deshpande roamingConsortiumIds = source.roamingConsortiumIds.clone(); 2052b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande providerFriendlyName = source.providerFriendlyName; 20531379fd0b1ef952547934846f4b6c40780f885e47Peter Qiu isHomeProviderNetwork = source.isHomeProviderNetwork; 2054128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff preSharedKey = source.preSharedKey; 2055128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff 20568d106780b6a638552749e54e169fc72537d4bcccxinhe mNetworkSelectionStatus.copy(source.getNetworkSelectionStatus()); 2057a0be0fb2709124a567f89114b1d8e80f74452edcxinhe apBand = source.apBand; 2058a0be0fb2709124a567f89114b1d8e80f74452edcxinhe apChannel = source.apChannel; 2059a0be0fb2709124a567f89114b1d8e80f74452edcxinhe 2060128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff wepKeys = new String[4]; 20619b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff for (int i = 0; i < wepKeys.length; i++) { 2062128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff wepKeys[i] = source.wepKeys[i]; 20639b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff } 2064128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff 2065128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff wepTxKeyIndex = source.wepTxKeyIndex; 2066128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff priority = source.priority; 2067128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff hiddenSSID = source.hiddenSSID; 2068128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff allowedKeyManagement = (BitSet) source.allowedKeyManagement.clone(); 2069128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff allowedProtocols = (BitSet) source.allowedProtocols.clone(); 2070128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff allowedAuthAlgorithms = (BitSet) source.allowedAuthAlgorithms.clone(); 2071128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff allowedPairwiseCiphers = (BitSet) source.allowedPairwiseCiphers.clone(); 2072128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff allowedGroupCiphers = (BitSet) source.allowedGroupCiphers.clone(); 20739b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff enterpriseConfig = new WifiEnterpriseConfig(source.enterpriseConfig); 2074678979748585c5903125a404e448ad6c111dedadJaewan Kim 20757c3606c103e95d3991267cca2592402a68779cafvandwalle defaultGwMacAddress = source.defaultGwMacAddress; 20767c3606c103e95d3991267cca2592402a68779cafvandwalle 20776346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim mIpConfiguration = new IpConfiguration(source.mIpConfiguration); 20786346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 20797c3606c103e95d3991267cca2592402a68779cafvandwalle if ((source.linkedConfigurations != null) 20807c3606c103e95d3991267cca2592402a68779cafvandwalle && (source.linkedConfigurations.size() > 0)) { 20817c3606c103e95d3991267cca2592402a68779cafvandwalle linkedConfigurations = new HashMap<String, Integer>(); 20827c3606c103e95d3991267cca2592402a68779cafvandwalle linkedConfigurations.putAll(source.linkedConfigurations); 20837c3606c103e95d3991267cca2592402a68779cafvandwalle } 20847c3606c103e95d3991267cca2592402a68779cafvandwalle mCachedConfigKey = null; //force null configKey 2085e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle selfAdded = source.selfAdded; 2086ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle validatedInternetAccess = source.validatedInternetAccess; 2087580a1bdfbc6a8c4ca25e796af234711184c13871Peter Qiu isLegacyPasspointConfig = source.isLegacyPasspointConfig; 20888faf2a2a15853368a14babf935c156664b5f0b6cJeff Davidson ephemeral = source.ephemeral; 2089f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin meteredHint = source.meteredHint; 2090c76fda726973693c6168ada797943070eac2f04bStephen Chen meteredOverride = source.meteredOverride; 2091fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin useExternalScores = source.useExternalScores; 20927c3606c103e95d3991267cca2592402a68779cafvandwalle if (source.visibility != null) { 20937c3606c103e95d3991267cca2592402a68779cafvandwalle visibility = new Visibility(source.visibility); 20947c3606c103e95d3991267cca2592402a68779cafvandwalle } 20953a74e2ef1681eaae973fc989b3533a7f9c82e7b1vandwalle 20968f13548615f647a1208ace5369b504cb41149965vandwalle didSelfAdd = source.didSelfAdd; 20978f13548615f647a1208ace5369b504cb41149965vandwalle lastConnectUid = source.lastConnectUid; 20988f13548615f647a1208ace5369b504cb41149965vandwalle lastUpdateUid = source.lastUpdateUid; 20998f13548615f647a1208ace5369b504cb41149965vandwalle creatorUid = source.creatorUid; 21003e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber creatorName = source.creatorName; 21013e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber lastUpdateName = source.lastUpdateName; 21022d0f71eea20470985abde98d759910a1ac40b257vandwalle peerWifiConfiguration = source.peerWifiConfiguration; 21038d106780b6a638552749e54e169fc72537d4bcccxinhe 2104111fa0274d1d6620f9634783585387f3b773949evandwalle lastConnected = source.lastConnected; 2105111fa0274d1d6620f9634783585387f3b773949evandwalle lastDisconnected = source.lastDisconnected; 2106154b2cf6bbb99ee258b289846183172139a87dbavandwalle lastConnectionFailure = source.lastConnectionFailure; 21078650c035609507340e3a66459cea16ef08cd03a6vandwalle lastRoamingFailure = source.lastRoamingFailure; 21088650c035609507340e3a66459cea16ef08cd03a6vandwalle lastRoamingFailureReason = source.lastRoamingFailureReason; 21098650c035609507340e3a66459cea16ef08cd03a6vandwalle roamingFailureBlackListTimeMilli = source.roamingFailureBlackListTimeMilli; 2110154b2cf6bbb99ee258b289846183172139a87dbavandwalle numScorerOverride = source.numScorerOverride; 2111154b2cf6bbb99ee258b289846183172139a87dbavandwalle numScorerOverrideAndSwitchedNetwork = source.numScorerOverrideAndSwitchedNetwork; 21124eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle numAssociation = source.numAssociation; 21133e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber userApproved = source.userApproved; 2114ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle numNoInternetAccessReports = source.numNoInternetAccessReports; 21151248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti noInternetAccessExpected = source.noInternetAccessExpected; 2116ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle creationTime = source.creationTime; 2117ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle updateTime = source.updateTime; 21186fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski shared = source.shared; 2119446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne recentFailure.setAssociationStatus(source.recentFailure.getAssociationStatus()); 21206346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 21219e6222f4c126252c9950d072ab67d8b849d17643Irfan Sheriff } 21229e6222f4c126252c9950d072ab67d8b849d17643Irfan Sheriff 21239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Implement the Parcelable interface {@hide} */ 21246346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim @Override 21259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 21269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(networkId); 21279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(status); 21288d106780b6a638552749e54e169fc72537d4bcccxinhe mNetworkSelectionStatus.writeToParcel(dest); 21299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(SSID); 21309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(BSSID); 2131a0be0fb2709124a567f89114b1d8e80f74452edcxinhe dest.writeInt(apBand); 2132a0be0fb2709124a567f89114b1d8e80f74452edcxinhe dest.writeInt(apChannel); 21338a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng dest.writeString(FQDN); 2134b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande dest.writeString(providerFriendlyName); 21351379fd0b1ef952547934846f4b6c40780f885e47Peter Qiu dest.writeInt(isHomeProviderNetwork ? 1 : 0); 2136a0d929e505432a8c84f3899696c910db16bd73bfVinit Deshpande dest.writeInt(roamingConsortiumIds.length); 21377226c8f95b5971af2710c8d2f8a8b6f2210e2420Vinit Deshpande for (long roamingConsortiumId : roamingConsortiumIds) { 2138b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande dest.writeLong(roamingConsortiumId); 2139b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande } 21409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(preSharedKey); 21419b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff for (String wepKey : wepKeys) { 21429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(wepKey); 21439b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff } 21449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(wepTxKeyIndex); 21459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(priority); 21469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(hiddenSSID ? 1 : 0); 21475f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng dest.writeInt(requirePMF ? 1 : 0); 21485f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng dest.writeString(updateIdentifier); 21499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 21509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project writeBitSet(dest, allowedKeyManagement); 21519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project writeBitSet(dest, allowedProtocols); 21529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project writeBitSet(dest, allowedAuthAlgorithms); 21539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project writeBitSet(dest, allowedPairwiseCiphers); 21549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project writeBitSet(dest, allowedGroupCiphers); 21554337476a6669ce52549ce4a60f5e4d07f8e3033fChung-yih Wang 21569b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff dest.writeParcelable(enterpriseConfig, flags); 2157678979748585c5903125a404e448ad6c111dedadJaewan Kim 21586346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim dest.writeParcelable(mIpConfiguration, flags); 21597c3606c103e95d3991267cca2592402a68779cafvandwalle dest.writeString(dhcpServer); 21607c3606c103e95d3991267cca2592402a68779cafvandwalle dest.writeString(defaultGwMacAddress); 2161e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle dest.writeInt(selfAdded ? 1 : 0); 21628f13548615f647a1208ace5369b504cb41149965vandwalle dest.writeInt(didSelfAdd ? 1 : 0); 2163ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle dest.writeInt(validatedInternetAccess ? 1 : 0); 2164580a1bdfbc6a8c4ca25e796af234711184c13871Peter Qiu dest.writeInt(isLegacyPasspointConfig ? 1 : 0); 21658faf2a2a15853368a14babf935c156664b5f0b6cJeff Davidson dest.writeInt(ephemeral ? 1 : 0); 2166f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin dest.writeInt(meteredHint ? 1 : 0); 216743d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey dest.writeInt(meteredOverride); 2168fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin dest.writeInt(useExternalScores ? 1 : 0); 21698f13548615f647a1208ace5369b504cb41149965vandwalle dest.writeInt(creatorUid); 21708f13548615f647a1208ace5369b504cb41149965vandwalle dest.writeInt(lastConnectUid); 21718f13548615f647a1208ace5369b504cb41149965vandwalle dest.writeInt(lastUpdateUid); 21723e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber dest.writeString(creatorName); 21733e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber dest.writeString(lastUpdateName); 2174154b2cf6bbb99ee258b289846183172139a87dbavandwalle dest.writeLong(lastConnectionFailure); 21758650c035609507340e3a66459cea16ef08cd03a6vandwalle dest.writeLong(lastRoamingFailure); 21768650c035609507340e3a66459cea16ef08cd03a6vandwalle dest.writeInt(lastRoamingFailureReason); 21778650c035609507340e3a66459cea16ef08cd03a6vandwalle dest.writeLong(roamingFailureBlackListTimeMilli); 2178154b2cf6bbb99ee258b289846183172139a87dbavandwalle dest.writeInt(numScorerOverride); 2179154b2cf6bbb99ee258b289846183172139a87dbavandwalle dest.writeInt(numScorerOverrideAndSwitchedNetwork); 21804eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle dest.writeInt(numAssociation); 21813e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber dest.writeInt(userApproved); 2182ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle dest.writeInt(numNoInternetAccessReports); 21831248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti dest.writeInt(noInternetAccessExpected ? 1 : 0); 21846fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski dest.writeInt(shared ? 1 : 0); 2185a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande dest.writeString(mPasspointManagementObjectTree); 2186446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne dest.writeInt(recentFailure.getAssociationStatus()); 21879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 21889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 21899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Implement the Parcelable interface {@hide} */ 21909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Creator<WifiConfiguration> CREATOR = 21919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new Creator<WifiConfiguration>() { 21929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public WifiConfiguration createFromParcel(Parcel in) { 21939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project WifiConfiguration config = new WifiConfiguration(); 21949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.networkId = in.readInt(); 21959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.status = in.readInt(); 21968d106780b6a638552749e54e169fc72537d4bcccxinhe config.mNetworkSelectionStatus.readFromParcel(in); 21979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.SSID = in.readString(); 21989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.BSSID = in.readString(); 2199a0be0fb2709124a567f89114b1d8e80f74452edcxinhe config.apBand = in.readInt(); 2200a0be0fb2709124a567f89114b1d8e80f74452edcxinhe config.apChannel = in.readInt(); 22018a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng config.FQDN = in.readString(); 2202b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande config.providerFriendlyName = in.readString(); 22031379fd0b1ef952547934846f4b6c40780f885e47Peter Qiu config.isHomeProviderNetwork = in.readInt() != 0; 2204b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande int numRoamingConsortiumIds = in.readInt(); 22057226c8f95b5971af2710c8d2f8a8b6f2210e2420Vinit Deshpande config.roamingConsortiumIds = new long[numRoamingConsortiumIds]; 2206b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande for (int i = 0; i < numRoamingConsortiumIds; i++) { 2207a0d929e505432a8c84f3899696c910db16bd73bfVinit Deshpande config.roamingConsortiumIds[i] = in.readLong(); 2208b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande } 22099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.preSharedKey = in.readString(); 22109b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff for (int i = 0; i < config.wepKeys.length; i++) { 22119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.wepKeys[i] = in.readString(); 22129b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff } 22139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.wepTxKeyIndex = in.readInt(); 22149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.priority = in.readInt(); 22159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.hiddenSSID = in.readInt() != 0; 22165f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng config.requirePMF = in.readInt() != 0; 22175f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng config.updateIdentifier = in.readString(); 22185f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng 22199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.allowedKeyManagement = readBitSet(in); 22209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.allowedProtocols = readBitSet(in); 22219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.allowedAuthAlgorithms = readBitSet(in); 22229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.allowedPairwiseCiphers = readBitSet(in); 22239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.allowedGroupCiphers = readBitSet(in); 22244337476a6669ce52549ce4a60f5e4d07f8e3033fChung-yih Wang 22259b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff config.enterpriseConfig = in.readParcelable(null); 22266346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim config.mIpConfiguration = in.readParcelable(null); 22277c3606c103e95d3991267cca2592402a68779cafvandwalle config.dhcpServer = in.readString(); 22287c3606c103e95d3991267cca2592402a68779cafvandwalle config.defaultGwMacAddress = in.readString(); 2229e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle config.selfAdded = in.readInt() != 0; 22308f13548615f647a1208ace5369b504cb41149965vandwalle config.didSelfAdd = in.readInt() != 0; 2231ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle config.validatedInternetAccess = in.readInt() != 0; 2232580a1bdfbc6a8c4ca25e796af234711184c13871Peter Qiu config.isLegacyPasspointConfig = in.readInt() != 0; 22338faf2a2a15853368a14babf935c156664b5f0b6cJeff Davidson config.ephemeral = in.readInt() != 0; 2234f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin config.meteredHint = in.readInt() != 0; 223543d2a1700b6eb1d804924c6a1e5e0161a13a5348Jeff Sharkey config.meteredOverride = in.readInt(); 2236fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin config.useExternalScores = in.readInt() != 0; 22378f13548615f647a1208ace5369b504cb41149965vandwalle config.creatorUid = in.readInt(); 22388f13548615f647a1208ace5369b504cb41149965vandwalle config.lastConnectUid = in.readInt(); 22398f13548615f647a1208ace5369b504cb41149965vandwalle config.lastUpdateUid = in.readInt(); 22403e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber config.creatorName = in.readString(); 22413e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber config.lastUpdateName = in.readString(); 2242154b2cf6bbb99ee258b289846183172139a87dbavandwalle config.lastConnectionFailure = in.readLong(); 22438650c035609507340e3a66459cea16ef08cd03a6vandwalle config.lastRoamingFailure = in.readLong(); 22448650c035609507340e3a66459cea16ef08cd03a6vandwalle config.lastRoamingFailureReason = in.readInt(); 22458650c035609507340e3a66459cea16ef08cd03a6vandwalle config.roamingFailureBlackListTimeMilli = in.readLong(); 2246154b2cf6bbb99ee258b289846183172139a87dbavandwalle config.numScorerOverride = in.readInt(); 2247154b2cf6bbb99ee258b289846183172139a87dbavandwalle config.numScorerOverrideAndSwitchedNetwork = in.readInt(); 22484eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle config.numAssociation = in.readInt(); 22493e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber config.userApproved = in.readInt(); 2250ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle config.numNoInternetAccessReports = in.readInt(); 22511248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti config.noInternetAccessExpected = in.readInt() != 0; 22526fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski config.shared = in.readInt() != 0; 2253a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande config.mPasspointManagementObjectTree = in.readString(); 2254446afac1590733f9545118fed5ae8e769368b8b2Glen Kuhne config.recentFailure.setAssociationStatus(in.readInt()); 22559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return config; 22569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 22589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public WifiConfiguration[] newArray(int size) { 22599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new WifiConfiguration[size]; 22609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 2262aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy 2263aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy /** 2264aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy * Serializes the object for backup 2265aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy * @hide 2266aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy */ 2267aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy public byte[] getBytesForBackup() throws IOException { 2268aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy ByteArrayOutputStream baos = new ByteArrayOutputStream(); 2269aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy DataOutputStream out = new DataOutputStream(baos); 2270aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy 2271aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy out.writeInt(BACKUP_VERSION); 2272aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy BackupUtils.writeString(out, SSID); 2273aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy out.writeInt(apBand); 2274aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy out.writeInt(apChannel); 2275aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy BackupUtils.writeString(out, preSharedKey); 2276aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy out.writeInt(getAuthType()); 2277aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy return baos.toByteArray(); 2278aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy } 2279aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy 2280aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy /** 2281aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy * Deserializes a byte array into the WiFiConfiguration Object 2282aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy * @hide 2283aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy */ 2284aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy public static WifiConfiguration getWifiConfigFromBackup(DataInputStream in) throws IOException, 2285aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy BackupUtils.BadVersionException { 2286aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy WifiConfiguration config = new WifiConfiguration(); 2287aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy int version = in.readInt(); 2288aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy if (version < 1 || version > BACKUP_VERSION) { 2289aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy throw new BackupUtils.BadVersionException("Unknown Backup Serialization Version"); 2290aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy } 2291aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy 2292aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy if (version == 1) return null; // Version 1 is a bad dataset. 2293aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy 2294aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy config.SSID = BackupUtils.readString(in); 2295aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy config.apBand = in.readInt(); 2296aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy config.apChannel = in.readInt(); 2297aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy config.preSharedKey = BackupUtils.readString(in); 2298aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy config.allowedKeyManagement.set(in.readInt()); 2299aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy return config; 2300aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy } 2301b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne} 2302