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; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 266346155c5a48495944041e65ec279c88b0fa1391Jaewan Kimimport android.os.Parcelable; 276fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowskiimport android.os.UserHandle; 2826d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriffimport android.text.TextUtils; 29aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddyimport android.util.BackupUtils; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 31aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddyimport java.io.ByteArrayOutputStream; 32aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddyimport java.io.DataInputStream; 33aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddyimport java.io.DataOutputStream; 34aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddyimport java.io.IOException; 358d106780b6a638552749e54e169fc72537d4bcccxinheimport java.util.Arrays; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.BitSet; 378d106780b6a638552749e54e169fc72537d4bcccxinheimport java.util.HashMap; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A class representing a configured Wi-Fi network, including the 419b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff * security configuration. 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 43678979748585c5903125a404e448ad6c111dedadJaewan Kimpublic class WifiConfiguration implements Parcelable { 449b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff private static final String TAG = "WifiConfiguration"; 45aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy /** 46aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy * Current Version of the Backup Serializer. 47aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy */ 48aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy private static final int BACKUP_VERSION = 2; 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ssidVarName = "ssid"; 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String bssidVarName = "bssid"; 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String pskVarName = "psk"; 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String[] wepKeyVarNames = { "wep_key0", "wep_key1", "wep_key2", "wep_key3" }; 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String wepTxKeyIdxVarName = "wep_tx_keyidx"; 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String priorityVarName = "priority"; 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String hiddenSSIDVarName = "scan_ssid"; 635ee89800bee7c6c755778795a536e0e2f12b85ffIrfan Sheriff /** {@hide} */ 645f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng public static final String pmfVarName = "ieee80211w"; 655f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng /** {@hide} */ 665f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng public static final String updateIdentiferVarName = "update_identifier"; 675f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng /** {@hide} */ 685ee89800bee7c6c755778795a536e0e2f12b85ffIrfan Sheriff public static final int INVALID_NETWORK_ID = -1; 69a0be0fb2709124a567f89114b1d8e80f74452edcxinhe 70a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande /** {@hide} */ 71a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande private String mPasspointManagementObjectTree; 72a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Recognized key management schemes. 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class KeyMgmt { 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private KeyMgmt() { } 785069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WPA is not used; plaintext or static WEP could be used. */ 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int NONE = 0; 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WPA pre-shared key (requires {@code preSharedKey} to be specified). */ 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WPA_PSK = 1; 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WPA using EAP authentication. Generally used with an external authentication server. */ 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WPA_EAP = 2; 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** IEEE 802.1X using EAP authentication and (optionally) dynamically 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * generated WEP keys. */ 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int IEEE8021X = 3; 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 89ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff /** WPA2 pre-shared key for use with soft access point 90ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff * (requires {@code preSharedKey} to be specified). 91ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff * @hide 92ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff */ 93b625377b1a9b324254fcde9928eade4473712486Jeremy Klein @SystemApi 94ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff public static final int WPA2_PSK = 4; 95a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande /** 96a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande * Hotspot 2.0 r2 OSEN: 97a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande * @hide 98a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande */ 99a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande public static final int OSEN = 5; 100ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff 1013ed7caa0f99c3c178fcf4376bad04b53cc90eb5bPaul Stewart /** 1023ed7caa0f99c3c178fcf4376bad04b53cc90eb5bPaul Stewart * IEEE 802.11r Fast BSS Transition with PSK authentication. 1033ed7caa0f99c3c178fcf4376bad04b53cc90eb5bPaul Stewart * @hide 1043ed7caa0f99c3c178fcf4376bad04b53cc90eb5bPaul Stewart */ 1053ed7caa0f99c3c178fcf4376bad04b53cc90eb5bPaul Stewart public static final int FT_PSK = 6; 1063ed7caa0f99c3c178fcf4376bad04b53cc90eb5bPaul Stewart 1073ed7caa0f99c3c178fcf4376bad04b53cc90eb5bPaul Stewart /** 1083ed7caa0f99c3c178fcf4376bad04b53cc90eb5bPaul Stewart * IEEE 802.11r Fast BSS Transition with EAP authentication. 1093ed7caa0f99c3c178fcf4376bad04b53cc90eb5bPaul Stewart * @hide 1103ed7caa0f99c3c178fcf4376bad04b53cc90eb5bPaul Stewart */ 1113ed7caa0f99c3c178fcf4376bad04b53cc90eb5bPaul Stewart public static final int FT_EAP = 7; 1123ed7caa0f99c3c178fcf4376bad04b53cc90eb5bPaul Stewart 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String varName = "key_mgmt"; 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 115ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff public static final String[] strings = { "NONE", "WPA_PSK", "WPA_EAP", "IEEE8021X", 1163ed7caa0f99c3c178fcf4376bad04b53cc90eb5bPaul Stewart "WPA2_PSK", "OSEN", "FT_PSK", "FT_EAP" }; 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1185069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Recognized security protocols. 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class Protocol { 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Protocol() { } 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WPA/IEEE 802.11i/D3.0 */ 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WPA = 0; 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WPA2/IEEE 802.11i */ 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RSN = 1; 129a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande /** HS2.0 r2 OSEN 130a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande * @hide 131a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande */ 132a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande public static final int OSEN = 2; 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String varName = "proto"; 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 136a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande public static final String[] strings = { "WPA", "RSN", "OSEN" }; 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Recognized IEEE 802.11 authentication algorithms. 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class AuthAlgorithm { 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private AuthAlgorithm() { } 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Open System authentication (required for WPA/WPA2) */ 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int OPEN = 0; 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Shared Key authentication (requires static WEP keys) */ 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SHARED = 1; 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** LEAP/Network EAP (only used with LEAP) */ 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int LEAP = 2; 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String varName = "auth_alg"; 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String[] strings = { "OPEN", "SHARED", "LEAP" }; 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Recognized pairwise ciphers for WPA. 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class PairwiseCipher { 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private PairwiseCipher() { } 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Use only Group keys (deprecated) */ 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int NONE = 0; 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Temporal Key Integrity Protocol [IEEE 802.11i/D7.0] */ 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TKIP = 1; 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0] */ 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int CCMP = 2; 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String varName = "pairwise"; 1715069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String[] strings = { "NONE", "TKIP", "CCMP" }; 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Recognized group ciphers. 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <pre> 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * CCMP = AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0] 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * TKIP = Temporal Key Integrity Protocol [IEEE 802.11i/D7.0] 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WEP104 = WEP (Wired Equivalent Privacy) with 104-bit key 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WEP40 = WEP (Wired Equivalent Privacy) with 40-bit key (original 802.11) 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </pre> 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class GroupCipher { 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private GroupCipher() { } 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WEP40 = WEP (Wired Equivalent Privacy) with 40-bit key (original 802.11) */ 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WEP40 = 0; 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WEP104 = WEP (Wired Equivalent Privacy) with 104-bit key */ 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WEP104 = 1; 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Temporal Key Integrity Protocol [IEEE 802.11i/D7.0] */ 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TKIP = 2; 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0] */ 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int CCMP = 3; 195a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande /** Hotspot 2.0 r2 OSEN 196a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande * @hide 197a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande */ 198a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande public static final int GTK_NOT_USED = 4; 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String varName = "group"; 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 202a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande public static final String[] strings = 203a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande { "WEP40", "WEP104", "TKIP", "CCMP", "GTK_NOT_USED" }; 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Possible status of a network configuration. */ 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class Status { 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Status() { } 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** this is the network we are currently connected to */ 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int CURRENT = 0; 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** supplicant will not attempt to use this network */ 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int DISABLED = 1; 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** supplicant will consider this network available for association */ 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ENABLED = 2; 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String[] strings = { "current", "disabled", "enabled" }; 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2208dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy /** @hide */ 2211ac50cb32c08388540f53833c04a02f13fed0824Lorenzo Colitti public static final int UNKNOWN_UID = -1; 2221ac50cb32c08388540f53833c04a02f13fed0824Lorenzo Colitti 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The ID number that the supplicant uses to identify this 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * network configuration entry. This must be passed as an argument 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to most calls into the supplicant. 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int networkId; 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The current status of this network configuration entry. 2328d106780b6a638552749e54e169fc72537d4bcccxinhe * Fixme We need remove this field to use only Quality network selection status only 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see Status 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int status; 2368dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy 2378dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy /** 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The network's SSID. Can either be an ASCII string, 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * which must be enclosed in double quotation marks 2404e8620f868e2490782ebb960404140ea9482c91dBen Dodson * (e.g., {@code "MyNetwork"}, or a string of 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * hex digits,which are not enclosed in quotes 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (e.g., {@code 01a243f405}). 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String SSID; 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * When set, this network configuration entry should only be used when 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * associating with the AP having the specified BSSID. The value is 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a string in the format of an Ethernet MAC address, e.g., 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>XX:XX:XX:XX:XX:XX</code> where each <code>X</code> is a hex digit. 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String BSSID; 252a0be0fb2709124a567f89114b1d8e80f74452edcxinhe 253a0be0fb2709124a567f89114b1d8e80f74452edcxinhe /** 254d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu * 2GHz band. 255d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu * @hide 256d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu */ 257d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu public static final int AP_BAND_2GHZ = 0; 258d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu 259d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu /** 260d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu * 5GHz band. 261d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu * @hide 262d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu */ 263d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu public static final int AP_BAND_5GHZ = 1; 264d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu 265d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu /** 266a0be0fb2709124a567f89114b1d8e80f74452edcxinhe * The band which AP resides on 267a0be0fb2709124a567f89114b1d8e80f74452edcxinhe * 0-2G 1-5G 268a0be0fb2709124a567f89114b1d8e80f74452edcxinhe * By default, 2G is chosen 2697e5e791d22e76eb576fd5cf6dd5437b8050b0438xinhe * @hide 270a0be0fb2709124a567f89114b1d8e80f74452edcxinhe */ 271d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu public int apBand = AP_BAND_2GHZ; 272a0be0fb2709124a567f89114b1d8e80f74452edcxinhe 273a0be0fb2709124a567f89114b1d8e80f74452edcxinhe /** 274a0be0fb2709124a567f89114b1d8e80f74452edcxinhe * The channel which AP resides on,currently, US only 275a0be0fb2709124a567f89114b1d8e80f74452edcxinhe * 2G 1-11 276a0be0fb2709124a567f89114b1d8e80f74452edcxinhe * 5G 36,40,44,48,149,153,157,161,165 277a0be0fb2709124a567f89114b1d8e80f74452edcxinhe * 0 - find a random available channel according to the apBand 2787e5e791d22e76eb576fd5cf6dd5437b8050b0438xinhe * @hide 279a0be0fb2709124a567f89114b1d8e80f74452edcxinhe */ 280a0be0fb2709124a567f89114b1d8e80f74452edcxinhe public int apChannel = 0; 281a0be0fb2709124a567f89114b1d8e80f74452edcxinhe 2828a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng /** 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Pre-shared key for use with WPA-PSK. 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p/> 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * When the value of this key is read, the actual key is 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not returned, just a "*" if the key has a value, or the null 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * string otherwise. 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String preSharedKey; 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Up to four WEP keys. Either an ASCII string enclosed in double 2924e8620f868e2490782ebb960404140ea9482c91dBen Dodson * quotation marks (e.g., {@code "abcdef"} or a string 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of hex digits (e.g., {@code 0102030405}). 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p/> 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * When the value of one of these keys is read, the actual key is 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not returned, just a "*" if the key has a value, or the null 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * string otherwise. 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String[] wepKeys; 3005069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Default WEP key index, ranging from 0 to 3. */ 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int wepTxKeyIndex; 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Priority determines the preference given to a network by {@code wpa_supplicant} 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * when choosing an access point with which to associate. 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int priority; 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is a network that does not broadcast its SSID, so an 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * SSID-specific probe request must be used for scans. 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean hiddenSSID; 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3175f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng * This is a network that requries Protected Management Frames (PMF). 3185f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng * @hide 3195f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng */ 3205f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng public boolean requirePMF; 3215f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng 3225f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng /** 3235f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng * Update identifier, for Passpoint network. 3245f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng * @hide 3255f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng */ 3265f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng public String updateIdentifier; 3275f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng 3285f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng /** 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The set of key management protocols supported by this configuration. 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See {@link KeyMgmt} for descriptions of the values. 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defaults to WPA-PSK WPA-EAP. 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BitSet allowedKeyManagement; 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The set of security protocols supported by this configuration. 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See {@link Protocol} for descriptions of the values. 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defaults to WPA RSN. 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BitSet allowedProtocols; 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The set of authentication protocols supported by this configuration. 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See {@link AuthAlgorithm} for descriptions of the values. 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defaults to automatic selection. 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BitSet allowedAuthAlgorithms; 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The set of pairwise ciphers for WPA supported by this configuration. 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See {@link PairwiseCipher} for descriptions of the values. 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defaults to CCMP TKIP. 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BitSet allowedPairwiseCiphers; 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The set of group ciphers supported by this configuration. 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See {@link GroupCipher} for descriptions of the values. 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defaults to CCMP TKIP WEP104 WEP40. 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BitSet allowedGroupCiphers; 3589b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff /** 35926d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * The enterprise configuration details specifying the EAP method, 36026d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * certificates and other settings associated with the EAP. 3619b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff */ 3629b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff public WifiEnterpriseConfig enterpriseConfig; 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 364678979748585c5903125a404e448ad6c111dedadJaewan Kim /** 365b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande * Fully qualified domain name of a passpoint configuration 366b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande */ 367b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande public String FQDN; 368b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande 369b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande /** 370a0d929e505432a8c84f3899696c910db16bd73bfVinit Deshpande * Name of passpoint credential provider 371b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande */ 372b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande public String providerFriendlyName; 373b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande 374b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande /** 375a0d929e505432a8c84f3899696c910db16bd73bfVinit Deshpande * Roaming Consortium Id list for passpoint credential; identifies a set of networks where 376a0d929e505432a8c84f3899696c910db16bd73bfVinit Deshpande * passpoint credential will be considered valid 377b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande */ 3787226c8f95b5971af2710c8d2f8a8b6f2210e2420Vinit Deshpande public long[] roamingConsortiumIds; 379b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande 380b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande /** 381678979748585c5903125a404e448ad6c111dedadJaewan Kim * @hide 3826fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski * This network configuration is visible to and usable by other users on the 3836fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski * same device. 3846fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski */ 3856fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski public boolean shared; 3866fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski 3876fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski /** 3886fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski * @hide 389678979748585c5903125a404e448ad6c111dedadJaewan Kim */ 3906346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim private IpConfiguration mIpConfiguration; 391678979748585c5903125a404e448ad6c111dedadJaewan Kim 392678979748585c5903125a404e448ad6c111dedadJaewan Kim /** 393678979748585c5903125a404e448ad6c111dedadJaewan Kim * @hide 3947c3606c103e95d3991267cca2592402a68779cafvandwalle * dhcp server MAC address if known 3957c3606c103e95d3991267cca2592402a68779cafvandwalle */ 3967c3606c103e95d3991267cca2592402a68779cafvandwalle public String dhcpServer; 3977c3606c103e95d3991267cca2592402a68779cafvandwalle 3987c3606c103e95d3991267cca2592402a68779cafvandwalle /** 3997c3606c103e95d3991267cca2592402a68779cafvandwalle * @hide 4007c3606c103e95d3991267cca2592402a68779cafvandwalle * default Gateway MAC address if known 4017c3606c103e95d3991267cca2592402a68779cafvandwalle */ 4027c3606c103e95d3991267cca2592402a68779cafvandwalle public String defaultGwMacAddress; 4037c3606c103e95d3991267cca2592402a68779cafvandwalle 4047c3606c103e95d3991267cca2592402a68779cafvandwalle /** 4057c3606c103e95d3991267cca2592402a68779cafvandwalle * @hide 4063a74e2ef1681eaae973fc989b3533a7f9c82e7b1vandwalle * last failure 4073a74e2ef1681eaae973fc989b3533a7f9c82e7b1vandwalle */ 4083a74e2ef1681eaae973fc989b3533a7f9c82e7b1vandwalle public String lastFailure; 4093a74e2ef1681eaae973fc989b3533a7f9c82e7b1vandwalle 4103a74e2ef1681eaae973fc989b3533a7f9c82e7b1vandwalle /** 4113a74e2ef1681eaae973fc989b3533a7f9c82e7b1vandwalle * @hide 412ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle * last time we connected, this configuration had validated internet access 413448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle */ 414ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle public boolean validatedInternetAccess; 415448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle 416448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle /** 417448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * @hide 418b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne * The number of beacon intervals between Delivery Traffic Indication Maps (DTIM) 419b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne * This value is populated from scan results that contain Beacon Frames, which are infrequent. 420b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne * The value is not guaranteed to be set or current (Although it SHOULDNT change once set) 421b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne * Valid values are from 1 - 255. Initialized here as 0, use this to check if set. 422b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne */ 423b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne public int dtimInterval = 0; 424b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne 425b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne /** 426b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne * @hide 4278f13548615f647a1208ace5369b504cb41149965vandwalle * Uid of app creating the configuration 4288f13548615f647a1208ace5369b504cb41149965vandwalle */ 429adae06be9bfd8cb756e1793b52e682eb87258968Chelsea Derrick @SystemApi 4308f13548615f647a1208ace5369b504cb41149965vandwalle public int creatorUid; 4318f13548615f647a1208ace5369b504cb41149965vandwalle 4328f13548615f647a1208ace5369b504cb41149965vandwalle /** 4338f13548615f647a1208ace5369b504cb41149965vandwalle * @hide 4348f13548615f647a1208ace5369b504cb41149965vandwalle * Uid of last app issuing a connection related command 4358f13548615f647a1208ace5369b504cb41149965vandwalle */ 4368f13548615f647a1208ace5369b504cb41149965vandwalle public int lastConnectUid; 4378f13548615f647a1208ace5369b504cb41149965vandwalle 4388f13548615f647a1208ace5369b504cb41149965vandwalle /** 4398f13548615f647a1208ace5369b504cb41149965vandwalle * @hide 4408f13548615f647a1208ace5369b504cb41149965vandwalle * Uid of last app modifying the configuration 4418f13548615f647a1208ace5369b504cb41149965vandwalle */ 442eb8f329a5e8d4df80447ab9676761f9743d20cd4Chelsea Derrick @SystemApi 4438f13548615f647a1208ace5369b504cb41149965vandwalle public int lastUpdateUid; 4448f13548615f647a1208ace5369b504cb41149965vandwalle 4458f13548615f647a1208ace5369b504cb41149965vandwalle /** 4468f13548615f647a1208ace5369b504cb41149965vandwalle * @hide 4473e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * Universal name for app creating the configuration 4483e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * see {#link {@link PackageManager#getNameForUid(int)} 4493e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber */ 4503e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber @SystemApi 4513e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber public String creatorName; 4523e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber 4533e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber /** 4543e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * @hide 4553e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * Universal name for app updating the configuration 4563e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * see {#link {@link PackageManager#getNameForUid(int)} 4573e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber */ 4583e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber @SystemApi 4593e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber public String lastUpdateName; 4603e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber 4613e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber /** 4623e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * @hide 4633e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * Status of user approval for connection 4643e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber */ 4653e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber public int userApproved = USER_UNSPECIFIED; 4663e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber 4672ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle /** The Below RSSI thresholds are used to configure AutoJoin 4682ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle * - GOOD/LOW/BAD thresholds are used so as to calculate link score 4692e93c38fa6fad224e56a45ff4244bdd538aec846vandwalle * - UNWANTED_SOFT are used by the blacklisting logic so as to handle 4702e93c38fa6fad224e56a45ff4244bdd538aec846vandwalle * the unwanted network message coming from CS 4712e93c38fa6fad224e56a45ff4244bdd538aec846vandwalle * - UNBLACKLIST thresholds are used so as to tweak the speed at which 4722e93c38fa6fad224e56a45ff4244bdd538aec846vandwalle * the network is unblacklisted (i.e. if 4732ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle * it is seen with good RSSI, it is blacklisted faster) 4742e93c38fa6fad224e56a45ff4244bdd538aec846vandwalle * - INITIAL_AUTOJOIN_ATTEMPT, used to determine how close from 4752e93c38fa6fad224e56a45ff4244bdd538aec846vandwalle * the network we need to be before autojoin kicks in 4762ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle */ 4777c3606c103e95d3991267cca2592402a68779cafvandwalle /** @hide **/ 4787c3606c103e95d3991267cca2592402a68779cafvandwalle public static int INVALID_RSSI = -127; 4797c3606c103e95d3991267cca2592402a68779cafvandwalle 4807c3606c103e95d3991267cca2592402a68779cafvandwalle /** 4817c3606c103e95d3991267cca2592402a68779cafvandwalle * @hide 482e45b50293eb9f13596b3a797ecc6815a443d0cdfpkanwar * Set to true if this is a Carrier Network, else set to false. 483e45b50293eb9f13596b3a797ecc6815a443d0cdfpkanwar */ 484e45b50293eb9f13596b3a797ecc6815a443d0cdfpkanwar public boolean isCarrierNetwork = false; 485e45b50293eb9f13596b3a797ecc6815a443d0cdfpkanwar 486e45b50293eb9f13596b3a797ecc6815a443d0cdfpkanwar /** 487e45b50293eb9f13596b3a797ecc6815a443d0cdfpkanwar * @hide 4887c3606c103e95d3991267cca2592402a68779cafvandwalle * A summary of the RSSI and Band status for that configuration 4897c3606c103e95d3991267cca2592402a68779cafvandwalle * This is used as a temporary value by the auto-join controller 4907c3606c103e95d3991267cca2592402a68779cafvandwalle */ 4916f6c781cca66cabc1f06be368a6dfedceb88ed0eVinit Deshpande public static final class Visibility { 4927c3606c103e95d3991267cca2592402a68779cafvandwalle public int rssi5; // strongest 5GHz RSSI 4937c3606c103e95d3991267cca2592402a68779cafvandwalle public int rssi24; // strongest 2.4GHz RSSI 4947c3606c103e95d3991267cca2592402a68779cafvandwalle public int num5; // number of BSSIDs on 5GHz 4957c3606c103e95d3991267cca2592402a68779cafvandwalle public int num24; // number of BSSIDs on 2.4GHz 496e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle public long age5; // timestamp of the strongest 5GHz BSSID (last time it was seen) 497e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle public long age24; // timestamp of the strongest 2.4GHz BSSID (last time it was seen) 498e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle public String BSSID24; 499e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle public String BSSID5; 50072e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle public int score; // Debug only, indicate last score used for autojoin/cell-handover 50172e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle public int currentNetworkBoost; // Debug only, indicate boost applied to RSSI if current 50272e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle public int bandPreferenceBoost; // Debug only, indicate boost applied to RSSI if current 50372e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle public int lastChoiceBoost; // Debug only, indicate last choice applied to this configuration 50472e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle public String lastChoiceConfig; // Debug only, indicate last choice applied to this configuration 5055fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle 5065fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle public Visibility() { 5077c3606c103e95d3991267cca2592402a68779cafvandwalle rssi5 = INVALID_RSSI; 5087c3606c103e95d3991267cca2592402a68779cafvandwalle rssi24 = INVALID_RSSI; 5097c3606c103e95d3991267cca2592402a68779cafvandwalle } 5105fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle 5115fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle public Visibility(Visibility source) { 5127c3606c103e95d3991267cca2592402a68779cafvandwalle rssi5 = source.rssi5; 5137c3606c103e95d3991267cca2592402a68779cafvandwalle rssi24 = source.rssi24; 5147c3606c103e95d3991267cca2592402a68779cafvandwalle age24 = source.age24; 5157c3606c103e95d3991267cca2592402a68779cafvandwalle age5 = source.age5; 5167c3606c103e95d3991267cca2592402a68779cafvandwalle num24 = source.num24; 5177c3606c103e95d3991267cca2592402a68779cafvandwalle num5 = source.num5; 518e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle BSSID5 = source.BSSID5; 519e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle BSSID24 = source.BSSID24; 5207c3606c103e95d3991267cca2592402a68779cafvandwalle } 5215fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle 5225fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle @Override 5235fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle public String toString() { 5245fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle StringBuilder sbuf = new StringBuilder(); 5255fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append("["); 5265fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle if (rssi24 > INVALID_RSSI) { 5275fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append(Integer.toString(rssi24)); 5285fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append(","); 5295fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append(Integer.toString(num24)); 530e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle if (BSSID24 != null) sbuf.append(",").append(BSSID24); 5315fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle } 53272e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle sbuf.append("; "); 5335fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle if (rssi5 > INVALID_RSSI) { 5345fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append(Integer.toString(rssi5)); 5355fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append(","); 5365fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append(Integer.toString(num5)); 537e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle if (BSSID5 != null) sbuf.append(",").append(BSSID5); 5385fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle } 53972e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle if (score != 0) { 54072e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle sbuf.append("; ").append(score); 54172e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle sbuf.append(", ").append(currentNetworkBoost); 54272e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle sbuf.append(", ").append(bandPreferenceBoost); 54372e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle if (lastChoiceConfig != null) { 54472e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle sbuf.append(", ").append(lastChoiceBoost); 54572e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle sbuf.append(", ").append(lastChoiceConfig); 54672e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle } 54772e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle } 5485fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append("]"); 5495fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle return sbuf.toString(); 5505fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle } 5517c3606c103e95d3991267cca2592402a68779cafvandwalle } 5527c3606c103e95d3991267cca2592402a68779cafvandwalle 5537c3606c103e95d3991267cca2592402a68779cafvandwalle /** @hide 5547c3606c103e95d3991267cca2592402a68779cafvandwalle * Cache the visibility status of this configuration. 5557c3606c103e95d3991267cca2592402a68779cafvandwalle * Visibility can change at any time depending on scan results availability. 5567c3606c103e95d3991267cca2592402a68779cafvandwalle * Owner of the WifiConfiguration is responsible to set this field based on 5577c3606c103e95d3991267cca2592402a68779cafvandwalle * recent scan results. 5587c3606c103e95d3991267cca2592402a68779cafvandwalle ***/ 5597c3606c103e95d3991267cca2592402a68779cafvandwalle public Visibility visibility; 5607c3606c103e95d3991267cca2592402a68779cafvandwalle 5617c3606c103e95d3991267cca2592402a68779cafvandwalle /** @hide 5627c3606c103e95d3991267cca2592402a68779cafvandwalle * calculate and set Visibility for that configuration. 5637c3606c103e95d3991267cca2592402a68779cafvandwalle * 5647c3606c103e95d3991267cca2592402a68779cafvandwalle * age in milliseconds: we will consider only ScanResults that are more recent, 5657c3606c103e95d3991267cca2592402a68779cafvandwalle * i.e. younger. 5667c3606c103e95d3991267cca2592402a68779cafvandwalle ***/ 5676f6c781cca66cabc1f06be368a6dfedceb88ed0eVinit Deshpande public void setVisibility(Visibility status) { 5687c3606c103e95d3991267cca2592402a68779cafvandwalle visibility = status; 5697c3606c103e95d3991267cca2592402a68779cafvandwalle } 5707c3606c103e95d3991267cca2592402a68779cafvandwalle 5713e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber // States for the userApproved field 5723e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber /** 5733e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * @hide 5743e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * User hasn't specified if connection is okay 5753e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber */ 5763e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber public static final int USER_UNSPECIFIED = 0; 5773e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber /** 5783e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * @hide 5793e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * User has approved this for connection 5803e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber */ 5813e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber public static final int USER_APPROVED = 1; 5823e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber /** 5833e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * @hide 5843e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * User has banned this from connection 5853e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber */ 5863e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber public static final int USER_BANNED = 2; 5873e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber /** 5883e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * @hide 5893e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * Waiting for user input 5903e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber */ 5913e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber public static final int USER_PENDING = 3; 5923e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber 5937c3606c103e95d3991267cca2592402a68779cafvandwalle /** 5947c3606c103e95d3991267cca2592402a68779cafvandwalle * @hide 595ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle * Number of reports indicating no Internet Access 596ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle */ 597ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle public int numNoInternetAccessReports; 598ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle 599ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle /** 600ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle * @hide 601ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle * For debug: date at which the config was last updated 602ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle */ 603ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle public String updateTime; 604ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle 605ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle /** 606ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle * @hide 607ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle * For debug: date at which the config was last updated 608ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle */ 609ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle public String creationTime; 610ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle 611ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle /** 612ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle * @hide 613ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle * The WiFi configuration is considered to have no internet access for purpose of autojoining 614ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle * if there has been a report of it having no internet access, and, it never have had 615ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle * internet access in the past. 616ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle */ 617ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle public boolean hasNoInternetAccess() { 618ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle return numNoInternetAccessReports > 0 && !validatedInternetAccess; 619ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle } 620ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle 621ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle /** 6221248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti * The WiFi configuration is expected not to have Internet access (e.g., a wireless printer, a 6231248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti * Chromecast hotspot, etc.). This will be set if the user explicitly confirms a connection to 6241248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti * this configuration and selects "don't ask again". 6251248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti * @hide 6261248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti */ 6271248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti public boolean noInternetAccessExpected; 6281248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti 6291248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti /** 630ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle * @hide 631154b2cf6bbb99ee258b289846183172139a87dbavandwalle * Last time the system was connected to this configuration. 632111fa0274d1d6620f9634783585387f3b773949evandwalle */ 633111fa0274d1d6620f9634783585387f3b773949evandwalle public long lastConnected; 634111fa0274d1d6620f9634783585387f3b773949evandwalle 635111fa0274d1d6620f9634783585387f3b773949evandwalle /** 636111fa0274d1d6620f9634783585387f3b773949evandwalle * @hide 637154b2cf6bbb99ee258b289846183172139a87dbavandwalle * Last time the system tried to connect and failed. 638154b2cf6bbb99ee258b289846183172139a87dbavandwalle */ 639154b2cf6bbb99ee258b289846183172139a87dbavandwalle public long lastConnectionFailure; 640154b2cf6bbb99ee258b289846183172139a87dbavandwalle 641154b2cf6bbb99ee258b289846183172139a87dbavandwalle /** 642154b2cf6bbb99ee258b289846183172139a87dbavandwalle * @hide 6438650c035609507340e3a66459cea16ef08cd03a6vandwalle * Last time the system tried to roam and failed because of authentication failure or DHCP 6448650c035609507340e3a66459cea16ef08cd03a6vandwalle * RENEW failure. 6458650c035609507340e3a66459cea16ef08cd03a6vandwalle */ 6468650c035609507340e3a66459cea16ef08cd03a6vandwalle public long lastRoamingFailure; 6478650c035609507340e3a66459cea16ef08cd03a6vandwalle 6488650c035609507340e3a66459cea16ef08cd03a6vandwalle /** @hide */ 6498650c035609507340e3a66459cea16ef08cd03a6vandwalle public static int ROAMING_FAILURE_IP_CONFIG = 1; 6508650c035609507340e3a66459cea16ef08cd03a6vandwalle /** @hide */ 6518650c035609507340e3a66459cea16ef08cd03a6vandwalle public static int ROAMING_FAILURE_AUTH_FAILURE = 2; 6528650c035609507340e3a66459cea16ef08cd03a6vandwalle 6538650c035609507340e3a66459cea16ef08cd03a6vandwalle /** 6548650c035609507340e3a66459cea16ef08cd03a6vandwalle * @hide 6558650c035609507340e3a66459cea16ef08cd03a6vandwalle * Initial amount of time this Wifi configuration gets blacklisted for network switching 6568650c035609507340e3a66459cea16ef08cd03a6vandwalle * because of roaming failure 6578650c035609507340e3a66459cea16ef08cd03a6vandwalle */ 6588650c035609507340e3a66459cea16ef08cd03a6vandwalle public long roamingFailureBlackListTimeMilli = 1000; 6598650c035609507340e3a66459cea16ef08cd03a6vandwalle 6608650c035609507340e3a66459cea16ef08cd03a6vandwalle /** 6618650c035609507340e3a66459cea16ef08cd03a6vandwalle * @hide 6628650c035609507340e3a66459cea16ef08cd03a6vandwalle * Last roaming failure reason code 6638650c035609507340e3a66459cea16ef08cd03a6vandwalle */ 6648650c035609507340e3a66459cea16ef08cd03a6vandwalle public int lastRoamingFailureReason; 6658650c035609507340e3a66459cea16ef08cd03a6vandwalle 6668650c035609507340e3a66459cea16ef08cd03a6vandwalle /** 6678650c035609507340e3a66459cea16ef08cd03a6vandwalle * @hide 668154b2cf6bbb99ee258b289846183172139a87dbavandwalle * Last time the system was disconnected to this configuration. 669111fa0274d1d6620f9634783585387f3b773949evandwalle */ 670111fa0274d1d6620f9634783585387f3b773949evandwalle public long lastDisconnected; 6712ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle 6727c3606c103e95d3991267cca2592402a68779cafvandwalle /** 673e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle * Set if the configuration was self added by the framework 6748f13548615f647a1208ace5369b504cb41149965vandwalle * This boolean is cleared if we get a connect/save/ update or 6758f13548615f647a1208ace5369b504cb41149965vandwalle * any wifiManager command that indicate the user interacted with the configuration 6768f13548615f647a1208ace5369b504cb41149965vandwalle * since we will now consider that the configuration belong to him. 677e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle * @hide 678e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle */ 679e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle public boolean selfAdded; 680e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle 681e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle /** 6828f13548615f647a1208ace5369b504cb41149965vandwalle * Set if the configuration was self added by the framework 6838f13548615f647a1208ace5369b504cb41149965vandwalle * This boolean is set once and never cleared. It is used 6848f13548615f647a1208ace5369b504cb41149965vandwalle * so as we never loose track of who created the 6858f13548615f647a1208ace5369b504cb41149965vandwalle * configuration in the first place. 6868f13548615f647a1208ace5369b504cb41149965vandwalle * @hide 6878f13548615f647a1208ace5369b504cb41149965vandwalle */ 6888f13548615f647a1208ace5369b504cb41149965vandwalle public boolean didSelfAdd; 6898f13548615f647a1208ace5369b504cb41149965vandwalle 6908f13548615f647a1208ace5369b504cb41149965vandwalle /** 691154b2cf6bbb99ee258b289846183172139a87dbavandwalle * Peer WifiConfiguration this WifiConfiguration was added for 6922d0f71eea20470985abde98d759910a1ac40b257vandwalle * @hide 6932d0f71eea20470985abde98d759910a1ac40b257vandwalle */ 6942d0f71eea20470985abde98d759910a1ac40b257vandwalle public String peerWifiConfiguration; 6952d0f71eea20470985abde98d759910a1ac40b257vandwalle 6962d0f71eea20470985abde98d759910a1ac40b257vandwalle /** 6977c3606c103e95d3991267cca2592402a68779cafvandwalle * @hide 6987c3606c103e95d3991267cca2592402a68779cafvandwalle * Indicate that a WifiConfiguration is temporary and should not be saved 6997c3606c103e95d3991267cca2592402a68779cafvandwalle * nor considered by AutoJoin. 7007c3606c103e95d3991267cca2592402a68779cafvandwalle */ 7017c3606c103e95d3991267cca2592402a68779cafvandwalle public boolean ephemeral; 7027c3606c103e95d3991267cca2592402a68779cafvandwalle 7037c3606c103e95d3991267cca2592402a68779cafvandwalle /** 7047c3606c103e95d3991267cca2592402a68779cafvandwalle * @hide 705f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin * A hint about whether or not the network represented by this WifiConfiguration 706f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin * is metered. 707f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin */ 708f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin public boolean meteredHint; 709f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin 710f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin /** 711f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin * @hide 712fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin * Setting this value will force scan results associated with this configuration to 713fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin * be included in the bucket of networks that are externally scored. 714fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin * If not set, associated scan results will be treated as legacy saved networks and 715fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin * will take precedence over networks in the scored category. 716fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin */ 717fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin @SystemApi 718fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin public boolean useExternalScores; 719fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin 720fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin /** 721fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin * @hide 722154b2cf6bbb99ee258b289846183172139a87dbavandwalle * Number of time the scorer overrode a the priority based choice, when comparing two 723154b2cf6bbb99ee258b289846183172139a87dbavandwalle * WifiConfigurations, note that since comparing WifiConfiguration happens very often 724154b2cf6bbb99ee258b289846183172139a87dbavandwalle * potentially at every scan, this number might become very large, even on an idle 725154b2cf6bbb99ee258b289846183172139a87dbavandwalle * system. 726154b2cf6bbb99ee258b289846183172139a87dbavandwalle */ 727154b2cf6bbb99ee258b289846183172139a87dbavandwalle @SystemApi 728154b2cf6bbb99ee258b289846183172139a87dbavandwalle public int numScorerOverride; 729154b2cf6bbb99ee258b289846183172139a87dbavandwalle 730154b2cf6bbb99ee258b289846183172139a87dbavandwalle /** 731154b2cf6bbb99ee258b289846183172139a87dbavandwalle * @hide 732154b2cf6bbb99ee258b289846183172139a87dbavandwalle * Number of time the scorer overrode a the priority based choice, and the comparison 733154b2cf6bbb99ee258b289846183172139a87dbavandwalle * triggered a network switch 734154b2cf6bbb99ee258b289846183172139a87dbavandwalle */ 735154b2cf6bbb99ee258b289846183172139a87dbavandwalle @SystemApi 736154b2cf6bbb99ee258b289846183172139a87dbavandwalle public int numScorerOverrideAndSwitchedNetwork; 737154b2cf6bbb99ee258b289846183172139a87dbavandwalle 738154b2cf6bbb99ee258b289846183172139a87dbavandwalle /** 739154b2cf6bbb99ee258b289846183172139a87dbavandwalle * @hide 7404eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle * Number of time we associated to this configuration. 7414eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle */ 7424eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle @SystemApi 7434eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle public int numAssociation; 7444eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle 745448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle /** 746448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * @hide 747448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * Number of time user disabled WiFi while associated to this configuration with Low RSSI. 748448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle */ 749448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle public int numUserTriggeredWifiDisableLowRSSI; 750448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle 751448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle /** 752448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * @hide 753448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * Number of time user disabled WiFi while associated to this configuration with Bad RSSI. 754448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle */ 755448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle public int numUserTriggeredWifiDisableBadRSSI; 756448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle 757448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle /** 758448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * @hide 759448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * Number of time user disabled WiFi while associated to this configuration 760448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * and RSSI was not HIGH. 761448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle */ 762448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle public int numUserTriggeredWifiDisableNotHighRSSI; 763448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle 764448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle /** 765448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * @hide 766448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * Number of ticks associated to this configuration with Low RSSI. 767448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle */ 768448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle public int numTicksAtLowRSSI; 769448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle 770448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle /** 771448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * @hide 772448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * Number of ticks associated to this configuration with Bad RSSI. 773448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle */ 774448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle public int numTicksAtBadRSSI; 775448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle 776448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle /** 777448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * @hide 778448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * Number of ticks associated to this configuration 779448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * and RSSI was not HIGH. 780448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle */ 781448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle public int numTicksAtNotHighRSSI; 782448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle /** 783448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * @hide 784448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * Number of time user (WifiManager) triggered association to this configuration. 785448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * TODO: count this only for Wifi Settings uuid, so as to not count 3rd party apps 786448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle */ 787448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle public int numUserTriggeredJoinAttempts; 7884eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle 7898d106780b6a638552749e54e169fc72537d4bcccxinhe /** @hide 7908d106780b6a638552749e54e169fc72537d4bcccxinhe * Boost given to RSSI on a home network for the purpose of calculating the score 7918d106780b6a638552749e54e169fc72537d4bcccxinhe * This adds stickiness to home networks, as defined by: 7928d106780b6a638552749e54e169fc72537d4bcccxinhe * - less than 4 known BSSIDs 7938d106780b6a638552749e54e169fc72537d4bcccxinhe * - PSK only 7948d106780b6a638552749e54e169fc72537d4bcccxinhe * - TODO: add a test to verify that all BSSIDs are behind same gateway 7958d106780b6a638552749e54e169fc72537d4bcccxinhe ***/ 7968d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int HOME_NETWORK_RSSI_BOOST = 5; 7978d106780b6a638552749e54e169fc72537d4bcccxinhe 7988d106780b6a638552749e54e169fc72537d4bcccxinhe /** 7998d106780b6a638552749e54e169fc72537d4bcccxinhe * @hide 8008d106780b6a638552749e54e169fc72537d4bcccxinhe * This class is used to contain all the information and API used for quality network selection 8018d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8028d106780b6a638552749e54e169fc72537d4bcccxinhe public static class NetworkSelectionStatus { 8038d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8048d106780b6a638552749e54e169fc72537d4bcccxinhe * Quality Network Selection Status enable, temporary disabled, permanently disabled 8058d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8068d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8078d106780b6a638552749e54e169fc72537d4bcccxinhe * This network is allowed to join Quality Network Selection 8088d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8098d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int NETWORK_SELECTION_ENABLED = 0; 8108d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8118d106780b6a638552749e54e169fc72537d4bcccxinhe * network was temporary disabled. Can be re-enabled after a time period expire 8128d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8138d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int NETWORK_SELECTION_TEMPORARY_DISABLED = 1; 8148d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8158d106780b6a638552749e54e169fc72537d4bcccxinhe * network was permanently disabled. 8168d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8178d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int NETWORK_SELECTION_PERMANENTLY_DISABLED = 2; 8188d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8198d106780b6a638552749e54e169fc72537d4bcccxinhe * Maximum Network selection status 8208d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8218d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int NETWORK_SELECTION_STATUS_MAX = 3; 8228d106780b6a638552749e54e169fc72537d4bcccxinhe 8238d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8248d106780b6a638552749e54e169fc72537d4bcccxinhe * Quality network selection status String (for debug purpose). Use Quality network 8258d106780b6a638552749e54e169fc72537d4bcccxinhe * selection status value as index to extec the corresponding debug string 8268d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8278d106780b6a638552749e54e169fc72537d4bcccxinhe private static final String[] QUALITY_NETWORK_SELECTION_STATUS = { 82890a3841994b40aeb1c3a7a6b78dd804e49eb5e13xinhe "NETWORK_SELECTION_ENABLED", 82990a3841994b40aeb1c3a7a6b78dd804e49eb5e13xinhe "NETWORK_SELECTION_TEMPORARY_DISABLED", 8308d106780b6a638552749e54e169fc72537d4bcccxinhe "NETWORK_SELECTION_PERMANENTLY_DISABLED"}; 8318d106780b6a638552749e54e169fc72537d4bcccxinhe 8328d106780b6a638552749e54e169fc72537d4bcccxinhe //Quality Network disabled reasons 8338d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8348d106780b6a638552749e54e169fc72537d4bcccxinhe * Default value. Means not disabled 8358d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8368d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int NETWORK_SELECTION_ENABLE = 0; 8378d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8383396b385145ad5af32c70dd2f9e582dd3800be1cRandy Pan * @deprecated it is not used any more. 8398d106780b6a638552749e54e169fc72537d4bcccxinhe * This network is disabled because higher layer (>2) network is bad 8408d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8418d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int DISABLED_BAD_LINK = 1; 8428d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8438d106780b6a638552749e54e169fc72537d4bcccxinhe * This network is disabled because multiple association rejects 8448d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8458d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int DISABLED_ASSOCIATION_REJECTION = 2; 8468d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8478d106780b6a638552749e54e169fc72537d4bcccxinhe * This network is disabled because multiple authentication failure 8488d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8498d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int DISABLED_AUTHENTICATION_FAILURE = 3; 8508d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8518d106780b6a638552749e54e169fc72537d4bcccxinhe * This network is disabled because multiple DHCP failure 8528d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8538d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int DISABLED_DHCP_FAILURE = 4; 8548d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8558d106780b6a638552749e54e169fc72537d4bcccxinhe * This network is disabled because of security network but no credentials 8568d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8578d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int DISABLED_DNS_FAILURE = 5; 8588d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8598d106780b6a638552749e54e169fc72537d4bcccxinhe * This network is disabled because EAP-TLS failure 8608d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8618d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int DISABLED_TLS_VERSION_MISMATCH = 6; 8628d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8638d106780b6a638552749e54e169fc72537d4bcccxinhe * This network is disabled due to WifiManager disable it explicitly 8648d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8658d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int DISABLED_AUTHENTICATION_NO_CREDENTIALS = 7; 8668d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8678d106780b6a638552749e54e169fc72537d4bcccxinhe * This network is disabled because no Internet connected and user do not want 8688d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8698d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int DISABLED_NO_INTERNET = 8; 8708d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8718d106780b6a638552749e54e169fc72537d4bcccxinhe * This network is disabled due to WifiManager disable it explicitly 8728d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8738d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int DISABLED_BY_WIFI_MANAGER = 9; 8748d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8758d106780b6a638552749e54e169fc72537d4bcccxinhe * This Maximum disable reason value 8768d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8778d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int NETWORK_SELECTION_DISABLED_MAX = 10; 8788d106780b6a638552749e54e169fc72537d4bcccxinhe 8798d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8808d106780b6a638552749e54e169fc72537d4bcccxinhe * Quality network selection disable reason String (for debug purpose) 8818d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8828d106780b6a638552749e54e169fc72537d4bcccxinhe private static final String[] QUALITY_NETWORK_SELECTION_DISABLE_REASON = { 88390a3841994b40aeb1c3a7a6b78dd804e49eb5e13xinhe "NETWORK_SELECTION_ENABLE", 8843396b385145ad5af32c70dd2f9e582dd3800be1cRandy Pan "NETWORK_SELECTION_DISABLED_BAD_LINK", // deprecated 8858d106780b6a638552749e54e169fc72537d4bcccxinhe "NETWORK_SELECTION_DISABLED_ASSOCIATION_REJECTION ", 8868d106780b6a638552749e54e169fc72537d4bcccxinhe "NETWORK_SELECTION_DISABLED_AUTHENTICATION_FAILURE", 8878d106780b6a638552749e54e169fc72537d4bcccxinhe "NETWORK_SELECTION_DISABLED_DHCP_FAILURE", 88890a3841994b40aeb1c3a7a6b78dd804e49eb5e13xinhe "NETWORK_SELECTION_DISABLED_DNS_FAILURE", 88990a3841994b40aeb1c3a7a6b78dd804e49eb5e13xinhe "NETWORK_SELECTION_DISABLED_TLS_VERSION", 8908d106780b6a638552749e54e169fc72537d4bcccxinhe "NETWORK_SELECTION_DISABLED_AUTHENTICATION_NO_CREDENTIALS", 89190a3841994b40aeb1c3a7a6b78dd804e49eb5e13xinhe "NETWORK_SELECTION_DISABLED_NO_INTERNET", 8928d106780b6a638552749e54e169fc72537d4bcccxinhe "NETWORK_SELECTION_DISABLED_BY_WIFI_MANAGER"}; 8938d106780b6a638552749e54e169fc72537d4bcccxinhe 8948d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8958d106780b6a638552749e54e169fc72537d4bcccxinhe * Invalid time stamp for network selection disable 8968d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8978d106780b6a638552749e54e169fc72537d4bcccxinhe public static final long INVALID_NETWORK_SELECTION_DISABLE_TIMESTAMP = -1L; 8988d106780b6a638552749e54e169fc72537d4bcccxinhe 899584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 900584dc6b8b9628d930de4ea3ad94894886294b855xinhe * This constant indicates the current configuration has connect choice set 901584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 902584dc6b8b9628d930de4ea3ad94894886294b855xinhe private static final int CONNECT_CHOICE_EXISTS = 1; 903584dc6b8b9628d930de4ea3ad94894886294b855xinhe 904584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 905584dc6b8b9628d930de4ea3ad94894886294b855xinhe * This constant indicates the current configuration does not have connect choice set 906584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 907584dc6b8b9628d930de4ea3ad94894886294b855xinhe private static final int CONNECT_CHOICE_NOT_EXISTS = -1; 908584dc6b8b9628d930de4ea3ad94894886294b855xinhe 9098d106780b6a638552749e54e169fc72537d4bcccxinhe // fields for QualityNetwork Selection 9108d106780b6a638552749e54e169fc72537d4bcccxinhe /** 9118d106780b6a638552749e54e169fc72537d4bcccxinhe * Network selection status, should be in one of three status: enable, temporaily disabled 9128d106780b6a638552749e54e169fc72537d4bcccxinhe * or permanently disabled 9138d106780b6a638552749e54e169fc72537d4bcccxinhe */ 9148d106780b6a638552749e54e169fc72537d4bcccxinhe private int mStatus; 9158d106780b6a638552749e54e169fc72537d4bcccxinhe 9168d106780b6a638552749e54e169fc72537d4bcccxinhe /** 9178d106780b6a638552749e54e169fc72537d4bcccxinhe * Reason for disable this network 9188d106780b6a638552749e54e169fc72537d4bcccxinhe */ 9198d106780b6a638552749e54e169fc72537d4bcccxinhe private int mNetworkSelectionDisableReason; 9208d106780b6a638552749e54e169fc72537d4bcccxinhe 9218d106780b6a638552749e54e169fc72537d4bcccxinhe /** 9228d106780b6a638552749e54e169fc72537d4bcccxinhe * Last time we temporarily disabled the configuration 9238d106780b6a638552749e54e169fc72537d4bcccxinhe */ 9248d106780b6a638552749e54e169fc72537d4bcccxinhe private long mTemporarilyDisabledTimestamp = INVALID_NETWORK_SELECTION_DISABLE_TIMESTAMP; 9258d106780b6a638552749e54e169fc72537d4bcccxinhe 9268d106780b6a638552749e54e169fc72537d4bcccxinhe /** 9278d106780b6a638552749e54e169fc72537d4bcccxinhe * counter for each Network selection disable reason 9288d106780b6a638552749e54e169fc72537d4bcccxinhe */ 9298d106780b6a638552749e54e169fc72537d4bcccxinhe private int[] mNetworkSeclectionDisableCounter = new int[NETWORK_SELECTION_DISABLED_MAX]; 9308d106780b6a638552749e54e169fc72537d4bcccxinhe 9318d106780b6a638552749e54e169fc72537d4bcccxinhe /** 932584dc6b8b9628d930de4ea3ad94894886294b855xinhe * Connect Choice over this configuration 933584dc6b8b9628d930de4ea3ad94894886294b855xinhe * 934584dc6b8b9628d930de4ea3ad94894886294b855xinhe * When current wifi configuration is visible to the user but user explicitly choose to 935584dc6b8b9628d930de4ea3ad94894886294b855xinhe * connect to another network X, the another networks X's configure key will be stored here. 936584dc6b8b9628d930de4ea3ad94894886294b855xinhe * We will consider user has a preference of X over this network. And in the future, 937584dc6b8b9628d930de4ea3ad94894886294b855xinhe * network selection will always give X a higher preference over this configuration. 938584dc6b8b9628d930de4ea3ad94894886294b855xinhe * configKey is : "SSID"-WEP-WPA_PSK-WPA_EAP 939584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 940584dc6b8b9628d930de4ea3ad94894886294b855xinhe private String mConnectChoice; 941584dc6b8b9628d930de4ea3ad94894886294b855xinhe 942584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 943584dc6b8b9628d930de4ea3ad94894886294b855xinhe * The system timestamp when we records the connectChoice. This value is obtained from 944584dc6b8b9628d930de4ea3ad94894886294b855xinhe * System.currentTimeMillis 945584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 946584dc6b8b9628d930de4ea3ad94894886294b855xinhe private long mConnectChoiceTimestamp = INVALID_NETWORK_SELECTION_DISABLE_TIMESTAMP; 947584dc6b8b9628d930de4ea3ad94894886294b855xinhe 948584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 949584dc6b8b9628d930de4ea3ad94894886294b855xinhe * Used to cache the temporary candidate during the network selection procedure. It will be 950584dc6b8b9628d930de4ea3ad94894886294b855xinhe * kept updating once a new scan result has a higher score than current one 951584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 952584dc6b8b9628d930de4ea3ad94894886294b855xinhe private ScanResult mCandidate; 953584dc6b8b9628d930de4ea3ad94894886294b855xinhe 954584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 955584dc6b8b9628d930de4ea3ad94894886294b855xinhe * Used to cache the score of the current temporary candidate during the network 956584dc6b8b9628d930de4ea3ad94894886294b855xinhe * selection procedure. 957584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 958584dc6b8b9628d930de4ea3ad94894886294b855xinhe private int mCandidateScore; 959584dc6b8b9628d930de4ea3ad94894886294b855xinhe 960584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 961584dc6b8b9628d930de4ea3ad94894886294b855xinhe * Indicate whether this network is visible in latest Qualified Network Selection. This 962584dc6b8b9628d930de4ea3ad94894886294b855xinhe * means there is scan result found related to this Configuration and meet the minimum 963584dc6b8b9628d930de4ea3ad94894886294b855xinhe * requirement. The saved network need not join latest Qualified Network Selection. For 964584dc6b8b9628d930de4ea3ad94894886294b855xinhe * example, it is disabled. True means network is visible in latest Qualified Network 965584dc6b8b9628d930de4ea3ad94894886294b855xinhe * Selection and false means network is invisible 966584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 967584dc6b8b9628d930de4ea3ad94894886294b855xinhe private boolean mSeenInLastQualifiedNetworkSelection; 968584dc6b8b9628d930de4ea3ad94894886294b855xinhe 969584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 970cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein * Boolean indicating if we have ever successfully connected to this network. 971cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein * 972cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein * This value will be set to true upon a successful connection. 973cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein * This value will be set to false if a previous value was not stored in the config or if 974cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein * the credentials are updated (ex. a password change). 975cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein */ 976cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein private boolean mHasEverConnected; 977cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein 978cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein /** 979584dc6b8b9628d930de4ea3ad94894886294b855xinhe * set whether this network is visible in latest Qualified Network Selection 980584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @param seen value set to candidate 981584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 982584dc6b8b9628d930de4ea3ad94894886294b855xinhe public void setSeenInLastQualifiedNetworkSelection(boolean seen) { 983584dc6b8b9628d930de4ea3ad94894886294b855xinhe mSeenInLastQualifiedNetworkSelection = seen; 984584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 985584dc6b8b9628d930de4ea3ad94894886294b855xinhe 986584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 987584dc6b8b9628d930de4ea3ad94894886294b855xinhe * get whether this network is visible in latest Qualified Network Selection 988584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @return returns true -- network is visible in latest Qualified Network Selection 989584dc6b8b9628d930de4ea3ad94894886294b855xinhe * false -- network is invisible in latest Qualified Network Selection 990584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 991584dc6b8b9628d930de4ea3ad94894886294b855xinhe public boolean getSeenInLastQualifiedNetworkSelection() { 992584dc6b8b9628d930de4ea3ad94894886294b855xinhe return mSeenInLastQualifiedNetworkSelection; 993584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 994584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 995584dc6b8b9628d930de4ea3ad94894886294b855xinhe * set the temporary candidate of current network selection procedure 996584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @param scanCandidate {@link ScanResult} the candidate set to mCandidate 997584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 998584dc6b8b9628d930de4ea3ad94894886294b855xinhe public void setCandidate(ScanResult scanCandidate) { 999584dc6b8b9628d930de4ea3ad94894886294b855xinhe mCandidate = scanCandidate; 1000584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 1001584dc6b8b9628d930de4ea3ad94894886294b855xinhe 1002584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 1003584dc6b8b9628d930de4ea3ad94894886294b855xinhe * get the temporary candidate of current network selection procedure 1004584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @return returns {@link ScanResult} temporary candidate of current network selection 1005584dc6b8b9628d930de4ea3ad94894886294b855xinhe * procedure 1006584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 1007584dc6b8b9628d930de4ea3ad94894886294b855xinhe public ScanResult getCandidate() { 1008584dc6b8b9628d930de4ea3ad94894886294b855xinhe return mCandidate; 1009584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 1010584dc6b8b9628d930de4ea3ad94894886294b855xinhe 1011584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 1012584dc6b8b9628d930de4ea3ad94894886294b855xinhe * set the score of the temporary candidate of current network selection procedure 1013584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @param score value set to mCandidateScore 1014584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 1015584dc6b8b9628d930de4ea3ad94894886294b855xinhe public void setCandidateScore(int score) { 1016584dc6b8b9628d930de4ea3ad94894886294b855xinhe mCandidateScore = score; 1017584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 1018584dc6b8b9628d930de4ea3ad94894886294b855xinhe 1019584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 1020584dc6b8b9628d930de4ea3ad94894886294b855xinhe * get the score of the temporary candidate of current network selection procedure 1021584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @return returns score of the temporary candidate of current network selection procedure 1022584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 1023584dc6b8b9628d930de4ea3ad94894886294b855xinhe public int getCandidateScore() { 1024584dc6b8b9628d930de4ea3ad94894886294b855xinhe return mCandidateScore; 1025584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 1026584dc6b8b9628d930de4ea3ad94894886294b855xinhe 1027584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 1028584dc6b8b9628d930de4ea3ad94894886294b855xinhe * get user preferred choice over this configuration 1029584dc6b8b9628d930de4ea3ad94894886294b855xinhe *@return returns configKey of user preferred choice over this configuration 1030584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 1031584dc6b8b9628d930de4ea3ad94894886294b855xinhe public String getConnectChoice() { 1032584dc6b8b9628d930de4ea3ad94894886294b855xinhe return mConnectChoice; 1033584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 1034584dc6b8b9628d930de4ea3ad94894886294b855xinhe 1035584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 1036584dc6b8b9628d930de4ea3ad94894886294b855xinhe * set user preferred choice over this configuration 1037584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @param newConnectChoice, the configKey of user preferred choice over this configuration 1038584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 1039584dc6b8b9628d930de4ea3ad94894886294b855xinhe public void setConnectChoice(String newConnectChoice) { 1040584dc6b8b9628d930de4ea3ad94894886294b855xinhe mConnectChoice = newConnectChoice; 1041584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 1042584dc6b8b9628d930de4ea3ad94894886294b855xinhe 1043584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 1044584dc6b8b9628d930de4ea3ad94894886294b855xinhe * get the timeStamp when user select a choice over this configuration 1045584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @return returns when current connectChoice is set (time from System.currentTimeMillis) 1046584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 1047584dc6b8b9628d930de4ea3ad94894886294b855xinhe public long getConnectChoiceTimestamp() { 1048584dc6b8b9628d930de4ea3ad94894886294b855xinhe return mConnectChoiceTimestamp; 1049584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 1050584dc6b8b9628d930de4ea3ad94894886294b855xinhe 1051584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 1052584dc6b8b9628d930de4ea3ad94894886294b855xinhe * set the timeStamp when user select a choice over this configuration 1053584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @param timeStamp, the timestamp set to connectChoiceTimestamp, expected timestamp should 1054584dc6b8b9628d930de4ea3ad94894886294b855xinhe * be obtained from System.currentTimeMillis 1055584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 1056584dc6b8b9628d930de4ea3ad94894886294b855xinhe public void setConnectChoiceTimestamp(long timeStamp) { 1057584dc6b8b9628d930de4ea3ad94894886294b855xinhe mConnectChoiceTimestamp = timeStamp; 1058584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 1059584dc6b8b9628d930de4ea3ad94894886294b855xinhe 1060584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 1061584dc6b8b9628d930de4ea3ad94894886294b855xinhe * get current Quality network selection status 1062584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @return returns current Quality network selection status in String (for debug purpose) 10638d106780b6a638552749e54e169fc72537d4bcccxinhe */ 10648d106780b6a638552749e54e169fc72537d4bcccxinhe public String getNetworkStatusString() { 10658d106780b6a638552749e54e169fc72537d4bcccxinhe return QUALITY_NETWORK_SELECTION_STATUS[mStatus]; 10668d106780b6a638552749e54e169fc72537d4bcccxinhe } 10678d106780b6a638552749e54e169fc72537d4bcccxinhe 1068cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein public void setHasEverConnected(boolean value) { 1069cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein mHasEverConnected = value; 1070cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein } 1071cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein 1072cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein public boolean getHasEverConnected() { 1073cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein return mHasEverConnected; 1074cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein } 1075cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein 1076cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein private NetworkSelectionStatus() { 1077cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein // previously stored configs will not have this parameter, so we default to false. 1078cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein mHasEverConnected = false; 1079cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein }; 10808d106780b6a638552749e54e169fc72537d4bcccxinhe 10818d106780b6a638552749e54e169fc72537d4bcccxinhe /** 10828d106780b6a638552749e54e169fc72537d4bcccxinhe * @param reason specific error reason 10838d106780b6a638552749e54e169fc72537d4bcccxinhe * @return corresponding network disable reason String (for debug purpose) 10848d106780b6a638552749e54e169fc72537d4bcccxinhe */ 10858d106780b6a638552749e54e169fc72537d4bcccxinhe public static String getNetworkDisableReasonString(int reason) { 10868d106780b6a638552749e54e169fc72537d4bcccxinhe if (reason >= NETWORK_SELECTION_ENABLE && reason < NETWORK_SELECTION_DISABLED_MAX) { 10878d106780b6a638552749e54e169fc72537d4bcccxinhe return QUALITY_NETWORK_SELECTION_DISABLE_REASON[reason]; 10888d106780b6a638552749e54e169fc72537d4bcccxinhe } else { 10898d106780b6a638552749e54e169fc72537d4bcccxinhe return null; 10908d106780b6a638552749e54e169fc72537d4bcccxinhe } 10918d106780b6a638552749e54e169fc72537d4bcccxinhe } 10928d106780b6a638552749e54e169fc72537d4bcccxinhe /** 1093584dc6b8b9628d930de4ea3ad94894886294b855xinhe * get current network disable reason 10948d106780b6a638552749e54e169fc72537d4bcccxinhe * @return current network disable reason in String (for debug purpose) 10958d106780b6a638552749e54e169fc72537d4bcccxinhe */ 10968d106780b6a638552749e54e169fc72537d4bcccxinhe public String getNetworkDisableReasonString() { 10978d106780b6a638552749e54e169fc72537d4bcccxinhe return QUALITY_NETWORK_SELECTION_DISABLE_REASON[mNetworkSelectionDisableReason]; 10988d106780b6a638552749e54e169fc72537d4bcccxinhe } 10998d106780b6a638552749e54e169fc72537d4bcccxinhe 11008d106780b6a638552749e54e169fc72537d4bcccxinhe /** 11018d106780b6a638552749e54e169fc72537d4bcccxinhe * get current network network selection status 1102584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @return return current network network selection status 11038d106780b6a638552749e54e169fc72537d4bcccxinhe */ 11048d106780b6a638552749e54e169fc72537d4bcccxinhe public int getNetworkSelectionStatus() { 11058d106780b6a638552749e54e169fc72537d4bcccxinhe return mStatus; 11068d106780b6a638552749e54e169fc72537d4bcccxinhe } 11078d106780b6a638552749e54e169fc72537d4bcccxinhe /** 11088d106780b6a638552749e54e169fc72537d4bcccxinhe * @return whether current network is enabled to join network selection 11098d106780b6a638552749e54e169fc72537d4bcccxinhe */ 11108d106780b6a638552749e54e169fc72537d4bcccxinhe public boolean isNetworkEnabled() { 11118d106780b6a638552749e54e169fc72537d4bcccxinhe return mStatus == NETWORK_SELECTION_ENABLED; 11128d106780b6a638552749e54e169fc72537d4bcccxinhe } 11138d106780b6a638552749e54e169fc72537d4bcccxinhe 11148d106780b6a638552749e54e169fc72537d4bcccxinhe /** 11158d106780b6a638552749e54e169fc72537d4bcccxinhe * @return whether current network is temporary disabled 11168d106780b6a638552749e54e169fc72537d4bcccxinhe */ 11178d106780b6a638552749e54e169fc72537d4bcccxinhe public boolean isNetworkTemporaryDisabled() { 11188d106780b6a638552749e54e169fc72537d4bcccxinhe return mStatus == NETWORK_SELECTION_TEMPORARY_DISABLED; 11198d106780b6a638552749e54e169fc72537d4bcccxinhe } 11208d106780b6a638552749e54e169fc72537d4bcccxinhe 11218d106780b6a638552749e54e169fc72537d4bcccxinhe /** 1122584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @return returns whether current network is permanently disabled 11238d106780b6a638552749e54e169fc72537d4bcccxinhe */ 11248d106780b6a638552749e54e169fc72537d4bcccxinhe public boolean isNetworkPermanentlyDisabled() { 11258d106780b6a638552749e54e169fc72537d4bcccxinhe return mStatus == NETWORK_SELECTION_PERMANENTLY_DISABLED; 11268d106780b6a638552749e54e169fc72537d4bcccxinhe } 1127584dc6b8b9628d930de4ea3ad94894886294b855xinhe 11288d106780b6a638552749e54e169fc72537d4bcccxinhe /** 1129584dc6b8b9628d930de4ea3ad94894886294b855xinhe * set current networ work selection status 11308d106780b6a638552749e54e169fc72537d4bcccxinhe * @param status network selection status to set 11318d106780b6a638552749e54e169fc72537d4bcccxinhe */ 11328d106780b6a638552749e54e169fc72537d4bcccxinhe public void setNetworkSelectionStatus(int status) { 11338d106780b6a638552749e54e169fc72537d4bcccxinhe if (status >= 0 && status < NETWORK_SELECTION_STATUS_MAX) { 11348d106780b6a638552749e54e169fc72537d4bcccxinhe mStatus = status; 11358d106780b6a638552749e54e169fc72537d4bcccxinhe } 11368d106780b6a638552749e54e169fc72537d4bcccxinhe } 1137584dc6b8b9628d930de4ea3ad94894886294b855xinhe 11388d106780b6a638552749e54e169fc72537d4bcccxinhe /** 1139584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @return returns current network's disable reason 11408d106780b6a638552749e54e169fc72537d4bcccxinhe */ 11418d106780b6a638552749e54e169fc72537d4bcccxinhe public int getNetworkSelectionDisableReason() { 11428d106780b6a638552749e54e169fc72537d4bcccxinhe return mNetworkSelectionDisableReason; 11438d106780b6a638552749e54e169fc72537d4bcccxinhe } 11448d106780b6a638552749e54e169fc72537d4bcccxinhe 11458d106780b6a638552749e54e169fc72537d4bcccxinhe /** 1146584dc6b8b9628d930de4ea3ad94894886294b855xinhe * set Network disable reason 11478d106780b6a638552749e54e169fc72537d4bcccxinhe * @param reason Network disable reason 11488d106780b6a638552749e54e169fc72537d4bcccxinhe */ 11498d106780b6a638552749e54e169fc72537d4bcccxinhe public void setNetworkSelectionDisableReason(int reason) { 11508d106780b6a638552749e54e169fc72537d4bcccxinhe if (reason >= 0 && reason < NETWORK_SELECTION_DISABLED_MAX) { 11518d106780b6a638552749e54e169fc72537d4bcccxinhe mNetworkSelectionDisableReason = reason; 11528d106780b6a638552749e54e169fc72537d4bcccxinhe } else { 11538d106780b6a638552749e54e169fc72537d4bcccxinhe throw new IllegalArgumentException("Illegal reason value: " + reason); 11548d106780b6a638552749e54e169fc72537d4bcccxinhe } 11558d106780b6a638552749e54e169fc72537d4bcccxinhe } 1156584dc6b8b9628d930de4ea3ad94894886294b855xinhe 11578d106780b6a638552749e54e169fc72537d4bcccxinhe /** 1158584dc6b8b9628d930de4ea3ad94894886294b855xinhe * check whether network is disabled by this reason 1159584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @param reason a specific disable reason 1160584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @return true -- network is disabled for this reason 1161584dc6b8b9628d930de4ea3ad94894886294b855xinhe * false -- network is not disabled for this reason 11628d106780b6a638552749e54e169fc72537d4bcccxinhe */ 11638d106780b6a638552749e54e169fc72537d4bcccxinhe public boolean isDisabledByReason(int reason) { 11648d106780b6a638552749e54e169fc72537d4bcccxinhe return mNetworkSelectionDisableReason == reason; 11658d106780b6a638552749e54e169fc72537d4bcccxinhe } 1166584dc6b8b9628d930de4ea3ad94894886294b855xinhe 11678d106780b6a638552749e54e169fc72537d4bcccxinhe /** 11688d106780b6a638552749e54e169fc72537d4bcccxinhe * @param timeStamp Set when current network is disabled in millisecond since January 1, 11698d106780b6a638552749e54e169fc72537d4bcccxinhe * 1970 00:00:00.0 UTC 11708d106780b6a638552749e54e169fc72537d4bcccxinhe */ 11718d106780b6a638552749e54e169fc72537d4bcccxinhe public void setDisableTime(long timeStamp) { 11728d106780b6a638552749e54e169fc72537d4bcccxinhe mTemporarilyDisabledTimestamp = timeStamp; 11738d106780b6a638552749e54e169fc72537d4bcccxinhe } 11748d106780b6a638552749e54e169fc72537d4bcccxinhe 11758d106780b6a638552749e54e169fc72537d4bcccxinhe /** 1176584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @return returns when current network is disabled in millisecond since January 1, 11778d106780b6a638552749e54e169fc72537d4bcccxinhe * 1970 00:00:00.0 UTC 11788d106780b6a638552749e54e169fc72537d4bcccxinhe */ 11798d106780b6a638552749e54e169fc72537d4bcccxinhe public long getDisableTime() { 11808d106780b6a638552749e54e169fc72537d4bcccxinhe return mTemporarilyDisabledTimestamp; 11818d106780b6a638552749e54e169fc72537d4bcccxinhe } 11828d106780b6a638552749e54e169fc72537d4bcccxinhe 11838d106780b6a638552749e54e169fc72537d4bcccxinhe /** 1184584dc6b8b9628d930de4ea3ad94894886294b855xinhe * get the disable counter of a specific reason 11858d106780b6a638552749e54e169fc72537d4bcccxinhe * @param reason specific failure reason 11868d106780b6a638552749e54e169fc72537d4bcccxinhe * @exception throw IllegalArgumentException for illegal input 11878d106780b6a638552749e54e169fc72537d4bcccxinhe * @return counter number for specific error reason. 11888d106780b6a638552749e54e169fc72537d4bcccxinhe */ 11898d106780b6a638552749e54e169fc72537d4bcccxinhe public int getDisableReasonCounter(int reason) { 11908d106780b6a638552749e54e169fc72537d4bcccxinhe if (reason >= NETWORK_SELECTION_ENABLE && reason < NETWORK_SELECTION_DISABLED_MAX) { 11918d106780b6a638552749e54e169fc72537d4bcccxinhe return mNetworkSeclectionDisableCounter[reason]; 11928d106780b6a638552749e54e169fc72537d4bcccxinhe } else { 11938d106780b6a638552749e54e169fc72537d4bcccxinhe throw new IllegalArgumentException("Illegal reason value: " + reason); 11948d106780b6a638552749e54e169fc72537d4bcccxinhe } 11958d106780b6a638552749e54e169fc72537d4bcccxinhe } 11968d106780b6a638552749e54e169fc72537d4bcccxinhe 11978d106780b6a638552749e54e169fc72537d4bcccxinhe /** 11988d106780b6a638552749e54e169fc72537d4bcccxinhe * set the counter of a specific failure reason 11998d106780b6a638552749e54e169fc72537d4bcccxinhe * @param reason reason for disable error 12008d106780b6a638552749e54e169fc72537d4bcccxinhe * @param value the counter value for this specific reason 12018d106780b6a638552749e54e169fc72537d4bcccxinhe * @exception throw IllegalArgumentException for illegal input 12028d106780b6a638552749e54e169fc72537d4bcccxinhe */ 12038d106780b6a638552749e54e169fc72537d4bcccxinhe public void setDisableReasonCounter(int reason, int value) { 12048d106780b6a638552749e54e169fc72537d4bcccxinhe if (reason >= NETWORK_SELECTION_ENABLE && reason < NETWORK_SELECTION_DISABLED_MAX) { 12058d106780b6a638552749e54e169fc72537d4bcccxinhe mNetworkSeclectionDisableCounter[reason] = value; 12068d106780b6a638552749e54e169fc72537d4bcccxinhe } else { 12078d106780b6a638552749e54e169fc72537d4bcccxinhe throw new IllegalArgumentException("Illegal reason value: " + reason); 12088d106780b6a638552749e54e169fc72537d4bcccxinhe } 12098d106780b6a638552749e54e169fc72537d4bcccxinhe } 12108d106780b6a638552749e54e169fc72537d4bcccxinhe 12118d106780b6a638552749e54e169fc72537d4bcccxinhe /** 12128d106780b6a638552749e54e169fc72537d4bcccxinhe * increment the counter of a specific failure reason 12138d106780b6a638552749e54e169fc72537d4bcccxinhe * @param reason a specific failure reason 12148d106780b6a638552749e54e169fc72537d4bcccxinhe * @exception throw IllegalArgumentException for illegal input 12158d106780b6a638552749e54e169fc72537d4bcccxinhe */ 12168d106780b6a638552749e54e169fc72537d4bcccxinhe public void incrementDisableReasonCounter(int reason) { 12178d106780b6a638552749e54e169fc72537d4bcccxinhe if (reason >= NETWORK_SELECTION_ENABLE && reason < NETWORK_SELECTION_DISABLED_MAX) { 12188d106780b6a638552749e54e169fc72537d4bcccxinhe mNetworkSeclectionDisableCounter[reason]++; 12198d106780b6a638552749e54e169fc72537d4bcccxinhe } else { 12208d106780b6a638552749e54e169fc72537d4bcccxinhe throw new IllegalArgumentException("Illegal reason value: " + reason); 12218d106780b6a638552749e54e169fc72537d4bcccxinhe } 12228d106780b6a638552749e54e169fc72537d4bcccxinhe } 1223584dc6b8b9628d930de4ea3ad94894886294b855xinhe 12248d106780b6a638552749e54e169fc72537d4bcccxinhe /** 12258d106780b6a638552749e54e169fc72537d4bcccxinhe * clear the counter of a specific failure reason 12268d106780b6a638552749e54e169fc72537d4bcccxinhe * @hide 12278d106780b6a638552749e54e169fc72537d4bcccxinhe * @param reason a specific failure reason 12288d106780b6a638552749e54e169fc72537d4bcccxinhe * @exception throw IllegalArgumentException for illegal input 12298d106780b6a638552749e54e169fc72537d4bcccxinhe */ 12308d106780b6a638552749e54e169fc72537d4bcccxinhe public void clearDisableReasonCounter(int reason) { 12318d106780b6a638552749e54e169fc72537d4bcccxinhe if (reason >= NETWORK_SELECTION_ENABLE && reason < NETWORK_SELECTION_DISABLED_MAX) { 12328d106780b6a638552749e54e169fc72537d4bcccxinhe mNetworkSeclectionDisableCounter[reason] = NETWORK_SELECTION_ENABLE; 12338d106780b6a638552749e54e169fc72537d4bcccxinhe } else { 12348d106780b6a638552749e54e169fc72537d4bcccxinhe throw new IllegalArgumentException("Illegal reason value: " + reason); 12358d106780b6a638552749e54e169fc72537d4bcccxinhe } 12368d106780b6a638552749e54e169fc72537d4bcccxinhe } 1237584dc6b8b9628d930de4ea3ad94894886294b855xinhe 12388d106780b6a638552749e54e169fc72537d4bcccxinhe /** 12398d106780b6a638552749e54e169fc72537d4bcccxinhe * clear all the failure reason counters 12408d106780b6a638552749e54e169fc72537d4bcccxinhe */ 12418d106780b6a638552749e54e169fc72537d4bcccxinhe public void clearDisableReasonCounter() { 12428d106780b6a638552749e54e169fc72537d4bcccxinhe Arrays.fill(mNetworkSeclectionDisableCounter, NETWORK_SELECTION_ENABLE); 12438d106780b6a638552749e54e169fc72537d4bcccxinhe } 12448d106780b6a638552749e54e169fc72537d4bcccxinhe 12458d106780b6a638552749e54e169fc72537d4bcccxinhe /** 12468d106780b6a638552749e54e169fc72537d4bcccxinhe * BSSID for connection to this network (through network selection procedure) 12478d106780b6a638552749e54e169fc72537d4bcccxinhe */ 12488d106780b6a638552749e54e169fc72537d4bcccxinhe private String mNetworkSelectionBSSID; 12498d106780b6a638552749e54e169fc72537d4bcccxinhe 12508d106780b6a638552749e54e169fc72537d4bcccxinhe /** 12518d106780b6a638552749e54e169fc72537d4bcccxinhe * get current network Selection BSSID 12528d106780b6a638552749e54e169fc72537d4bcccxinhe * @return current network Selection BSSID 12538d106780b6a638552749e54e169fc72537d4bcccxinhe */ 12548d106780b6a638552749e54e169fc72537d4bcccxinhe public String getNetworkSelectionBSSID() { 12558d106780b6a638552749e54e169fc72537d4bcccxinhe return mNetworkSelectionBSSID; 12568d106780b6a638552749e54e169fc72537d4bcccxinhe } 12578d106780b6a638552749e54e169fc72537d4bcccxinhe 12588d106780b6a638552749e54e169fc72537d4bcccxinhe /** 12598d106780b6a638552749e54e169fc72537d4bcccxinhe * set network Selection BSSID 12608d106780b6a638552749e54e169fc72537d4bcccxinhe * @param bssid The target BSSID for assocaition 12618d106780b6a638552749e54e169fc72537d4bcccxinhe */ 12628d106780b6a638552749e54e169fc72537d4bcccxinhe public void setNetworkSelectionBSSID(String bssid) { 12638d106780b6a638552749e54e169fc72537d4bcccxinhe mNetworkSelectionBSSID = bssid; 12648d106780b6a638552749e54e169fc72537d4bcccxinhe } 12658d106780b6a638552749e54e169fc72537d4bcccxinhe 12668d106780b6a638552749e54e169fc72537d4bcccxinhe public void copy(NetworkSelectionStatus source) { 12678d106780b6a638552749e54e169fc72537d4bcccxinhe mStatus = source.mStatus; 12688d106780b6a638552749e54e169fc72537d4bcccxinhe mNetworkSelectionDisableReason = source.mNetworkSelectionDisableReason; 12698d106780b6a638552749e54e169fc72537d4bcccxinhe for (int index = NETWORK_SELECTION_ENABLE; index < NETWORK_SELECTION_DISABLED_MAX; 12708d106780b6a638552749e54e169fc72537d4bcccxinhe index++) { 12718d106780b6a638552749e54e169fc72537d4bcccxinhe mNetworkSeclectionDisableCounter[index] = 12728d106780b6a638552749e54e169fc72537d4bcccxinhe source.mNetworkSeclectionDisableCounter[index]; 12738d106780b6a638552749e54e169fc72537d4bcccxinhe } 12748d106780b6a638552749e54e169fc72537d4bcccxinhe mTemporarilyDisabledTimestamp = source.mTemporarilyDisabledTimestamp; 12758d106780b6a638552749e54e169fc72537d4bcccxinhe mNetworkSelectionBSSID = source.mNetworkSelectionBSSID; 1276584dc6b8b9628d930de4ea3ad94894886294b855xinhe setConnectChoice(source.getConnectChoice()); 1277584dc6b8b9628d930de4ea3ad94894886294b855xinhe setConnectChoiceTimestamp(source.getConnectChoiceTimestamp()); 1278cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein setHasEverConnected(source.getHasEverConnected()); 12798d106780b6a638552749e54e169fc72537d4bcccxinhe } 12808d106780b6a638552749e54e169fc72537d4bcccxinhe 12818d106780b6a638552749e54e169fc72537d4bcccxinhe public void writeToParcel(Parcel dest) { 12828d106780b6a638552749e54e169fc72537d4bcccxinhe dest.writeInt(getNetworkSelectionStatus()); 12838d106780b6a638552749e54e169fc72537d4bcccxinhe dest.writeInt(getNetworkSelectionDisableReason()); 12848d106780b6a638552749e54e169fc72537d4bcccxinhe for (int index = NETWORK_SELECTION_ENABLE; index < NETWORK_SELECTION_DISABLED_MAX; 12858d106780b6a638552749e54e169fc72537d4bcccxinhe index++) { 12868d106780b6a638552749e54e169fc72537d4bcccxinhe dest.writeInt(getDisableReasonCounter(index)); 12878d106780b6a638552749e54e169fc72537d4bcccxinhe } 12888d106780b6a638552749e54e169fc72537d4bcccxinhe dest.writeLong(getDisableTime()); 12898d106780b6a638552749e54e169fc72537d4bcccxinhe dest.writeString(getNetworkSelectionBSSID()); 1290584dc6b8b9628d930de4ea3ad94894886294b855xinhe if (getConnectChoice() != null) { 1291584dc6b8b9628d930de4ea3ad94894886294b855xinhe dest.writeInt(CONNECT_CHOICE_EXISTS); 1292584dc6b8b9628d930de4ea3ad94894886294b855xinhe dest.writeString(getConnectChoice()); 1293584dc6b8b9628d930de4ea3ad94894886294b855xinhe dest.writeLong(getConnectChoiceTimestamp()); 1294584dc6b8b9628d930de4ea3ad94894886294b855xinhe } else { 1295584dc6b8b9628d930de4ea3ad94894886294b855xinhe dest.writeInt(CONNECT_CHOICE_NOT_EXISTS); 1296584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 1297cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein dest.writeInt(getHasEverConnected() ? 1 : 0); 12988d106780b6a638552749e54e169fc72537d4bcccxinhe } 12998d106780b6a638552749e54e169fc72537d4bcccxinhe 13008d106780b6a638552749e54e169fc72537d4bcccxinhe public void readFromParcel(Parcel in) { 13018d106780b6a638552749e54e169fc72537d4bcccxinhe setNetworkSelectionStatus(in.readInt()); 13028d106780b6a638552749e54e169fc72537d4bcccxinhe setNetworkSelectionDisableReason(in.readInt()); 13038d106780b6a638552749e54e169fc72537d4bcccxinhe for (int index = NETWORK_SELECTION_ENABLE; index < NETWORK_SELECTION_DISABLED_MAX; 13048d106780b6a638552749e54e169fc72537d4bcccxinhe index++) { 13058d106780b6a638552749e54e169fc72537d4bcccxinhe setDisableReasonCounter(index, in.readInt()); 13068d106780b6a638552749e54e169fc72537d4bcccxinhe } 13078d106780b6a638552749e54e169fc72537d4bcccxinhe setDisableTime(in.readLong()); 13088d106780b6a638552749e54e169fc72537d4bcccxinhe setNetworkSelectionBSSID(in.readString()); 1309584dc6b8b9628d930de4ea3ad94894886294b855xinhe if (in.readInt() == CONNECT_CHOICE_EXISTS) { 1310584dc6b8b9628d930de4ea3ad94894886294b855xinhe setConnectChoice(in.readString()); 1311584dc6b8b9628d930de4ea3ad94894886294b855xinhe setConnectChoiceTimestamp(in.readLong()); 1312584dc6b8b9628d930de4ea3ad94894886294b855xinhe } else { 1313584dc6b8b9628d930de4ea3ad94894886294b855xinhe setConnectChoice(null); 1314584dc6b8b9628d930de4ea3ad94894886294b855xinhe setConnectChoiceTimestamp(INVALID_NETWORK_SELECTION_DISABLE_TIMESTAMP); 1315584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 1316cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein setHasEverConnected(in.readInt() != 0); 13178d106780b6a638552749e54e169fc72537d4bcccxinhe } 13188d106780b6a638552749e54e169fc72537d4bcccxinhe } 13198d106780b6a638552749e54e169fc72537d4bcccxinhe 13208d106780b6a638552749e54e169fc72537d4bcccxinhe /** 13218d106780b6a638552749e54e169fc72537d4bcccxinhe * @hide 13228d106780b6a638552749e54e169fc72537d4bcccxinhe * network selection related member 13238d106780b6a638552749e54e169fc72537d4bcccxinhe */ 13248d106780b6a638552749e54e169fc72537d4bcccxinhe private final NetworkSelectionStatus mNetworkSelectionStatus = new NetworkSelectionStatus(); 13258d106780b6a638552749e54e169fc72537d4bcccxinhe 13268d106780b6a638552749e54e169fc72537d4bcccxinhe /** 13278d106780b6a638552749e54e169fc72537d4bcccxinhe * @hide 13288d106780b6a638552749e54e169fc72537d4bcccxinhe * @return network selection status 13298d106780b6a638552749e54e169fc72537d4bcccxinhe */ 13308d106780b6a638552749e54e169fc72537d4bcccxinhe public NetworkSelectionStatus getNetworkSelectionStatus() { 13318d106780b6a638552749e54e169fc72537d4bcccxinhe return mNetworkSelectionStatus; 13328d106780b6a638552749e54e169fc72537d4bcccxinhe } 13337c3606c103e95d3991267cca2592402a68779cafvandwalle /** 13347c3606c103e95d3991267cca2592402a68779cafvandwalle * @hide 13357c3606c103e95d3991267cca2592402a68779cafvandwalle * Linked Configurations: represent the set of Wificonfigurations that are equivalent 13367c3606c103e95d3991267cca2592402a68779cafvandwalle * regarding roaming and auto-joining. 13377c3606c103e95d3991267cca2592402a68779cafvandwalle * The linked configuration may or may not have same SSID, and may or may not have same 13387c3606c103e95d3991267cca2592402a68779cafvandwalle * credentials. 13397c3606c103e95d3991267cca2592402a68779cafvandwalle * For instance, linked configurations will have same defaultGwMacAddress or same dhcp server. 13407c3606c103e95d3991267cca2592402a68779cafvandwalle */ 13417c3606c103e95d3991267cca2592402a68779cafvandwalle public HashMap<String, Integer> linkedConfigurations; 13427c3606c103e95d3991267cca2592402a68779cafvandwalle 13439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public WifiConfiguration() { 13445ee89800bee7c6c755778795a536e0e2f12b85ffIrfan Sheriff networkId = INVALID_NETWORK_ID; 13459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SSID = null; 13469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BSSID = null; 13478a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng FQDN = null; 13487226c8f95b5971af2710c8d2f8a8b6f2210e2420Vinit Deshpande roamingConsortiumIds = new long[0]; 13499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project priority = 0; 13509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project hiddenSSID = false; 13519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project allowedKeyManagement = new BitSet(); 13529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project allowedProtocols = new BitSet(); 13539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project allowedAuthAlgorithms = new BitSet(); 13549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project allowedPairwiseCiphers = new BitSet(); 13559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project allowedGroupCiphers = new BitSet(); 13569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wepKeys = new String[4]; 13579b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff for (int i = 0; i < wepKeys.length; i++) { 13589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wepKeys[i] = null; 13594337476a6669ce52549ce4a60f5e4d07f8e3033fChung-yih Wang } 13609b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff enterpriseConfig = new WifiEnterpriseConfig(); 1361e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle selfAdded = false; 13628f13548615f647a1208ace5369b504cb41149965vandwalle didSelfAdd = false; 1363e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle ephemeral = false; 1364f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin meteredHint = false; 1365fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin useExternalScores = false; 1366ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle validatedInternetAccess = false; 13676346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim mIpConfiguration = new IpConfiguration(); 13683e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber lastUpdateUid = -1; 13693e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber creatorUid = -1; 13706fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski shared = true; 1371b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne dtimInterval = 0; 13729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 137410652a95b16909acf26f31cdafc0c6aa09212f26Vinit Deshapnde /** 13752522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande * Identify if this configuration represents a passpoint network 13762522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande */ 13772522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande public boolean isPasspoint() { 1378ad25bb89251c0552cfbc6c254853c79b7d9c121aVinit Deshpande return !TextUtils.isEmpty(FQDN) 13792522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande && !TextUtils.isEmpty(providerFriendlyName) 13802522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande && enterpriseConfig != null 13812522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande && enterpriseConfig.getEapMethod() != WifiEnterpriseConfig.Eap.NONE; 13822522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande } 13832522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande 13842522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande /** 1385111fa0274d1d6620f9634783585387f3b773949evandwalle * Helper function, identify if a configuration is linked 1386111fa0274d1d6620f9634783585387f3b773949evandwalle * @hide 1387111fa0274d1d6620f9634783585387f3b773949evandwalle */ 1388111fa0274d1d6620f9634783585387f3b773949evandwalle public boolean isLinked(WifiConfiguration config) { 13898d106780b6a638552749e54e169fc72537d4bcccxinhe if (config != null) { 13908d106780b6a638552749e54e169fc72537d4bcccxinhe if (config.linkedConfigurations != null && linkedConfigurations != null) { 13918d106780b6a638552749e54e169fc72537d4bcccxinhe if (config.linkedConfigurations.get(configKey()) != null 13928d106780b6a638552749e54e169fc72537d4bcccxinhe && linkedConfigurations.get(config.configKey()) != null) { 13938d106780b6a638552749e54e169fc72537d4bcccxinhe return true; 13948d106780b6a638552749e54e169fc72537d4bcccxinhe } 1395111fa0274d1d6620f9634783585387f3b773949evandwalle } 1396111fa0274d1d6620f9634783585387f3b773949evandwalle } 1397111fa0274d1d6620f9634783585387f3b773949evandwalle return false; 13987c3606c103e95d3991267cca2592402a68779cafvandwalle } 13997c3606c103e95d3991267cca2592402a68779cafvandwalle 14007c3606c103e95d3991267cca2592402a68779cafvandwalle /** 1401c55cd103708493f9d45122236affbf08b49456f0Sky Faber * Helper function, idenfity if a configuration should be treated as an enterprise network 1402c55cd103708493f9d45122236affbf08b49456f0Sky Faber * @hide 1403c55cd103708493f9d45122236affbf08b49456f0Sky Faber */ 1404c55cd103708493f9d45122236affbf08b49456f0Sky Faber public boolean isEnterprise() { 1405c55cd103708493f9d45122236affbf08b49456f0Sky Faber return allowedKeyManagement.get(KeyMgmt.WPA_EAP) || 1406c55cd103708493f9d45122236affbf08b49456f0Sky Faber allowedKeyManagement.get(KeyMgmt.IEEE8021X); 1407c55cd103708493f9d45122236affbf08b49456f0Sky Faber } 1408c55cd103708493f9d45122236affbf08b49456f0Sky Faber 14098dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy @Override 14109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 14118dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy StringBuilder sbuf = new StringBuilder(); 14129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.status == WifiConfiguration.Status.CURRENT) { 14139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("* "); 14149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (this.status == WifiConfiguration.Status.DISABLED) { 141563edd98d2eb744cc78dc3a3f8ec1ce7e6164d69dvandwalle sbuf.append("- DSBLE "); 14169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("ID: ").append(this.networkId).append(" SSID: ").append(this.SSID). 1418b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande append(" PROVIDER-NAME: ").append(this.providerFriendlyName). 14198d106780b6a638552749e54e169fc72537d4bcccxinhe append(" BSSID: ").append(this.BSSID).append(" FQDN: ").append(this.FQDN) 14208d106780b6a638552749e54e169fc72537d4bcccxinhe .append(" PRIO: ").append(this.priority) 1421e23993848c65c7fb2c91bb89989117d35dabe5c3mukesh agrawal .append(" HIDDEN: ").append(this.hiddenSSID) 14228d106780b6a638552749e54e169fc72537d4bcccxinhe .append('\n'); 14238d106780b6a638552749e54e169fc72537d4bcccxinhe 14248d106780b6a638552749e54e169fc72537d4bcccxinhe 14258d106780b6a638552749e54e169fc72537d4bcccxinhe sbuf.append(" NetworkSelectionStatus ") 14268d106780b6a638552749e54e169fc72537d4bcccxinhe .append(mNetworkSelectionStatus.getNetworkStatusString() + "\n"); 14278d106780b6a638552749e54e169fc72537d4bcccxinhe if (mNetworkSelectionStatus.getNetworkSelectionDisableReason() > 0) { 14288d106780b6a638552749e54e169fc72537d4bcccxinhe sbuf.append(" mNetworkSelectionDisableReason ") 14298d106780b6a638552749e54e169fc72537d4bcccxinhe .append(mNetworkSelectionStatus.getNetworkDisableReasonString() + "\n"); 14308d106780b6a638552749e54e169fc72537d4bcccxinhe 14318d106780b6a638552749e54e169fc72537d4bcccxinhe for (int index = mNetworkSelectionStatus.NETWORK_SELECTION_ENABLE; 14328d106780b6a638552749e54e169fc72537d4bcccxinhe index < mNetworkSelectionStatus.NETWORK_SELECTION_DISABLED_MAX; index++) { 14338d106780b6a638552749e54e169fc72537d4bcccxinhe if (mNetworkSelectionStatus.getDisableReasonCounter(index) != 0) { 14348d106780b6a638552749e54e169fc72537d4bcccxinhe sbuf.append(NetworkSelectionStatus.getNetworkDisableReasonString(index) 14358d106780b6a638552749e54e169fc72537d4bcccxinhe + " counter:" + mNetworkSelectionStatus.getDisableReasonCounter(index) 14368d106780b6a638552749e54e169fc72537d4bcccxinhe + "\n"); 14378d106780b6a638552749e54e169fc72537d4bcccxinhe } 14388d106780b6a638552749e54e169fc72537d4bcccxinhe } 14390561030490e418fcead83606249d8cfdc344a163Mike Lockwood } 1440584dc6b8b9628d930de4ea3ad94894886294b855xinhe if (mNetworkSelectionStatus.getConnectChoice() != null) { 1441584dc6b8b9628d930de4ea3ad94894886294b855xinhe sbuf.append(" connect choice: ").append(mNetworkSelectionStatus.getConnectChoice()); 1442584dc6b8b9628d930de4ea3ad94894886294b855xinhe sbuf.append(" connect choice set time: ").append(mNetworkSelectionStatus 1443584dc6b8b9628d930de4ea3ad94894886294b855xinhe .getConnectChoiceTimestamp()); 1444584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 1445cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein sbuf.append(" hasEverConnected: ") 1446cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein .append(mNetworkSelectionStatus.getHasEverConnected()).append("\n"); 14478d106780b6a638552749e54e169fc72537d4bcccxinhe 14480561030490e418fcead83606249d8cfdc344a163Mike Lockwood if (this.numAssociation > 0) { 14490561030490e418fcead83606249d8cfdc344a163Mike Lockwood sbuf.append(" numAssociation ").append(this.numAssociation).append("\n"); 145016a40cc7b597f0492f633cc0f742dc796955e7fdvandwalle } 1451ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle if (this.numNoInternetAccessReports > 0) { 1452ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle sbuf.append(" numNoInternetAccessReports "); 1453ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle sbuf.append(this.numNoInternetAccessReports).append("\n"); 1454ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle } 1455ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle if (this.updateTime != null) { 1456edbedd28b6aa10c266e627a9609b1c538479f03bPierre Vandwalle sbuf.append("update ").append(this.updateTime).append("\n"); 1457ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle } 1458ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle if (this.creationTime != null) { 1459edbedd28b6aa10c266e627a9609b1c538479f03bPierre Vandwalle sbuf.append("creation").append(this.creationTime).append("\n"); 1460ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle } 146194fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle if (this.didSelfAdd) sbuf.append(" didSelfAdd"); 146294fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle if (this.selfAdded) sbuf.append(" selfAdded"); 1463ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle if (this.validatedInternetAccess) sbuf.append(" validatedInternetAccess"); 14648faf2a2a15853368a14babf935c156664b5f0b6cJeff Davidson if (this.ephemeral) sbuf.append(" ephemeral"); 1465f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin if (this.meteredHint) sbuf.append(" meteredHint"); 1466fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin if (this.useExternalScores) sbuf.append(" useExternalScores"); 1467f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin if (this.didSelfAdd || this.selfAdded || this.validatedInternetAccess 1468fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin || this.ephemeral || this.meteredHint || this.useExternalScores) { 146916a40cc7b597f0492f633cc0f742dc796955e7fdvandwalle sbuf.append("\n"); 147016a40cc7b597f0492f633cc0f742dc796955e7fdvandwalle } 14719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" KeyMgmt:"); 14729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int k = 0; k < this.allowedKeyManagement.size(); k++) { 14739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.allowedKeyManagement.get(k)) { 14749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" "); 14759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (k < KeyMgmt.strings.length) { 14769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(KeyMgmt.strings[k]); 14779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 14789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("??"); 14799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" Protocols:"); 14839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int p = 0; p < this.allowedProtocols.size(); p++) { 14849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.allowedProtocols.get(p)) { 14859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" "); 14869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (p < Protocol.strings.length) { 14879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(Protocol.strings[p]); 14889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 14899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("??"); 14909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append('\n'); 14949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" AuthAlgorithms:"); 14959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int a = 0; a < this.allowedAuthAlgorithms.size(); a++) { 14969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.allowedAuthAlgorithms.get(a)) { 14979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" "); 14989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (a < AuthAlgorithm.strings.length) { 14999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(AuthAlgorithm.strings[a]); 15009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 15019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("??"); 15029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append('\n'); 15069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" PairwiseCiphers:"); 15079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int pc = 0; pc < this.allowedPairwiseCiphers.size(); pc++) { 15089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.allowedPairwiseCiphers.get(pc)) { 15099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" "); 15109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (pc < PairwiseCipher.strings.length) { 15119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(PairwiseCipher.strings[pc]); 15129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 15139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("??"); 15149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append('\n'); 15189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" GroupCiphers:"); 15199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int gc = 0; gc < this.allowedGroupCiphers.size(); gc++) { 15209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.allowedGroupCiphers.get(gc)) { 15219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" "); 15229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (gc < GroupCipher.strings.length) { 15239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(GroupCipher.strings[gc]); 15249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 15259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("??"); 15269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15295069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang sbuf.append('\n').append(" PSK: "); 15309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.preSharedKey != null) { 15315069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang sbuf.append('*'); 15325069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang } 153394fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append("\nEnterprise config:\n"); 15349b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff sbuf.append(enterpriseConfig); 15359b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff 153694fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append("IP config:\n"); 15376346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim sbuf.append(mIpConfiguration.toString()); 1538128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff 15398d106780b6a638552749e54e169fc72537d4bcccxinhe if (mNetworkSelectionStatus.getNetworkSelectionBSSID() != null) { 15408d106780b6a638552749e54e169fc72537d4bcccxinhe sbuf.append(" networkSelectionBSSID=" 15418d106780b6a638552749e54e169fc72537d4bcccxinhe + mNetworkSelectionStatus.getNetworkSelectionBSSID()); 15428d106780b6a638552749e54e169fc72537d4bcccxinhe } 154394fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle long now_ms = System.currentTimeMillis(); 15448d106780b6a638552749e54e169fc72537d4bcccxinhe if (mNetworkSelectionStatus.getDisableTime() != NetworkSelectionStatus 15458d106780b6a638552749e54e169fc72537d4bcccxinhe .INVALID_NETWORK_SELECTION_DISABLE_TIMESTAMP) { 154694fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append('\n'); 15478d106780b6a638552749e54e169fc72537d4bcccxinhe long diff = now_ms - mNetworkSelectionStatus.getDisableTime(); 15482ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle if (diff <= 0) { 154994fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append(" blackListed since <incorrect>"); 15502ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle } else { 1551aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy sbuf.append(" blackListed: ").append(Long.toString(diff / 1000)).append("sec "); 155294fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle } 155394fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle } 1554aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy if (creatorUid != 0) sbuf.append(" cuid=" + creatorUid); 15553e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber if (creatorName != null) sbuf.append(" cname=" + creatorName); 15563e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber if (lastUpdateUid != 0) sbuf.append(" luid=" + lastUpdateUid); 15573e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber if (lastUpdateName != null) sbuf.append(" lname=" + lastUpdateName); 15581ac50cb32c08388540f53833c04a02f13fed0824Lorenzo Colitti sbuf.append(" lcuid=" + lastConnectUid); 15591ac50cb32c08388540f53833c04a02f13fed0824Lorenzo Colitti sbuf.append(" userApproved=" + userApprovedAsString(userApproved)); 15601ac50cb32c08388540f53833c04a02f13fed0824Lorenzo Colitti sbuf.append(" noInternetAccessExpected=" + noInternetAccessExpected); 1561e45b50293eb9f13596b3a797ecc6815a443d0cdfpkanwar sbuf.append(" isCarrierNetwork=" + isCarrierNetwork); 15621248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti sbuf.append(" "); 15633e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber 156494fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle if (this.lastConnected != 0) { 156594fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append('\n'); 156694fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle long diff = now_ms - this.lastConnected; 156794fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle if (diff <= 0) { 156894fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append("lastConnected since <incorrect>"); 156994fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle } else { 1570aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy sbuf.append("lastConnected: ").append(Long.toString(diff / 1000)).append("sec "); 157194fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle } 157294fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle } 157394fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle if (this.lastConnectionFailure != 0) { 157494fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append('\n'); 157594fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle long diff = now_ms - this.lastConnectionFailure; 157694fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle if (diff <= 0) { 15775ddc65b9860b7ef39a0921bcbca3cbc50abe3a2cPierre Vandwalle sbuf.append("lastConnectionFailure since <incorrect> "); 157894fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle } else { 1579aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy sbuf.append("lastConnectionFailure: ").append(Long.toString(diff / 1000)); 1580aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy sbuf.append("sec "); 15812ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle } 15822ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle } 15838650c035609507340e3a66459cea16ef08cd03a6vandwalle if (this.lastRoamingFailure != 0) { 15848650c035609507340e3a66459cea16ef08cd03a6vandwalle sbuf.append('\n'); 15858650c035609507340e3a66459cea16ef08cd03a6vandwalle long diff = now_ms - this.lastRoamingFailure; 15868650c035609507340e3a66459cea16ef08cd03a6vandwalle if (diff <= 0) { 15875ddc65b9860b7ef39a0921bcbca3cbc50abe3a2cPierre Vandwalle sbuf.append("lastRoamingFailure since <incorrect> "); 15888650c035609507340e3a66459cea16ef08cd03a6vandwalle } else { 1589aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy sbuf.append("lastRoamingFailure: ").append(Long.toString(diff / 1000)); 1590aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy sbuf.append("sec "); 15918650c035609507340e3a66459cea16ef08cd03a6vandwalle } 15928650c035609507340e3a66459cea16ef08cd03a6vandwalle } 15938650c035609507340e3a66459cea16ef08cd03a6vandwalle sbuf.append("roamingFailureBlackListTimeMilli: "). 15948650c035609507340e3a66459cea16ef08cd03a6vandwalle append(Long.toString(this.roamingFailureBlackListTimeMilli)); 1595448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle sbuf.append('\n'); 1596448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle if (this.linkedConfigurations != null) { 1597aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy for (String key : this.linkedConfigurations.keySet()) { 1598448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle sbuf.append(" linked: ").append(key); 1599448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle sbuf.append('\n'); 1600448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle } 1601448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle } 160294fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append("triggeredLow: ").append(this.numUserTriggeredWifiDisableLowRSSI); 160394fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append(" triggeredBad: ").append(this.numUserTriggeredWifiDisableBadRSSI); 160494fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append(" triggeredNotHigh: ").append(this.numUserTriggeredWifiDisableNotHighRSSI); 160594fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append('\n'); 160694fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append("ticksLow: ").append(this.numTicksAtLowRSSI); 160794fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append(" ticksBad: ").append(this.numTicksAtBadRSSI); 160894fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append(" ticksNotHigh: ").append(this.numTicksAtNotHighRSSI); 1609448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle sbuf.append('\n'); 161094fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append("triggeredJoin: ").append(this.numUserTriggeredJoinAttempts); 1611448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle sbuf.append('\n'); 16128f13548615f647a1208ace5369b504cb41149965vandwalle 16139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return sbuf.toString(); 16149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1616b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff /** {@hide} */ 1617b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff public String getPrintableSsid() { 1618b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff if (SSID == null) return ""; 1619b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff final int length = SSID.length(); 1620b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff if (length > 2 && (SSID.charAt(0) == '"') && SSID.charAt(length - 1) == '"') { 1621b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff return SSID.substring(1, length - 1); 1622b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 1623b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 1624b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff /** The ascii-encoded string format is P"<ascii-encoded-string>" 1625b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff * The decoding is implemented in the supplicant for a newly configured 1626b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff * network. 1627b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff */ 1628b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff if (length > 3 && (SSID.charAt(0) == 'P') && (SSID.charAt(1) == '"') && 1629b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff (SSID.charAt(length-1) == '"')) { 1630b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff WifiSsid wifiSsid = WifiSsid.createFromAsciiEncoded( 1631b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff SSID.substring(2, length - 1)); 1632b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff return wifiSsid.toString(); 1633b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 1634b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff return SSID; 1635b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 1636b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 16373e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber /** @hide **/ 16383e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber public static String userApprovedAsString(int userApproved) { 16393e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber switch (userApproved) { 16403e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber case USER_APPROVED: 16413e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber return "USER_APPROVED"; 16423e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber case USER_BANNED: 16433e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber return "USER_BANNED"; 16443e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber case USER_UNSPECIFIED: 16453e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber return "USER_UNSPECIFIED"; 16463e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber default: 16473e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber return "INVALID"; 16483e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber } 16493e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber } 16503e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber 165126d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff /** 165226d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * Get an identifier for associating credentials with this config 165326d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * @param current configuration contains values for additional fields 165426d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * that are not part of this configuration. Used 165526d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * when a config with some fields is passed by an application. 165626d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * @throws IllegalStateException if config is invalid for key id generation 165726d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * @hide 165826d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff */ 1659ffadfb9ffdced62db215319d3edc7717802088fbVinit Deshapnde public String getKeyIdForCredentials(WifiConfiguration current) { 166026d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff String keyMgmt = null; 166126d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff 166226d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff try { 166326d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff // Get current config details for fields that are not initialized 166426d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff if (TextUtils.isEmpty(SSID)) SSID = current.SSID; 166526d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff if (allowedKeyManagement.cardinality() == 0) { 166626d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff allowedKeyManagement = current.allowedKeyManagement; 166726d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 166826d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff if (allowedKeyManagement.get(KeyMgmt.WPA_EAP)) { 166926d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff keyMgmt = KeyMgmt.strings[KeyMgmt.WPA_EAP]; 167026d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 167161b5a7689320274ce5fff9a9eae1866d8d696b9bJan Nordqvist if (allowedKeyManagement.get(KeyMgmt.OSEN)) { 167261b5a7689320274ce5fff9a9eae1866d8d696b9bJan Nordqvist keyMgmt = KeyMgmt.strings[KeyMgmt.OSEN]; 167361b5a7689320274ce5fff9a9eae1866d8d696b9bJan Nordqvist } 167426d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff if (allowedKeyManagement.get(KeyMgmt.IEEE8021X)) { 167526d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff keyMgmt += KeyMgmt.strings[KeyMgmt.IEEE8021X]; 167626d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 167726d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff 167826d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff if (TextUtils.isEmpty(keyMgmt)) { 167926d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff throw new IllegalStateException("Not an EAP network"); 168026d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 168126d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff 168226d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff return trimStringForKeyId(SSID) + "_" + keyMgmt + "_" + 168326d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff trimStringForKeyId(enterpriseConfig.getKeyId(current != null ? 168426d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff current.enterpriseConfig : null)); 168526d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } catch (NullPointerException e) { 168626d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff throw new IllegalStateException("Invalid config details"); 168726d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 168826d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 168926d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff 169026d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff private String trimStringForKeyId(String string) { 169126d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff // Remove quotes and spaces 169226d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff return string.replace("\"", "").replace(" ", ""); 169326d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 169426d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff 16959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static BitSet readBitSet(Parcel src) { 16969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int cardinality = src.readInt(); 16979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BitSet set = new BitSet(); 16999b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff for (int i = 0; i < cardinality; i++) { 17009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project set.set(src.readInt()); 17019b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff } 17029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return set; 17049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static void writeBitSet(Parcel dest, BitSet set) { 17079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int nextSetBit = -1; 17089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(set.cardinality()); 17109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17119b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff while ((nextSetBit = set.nextSetBit(nextSetBit + 1)) != -1) { 17129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(nextSetBit); 17139b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff } 17149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1716ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff /** @hide */ 1717ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff public int getAuthType() { 1718d49288352908e8cbc9a001e13df2eb35e78deb1aJan Nordqvist if (allowedKeyManagement.cardinality() > 1) { 1719d49288352908e8cbc9a001e13df2eb35e78deb1aJan Nordqvist throw new IllegalStateException("More than one auth type set"); 172026d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 1721ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff if (allowedKeyManagement.get(KeyMgmt.WPA_PSK)) { 1722ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff return KeyMgmt.WPA_PSK; 1723ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff } else if (allowedKeyManagement.get(KeyMgmt.WPA2_PSK)) { 1724ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff return KeyMgmt.WPA2_PSK; 1725ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff } else if (allowedKeyManagement.get(KeyMgmt.WPA_EAP)) { 1726ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff return KeyMgmt.WPA_EAP; 1727ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff } else if (allowedKeyManagement.get(KeyMgmt.IEEE8021X)) { 1728ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff return KeyMgmt.IEEE8021X; 1729ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff } 1730ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff return KeyMgmt.NONE; 1731ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff } 1732ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff 17337c3606c103e95d3991267cca2592402a68779cafvandwalle /* @hide 17347c3606c103e95d3991267cca2592402a68779cafvandwalle * Cache the config key, this seems useful as a speed up since a lot of 17357c3606c103e95d3991267cca2592402a68779cafvandwalle * lookups in the config store are done and based on this key. 17367c3606c103e95d3991267cca2592402a68779cafvandwalle */ 17377c3606c103e95d3991267cca2592402a68779cafvandwalle String mCachedConfigKey; 17387c3606c103e95d3991267cca2592402a68779cafvandwalle 17397c3606c103e95d3991267cca2592402a68779cafvandwalle /** @hide 17407c3606c103e95d3991267cca2592402a68779cafvandwalle * return the string used to calculate the hash in WifiConfigStore 17417c3606c103e95d3991267cca2592402a68779cafvandwalle * and uniquely identify this WifiConfiguration 17427c3606c103e95d3991267cca2592402a68779cafvandwalle */ 17437c3606c103e95d3991267cca2592402a68779cafvandwalle public String configKey(boolean allowCached) { 17447c3606c103e95d3991267cca2592402a68779cafvandwalle String key; 17457c3606c103e95d3991267cca2592402a68779cafvandwalle if (allowCached && mCachedConfigKey != null) { 17467c3606c103e95d3991267cca2592402a68779cafvandwalle key = mCachedConfigKey; 1747b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande } else if (providerFriendlyName != null) { 1748b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande key = FQDN + KeyMgmt.strings[KeyMgmt.WPA_EAP]; 17496fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski if (!shared) { 17506fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski key += "-" + Integer.toString(UserHandle.getUserId(creatorUid)); 17516fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski } 17527c3606c103e95d3991267cca2592402a68779cafvandwalle } else { 17538e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti if (allowedKeyManagement.get(KeyMgmt.WPA_PSK)) { 17548e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti key = SSID + KeyMgmt.strings[KeyMgmt.WPA_PSK]; 17558e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti } else if (allowedKeyManagement.get(KeyMgmt.WPA_EAP) || 17568e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti allowedKeyManagement.get(KeyMgmt.IEEE8021X)) { 17578e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti key = SSID + KeyMgmt.strings[KeyMgmt.WPA_EAP]; 17588e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti } else if (wepKeys[0] != null) { 17598e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti key = SSID + "WEP"; 17608e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti } else { 17618e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti key = SSID + KeyMgmt.strings[KeyMgmt.NONE]; 17627c3606c103e95d3991267cca2592402a68779cafvandwalle } 17636fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski if (!shared) { 17646fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski key += "-" + Integer.toString(UserHandle.getUserId(creatorUid)); 17656fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski } 17667c3606c103e95d3991267cca2592402a68779cafvandwalle mCachedConfigKey = key; 17677c3606c103e95d3991267cca2592402a68779cafvandwalle } 17687c3606c103e95d3991267cca2592402a68779cafvandwalle return key; 17697c3606c103e95d3991267cca2592402a68779cafvandwalle } 17707c3606c103e95d3991267cca2592402a68779cafvandwalle 17717c3606c103e95d3991267cca2592402a68779cafvandwalle /** @hide 17727c3606c103e95d3991267cca2592402a68779cafvandwalle * get configKey, force calculating the config string 17737c3606c103e95d3991267cca2592402a68779cafvandwalle */ 17747c3606c103e95d3991267cca2592402a68779cafvandwalle public String configKey() { 17757c3606c103e95d3991267cca2592402a68779cafvandwalle return configKey(false); 17767c3606c103e95d3991267cca2592402a68779cafvandwalle } 17777c3606c103e95d3991267cca2592402a68779cafvandwalle 17786346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 17796346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public IpConfiguration getIpConfiguration() { 17806346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim return mIpConfiguration; 17816346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 17826346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 17836346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 17846346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public void setIpConfiguration(IpConfiguration ipConfiguration) { 17856346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim mIpConfiguration = ipConfiguration; 17866346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 17876346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 17886346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 17890a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti public StaticIpConfiguration getStaticIpConfiguration() { 17900a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti return mIpConfiguration.getStaticIpConfiguration(); 17916346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 17926346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 17936346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 17940a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti public void setStaticIpConfiguration(StaticIpConfiguration staticIpConfiguration) { 17950a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti mIpConfiguration.setStaticIpConfiguration(staticIpConfiguration); 17966346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 17976346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 17986346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 17996346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public IpConfiguration.IpAssignment getIpAssignment() { 18006346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim return mIpConfiguration.ipAssignment; 18016346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 18026346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 18036346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 18046346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public void setIpAssignment(IpConfiguration.IpAssignment ipAssignment) { 18056346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim mIpConfiguration.ipAssignment = ipAssignment; 18066346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 18076346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 18086346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 18096346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public IpConfiguration.ProxySettings getProxySettings() { 18106346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim return mIpConfiguration.proxySettings; 18116346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 18126346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 18136346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 18146346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public void setProxySettings(IpConfiguration.ProxySettings proxySettings) { 18156346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim mIpConfiguration.proxySettings = proxySettings; 18166346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 18176346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 18186346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 18190a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti public ProxyInfo getHttpProxy() { 18200a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti return mIpConfiguration.httpProxy; 18210a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti } 18220a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti 18230a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti /** @hide */ 18240a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti public void setHttpProxy(ProxyInfo httpProxy) { 18250a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti mIpConfiguration.httpProxy = httpProxy; 18260a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti } 18270a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti 18280a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti /** @hide */ 18296346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public void setProxy(ProxySettings settings, ProxyInfo proxy) { 18306346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim mIpConfiguration.proxySettings = settings; 18310a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti mIpConfiguration.httpProxy = proxy; 18326346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 18336346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 183413f48ffab8c24d18a0a83e488a9b358a730580d4vandwalle /** Implement the Parcelable interface {@hide} */ 1835678979748585c5903125a404e448ad6c111dedadJaewan Kim public int describeContents() { 1836678979748585c5903125a404e448ad6c111dedadJaewan Kim return 0; 1837678979748585c5903125a404e448ad6c111dedadJaewan Kim } 1838678979748585c5903125a404e448ad6c111dedadJaewan Kim 18396fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski /** @hide */ 1840a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande public void setPasspointManagementObjectTree(String passpointManagementObjectTree) { 1841a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande mPasspointManagementObjectTree = passpointManagementObjectTree; 1842a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande } 1843a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande 1844a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande /** @hide */ 1845a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande public String getMoTree() { 1846a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande return mPasspointManagementObjectTree; 1847a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande } 1848a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande 1849128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff /** copy constructor {@hide} */ 1850128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff public WifiConfiguration(WifiConfiguration source) { 1851128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff if (source != null) { 1852128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff networkId = source.networkId; 1853128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff status = source.status; 1854128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff SSID = source.SSID; 1855128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff BSSID = source.BSSID; 18568a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng FQDN = source.FQDN; 1857a0d929e505432a8c84f3899696c910db16bd73bfVinit Deshpande roamingConsortiumIds = source.roamingConsortiumIds.clone(); 1858b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande providerFriendlyName = source.providerFriendlyName; 1859128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff preSharedKey = source.preSharedKey; 1860128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff 18618d106780b6a638552749e54e169fc72537d4bcccxinhe mNetworkSelectionStatus.copy(source.getNetworkSelectionStatus()); 1862a0be0fb2709124a567f89114b1d8e80f74452edcxinhe apBand = source.apBand; 1863a0be0fb2709124a567f89114b1d8e80f74452edcxinhe apChannel = source.apChannel; 1864a0be0fb2709124a567f89114b1d8e80f74452edcxinhe 1865128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff wepKeys = new String[4]; 18669b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff for (int i = 0; i < wepKeys.length; i++) { 1867128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff wepKeys[i] = source.wepKeys[i]; 18689b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff } 1869128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff 1870128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff wepTxKeyIndex = source.wepTxKeyIndex; 1871128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff priority = source.priority; 1872128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff hiddenSSID = source.hiddenSSID; 1873128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff allowedKeyManagement = (BitSet) source.allowedKeyManagement.clone(); 1874128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff allowedProtocols = (BitSet) source.allowedProtocols.clone(); 1875128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff allowedAuthAlgorithms = (BitSet) source.allowedAuthAlgorithms.clone(); 1876128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff allowedPairwiseCiphers = (BitSet) source.allowedPairwiseCiphers.clone(); 1877128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff allowedGroupCiphers = (BitSet) source.allowedGroupCiphers.clone(); 18789b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff enterpriseConfig = new WifiEnterpriseConfig(source.enterpriseConfig); 1879678979748585c5903125a404e448ad6c111dedadJaewan Kim 18807c3606c103e95d3991267cca2592402a68779cafvandwalle defaultGwMacAddress = source.defaultGwMacAddress; 18817c3606c103e95d3991267cca2592402a68779cafvandwalle 18826346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim mIpConfiguration = new IpConfiguration(source.mIpConfiguration); 18836346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 18847c3606c103e95d3991267cca2592402a68779cafvandwalle if ((source.linkedConfigurations != null) 18857c3606c103e95d3991267cca2592402a68779cafvandwalle && (source.linkedConfigurations.size() > 0)) { 18867c3606c103e95d3991267cca2592402a68779cafvandwalle linkedConfigurations = new HashMap<String, Integer>(); 18877c3606c103e95d3991267cca2592402a68779cafvandwalle linkedConfigurations.putAll(source.linkedConfigurations); 18887c3606c103e95d3991267cca2592402a68779cafvandwalle } 18897c3606c103e95d3991267cca2592402a68779cafvandwalle mCachedConfigKey = null; //force null configKey 1890e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle selfAdded = source.selfAdded; 1891ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle validatedInternetAccess = source.validatedInternetAccess; 18928faf2a2a15853368a14babf935c156664b5f0b6cJeff Davidson ephemeral = source.ephemeral; 1893f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin meteredHint = source.meteredHint; 1894fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin useExternalScores = source.useExternalScores; 18957c3606c103e95d3991267cca2592402a68779cafvandwalle if (source.visibility != null) { 18967c3606c103e95d3991267cca2592402a68779cafvandwalle visibility = new Visibility(source.visibility); 18977c3606c103e95d3991267cca2592402a68779cafvandwalle } 18983a74e2ef1681eaae973fc989b3533a7f9c82e7b1vandwalle 18993a74e2ef1681eaae973fc989b3533a7f9c82e7b1vandwalle lastFailure = source.lastFailure; 19008f13548615f647a1208ace5369b504cb41149965vandwalle didSelfAdd = source.didSelfAdd; 19018f13548615f647a1208ace5369b504cb41149965vandwalle lastConnectUid = source.lastConnectUid; 19028f13548615f647a1208ace5369b504cb41149965vandwalle lastUpdateUid = source.lastUpdateUid; 19038f13548615f647a1208ace5369b504cb41149965vandwalle creatorUid = source.creatorUid; 19043e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber creatorName = source.creatorName; 19053e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber lastUpdateName = source.lastUpdateName; 19062d0f71eea20470985abde98d759910a1ac40b257vandwalle peerWifiConfiguration = source.peerWifiConfiguration; 19078d106780b6a638552749e54e169fc72537d4bcccxinhe 1908111fa0274d1d6620f9634783585387f3b773949evandwalle lastConnected = source.lastConnected; 1909111fa0274d1d6620f9634783585387f3b773949evandwalle lastDisconnected = source.lastDisconnected; 1910154b2cf6bbb99ee258b289846183172139a87dbavandwalle lastConnectionFailure = source.lastConnectionFailure; 19118650c035609507340e3a66459cea16ef08cd03a6vandwalle lastRoamingFailure = source.lastRoamingFailure; 19128650c035609507340e3a66459cea16ef08cd03a6vandwalle lastRoamingFailureReason = source.lastRoamingFailureReason; 19138650c035609507340e3a66459cea16ef08cd03a6vandwalle roamingFailureBlackListTimeMilli = source.roamingFailureBlackListTimeMilli; 1914154b2cf6bbb99ee258b289846183172139a87dbavandwalle numScorerOverride = source.numScorerOverride; 1915154b2cf6bbb99ee258b289846183172139a87dbavandwalle numScorerOverrideAndSwitchedNetwork = source.numScorerOverrideAndSwitchedNetwork; 19164eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle numAssociation = source.numAssociation; 1917448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle numUserTriggeredWifiDisableLowRSSI = source.numUserTriggeredWifiDisableLowRSSI; 1918448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle numUserTriggeredWifiDisableBadRSSI = source.numUserTriggeredWifiDisableBadRSSI; 1919448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle numUserTriggeredWifiDisableNotHighRSSI = source.numUserTriggeredWifiDisableNotHighRSSI; 1920448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle numTicksAtLowRSSI = source.numTicksAtLowRSSI; 1921448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle numTicksAtBadRSSI = source.numTicksAtBadRSSI; 1922448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle numTicksAtNotHighRSSI = source.numTicksAtNotHighRSSI; 1923448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle numUserTriggeredJoinAttempts = source.numUserTriggeredJoinAttempts; 19243e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber userApproved = source.userApproved; 1925ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle numNoInternetAccessReports = source.numNoInternetAccessReports; 19261248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti noInternetAccessExpected = source.noInternetAccessExpected; 1927e45b50293eb9f13596b3a797ecc6815a443d0cdfpkanwar isCarrierNetwork = source.isCarrierNetwork; 1928ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle creationTime = source.creationTime; 1929ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle updateTime = source.updateTime; 19306fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski shared = source.shared; 19316346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 19329e6222f4c126252c9950d072ab67d8b849d17643Irfan Sheriff } 19339e6222f4c126252c9950d072ab67d8b849d17643Irfan Sheriff 19349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Implement the Parcelable interface {@hide} */ 19356346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim @Override 19369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 19379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(networkId); 19389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(status); 19398d106780b6a638552749e54e169fc72537d4bcccxinhe mNetworkSelectionStatus.writeToParcel(dest); 19409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(SSID); 19419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(BSSID); 1942a0be0fb2709124a567f89114b1d8e80f74452edcxinhe dest.writeInt(apBand); 1943a0be0fb2709124a567f89114b1d8e80f74452edcxinhe dest.writeInt(apChannel); 19448a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng dest.writeString(FQDN); 1945b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande dest.writeString(providerFriendlyName); 1946a0d929e505432a8c84f3899696c910db16bd73bfVinit Deshpande dest.writeInt(roamingConsortiumIds.length); 19477226c8f95b5971af2710c8d2f8a8b6f2210e2420Vinit Deshpande for (long roamingConsortiumId : roamingConsortiumIds) { 1948b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande dest.writeLong(roamingConsortiumId); 1949b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande } 19509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(preSharedKey); 19519b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff for (String wepKey : wepKeys) { 19529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(wepKey); 19539b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff } 19549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(wepTxKeyIndex); 19559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(priority); 19569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(hiddenSSID ? 1 : 0); 19575f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng dest.writeInt(requirePMF ? 1 : 0); 19585f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng dest.writeString(updateIdentifier); 19599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project writeBitSet(dest, allowedKeyManagement); 19619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project writeBitSet(dest, allowedProtocols); 19629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project writeBitSet(dest, allowedAuthAlgorithms); 19639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project writeBitSet(dest, allowedPairwiseCiphers); 19649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project writeBitSet(dest, allowedGroupCiphers); 19654337476a6669ce52549ce4a60f5e4d07f8e3033fChung-yih Wang 19669b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff dest.writeParcelable(enterpriseConfig, flags); 1967678979748585c5903125a404e448ad6c111dedadJaewan Kim 19686346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim dest.writeParcelable(mIpConfiguration, flags); 19697c3606c103e95d3991267cca2592402a68779cafvandwalle dest.writeString(dhcpServer); 19707c3606c103e95d3991267cca2592402a68779cafvandwalle dest.writeString(defaultGwMacAddress); 1971e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle dest.writeInt(selfAdded ? 1 : 0); 19728f13548615f647a1208ace5369b504cb41149965vandwalle dest.writeInt(didSelfAdd ? 1 : 0); 1973ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle dest.writeInt(validatedInternetAccess ? 1 : 0); 19748faf2a2a15853368a14babf935c156664b5f0b6cJeff Davidson dest.writeInt(ephemeral ? 1 : 0); 1975f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin dest.writeInt(meteredHint ? 1 : 0); 1976fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin dest.writeInt(useExternalScores ? 1 : 0); 19778f13548615f647a1208ace5369b504cb41149965vandwalle dest.writeInt(creatorUid); 19788f13548615f647a1208ace5369b504cb41149965vandwalle dest.writeInt(lastConnectUid); 19798f13548615f647a1208ace5369b504cb41149965vandwalle dest.writeInt(lastUpdateUid); 19803e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber dest.writeString(creatorName); 19813e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber dest.writeString(lastUpdateName); 1982154b2cf6bbb99ee258b289846183172139a87dbavandwalle dest.writeLong(lastConnectionFailure); 19838650c035609507340e3a66459cea16ef08cd03a6vandwalle dest.writeLong(lastRoamingFailure); 19848650c035609507340e3a66459cea16ef08cd03a6vandwalle dest.writeInt(lastRoamingFailureReason); 19858650c035609507340e3a66459cea16ef08cd03a6vandwalle dest.writeLong(roamingFailureBlackListTimeMilli); 1986154b2cf6bbb99ee258b289846183172139a87dbavandwalle dest.writeInt(numScorerOverride); 1987154b2cf6bbb99ee258b289846183172139a87dbavandwalle dest.writeInt(numScorerOverrideAndSwitchedNetwork); 19884eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle dest.writeInt(numAssociation); 1989448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle dest.writeInt(numUserTriggeredWifiDisableLowRSSI); 1990448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle dest.writeInt(numUserTriggeredWifiDisableBadRSSI); 1991448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle dest.writeInt(numUserTriggeredWifiDisableNotHighRSSI); 1992448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle dest.writeInt(numTicksAtLowRSSI); 1993448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle dest.writeInt(numTicksAtBadRSSI); 1994448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle dest.writeInt(numTicksAtNotHighRSSI); 1995448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle dest.writeInt(numUserTriggeredJoinAttempts); 19963e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber dest.writeInt(userApproved); 1997ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle dest.writeInt(numNoInternetAccessReports); 19981248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti dest.writeInt(noInternetAccessExpected ? 1 : 0); 1999e45b50293eb9f13596b3a797ecc6815a443d0cdfpkanwar dest.writeInt(isCarrierNetwork ? 1 : 0); 20006fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski dest.writeInt(shared ? 1 : 0); 2001a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande dest.writeString(mPasspointManagementObjectTree); 20029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 20049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Implement the Parcelable interface {@hide} */ 20059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Creator<WifiConfiguration> CREATOR = 20069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new Creator<WifiConfiguration>() { 20079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public WifiConfiguration createFromParcel(Parcel in) { 20089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project WifiConfiguration config = new WifiConfiguration(); 20099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.networkId = in.readInt(); 20109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.status = in.readInt(); 20118d106780b6a638552749e54e169fc72537d4bcccxinhe config.mNetworkSelectionStatus.readFromParcel(in); 20129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.SSID = in.readString(); 20139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.BSSID = in.readString(); 2014a0be0fb2709124a567f89114b1d8e80f74452edcxinhe config.apBand = in.readInt(); 2015a0be0fb2709124a567f89114b1d8e80f74452edcxinhe config.apChannel = in.readInt(); 20168a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng config.FQDN = in.readString(); 2017b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande config.providerFriendlyName = in.readString(); 2018b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande int numRoamingConsortiumIds = in.readInt(); 20197226c8f95b5971af2710c8d2f8a8b6f2210e2420Vinit Deshpande config.roamingConsortiumIds = new long[numRoamingConsortiumIds]; 2020b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande for (int i = 0; i < numRoamingConsortiumIds; i++) { 2021a0d929e505432a8c84f3899696c910db16bd73bfVinit Deshpande config.roamingConsortiumIds[i] = in.readLong(); 2022b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande } 20239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.preSharedKey = in.readString(); 20249b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff for (int i = 0; i < config.wepKeys.length; i++) { 20259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.wepKeys[i] = in.readString(); 20269b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff } 20279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.wepTxKeyIndex = in.readInt(); 20289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.priority = in.readInt(); 20299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.hiddenSSID = in.readInt() != 0; 20305f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng config.requirePMF = in.readInt() != 0; 20315f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng config.updateIdentifier = in.readString(); 20325f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng 20339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.allowedKeyManagement = readBitSet(in); 20349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.allowedProtocols = readBitSet(in); 20359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.allowedAuthAlgorithms = readBitSet(in); 20369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.allowedPairwiseCiphers = readBitSet(in); 20379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.allowedGroupCiphers = readBitSet(in); 20384337476a6669ce52549ce4a60f5e4d07f8e3033fChung-yih Wang 20399b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff config.enterpriseConfig = in.readParcelable(null); 20406346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim config.mIpConfiguration = in.readParcelable(null); 20417c3606c103e95d3991267cca2592402a68779cafvandwalle config.dhcpServer = in.readString(); 20427c3606c103e95d3991267cca2592402a68779cafvandwalle config.defaultGwMacAddress = in.readString(); 2043e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle config.selfAdded = in.readInt() != 0; 20448f13548615f647a1208ace5369b504cb41149965vandwalle config.didSelfAdd = in.readInt() != 0; 2045ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle config.validatedInternetAccess = in.readInt() != 0; 20468faf2a2a15853368a14babf935c156664b5f0b6cJeff Davidson config.ephemeral = in.readInt() != 0; 2047f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin config.meteredHint = in.readInt() != 0; 2048fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin config.useExternalScores = in.readInt() != 0; 20498f13548615f647a1208ace5369b504cb41149965vandwalle config.creatorUid = in.readInt(); 20508f13548615f647a1208ace5369b504cb41149965vandwalle config.lastConnectUid = in.readInt(); 20518f13548615f647a1208ace5369b504cb41149965vandwalle config.lastUpdateUid = in.readInt(); 20523e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber config.creatorName = in.readString(); 20533e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber config.lastUpdateName = in.readString(); 2054154b2cf6bbb99ee258b289846183172139a87dbavandwalle config.lastConnectionFailure = in.readLong(); 20558650c035609507340e3a66459cea16ef08cd03a6vandwalle config.lastRoamingFailure = in.readLong(); 20568650c035609507340e3a66459cea16ef08cd03a6vandwalle config.lastRoamingFailureReason = in.readInt(); 20578650c035609507340e3a66459cea16ef08cd03a6vandwalle config.roamingFailureBlackListTimeMilli = in.readLong(); 2058154b2cf6bbb99ee258b289846183172139a87dbavandwalle config.numScorerOverride = in.readInt(); 2059154b2cf6bbb99ee258b289846183172139a87dbavandwalle config.numScorerOverrideAndSwitchedNetwork = in.readInt(); 20604eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle config.numAssociation = in.readInt(); 2061448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle config.numUserTriggeredWifiDisableLowRSSI = in.readInt(); 2062448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle config.numUserTriggeredWifiDisableBadRSSI = in.readInt(); 2063448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle config.numUserTriggeredWifiDisableNotHighRSSI = in.readInt(); 2064448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle config.numTicksAtLowRSSI = in.readInt(); 2065448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle config.numTicksAtBadRSSI = in.readInt(); 2066448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle config.numTicksAtNotHighRSSI = in.readInt(); 2067448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle config.numUserTriggeredJoinAttempts = in.readInt(); 20683e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber config.userApproved = in.readInt(); 2069ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle config.numNoInternetAccessReports = in.readInt(); 20701248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti config.noInternetAccessExpected = in.readInt() != 0; 2071e45b50293eb9f13596b3a797ecc6815a443d0cdfpkanwar config.isCarrierNetwork = in.readInt() != 0; 20726fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski config.shared = in.readInt() != 0; 2073a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande config.mPasspointManagementObjectTree = in.readString(); 20749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return config; 20759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 20779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public WifiConfiguration[] newArray(int size) { 20789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new WifiConfiguration[size]; 20799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 2081aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy 2082aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy /** 2083aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy * Serializes the object for backup 2084aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy * @hide 2085aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy */ 2086aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy public byte[] getBytesForBackup() throws IOException { 2087aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy ByteArrayOutputStream baos = new ByteArrayOutputStream(); 2088aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy DataOutputStream out = new DataOutputStream(baos); 2089aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy 2090aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy out.writeInt(BACKUP_VERSION); 2091aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy BackupUtils.writeString(out, SSID); 2092aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy out.writeInt(apBand); 2093aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy out.writeInt(apChannel); 2094aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy BackupUtils.writeString(out, preSharedKey); 2095aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy out.writeInt(getAuthType()); 2096aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy return baos.toByteArray(); 2097aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy } 2098aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy 2099aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy /** 2100aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy * Deserializes a byte array into the WiFiConfiguration Object 2101aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy * @hide 2102aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy */ 2103aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy public static WifiConfiguration getWifiConfigFromBackup(DataInputStream in) throws IOException, 2104aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy BackupUtils.BadVersionException { 2105aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy WifiConfiguration config = new WifiConfiguration(); 2106aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy int version = in.readInt(); 2107aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy if (version < 1 || version > BACKUP_VERSION) { 2108aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy throw new BackupUtils.BadVersionException("Unknown Backup Serialization Version"); 2109aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy } 2110aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy 2111aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy if (version == 1) return null; // Version 1 is a bad dataset. 2112aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy 2113aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy config.SSID = BackupUtils.readString(in); 2114aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy config.apBand = in.readInt(); 2115aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy config.apChannel = in.readInt(); 2116aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy config.preSharedKey = BackupUtils.readString(in); 2117aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy config.allowedKeyManagement.set(in.readInt()); 2118aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy return config; 2119aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy } 2120b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne} 2121