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
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final String varName = "key_mgmt";
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
103ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff        public static final String[] strings = { "NONE", "WPA_PSK", "WPA_EAP", "IEEE8021X",
104a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande                "WPA2_PSK", "OSEN" };
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1065069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Recognized security protocols.
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static class Protocol {
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        private Protocol() { }
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /** WPA/IEEE 802.11i/D3.0 */
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int WPA = 0;
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /** WPA2/IEEE 802.11i */
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int RSN = 1;
117a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande        /** HS2.0 r2 OSEN
118a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande         * @hide
119a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande         */
120a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande        public static final int OSEN = 2;
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final String varName = "proto";
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
124a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande        public static final String[] strings = { "WPA", "RSN", "OSEN" };
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Recognized IEEE 802.11 authentication algorithms.
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static class AuthAlgorithm {
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        private AuthAlgorithm() { }
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /** Open System authentication (required for WPA/WPA2) */
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int OPEN = 0;
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /** Shared Key authentication (requires static WEP keys) */
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int SHARED = 1;
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /** LEAP/Network EAP (only used with LEAP) */
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int LEAP = 2;
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final String varName = "auth_alg";
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final String[] strings = { "OPEN", "SHARED", "LEAP" };
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Recognized pairwise ciphers for WPA.
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static class PairwiseCipher {
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        private PairwiseCipher() { }
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /** Use only Group keys (deprecated) */
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int NONE = 0;
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /** Temporal Key Integrity Protocol [IEEE 802.11i/D7.0] */
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int TKIP = 1;
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /** AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0] */
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int CCMP = 2;
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final String varName = "pairwise";
1595069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final String[] strings = { "NONE", "TKIP", "CCMP" };
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Recognized group ciphers.
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <pre>
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * CCMP = AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0]
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * TKIP = Temporal Key Integrity Protocol [IEEE 802.11i/D7.0]
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * WEP104 = WEP (Wired Equivalent Privacy) with 104-bit key
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * WEP40 = WEP (Wired Equivalent Privacy) with 40-bit key (original 802.11)
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * </pre>
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static class GroupCipher {
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        private GroupCipher() { }
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /** WEP40 = WEP (Wired Equivalent Privacy) with 40-bit key (original 802.11) */
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int WEP40 = 0;
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /** WEP104 = WEP (Wired Equivalent Privacy) with 104-bit key */
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int WEP104 = 1;
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /** Temporal Key Integrity Protocol [IEEE 802.11i/D7.0] */
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int TKIP = 2;
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /** AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0] */
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int CCMP = 3;
183a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande        /** Hotspot 2.0 r2 OSEN
184a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande         * @hide
185a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande         */
186a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande        public static final int GTK_NOT_USED = 4;
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final String varName = "group";
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
190a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande        public static final String[] strings =
191a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande                { "WEP40", "WEP104", "TKIP", "CCMP", "GTK_NOT_USED" };
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Possible status of a network configuration. */
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static class Status {
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        private Status() { }
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /** this is the network we are currently connected to */
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int CURRENT = 0;
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /** supplicant will not attempt to use this network */
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int DISABLED = 1;
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /** supplicant will consider this network available for association */
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int ENABLED = 2;
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final String[] strings = { "current", "disabled", "enabled" };
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2088dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy    /** @hide */
2091ac50cb32c08388540f53833c04a02f13fed0824Lorenzo Colitti    public static final int UNKNOWN_UID = -1;
2101ac50cb32c08388540f53833c04a02f13fed0824Lorenzo Colitti
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The ID number that the supplicant uses to identify this
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * network configuration entry. This must be passed as an argument
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to most calls into the supplicant.
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int networkId;
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The current status of this network configuration entry.
2208d106780b6a638552749e54e169fc72537d4bcccxinhe     * Fixme We need remove this field to use only Quality network selection status only
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see Status
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int status;
2248dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy
2258dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy    /**
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The network's SSID. Can either be an ASCII string,
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * which must be enclosed in double quotation marks
2284e8620f868e2490782ebb960404140ea9482c91dBen Dodson     * (e.g., {@code "MyNetwork"}, or a string of
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * hex digits,which are not enclosed in quotes
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * (e.g., {@code 01a243f405}).
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String SSID;
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * When set, this network configuration entry should only be used when
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * associating with the AP having the specified BSSID. The value is
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a string in the format of an Ethernet MAC address, e.g.,
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <code>XX:XX:XX:XX:XX:XX</code> where each <code>X</code> is a hex digit.
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String BSSID;
240a0be0fb2709124a567f89114b1d8e80f74452edcxinhe
241a0be0fb2709124a567f89114b1d8e80f74452edcxinhe    /**
242d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu     * 2GHz band.
243d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu     * @hide
244d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu     */
245d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu    public static final int AP_BAND_2GHZ = 0;
246d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu
247d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu    /**
248d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu     * 5GHz band.
249d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu     * @hide
250d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu     */
251d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu    public static final int AP_BAND_5GHZ = 1;
252d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu
253d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu    /**
254a0be0fb2709124a567f89114b1d8e80f74452edcxinhe     * The band which AP resides on
255a0be0fb2709124a567f89114b1d8e80f74452edcxinhe     * 0-2G  1-5G
256a0be0fb2709124a567f89114b1d8e80f74452edcxinhe     * By default, 2G is chosen
2577e5e791d22e76eb576fd5cf6dd5437b8050b0438xinhe     * @hide
258a0be0fb2709124a567f89114b1d8e80f74452edcxinhe     */
259d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu    public int apBand = AP_BAND_2GHZ;
260a0be0fb2709124a567f89114b1d8e80f74452edcxinhe
261a0be0fb2709124a567f89114b1d8e80f74452edcxinhe    /**
262a0be0fb2709124a567f89114b1d8e80f74452edcxinhe     * The channel which AP resides on,currently, US only
263a0be0fb2709124a567f89114b1d8e80f74452edcxinhe     * 2G  1-11
264a0be0fb2709124a567f89114b1d8e80f74452edcxinhe     * 5G  36,40,44,48,149,153,157,161,165
265a0be0fb2709124a567f89114b1d8e80f74452edcxinhe     * 0 - find a random available channel according to the apBand
2667e5e791d22e76eb576fd5cf6dd5437b8050b0438xinhe     * @hide
267a0be0fb2709124a567f89114b1d8e80f74452edcxinhe     */
268a0be0fb2709124a567f89114b1d8e80f74452edcxinhe    public int apChannel = 0;
269a0be0fb2709124a567f89114b1d8e80f74452edcxinhe
2708a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng    /**
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Pre-shared key for use with WPA-PSK.
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p/>
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * When the value of this key is read, the actual key is
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not returned, just a "*" if the key has a value, or the null
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * string otherwise.
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String preSharedKey;
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Up to four WEP keys. Either an ASCII string enclosed in double
2804e8620f868e2490782ebb960404140ea9482c91dBen Dodson     * quotation marks (e.g., {@code "abcdef"} or a string
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * of hex digits (e.g., {@code 0102030405}).
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p/>
2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * When the value of one of these keys is read, the actual key is
2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not returned, just a "*" if the key has a value, or the null
2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * string otherwise.
2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String[] wepKeys;
2885069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang
2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Default WEP key index, ranging from 0 to 3. */
2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int wepTxKeyIndex;
2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Priority determines the preference given to a network by {@code wpa_supplicant}
2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * when choosing an access point with which to associate.
2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int priority;
2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * This is a network that does not broadcast its SSID, so an
3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * SSID-specific probe request must be used for scans.
3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean hiddenSSID;
3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3055f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng     * This is a network that requries Protected Management Frames (PMF).
3065f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng     * @hide
3075f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng     */
3085f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng    public boolean requirePMF;
3095f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng
3105f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng    /**
3115f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng     * Update identifier, for Passpoint network.
3125f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng     * @hide
3135f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng     */
3145f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng    public String updateIdentifier;
3155f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng
3165f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng    /**
3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The set of key management protocols supported by this configuration.
3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * See {@link KeyMgmt} for descriptions of the values.
3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Defaults to WPA-PSK WPA-EAP.
3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public BitSet allowedKeyManagement;
3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The set of security protocols supported by this configuration.
3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * See {@link Protocol} for descriptions of the values.
3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Defaults to WPA RSN.
3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public BitSet allowedProtocols;
3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The set of authentication protocols supported by this configuration.
3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * See {@link AuthAlgorithm} for descriptions of the values.
3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Defaults to automatic selection.
3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public BitSet allowedAuthAlgorithms;
3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The set of pairwise ciphers for WPA supported by this configuration.
3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * See {@link PairwiseCipher} for descriptions of the values.
3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Defaults to CCMP TKIP.
3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public BitSet allowedPairwiseCiphers;
3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The set of group ciphers supported by this configuration.
3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * See {@link GroupCipher} for descriptions of the values.
3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Defaults to CCMP TKIP WEP104 WEP40.
3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public BitSet allowedGroupCiphers;
3469b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff    /**
34726d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff     * The enterprise configuration details specifying the EAP method,
34826d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff     * certificates and other settings associated with the EAP.
3499b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff     */
3509b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff    public WifiEnterpriseConfig enterpriseConfig;
3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
352678979748585c5903125a404e448ad6c111dedadJaewan Kim    /**
353b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande     * Fully qualified domain name of a passpoint configuration
354b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande     */
355b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande    public String FQDN;
356b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande
357b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande    /**
358a0d929e505432a8c84f3899696c910db16bd73bfVinit Deshpande     * Name of passpoint credential provider
359b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande     */
360b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande    public String providerFriendlyName;
361b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande
362b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande    /**
363a0d929e505432a8c84f3899696c910db16bd73bfVinit Deshpande     * Roaming Consortium Id list for passpoint credential; identifies a set of networks where
364a0d929e505432a8c84f3899696c910db16bd73bfVinit Deshpande     * passpoint credential will be considered valid
365b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande     */
3667226c8f95b5971af2710c8d2f8a8b6f2210e2420Vinit Deshpande    public long[] roamingConsortiumIds;
367b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande
368b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande    /**
369678979748585c5903125a404e448ad6c111dedadJaewan Kim     * @hide
3706fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski     * This network configuration is visible to and usable by other users on the
3716fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski     * same device.
3726fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski     */
3736fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski    public boolean shared;
3746fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski
3756fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski    /**
3766fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski     * @hide
377678979748585c5903125a404e448ad6c111dedadJaewan Kim     */
3786346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim    private IpConfiguration mIpConfiguration;
379678979748585c5903125a404e448ad6c111dedadJaewan Kim
380678979748585c5903125a404e448ad6c111dedadJaewan Kim    /**
381678979748585c5903125a404e448ad6c111dedadJaewan Kim     * @hide
3827c3606c103e95d3991267cca2592402a68779cafvandwalle     * dhcp server MAC address if known
3837c3606c103e95d3991267cca2592402a68779cafvandwalle     */
3847c3606c103e95d3991267cca2592402a68779cafvandwalle    public String dhcpServer;
3857c3606c103e95d3991267cca2592402a68779cafvandwalle
3867c3606c103e95d3991267cca2592402a68779cafvandwalle    /**
3877c3606c103e95d3991267cca2592402a68779cafvandwalle     * @hide
3887c3606c103e95d3991267cca2592402a68779cafvandwalle     * default Gateway MAC address if known
3897c3606c103e95d3991267cca2592402a68779cafvandwalle     */
3907c3606c103e95d3991267cca2592402a68779cafvandwalle    public String defaultGwMacAddress;
3917c3606c103e95d3991267cca2592402a68779cafvandwalle
3927c3606c103e95d3991267cca2592402a68779cafvandwalle    /**
3937c3606c103e95d3991267cca2592402a68779cafvandwalle     * @hide
3943a74e2ef1681eaae973fc989b3533a7f9c82e7b1vandwalle     * last failure
3953a74e2ef1681eaae973fc989b3533a7f9c82e7b1vandwalle     */
3963a74e2ef1681eaae973fc989b3533a7f9c82e7b1vandwalle    public String lastFailure;
3973a74e2ef1681eaae973fc989b3533a7f9c82e7b1vandwalle
3983a74e2ef1681eaae973fc989b3533a7f9c82e7b1vandwalle    /**
3993a74e2ef1681eaae973fc989b3533a7f9c82e7b1vandwalle     * @hide
400ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle     * last time we connected, this configuration had validated internet access
401448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle     */
402ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle    public boolean validatedInternetAccess;
403448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle
404448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle    /**
405448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle     * @hide
406b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne     * The number of beacon intervals between Delivery Traffic Indication Maps (DTIM)
407b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne     * This value is populated from scan results that contain Beacon Frames, which are infrequent.
408b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne     * The value is not guaranteed to be set or current (Although it SHOULDNT change once set)
409b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne     * Valid values are from 1 - 255. Initialized here as 0, use this to check if set.
410b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne     */
411b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne    public int dtimInterval = 0;
412b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne
413b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne    /**
414b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne     * @hide
4158f13548615f647a1208ace5369b504cb41149965vandwalle     * Uid of app creating the configuration
4168f13548615f647a1208ace5369b504cb41149965vandwalle     */
417adae06be9bfd8cb756e1793b52e682eb87258968Chelsea Derrick    @SystemApi
4188f13548615f647a1208ace5369b504cb41149965vandwalle    public int creatorUid;
4198f13548615f647a1208ace5369b504cb41149965vandwalle
4208f13548615f647a1208ace5369b504cb41149965vandwalle    /**
4218f13548615f647a1208ace5369b504cb41149965vandwalle     * @hide
4228f13548615f647a1208ace5369b504cb41149965vandwalle     * Uid of last app issuing a connection related command
4238f13548615f647a1208ace5369b504cb41149965vandwalle     */
4248f13548615f647a1208ace5369b504cb41149965vandwalle    public int lastConnectUid;
4258f13548615f647a1208ace5369b504cb41149965vandwalle
4268f13548615f647a1208ace5369b504cb41149965vandwalle    /**
4278f13548615f647a1208ace5369b504cb41149965vandwalle     * @hide
4288f13548615f647a1208ace5369b504cb41149965vandwalle     * Uid of last app modifying the configuration
4298f13548615f647a1208ace5369b504cb41149965vandwalle     */
430eb8f329a5e8d4df80447ab9676761f9743d20cd4Chelsea Derrick    @SystemApi
4318f13548615f647a1208ace5369b504cb41149965vandwalle    public int lastUpdateUid;
4328f13548615f647a1208ace5369b504cb41149965vandwalle
4338f13548615f647a1208ace5369b504cb41149965vandwalle    /**
4348f13548615f647a1208ace5369b504cb41149965vandwalle     * @hide
4353e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber     * Universal name for app creating the configuration
4363e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber     *    see {#link {@link PackageManager#getNameForUid(int)}
4373e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber     */
4383e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber    @SystemApi
4393e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber    public String creatorName;
4403e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber
4413e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber    /**
4423e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber     * @hide
4433e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber     * Universal name for app updating the configuration
4443e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber     *    see {#link {@link PackageManager#getNameForUid(int)}
4453e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber     */
4463e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber    @SystemApi
4473e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber    public String lastUpdateName;
4483e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber
4493e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber    /**
4503e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber     * @hide
4513e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber     * Status of user approval for connection
4523e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber     */
4533e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber    public int userApproved = USER_UNSPECIFIED;
4543e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber
4552ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle    /** The Below RSSI thresholds are used to configure AutoJoin
4562ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle     *  - GOOD/LOW/BAD thresholds are used so as to calculate link score
4572e93c38fa6fad224e56a45ff4244bdd538aec846vandwalle     *  - UNWANTED_SOFT are used by the blacklisting logic so as to handle
4582e93c38fa6fad224e56a45ff4244bdd538aec846vandwalle     *  the unwanted network message coming from CS
4592e93c38fa6fad224e56a45ff4244bdd538aec846vandwalle     *  - UNBLACKLIST thresholds are used so as to tweak the speed at which
4602e93c38fa6fad224e56a45ff4244bdd538aec846vandwalle     *  the network is unblacklisted (i.e. if
4612ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle     *          it is seen with good RSSI, it is blacklisted faster)
4622e93c38fa6fad224e56a45ff4244bdd538aec846vandwalle     *  - INITIAL_AUTOJOIN_ATTEMPT, used to determine how close from
4632e93c38fa6fad224e56a45ff4244bdd538aec846vandwalle     *  the network we need to be before autojoin kicks in
4642ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle     */
4657c3606c103e95d3991267cca2592402a68779cafvandwalle    /** @hide **/
4667c3606c103e95d3991267cca2592402a68779cafvandwalle    public static int INVALID_RSSI = -127;
4677c3606c103e95d3991267cca2592402a68779cafvandwalle
4687c3606c103e95d3991267cca2592402a68779cafvandwalle    /**
4697c3606c103e95d3991267cca2592402a68779cafvandwalle     * @hide
4707c3606c103e95d3991267cca2592402a68779cafvandwalle     * A summary of the RSSI and Band status for that configuration
4717c3606c103e95d3991267cca2592402a68779cafvandwalle     * This is used as a temporary value by the auto-join controller
4727c3606c103e95d3991267cca2592402a68779cafvandwalle     */
4736f6c781cca66cabc1f06be368a6dfedceb88ed0eVinit Deshpande    public static final class Visibility {
4747c3606c103e95d3991267cca2592402a68779cafvandwalle        public int rssi5;   // strongest 5GHz RSSI
4757c3606c103e95d3991267cca2592402a68779cafvandwalle        public int rssi24;  // strongest 2.4GHz RSSI
4767c3606c103e95d3991267cca2592402a68779cafvandwalle        public int num5;    // number of BSSIDs on 5GHz
4777c3606c103e95d3991267cca2592402a68779cafvandwalle        public int num24;   // number of BSSIDs on 2.4GHz
478e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle        public long age5;   // timestamp of the strongest 5GHz BSSID (last time it was seen)
479e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle        public long age24;  // timestamp of the strongest 2.4GHz BSSID (last time it was seen)
480e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle        public String BSSID24;
481e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle        public String BSSID5;
48272e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle        public int score; // Debug only, indicate last score used for autojoin/cell-handover
48372e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle        public int currentNetworkBoost; // Debug only, indicate boost applied to RSSI if current
48472e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle        public int bandPreferenceBoost; // Debug only, indicate boost applied to RSSI if current
48572e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle        public int lastChoiceBoost; // Debug only, indicate last choice applied to this configuration
48672e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle        public String lastChoiceConfig; // Debug only, indicate last choice applied to this configuration
4875fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle
4885fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle        public Visibility() {
4897c3606c103e95d3991267cca2592402a68779cafvandwalle            rssi5 = INVALID_RSSI;
4907c3606c103e95d3991267cca2592402a68779cafvandwalle            rssi24 = INVALID_RSSI;
4917c3606c103e95d3991267cca2592402a68779cafvandwalle        }
4925fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle
4935fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle        public Visibility(Visibility source) {
4947c3606c103e95d3991267cca2592402a68779cafvandwalle            rssi5 = source.rssi5;
4957c3606c103e95d3991267cca2592402a68779cafvandwalle            rssi24 = source.rssi24;
4967c3606c103e95d3991267cca2592402a68779cafvandwalle            age24 = source.age24;
4977c3606c103e95d3991267cca2592402a68779cafvandwalle            age5 = source.age5;
4987c3606c103e95d3991267cca2592402a68779cafvandwalle            num24 = source.num24;
4997c3606c103e95d3991267cca2592402a68779cafvandwalle            num5 = source.num5;
500e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle            BSSID5 = source.BSSID5;
501e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle            BSSID24 = source.BSSID24;
5027c3606c103e95d3991267cca2592402a68779cafvandwalle        }
5035fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle
5045fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle        @Override
5055fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle        public String toString() {
5065fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle            StringBuilder sbuf = new StringBuilder();
5075fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle            sbuf.append("[");
5085fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle            if (rssi24 > INVALID_RSSI) {
5095fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle                sbuf.append(Integer.toString(rssi24));
5105fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle                sbuf.append(",");
5115fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle                sbuf.append(Integer.toString(num24));
512e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle                if (BSSID24 != null) sbuf.append(",").append(BSSID24);
5135fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle            }
51472e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle            sbuf.append("; ");
5155fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle            if (rssi5 > INVALID_RSSI) {
5165fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle                sbuf.append(Integer.toString(rssi5));
5175fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle                sbuf.append(",");
5185fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle                sbuf.append(Integer.toString(num5));
519e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle                if (BSSID5 != null) sbuf.append(",").append(BSSID5);
5205fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle            }
52172e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle            if (score != 0) {
52272e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle                sbuf.append("; ").append(score);
52372e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle                sbuf.append(", ").append(currentNetworkBoost);
52472e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle                sbuf.append(", ").append(bandPreferenceBoost);
52572e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle                if (lastChoiceConfig != null) {
52672e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle                    sbuf.append(", ").append(lastChoiceBoost);
52772e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle                    sbuf.append(", ").append(lastChoiceConfig);
52872e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle                }
52972e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle            }
5305fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle            sbuf.append("]");
5315fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle            return sbuf.toString();
5325fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle        }
5337c3606c103e95d3991267cca2592402a68779cafvandwalle    }
5347c3606c103e95d3991267cca2592402a68779cafvandwalle
5357c3606c103e95d3991267cca2592402a68779cafvandwalle    /** @hide
5367c3606c103e95d3991267cca2592402a68779cafvandwalle     * Cache the visibility status of this configuration.
5377c3606c103e95d3991267cca2592402a68779cafvandwalle     * Visibility can change at any time depending on scan results availability.
5387c3606c103e95d3991267cca2592402a68779cafvandwalle     * Owner of the WifiConfiguration is responsible to set this field based on
5397c3606c103e95d3991267cca2592402a68779cafvandwalle     * recent scan results.
5407c3606c103e95d3991267cca2592402a68779cafvandwalle     ***/
5417c3606c103e95d3991267cca2592402a68779cafvandwalle    public Visibility visibility;
5427c3606c103e95d3991267cca2592402a68779cafvandwalle
5437c3606c103e95d3991267cca2592402a68779cafvandwalle    /** @hide
5447c3606c103e95d3991267cca2592402a68779cafvandwalle     * calculate and set Visibility for that configuration.
5457c3606c103e95d3991267cca2592402a68779cafvandwalle     *
5467c3606c103e95d3991267cca2592402a68779cafvandwalle     * age in milliseconds: we will consider only ScanResults that are more recent,
5477c3606c103e95d3991267cca2592402a68779cafvandwalle     * i.e. younger.
5487c3606c103e95d3991267cca2592402a68779cafvandwalle     ***/
5496f6c781cca66cabc1f06be368a6dfedceb88ed0eVinit Deshpande    public void setVisibility(Visibility status) {
5507c3606c103e95d3991267cca2592402a68779cafvandwalle        visibility = status;
5517c3606c103e95d3991267cca2592402a68779cafvandwalle    }
5527c3606c103e95d3991267cca2592402a68779cafvandwalle
5533e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber    // States for the userApproved field
5543e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber    /**
5553e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber     * @hide
5563e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber     * User hasn't specified if connection is okay
5573e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber     */
5583e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber    public static final int USER_UNSPECIFIED = 0;
5593e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber    /**
5603e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber     * @hide
5613e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber     * User has approved this for connection
5623e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber     */
5633e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber    public static final int USER_APPROVED = 1;
5643e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber    /**
5653e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber     * @hide
5663e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber     * User has banned this from connection
5673e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber     */
5683e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber    public static final int USER_BANNED = 2;
5693e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber    /**
5703e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber     * @hide
5713e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber     * Waiting for user input
5723e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber     */
5733e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber    public static final int USER_PENDING = 3;
5743e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber
5757c3606c103e95d3991267cca2592402a68779cafvandwalle    /**
5767c3606c103e95d3991267cca2592402a68779cafvandwalle     * @hide
577ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle     * Number of reports indicating no Internet Access
578ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle     */
579ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle    public int numNoInternetAccessReports;
580ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle
581ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle    /**
582ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle     * @hide
583ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle     * For debug: date at which the config was last updated
584ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle     */
585ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle    public String updateTime;
586ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle
587ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle    /**
588ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle     * @hide
589ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle     * For debug: date at which the config was last updated
590ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle     */
591ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle    public String creationTime;
592ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle
593ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle    /**
594ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle     * @hide
595ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle     * The WiFi configuration is considered to have no internet access for purpose of autojoining
596ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle     * if there has been a report of it having no internet access, and, it never have had
597ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle     * internet access in the past.
598ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle     */
599ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle    public boolean hasNoInternetAccess() {
600ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle        return numNoInternetAccessReports > 0 && !validatedInternetAccess;
601ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle    }
602ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle
603ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle    /**
6041248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti     * The WiFi configuration is expected not to have Internet access (e.g., a wireless printer, a
6051248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti     * Chromecast hotspot, etc.). This will be set if the user explicitly confirms a connection to
6061248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti     * this configuration and selects "don't ask again".
6071248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti     * @hide
6081248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti     */
6091248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti    public boolean noInternetAccessExpected;
6101248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti
6111248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti    /**
612ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle     * @hide
613154b2cf6bbb99ee258b289846183172139a87dbavandwalle     * Last time the system was connected to this configuration.
614111fa0274d1d6620f9634783585387f3b773949evandwalle     */
615111fa0274d1d6620f9634783585387f3b773949evandwalle    public long lastConnected;
616111fa0274d1d6620f9634783585387f3b773949evandwalle
617111fa0274d1d6620f9634783585387f3b773949evandwalle    /**
618111fa0274d1d6620f9634783585387f3b773949evandwalle     * @hide
619154b2cf6bbb99ee258b289846183172139a87dbavandwalle     * Last time the system tried to connect and failed.
620154b2cf6bbb99ee258b289846183172139a87dbavandwalle     */
621154b2cf6bbb99ee258b289846183172139a87dbavandwalle    public long lastConnectionFailure;
622154b2cf6bbb99ee258b289846183172139a87dbavandwalle
623154b2cf6bbb99ee258b289846183172139a87dbavandwalle    /**
624154b2cf6bbb99ee258b289846183172139a87dbavandwalle     * @hide
6258650c035609507340e3a66459cea16ef08cd03a6vandwalle     * Last time the system tried to roam and failed because of authentication failure or DHCP
6268650c035609507340e3a66459cea16ef08cd03a6vandwalle     * RENEW failure.
6278650c035609507340e3a66459cea16ef08cd03a6vandwalle     */
6288650c035609507340e3a66459cea16ef08cd03a6vandwalle    public long lastRoamingFailure;
6298650c035609507340e3a66459cea16ef08cd03a6vandwalle
6308650c035609507340e3a66459cea16ef08cd03a6vandwalle    /** @hide */
6318650c035609507340e3a66459cea16ef08cd03a6vandwalle    public static int ROAMING_FAILURE_IP_CONFIG = 1;
6328650c035609507340e3a66459cea16ef08cd03a6vandwalle    /** @hide */
6338650c035609507340e3a66459cea16ef08cd03a6vandwalle    public static int ROAMING_FAILURE_AUTH_FAILURE = 2;
6348650c035609507340e3a66459cea16ef08cd03a6vandwalle
6358650c035609507340e3a66459cea16ef08cd03a6vandwalle    /**
6368650c035609507340e3a66459cea16ef08cd03a6vandwalle     * @hide
6378650c035609507340e3a66459cea16ef08cd03a6vandwalle     * Initial amount of time this Wifi configuration gets blacklisted for network switching
6388650c035609507340e3a66459cea16ef08cd03a6vandwalle     * because of roaming failure
6398650c035609507340e3a66459cea16ef08cd03a6vandwalle     */
6408650c035609507340e3a66459cea16ef08cd03a6vandwalle    public long roamingFailureBlackListTimeMilli = 1000;
6418650c035609507340e3a66459cea16ef08cd03a6vandwalle
6428650c035609507340e3a66459cea16ef08cd03a6vandwalle    /**
6438650c035609507340e3a66459cea16ef08cd03a6vandwalle     * @hide
6448650c035609507340e3a66459cea16ef08cd03a6vandwalle     * Last roaming failure reason code
6458650c035609507340e3a66459cea16ef08cd03a6vandwalle     */
6468650c035609507340e3a66459cea16ef08cd03a6vandwalle    public int lastRoamingFailureReason;
6478650c035609507340e3a66459cea16ef08cd03a6vandwalle
6488650c035609507340e3a66459cea16ef08cd03a6vandwalle    /**
6498650c035609507340e3a66459cea16ef08cd03a6vandwalle     * @hide
650154b2cf6bbb99ee258b289846183172139a87dbavandwalle     * Last time the system was disconnected to this configuration.
651111fa0274d1d6620f9634783585387f3b773949evandwalle     */
652111fa0274d1d6620f9634783585387f3b773949evandwalle    public long lastDisconnected;
6532ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle
6547c3606c103e95d3991267cca2592402a68779cafvandwalle    /**
655e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle     * Set if the configuration was self added by the framework
6568f13548615f647a1208ace5369b504cb41149965vandwalle     * This boolean is cleared if we get a connect/save/ update or
6578f13548615f647a1208ace5369b504cb41149965vandwalle     * any wifiManager command that indicate the user interacted with the configuration
6588f13548615f647a1208ace5369b504cb41149965vandwalle     * since we will now consider that the configuration belong to him.
659e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle     * @hide
660e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle     */
661e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle    public boolean selfAdded;
662e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle
663e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle    /**
6648f13548615f647a1208ace5369b504cb41149965vandwalle     * Set if the configuration was self added by the framework
6658f13548615f647a1208ace5369b504cb41149965vandwalle     * This boolean is set once and never cleared. It is used
6668f13548615f647a1208ace5369b504cb41149965vandwalle     * so as we never loose track of who created the
6678f13548615f647a1208ace5369b504cb41149965vandwalle     * configuration in the first place.
6688f13548615f647a1208ace5369b504cb41149965vandwalle     * @hide
6698f13548615f647a1208ace5369b504cb41149965vandwalle     */
6708f13548615f647a1208ace5369b504cb41149965vandwalle    public boolean didSelfAdd;
6718f13548615f647a1208ace5369b504cb41149965vandwalle
6728f13548615f647a1208ace5369b504cb41149965vandwalle    /**
673154b2cf6bbb99ee258b289846183172139a87dbavandwalle     * Peer WifiConfiguration this WifiConfiguration was added for
6742d0f71eea20470985abde98d759910a1ac40b257vandwalle     * @hide
6752d0f71eea20470985abde98d759910a1ac40b257vandwalle     */
6762d0f71eea20470985abde98d759910a1ac40b257vandwalle    public String peerWifiConfiguration;
6772d0f71eea20470985abde98d759910a1ac40b257vandwalle
6782d0f71eea20470985abde98d759910a1ac40b257vandwalle    /**
6797c3606c103e95d3991267cca2592402a68779cafvandwalle     * @hide
6807c3606c103e95d3991267cca2592402a68779cafvandwalle     * Indicate that a WifiConfiguration is temporary and should not be saved
6817c3606c103e95d3991267cca2592402a68779cafvandwalle     * nor considered by AutoJoin.
6827c3606c103e95d3991267cca2592402a68779cafvandwalle     */
6837c3606c103e95d3991267cca2592402a68779cafvandwalle    public boolean ephemeral;
6847c3606c103e95d3991267cca2592402a68779cafvandwalle
6857c3606c103e95d3991267cca2592402a68779cafvandwalle    /**
6867c3606c103e95d3991267cca2592402a68779cafvandwalle     * @hide
687f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin     * A hint about whether or not the network represented by this WifiConfiguration
688f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin     * is metered.
689f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin     */
690f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin    public boolean meteredHint;
691f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin
692f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin    /**
693f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin     * @hide
694fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin     * Setting this value will force scan results associated with this configuration to
695fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin     * be included in the bucket of networks that are externally scored.
696fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin     * If not set, associated scan results will be treated as legacy saved networks and
697fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin     * will take precedence over networks in the scored category.
698fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin     */
699fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin    @SystemApi
700fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin    public boolean useExternalScores;
701fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin
702fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin    /**
703fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin     * @hide
704154b2cf6bbb99ee258b289846183172139a87dbavandwalle     * Number of time the scorer overrode a the priority based choice, when comparing two
705154b2cf6bbb99ee258b289846183172139a87dbavandwalle     * WifiConfigurations, note that since comparing WifiConfiguration happens very often
706154b2cf6bbb99ee258b289846183172139a87dbavandwalle     * potentially at every scan, this number might become very large, even on an idle
707154b2cf6bbb99ee258b289846183172139a87dbavandwalle     * system.
708154b2cf6bbb99ee258b289846183172139a87dbavandwalle     */
709154b2cf6bbb99ee258b289846183172139a87dbavandwalle    @SystemApi
710154b2cf6bbb99ee258b289846183172139a87dbavandwalle    public int numScorerOverride;
711154b2cf6bbb99ee258b289846183172139a87dbavandwalle
712154b2cf6bbb99ee258b289846183172139a87dbavandwalle    /**
713154b2cf6bbb99ee258b289846183172139a87dbavandwalle     * @hide
714154b2cf6bbb99ee258b289846183172139a87dbavandwalle     * Number of time the scorer overrode a the priority based choice, and the comparison
715154b2cf6bbb99ee258b289846183172139a87dbavandwalle     * triggered a network switch
716154b2cf6bbb99ee258b289846183172139a87dbavandwalle     */
717154b2cf6bbb99ee258b289846183172139a87dbavandwalle    @SystemApi
718154b2cf6bbb99ee258b289846183172139a87dbavandwalle    public int numScorerOverrideAndSwitchedNetwork;
719154b2cf6bbb99ee258b289846183172139a87dbavandwalle
720154b2cf6bbb99ee258b289846183172139a87dbavandwalle    /**
721154b2cf6bbb99ee258b289846183172139a87dbavandwalle     * @hide
7224eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle     * Number of time we associated to this configuration.
7234eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle     */
7244eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle    @SystemApi
7254eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle    public int numAssociation;
7264eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle
727448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle    /**
728448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle     * @hide
729448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle     * Number of time user disabled WiFi while associated to this configuration with Low RSSI.
730448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle     */
731448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle    public int numUserTriggeredWifiDisableLowRSSI;
732448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle
733448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle    /**
734448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle     * @hide
735448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle     * Number of time user disabled WiFi while associated to this configuration with Bad RSSI.
736448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle     */
737448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle    public int numUserTriggeredWifiDisableBadRSSI;
738448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle
739448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle    /**
740448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle     * @hide
741448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle     * Number of time user disabled WiFi while associated to this configuration
742448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle     * and RSSI was not HIGH.
743448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle     */
744448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle    public int numUserTriggeredWifiDisableNotHighRSSI;
745448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle
746448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle    /**
747448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle     * @hide
748448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle     * Number of ticks associated to this configuration with Low RSSI.
749448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle     */
750448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle    public int numTicksAtLowRSSI;
751448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle
752448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle    /**
753448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle     * @hide
754448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle     * Number of ticks associated to this configuration with Bad RSSI.
755448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle     */
756448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle    public int numTicksAtBadRSSI;
757448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle
758448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle    /**
759448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle     * @hide
760448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle     * Number of ticks associated to this configuration
761448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle     * and RSSI was not HIGH.
762448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle     */
763448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle    public int numTicksAtNotHighRSSI;
764448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle    /**
765448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle     * @hide
766448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle     * Number of time user (WifiManager) triggered association to this configuration.
767448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle     * TODO: count this only for Wifi Settings uuid, so as to not count 3rd party apps
768448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle     */
769448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle    public int numUserTriggeredJoinAttempts;
7704eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle
7718d106780b6a638552749e54e169fc72537d4bcccxinhe    /** @hide
7728d106780b6a638552749e54e169fc72537d4bcccxinhe     * Boost given to RSSI on a home network for the purpose of calculating the score
7738d106780b6a638552749e54e169fc72537d4bcccxinhe     * This adds stickiness to home networks, as defined by:
7748d106780b6a638552749e54e169fc72537d4bcccxinhe     * - less than 4 known BSSIDs
7758d106780b6a638552749e54e169fc72537d4bcccxinhe     * - PSK only
7768d106780b6a638552749e54e169fc72537d4bcccxinhe     * - TODO: add a test to verify that all BSSIDs are behind same gateway
7778d106780b6a638552749e54e169fc72537d4bcccxinhe     ***/
7788d106780b6a638552749e54e169fc72537d4bcccxinhe    public static final int HOME_NETWORK_RSSI_BOOST = 5;
7798d106780b6a638552749e54e169fc72537d4bcccxinhe
7808d106780b6a638552749e54e169fc72537d4bcccxinhe    /**
7818d106780b6a638552749e54e169fc72537d4bcccxinhe     * @hide
7828d106780b6a638552749e54e169fc72537d4bcccxinhe     * This class is used to contain all the information and API used for quality network selection
7838d106780b6a638552749e54e169fc72537d4bcccxinhe     */
7848d106780b6a638552749e54e169fc72537d4bcccxinhe    public static class NetworkSelectionStatus {
7858d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
7868d106780b6a638552749e54e169fc72537d4bcccxinhe         * Quality Network Selection Status enable, temporary disabled, permanently disabled
7878d106780b6a638552749e54e169fc72537d4bcccxinhe         */
7888d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
7898d106780b6a638552749e54e169fc72537d4bcccxinhe         * This network is allowed to join Quality Network Selection
7908d106780b6a638552749e54e169fc72537d4bcccxinhe         */
7918d106780b6a638552749e54e169fc72537d4bcccxinhe        public static final int NETWORK_SELECTION_ENABLED = 0;
7928d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
7938d106780b6a638552749e54e169fc72537d4bcccxinhe         * network was temporary disabled. Can be re-enabled after a time period expire
7948d106780b6a638552749e54e169fc72537d4bcccxinhe         */
7958d106780b6a638552749e54e169fc72537d4bcccxinhe        public static final int NETWORK_SELECTION_TEMPORARY_DISABLED  = 1;
7968d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
7978d106780b6a638552749e54e169fc72537d4bcccxinhe         * network was permanently disabled.
7988d106780b6a638552749e54e169fc72537d4bcccxinhe         */
7998d106780b6a638552749e54e169fc72537d4bcccxinhe        public static final int NETWORK_SELECTION_PERMANENTLY_DISABLED  = 2;
8008d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
8018d106780b6a638552749e54e169fc72537d4bcccxinhe         * Maximum Network selection status
8028d106780b6a638552749e54e169fc72537d4bcccxinhe         */
8038d106780b6a638552749e54e169fc72537d4bcccxinhe        public static final int NETWORK_SELECTION_STATUS_MAX = 3;
8048d106780b6a638552749e54e169fc72537d4bcccxinhe
8058d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
8068d106780b6a638552749e54e169fc72537d4bcccxinhe         * Quality network selection status String (for debug purpose). Use Quality network
8078d106780b6a638552749e54e169fc72537d4bcccxinhe         * selection status value as index to extec the corresponding debug string
8088d106780b6a638552749e54e169fc72537d4bcccxinhe         */
8098d106780b6a638552749e54e169fc72537d4bcccxinhe        private static final String[] QUALITY_NETWORK_SELECTION_STATUS = {
81090a3841994b40aeb1c3a7a6b78dd804e49eb5e13xinhe                "NETWORK_SELECTION_ENABLED",
81190a3841994b40aeb1c3a7a6b78dd804e49eb5e13xinhe                "NETWORK_SELECTION_TEMPORARY_DISABLED",
8128d106780b6a638552749e54e169fc72537d4bcccxinhe                "NETWORK_SELECTION_PERMANENTLY_DISABLED"};
8138d106780b6a638552749e54e169fc72537d4bcccxinhe
8148d106780b6a638552749e54e169fc72537d4bcccxinhe        //Quality Network disabled reasons
8158d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
8168d106780b6a638552749e54e169fc72537d4bcccxinhe         * Default value. Means not disabled
8178d106780b6a638552749e54e169fc72537d4bcccxinhe         */
8188d106780b6a638552749e54e169fc72537d4bcccxinhe        public static final int NETWORK_SELECTION_ENABLE = 0;
8198d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
8208d106780b6a638552749e54e169fc72537d4bcccxinhe         * This network is disabled because higher layer (>2) network is bad
8218d106780b6a638552749e54e169fc72537d4bcccxinhe         */
8228d106780b6a638552749e54e169fc72537d4bcccxinhe        public static final int DISABLED_BAD_LINK = 1;
8238d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
8248d106780b6a638552749e54e169fc72537d4bcccxinhe         * This network is disabled because multiple association rejects
8258d106780b6a638552749e54e169fc72537d4bcccxinhe         */
8268d106780b6a638552749e54e169fc72537d4bcccxinhe        public static final int DISABLED_ASSOCIATION_REJECTION = 2;
8278d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
8288d106780b6a638552749e54e169fc72537d4bcccxinhe         * This network is disabled because multiple authentication failure
8298d106780b6a638552749e54e169fc72537d4bcccxinhe         */
8308d106780b6a638552749e54e169fc72537d4bcccxinhe        public static final int DISABLED_AUTHENTICATION_FAILURE = 3;
8318d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
8328d106780b6a638552749e54e169fc72537d4bcccxinhe         * This network is disabled because multiple DHCP failure
8338d106780b6a638552749e54e169fc72537d4bcccxinhe         */
8348d106780b6a638552749e54e169fc72537d4bcccxinhe        public static final int DISABLED_DHCP_FAILURE = 4;
8358d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
8368d106780b6a638552749e54e169fc72537d4bcccxinhe         * This network is disabled because of security network but no credentials
8378d106780b6a638552749e54e169fc72537d4bcccxinhe         */
8388d106780b6a638552749e54e169fc72537d4bcccxinhe        public static final int DISABLED_DNS_FAILURE = 5;
8398d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
8408d106780b6a638552749e54e169fc72537d4bcccxinhe         * This network is disabled because EAP-TLS failure
8418d106780b6a638552749e54e169fc72537d4bcccxinhe         */
8428d106780b6a638552749e54e169fc72537d4bcccxinhe        public static final int DISABLED_TLS_VERSION_MISMATCH = 6;
8438d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
8448d106780b6a638552749e54e169fc72537d4bcccxinhe         * This network is disabled due to WifiManager disable it explicitly
8458d106780b6a638552749e54e169fc72537d4bcccxinhe         */
8468d106780b6a638552749e54e169fc72537d4bcccxinhe        public static final int DISABLED_AUTHENTICATION_NO_CREDENTIALS = 7;
8478d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
8488d106780b6a638552749e54e169fc72537d4bcccxinhe         * This network is disabled because no Internet connected and user do not want
8498d106780b6a638552749e54e169fc72537d4bcccxinhe         */
8508d106780b6a638552749e54e169fc72537d4bcccxinhe        public static final int DISABLED_NO_INTERNET = 8;
8518d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
8528d106780b6a638552749e54e169fc72537d4bcccxinhe         * This network is disabled due to WifiManager disable it explicitly
8538d106780b6a638552749e54e169fc72537d4bcccxinhe         */
8548d106780b6a638552749e54e169fc72537d4bcccxinhe        public static final int DISABLED_BY_WIFI_MANAGER = 9;
8558d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
8568d106780b6a638552749e54e169fc72537d4bcccxinhe         * This Maximum disable reason value
8578d106780b6a638552749e54e169fc72537d4bcccxinhe         */
8588d106780b6a638552749e54e169fc72537d4bcccxinhe        public static final int NETWORK_SELECTION_DISABLED_MAX = 10;
8598d106780b6a638552749e54e169fc72537d4bcccxinhe
8608d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
8618d106780b6a638552749e54e169fc72537d4bcccxinhe         * Quality network selection disable reason String (for debug purpose)
8628d106780b6a638552749e54e169fc72537d4bcccxinhe         */
8638d106780b6a638552749e54e169fc72537d4bcccxinhe        private static final String[] QUALITY_NETWORK_SELECTION_DISABLE_REASON = {
86490a3841994b40aeb1c3a7a6b78dd804e49eb5e13xinhe                "NETWORK_SELECTION_ENABLE",
86590a3841994b40aeb1c3a7a6b78dd804e49eb5e13xinhe                "NETWORK_SELECTION_DISABLED_BAD_LINK",
8668d106780b6a638552749e54e169fc72537d4bcccxinhe                "NETWORK_SELECTION_DISABLED_ASSOCIATION_REJECTION ",
8678d106780b6a638552749e54e169fc72537d4bcccxinhe                "NETWORK_SELECTION_DISABLED_AUTHENTICATION_FAILURE",
8688d106780b6a638552749e54e169fc72537d4bcccxinhe                "NETWORK_SELECTION_DISABLED_DHCP_FAILURE",
86990a3841994b40aeb1c3a7a6b78dd804e49eb5e13xinhe                "NETWORK_SELECTION_DISABLED_DNS_FAILURE",
87090a3841994b40aeb1c3a7a6b78dd804e49eb5e13xinhe                "NETWORK_SELECTION_DISABLED_TLS_VERSION",
8718d106780b6a638552749e54e169fc72537d4bcccxinhe                "NETWORK_SELECTION_DISABLED_AUTHENTICATION_NO_CREDENTIALS",
87290a3841994b40aeb1c3a7a6b78dd804e49eb5e13xinhe                "NETWORK_SELECTION_DISABLED_NO_INTERNET",
8738d106780b6a638552749e54e169fc72537d4bcccxinhe                "NETWORK_SELECTION_DISABLED_BY_WIFI_MANAGER"};
8748d106780b6a638552749e54e169fc72537d4bcccxinhe
8758d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
8768d106780b6a638552749e54e169fc72537d4bcccxinhe         * Invalid time stamp for network selection disable
8778d106780b6a638552749e54e169fc72537d4bcccxinhe         */
8788d106780b6a638552749e54e169fc72537d4bcccxinhe        public static final long INVALID_NETWORK_SELECTION_DISABLE_TIMESTAMP = -1L;
8798d106780b6a638552749e54e169fc72537d4bcccxinhe
880584dc6b8b9628d930de4ea3ad94894886294b855xinhe        /**
881584dc6b8b9628d930de4ea3ad94894886294b855xinhe         *  This constant indicates the current configuration has connect choice set
882584dc6b8b9628d930de4ea3ad94894886294b855xinhe         */
883584dc6b8b9628d930de4ea3ad94894886294b855xinhe        private static final int CONNECT_CHOICE_EXISTS = 1;
884584dc6b8b9628d930de4ea3ad94894886294b855xinhe
885584dc6b8b9628d930de4ea3ad94894886294b855xinhe        /**
886584dc6b8b9628d930de4ea3ad94894886294b855xinhe         *  This constant indicates the current configuration does not have connect choice set
887584dc6b8b9628d930de4ea3ad94894886294b855xinhe         */
888584dc6b8b9628d930de4ea3ad94894886294b855xinhe        private static final int CONNECT_CHOICE_NOT_EXISTS = -1;
889584dc6b8b9628d930de4ea3ad94894886294b855xinhe
8908d106780b6a638552749e54e169fc72537d4bcccxinhe        // fields for QualityNetwork Selection
8918d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
8928d106780b6a638552749e54e169fc72537d4bcccxinhe         * Network selection status, should be in one of three status: enable, temporaily disabled
8938d106780b6a638552749e54e169fc72537d4bcccxinhe         * or permanently disabled
8948d106780b6a638552749e54e169fc72537d4bcccxinhe         */
8958d106780b6a638552749e54e169fc72537d4bcccxinhe        private int mStatus;
8968d106780b6a638552749e54e169fc72537d4bcccxinhe
8978d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
8988d106780b6a638552749e54e169fc72537d4bcccxinhe         * Reason for disable this network
8998d106780b6a638552749e54e169fc72537d4bcccxinhe         */
9008d106780b6a638552749e54e169fc72537d4bcccxinhe        private int mNetworkSelectionDisableReason;
9018d106780b6a638552749e54e169fc72537d4bcccxinhe
9028d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
9038d106780b6a638552749e54e169fc72537d4bcccxinhe         * Last time we temporarily disabled the configuration
9048d106780b6a638552749e54e169fc72537d4bcccxinhe         */
9058d106780b6a638552749e54e169fc72537d4bcccxinhe        private long mTemporarilyDisabledTimestamp = INVALID_NETWORK_SELECTION_DISABLE_TIMESTAMP;
9068d106780b6a638552749e54e169fc72537d4bcccxinhe
9078d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
9088d106780b6a638552749e54e169fc72537d4bcccxinhe         * counter for each Network selection disable reason
9098d106780b6a638552749e54e169fc72537d4bcccxinhe         */
9108d106780b6a638552749e54e169fc72537d4bcccxinhe        private int[] mNetworkSeclectionDisableCounter = new int[NETWORK_SELECTION_DISABLED_MAX];
9118d106780b6a638552749e54e169fc72537d4bcccxinhe
9128d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
913584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * Connect Choice over this configuration
914584dc6b8b9628d930de4ea3ad94894886294b855xinhe         *
915584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * When current wifi configuration is visible to the user but user explicitly choose to
916584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * connect to another network X, the another networks X's configure key will be stored here.
917584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * We will consider user has a preference of X over this network. And in the future,
918584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * network selection will always give X a higher preference over this configuration.
919584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * configKey is : "SSID"-WEP-WPA_PSK-WPA_EAP
920584dc6b8b9628d930de4ea3ad94894886294b855xinhe         */
921584dc6b8b9628d930de4ea3ad94894886294b855xinhe        private String mConnectChoice;
922584dc6b8b9628d930de4ea3ad94894886294b855xinhe
923584dc6b8b9628d930de4ea3ad94894886294b855xinhe        /**
924584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * The system timestamp when we records the connectChoice. This value is obtained from
925584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * System.currentTimeMillis
926584dc6b8b9628d930de4ea3ad94894886294b855xinhe         */
927584dc6b8b9628d930de4ea3ad94894886294b855xinhe        private long mConnectChoiceTimestamp = INVALID_NETWORK_SELECTION_DISABLE_TIMESTAMP;
928584dc6b8b9628d930de4ea3ad94894886294b855xinhe
929584dc6b8b9628d930de4ea3ad94894886294b855xinhe        /**
930584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * Used to cache the temporary candidate during the network selection procedure. It will be
931584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * kept updating once a new scan result has a higher score than current one
932584dc6b8b9628d930de4ea3ad94894886294b855xinhe         */
933584dc6b8b9628d930de4ea3ad94894886294b855xinhe        private ScanResult mCandidate;
934584dc6b8b9628d930de4ea3ad94894886294b855xinhe
935584dc6b8b9628d930de4ea3ad94894886294b855xinhe        /**
936584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * Used to cache the score of the current temporary candidate during the network
937584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * selection procedure.
938584dc6b8b9628d930de4ea3ad94894886294b855xinhe         */
939584dc6b8b9628d930de4ea3ad94894886294b855xinhe        private int mCandidateScore;
940584dc6b8b9628d930de4ea3ad94894886294b855xinhe
941584dc6b8b9628d930de4ea3ad94894886294b855xinhe        /**
942584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * Indicate whether this network is visible in latest Qualified Network Selection. This
943584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * means there is scan result found related to this Configuration and meet the minimum
944584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * requirement. The saved network need not join latest Qualified Network Selection. For
945584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * example, it is disabled. True means network is visible in latest Qualified Network
946584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * Selection and false means network is invisible
947584dc6b8b9628d930de4ea3ad94894886294b855xinhe         */
948584dc6b8b9628d930de4ea3ad94894886294b855xinhe        private boolean mSeenInLastQualifiedNetworkSelection;
949584dc6b8b9628d930de4ea3ad94894886294b855xinhe
950584dc6b8b9628d930de4ea3ad94894886294b855xinhe        /**
951cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein         * Boolean indicating if we have ever successfully connected to this network.
952cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein         *
953cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein         * This value will be set to true upon a successful connection.
954cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein         * This value will be set to false if a previous value was not stored in the config or if
955cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein         * the credentials are updated (ex. a password change).
956cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein         */
957cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein        private boolean mHasEverConnected;
958cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein
959cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein        /**
960584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * set whether this network is visible in latest Qualified Network Selection
961584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * @param seen value set to candidate
962584dc6b8b9628d930de4ea3ad94894886294b855xinhe         */
963584dc6b8b9628d930de4ea3ad94894886294b855xinhe        public void setSeenInLastQualifiedNetworkSelection(boolean seen) {
964584dc6b8b9628d930de4ea3ad94894886294b855xinhe            mSeenInLastQualifiedNetworkSelection =  seen;
965584dc6b8b9628d930de4ea3ad94894886294b855xinhe        }
966584dc6b8b9628d930de4ea3ad94894886294b855xinhe
967584dc6b8b9628d930de4ea3ad94894886294b855xinhe        /**
968584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * get whether this network is visible in latest Qualified Network Selection
969584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * @return returns true -- network is visible in latest Qualified Network Selection
970584dc6b8b9628d930de4ea3ad94894886294b855xinhe         *         false -- network is invisible in latest Qualified Network Selection
971584dc6b8b9628d930de4ea3ad94894886294b855xinhe         */
972584dc6b8b9628d930de4ea3ad94894886294b855xinhe        public boolean getSeenInLastQualifiedNetworkSelection() {
973584dc6b8b9628d930de4ea3ad94894886294b855xinhe            return mSeenInLastQualifiedNetworkSelection;
974584dc6b8b9628d930de4ea3ad94894886294b855xinhe        }
975584dc6b8b9628d930de4ea3ad94894886294b855xinhe        /**
976584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * set the temporary candidate of current network selection procedure
977584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * @param scanCandidate {@link ScanResult} the candidate set to mCandidate
978584dc6b8b9628d930de4ea3ad94894886294b855xinhe         */
979584dc6b8b9628d930de4ea3ad94894886294b855xinhe        public void setCandidate(ScanResult scanCandidate) {
980584dc6b8b9628d930de4ea3ad94894886294b855xinhe            mCandidate = scanCandidate;
981584dc6b8b9628d930de4ea3ad94894886294b855xinhe        }
982584dc6b8b9628d930de4ea3ad94894886294b855xinhe
983584dc6b8b9628d930de4ea3ad94894886294b855xinhe        /**
984584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * get the temporary candidate of current network selection procedure
985584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * @return  returns {@link ScanResult} temporary candidate of current network selection
986584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * procedure
987584dc6b8b9628d930de4ea3ad94894886294b855xinhe         */
988584dc6b8b9628d930de4ea3ad94894886294b855xinhe        public ScanResult getCandidate() {
989584dc6b8b9628d930de4ea3ad94894886294b855xinhe            return mCandidate;
990584dc6b8b9628d930de4ea3ad94894886294b855xinhe        }
991584dc6b8b9628d930de4ea3ad94894886294b855xinhe
992584dc6b8b9628d930de4ea3ad94894886294b855xinhe        /**
993584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * set the score of the temporary candidate of current network selection procedure
994584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * @param score value set to mCandidateScore
995584dc6b8b9628d930de4ea3ad94894886294b855xinhe         */
996584dc6b8b9628d930de4ea3ad94894886294b855xinhe        public void setCandidateScore(int score) {
997584dc6b8b9628d930de4ea3ad94894886294b855xinhe            mCandidateScore = score;
998584dc6b8b9628d930de4ea3ad94894886294b855xinhe        }
999584dc6b8b9628d930de4ea3ad94894886294b855xinhe
1000584dc6b8b9628d930de4ea3ad94894886294b855xinhe        /**
1001584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * get the score of the temporary candidate of current network selection procedure
1002584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * @return returns score of the temporary candidate of current network selection procedure
1003584dc6b8b9628d930de4ea3ad94894886294b855xinhe         */
1004584dc6b8b9628d930de4ea3ad94894886294b855xinhe        public int getCandidateScore() {
1005584dc6b8b9628d930de4ea3ad94894886294b855xinhe            return mCandidateScore;
1006584dc6b8b9628d930de4ea3ad94894886294b855xinhe        }
1007584dc6b8b9628d930de4ea3ad94894886294b855xinhe
1008584dc6b8b9628d930de4ea3ad94894886294b855xinhe        /**
1009584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * get user preferred choice over this configuration
1010584dc6b8b9628d930de4ea3ad94894886294b855xinhe         *@return returns configKey of user preferred choice over this configuration
1011584dc6b8b9628d930de4ea3ad94894886294b855xinhe         */
1012584dc6b8b9628d930de4ea3ad94894886294b855xinhe        public String getConnectChoice() {
1013584dc6b8b9628d930de4ea3ad94894886294b855xinhe            return mConnectChoice;
1014584dc6b8b9628d930de4ea3ad94894886294b855xinhe        }
1015584dc6b8b9628d930de4ea3ad94894886294b855xinhe
1016584dc6b8b9628d930de4ea3ad94894886294b855xinhe        /**
1017584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * set user preferred choice over this configuration
1018584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * @param newConnectChoice, the configKey of user preferred choice over this configuration
1019584dc6b8b9628d930de4ea3ad94894886294b855xinhe         */
1020584dc6b8b9628d930de4ea3ad94894886294b855xinhe        public void setConnectChoice(String newConnectChoice) {
1021584dc6b8b9628d930de4ea3ad94894886294b855xinhe            mConnectChoice = newConnectChoice;
1022584dc6b8b9628d930de4ea3ad94894886294b855xinhe        }
1023584dc6b8b9628d930de4ea3ad94894886294b855xinhe
1024584dc6b8b9628d930de4ea3ad94894886294b855xinhe        /**
1025584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * get the timeStamp when user select a choice over this configuration
1026584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * @return returns when current connectChoice is set (time from System.currentTimeMillis)
1027584dc6b8b9628d930de4ea3ad94894886294b855xinhe         */
1028584dc6b8b9628d930de4ea3ad94894886294b855xinhe        public long getConnectChoiceTimestamp() {
1029584dc6b8b9628d930de4ea3ad94894886294b855xinhe            return mConnectChoiceTimestamp;
1030584dc6b8b9628d930de4ea3ad94894886294b855xinhe        }
1031584dc6b8b9628d930de4ea3ad94894886294b855xinhe
1032584dc6b8b9628d930de4ea3ad94894886294b855xinhe        /**
1033584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * set the timeStamp when user select a choice over this configuration
1034584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * @param timeStamp, the timestamp set to connectChoiceTimestamp, expected timestamp should
1035584dc6b8b9628d930de4ea3ad94894886294b855xinhe         *        be obtained from System.currentTimeMillis
1036584dc6b8b9628d930de4ea3ad94894886294b855xinhe         */
1037584dc6b8b9628d930de4ea3ad94894886294b855xinhe        public void setConnectChoiceTimestamp(long timeStamp) {
1038584dc6b8b9628d930de4ea3ad94894886294b855xinhe            mConnectChoiceTimestamp = timeStamp;
1039584dc6b8b9628d930de4ea3ad94894886294b855xinhe        }
1040584dc6b8b9628d930de4ea3ad94894886294b855xinhe
1041584dc6b8b9628d930de4ea3ad94894886294b855xinhe        /**
1042584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * get current Quality network selection status
1043584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * @return returns current Quality network selection status in String (for debug purpose)
10448d106780b6a638552749e54e169fc72537d4bcccxinhe         */
10458d106780b6a638552749e54e169fc72537d4bcccxinhe        public String getNetworkStatusString() {
10468d106780b6a638552749e54e169fc72537d4bcccxinhe            return QUALITY_NETWORK_SELECTION_STATUS[mStatus];
10478d106780b6a638552749e54e169fc72537d4bcccxinhe        }
10488d106780b6a638552749e54e169fc72537d4bcccxinhe
1049cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein        public void setHasEverConnected(boolean value) {
1050cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein            mHasEverConnected = value;
1051cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein        }
1052cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein
1053cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein        public boolean getHasEverConnected() {
1054cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein            return mHasEverConnected;
1055cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein        }
1056cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein
1057cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein        private NetworkSelectionStatus() {
1058cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein            // previously stored configs will not have this parameter, so we default to false.
1059cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein            mHasEverConnected = false;
1060cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein        };
10618d106780b6a638552749e54e169fc72537d4bcccxinhe
10628d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
10638d106780b6a638552749e54e169fc72537d4bcccxinhe         * @param reason specific error reason
10648d106780b6a638552749e54e169fc72537d4bcccxinhe         * @return  corresponding network disable reason String (for debug purpose)
10658d106780b6a638552749e54e169fc72537d4bcccxinhe         */
10668d106780b6a638552749e54e169fc72537d4bcccxinhe        public static String getNetworkDisableReasonString(int reason) {
10678d106780b6a638552749e54e169fc72537d4bcccxinhe            if (reason >= NETWORK_SELECTION_ENABLE && reason < NETWORK_SELECTION_DISABLED_MAX) {
10688d106780b6a638552749e54e169fc72537d4bcccxinhe                return QUALITY_NETWORK_SELECTION_DISABLE_REASON[reason];
10698d106780b6a638552749e54e169fc72537d4bcccxinhe            } else {
10708d106780b6a638552749e54e169fc72537d4bcccxinhe                return null;
10718d106780b6a638552749e54e169fc72537d4bcccxinhe            }
10728d106780b6a638552749e54e169fc72537d4bcccxinhe        }
10738d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
1074584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * get current network disable reason
10758d106780b6a638552749e54e169fc72537d4bcccxinhe         * @return current network disable reason in String (for debug purpose)
10768d106780b6a638552749e54e169fc72537d4bcccxinhe         */
10778d106780b6a638552749e54e169fc72537d4bcccxinhe        public String getNetworkDisableReasonString() {
10788d106780b6a638552749e54e169fc72537d4bcccxinhe            return QUALITY_NETWORK_SELECTION_DISABLE_REASON[mNetworkSelectionDisableReason];
10798d106780b6a638552749e54e169fc72537d4bcccxinhe        }
10808d106780b6a638552749e54e169fc72537d4bcccxinhe
10818d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
10828d106780b6a638552749e54e169fc72537d4bcccxinhe         * get current network network selection status
1083584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * @return return current network network selection status
10848d106780b6a638552749e54e169fc72537d4bcccxinhe         */
10858d106780b6a638552749e54e169fc72537d4bcccxinhe        public int getNetworkSelectionStatus() {
10868d106780b6a638552749e54e169fc72537d4bcccxinhe            return mStatus;
10878d106780b6a638552749e54e169fc72537d4bcccxinhe        }
10888d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
10898d106780b6a638552749e54e169fc72537d4bcccxinhe         * @return whether current network is enabled to join network selection
10908d106780b6a638552749e54e169fc72537d4bcccxinhe         */
10918d106780b6a638552749e54e169fc72537d4bcccxinhe        public boolean isNetworkEnabled() {
10928d106780b6a638552749e54e169fc72537d4bcccxinhe            return mStatus == NETWORK_SELECTION_ENABLED;
10938d106780b6a638552749e54e169fc72537d4bcccxinhe        }
10948d106780b6a638552749e54e169fc72537d4bcccxinhe
10958d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
10968d106780b6a638552749e54e169fc72537d4bcccxinhe         * @return whether current network is temporary disabled
10978d106780b6a638552749e54e169fc72537d4bcccxinhe         */
10988d106780b6a638552749e54e169fc72537d4bcccxinhe        public boolean isNetworkTemporaryDisabled() {
10998d106780b6a638552749e54e169fc72537d4bcccxinhe            return mStatus == NETWORK_SELECTION_TEMPORARY_DISABLED;
11008d106780b6a638552749e54e169fc72537d4bcccxinhe        }
11018d106780b6a638552749e54e169fc72537d4bcccxinhe
11028d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
1103584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * @return returns whether current network is permanently disabled
11048d106780b6a638552749e54e169fc72537d4bcccxinhe         */
11058d106780b6a638552749e54e169fc72537d4bcccxinhe        public boolean isNetworkPermanentlyDisabled() {
11068d106780b6a638552749e54e169fc72537d4bcccxinhe            return mStatus == NETWORK_SELECTION_PERMANENTLY_DISABLED;
11078d106780b6a638552749e54e169fc72537d4bcccxinhe        }
1108584dc6b8b9628d930de4ea3ad94894886294b855xinhe
11098d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
1110584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * set current networ work selection status
11118d106780b6a638552749e54e169fc72537d4bcccxinhe         * @param status network selection status to set
11128d106780b6a638552749e54e169fc72537d4bcccxinhe         */
11138d106780b6a638552749e54e169fc72537d4bcccxinhe        public void setNetworkSelectionStatus(int status) {
11148d106780b6a638552749e54e169fc72537d4bcccxinhe            if (status >= 0 && status < NETWORK_SELECTION_STATUS_MAX) {
11158d106780b6a638552749e54e169fc72537d4bcccxinhe                mStatus = status;
11168d106780b6a638552749e54e169fc72537d4bcccxinhe            }
11178d106780b6a638552749e54e169fc72537d4bcccxinhe        }
1118584dc6b8b9628d930de4ea3ad94894886294b855xinhe
11198d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
1120584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * @return returns current network's disable reason
11218d106780b6a638552749e54e169fc72537d4bcccxinhe         */
11228d106780b6a638552749e54e169fc72537d4bcccxinhe        public int getNetworkSelectionDisableReason() {
11238d106780b6a638552749e54e169fc72537d4bcccxinhe            return mNetworkSelectionDisableReason;
11248d106780b6a638552749e54e169fc72537d4bcccxinhe        }
11258d106780b6a638552749e54e169fc72537d4bcccxinhe
11268d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
1127584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * set Network disable reason
11288d106780b6a638552749e54e169fc72537d4bcccxinhe         * @param  reason Network disable reason
11298d106780b6a638552749e54e169fc72537d4bcccxinhe         */
11308d106780b6a638552749e54e169fc72537d4bcccxinhe        public void setNetworkSelectionDisableReason(int reason) {
11318d106780b6a638552749e54e169fc72537d4bcccxinhe            if (reason >= 0 && reason < NETWORK_SELECTION_DISABLED_MAX) {
11328d106780b6a638552749e54e169fc72537d4bcccxinhe                mNetworkSelectionDisableReason = reason;
11338d106780b6a638552749e54e169fc72537d4bcccxinhe            } else {
11348d106780b6a638552749e54e169fc72537d4bcccxinhe                throw new IllegalArgumentException("Illegal reason value: " + reason);
11358d106780b6a638552749e54e169fc72537d4bcccxinhe            }
11368d106780b6a638552749e54e169fc72537d4bcccxinhe        }
1137584dc6b8b9628d930de4ea3ad94894886294b855xinhe
11388d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
1139584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * check whether network is disabled by this reason
1140584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * @param reason a specific disable reason
1141584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * @return true -- network is disabled for this reason
1142584dc6b8b9628d930de4ea3ad94894886294b855xinhe         *         false -- network is not disabled for this reason
11438d106780b6a638552749e54e169fc72537d4bcccxinhe         */
11448d106780b6a638552749e54e169fc72537d4bcccxinhe        public boolean isDisabledByReason(int reason) {
11458d106780b6a638552749e54e169fc72537d4bcccxinhe            return mNetworkSelectionDisableReason == reason;
11468d106780b6a638552749e54e169fc72537d4bcccxinhe        }
1147584dc6b8b9628d930de4ea3ad94894886294b855xinhe
11488d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
11498d106780b6a638552749e54e169fc72537d4bcccxinhe         * @param timeStamp Set when current network is disabled in millisecond since January 1,
11508d106780b6a638552749e54e169fc72537d4bcccxinhe         * 1970 00:00:00.0 UTC
11518d106780b6a638552749e54e169fc72537d4bcccxinhe         */
11528d106780b6a638552749e54e169fc72537d4bcccxinhe        public void setDisableTime(long timeStamp) {
11538d106780b6a638552749e54e169fc72537d4bcccxinhe            mTemporarilyDisabledTimestamp = timeStamp;
11548d106780b6a638552749e54e169fc72537d4bcccxinhe        }
11558d106780b6a638552749e54e169fc72537d4bcccxinhe
11568d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
1157584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * @return returns when current network is disabled in millisecond since January 1,
11588d106780b6a638552749e54e169fc72537d4bcccxinhe         * 1970 00:00:00.0 UTC
11598d106780b6a638552749e54e169fc72537d4bcccxinhe         */
11608d106780b6a638552749e54e169fc72537d4bcccxinhe        public long getDisableTime() {
11618d106780b6a638552749e54e169fc72537d4bcccxinhe            return mTemporarilyDisabledTimestamp;
11628d106780b6a638552749e54e169fc72537d4bcccxinhe        }
11638d106780b6a638552749e54e169fc72537d4bcccxinhe
11648d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
1165584dc6b8b9628d930de4ea3ad94894886294b855xinhe         * get the disable counter of a specific reason
11668d106780b6a638552749e54e169fc72537d4bcccxinhe         * @param  reason specific failure reason
11678d106780b6a638552749e54e169fc72537d4bcccxinhe         * @exception throw IllegalArgumentException for illegal input
11688d106780b6a638552749e54e169fc72537d4bcccxinhe         * @return counter number for specific error reason.
11698d106780b6a638552749e54e169fc72537d4bcccxinhe         */
11708d106780b6a638552749e54e169fc72537d4bcccxinhe        public int getDisableReasonCounter(int reason) {
11718d106780b6a638552749e54e169fc72537d4bcccxinhe            if (reason >= NETWORK_SELECTION_ENABLE && reason < NETWORK_SELECTION_DISABLED_MAX) {
11728d106780b6a638552749e54e169fc72537d4bcccxinhe                return mNetworkSeclectionDisableCounter[reason];
11738d106780b6a638552749e54e169fc72537d4bcccxinhe            } else {
11748d106780b6a638552749e54e169fc72537d4bcccxinhe                throw new IllegalArgumentException("Illegal reason value: " + reason);
11758d106780b6a638552749e54e169fc72537d4bcccxinhe            }
11768d106780b6a638552749e54e169fc72537d4bcccxinhe        }
11778d106780b6a638552749e54e169fc72537d4bcccxinhe
11788d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
11798d106780b6a638552749e54e169fc72537d4bcccxinhe         * set the counter of a specific failure reason
11808d106780b6a638552749e54e169fc72537d4bcccxinhe         * @param reason reason for disable error
11818d106780b6a638552749e54e169fc72537d4bcccxinhe         * @param value the counter value for this specific reason
11828d106780b6a638552749e54e169fc72537d4bcccxinhe         * @exception throw IllegalArgumentException for illegal input
11838d106780b6a638552749e54e169fc72537d4bcccxinhe         */
11848d106780b6a638552749e54e169fc72537d4bcccxinhe        public void setDisableReasonCounter(int reason, int value) {
11858d106780b6a638552749e54e169fc72537d4bcccxinhe            if (reason >= NETWORK_SELECTION_ENABLE && reason < NETWORK_SELECTION_DISABLED_MAX) {
11868d106780b6a638552749e54e169fc72537d4bcccxinhe                mNetworkSeclectionDisableCounter[reason] = value;
11878d106780b6a638552749e54e169fc72537d4bcccxinhe            } else {
11888d106780b6a638552749e54e169fc72537d4bcccxinhe                throw new IllegalArgumentException("Illegal reason value: " + reason);
11898d106780b6a638552749e54e169fc72537d4bcccxinhe            }
11908d106780b6a638552749e54e169fc72537d4bcccxinhe        }
11918d106780b6a638552749e54e169fc72537d4bcccxinhe
11928d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
11938d106780b6a638552749e54e169fc72537d4bcccxinhe         * increment the counter of a specific failure reason
11948d106780b6a638552749e54e169fc72537d4bcccxinhe         * @param reason a specific failure reason
11958d106780b6a638552749e54e169fc72537d4bcccxinhe         * @exception throw IllegalArgumentException for illegal input
11968d106780b6a638552749e54e169fc72537d4bcccxinhe         */
11978d106780b6a638552749e54e169fc72537d4bcccxinhe        public void incrementDisableReasonCounter(int reason) {
11988d106780b6a638552749e54e169fc72537d4bcccxinhe            if (reason >= NETWORK_SELECTION_ENABLE  && reason < NETWORK_SELECTION_DISABLED_MAX) {
11998d106780b6a638552749e54e169fc72537d4bcccxinhe                mNetworkSeclectionDisableCounter[reason]++;
12008d106780b6a638552749e54e169fc72537d4bcccxinhe            } else {
12018d106780b6a638552749e54e169fc72537d4bcccxinhe                throw new IllegalArgumentException("Illegal reason value: " + reason);
12028d106780b6a638552749e54e169fc72537d4bcccxinhe            }
12038d106780b6a638552749e54e169fc72537d4bcccxinhe        }
1204584dc6b8b9628d930de4ea3ad94894886294b855xinhe
12058d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
12068d106780b6a638552749e54e169fc72537d4bcccxinhe         * clear the counter of a specific failure reason
12078d106780b6a638552749e54e169fc72537d4bcccxinhe         * @hide
12088d106780b6a638552749e54e169fc72537d4bcccxinhe         * @param reason a specific failure reason
12098d106780b6a638552749e54e169fc72537d4bcccxinhe         * @exception throw IllegalArgumentException for illegal input
12108d106780b6a638552749e54e169fc72537d4bcccxinhe         */
12118d106780b6a638552749e54e169fc72537d4bcccxinhe        public void clearDisableReasonCounter(int reason) {
12128d106780b6a638552749e54e169fc72537d4bcccxinhe            if (reason >= NETWORK_SELECTION_ENABLE && reason < NETWORK_SELECTION_DISABLED_MAX) {
12138d106780b6a638552749e54e169fc72537d4bcccxinhe                mNetworkSeclectionDisableCounter[reason] = NETWORK_SELECTION_ENABLE;
12148d106780b6a638552749e54e169fc72537d4bcccxinhe            } else {
12158d106780b6a638552749e54e169fc72537d4bcccxinhe                throw new IllegalArgumentException("Illegal reason value: " + reason);
12168d106780b6a638552749e54e169fc72537d4bcccxinhe            }
12178d106780b6a638552749e54e169fc72537d4bcccxinhe        }
1218584dc6b8b9628d930de4ea3ad94894886294b855xinhe
12198d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
12208d106780b6a638552749e54e169fc72537d4bcccxinhe         * clear all the failure reason counters
12218d106780b6a638552749e54e169fc72537d4bcccxinhe         */
12228d106780b6a638552749e54e169fc72537d4bcccxinhe        public void clearDisableReasonCounter() {
12238d106780b6a638552749e54e169fc72537d4bcccxinhe            Arrays.fill(mNetworkSeclectionDisableCounter, NETWORK_SELECTION_ENABLE);
12248d106780b6a638552749e54e169fc72537d4bcccxinhe        }
12258d106780b6a638552749e54e169fc72537d4bcccxinhe
12268d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
12278d106780b6a638552749e54e169fc72537d4bcccxinhe         * BSSID for connection to this network (through network selection procedure)
12288d106780b6a638552749e54e169fc72537d4bcccxinhe         */
12298d106780b6a638552749e54e169fc72537d4bcccxinhe        private String mNetworkSelectionBSSID;
12308d106780b6a638552749e54e169fc72537d4bcccxinhe
12318d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
12328d106780b6a638552749e54e169fc72537d4bcccxinhe         * get current network Selection BSSID
12338d106780b6a638552749e54e169fc72537d4bcccxinhe         * @return current network Selection BSSID
12348d106780b6a638552749e54e169fc72537d4bcccxinhe         */
12358d106780b6a638552749e54e169fc72537d4bcccxinhe        public String getNetworkSelectionBSSID() {
12368d106780b6a638552749e54e169fc72537d4bcccxinhe            return mNetworkSelectionBSSID;
12378d106780b6a638552749e54e169fc72537d4bcccxinhe        }
12388d106780b6a638552749e54e169fc72537d4bcccxinhe
12398d106780b6a638552749e54e169fc72537d4bcccxinhe        /**
12408d106780b6a638552749e54e169fc72537d4bcccxinhe         * set network Selection BSSID
12418d106780b6a638552749e54e169fc72537d4bcccxinhe         * @param bssid The target BSSID for assocaition
12428d106780b6a638552749e54e169fc72537d4bcccxinhe         */
12438d106780b6a638552749e54e169fc72537d4bcccxinhe        public void setNetworkSelectionBSSID(String bssid) {
12448d106780b6a638552749e54e169fc72537d4bcccxinhe            mNetworkSelectionBSSID = bssid;
12458d106780b6a638552749e54e169fc72537d4bcccxinhe        }
12468d106780b6a638552749e54e169fc72537d4bcccxinhe
12478d106780b6a638552749e54e169fc72537d4bcccxinhe        public void copy(NetworkSelectionStatus source) {
12488d106780b6a638552749e54e169fc72537d4bcccxinhe            mStatus = source.mStatus;
12498d106780b6a638552749e54e169fc72537d4bcccxinhe            mNetworkSelectionDisableReason = source.mNetworkSelectionDisableReason;
12508d106780b6a638552749e54e169fc72537d4bcccxinhe            for (int index = NETWORK_SELECTION_ENABLE; index < NETWORK_SELECTION_DISABLED_MAX;
12518d106780b6a638552749e54e169fc72537d4bcccxinhe                    index++) {
12528d106780b6a638552749e54e169fc72537d4bcccxinhe                mNetworkSeclectionDisableCounter[index] =
12538d106780b6a638552749e54e169fc72537d4bcccxinhe                        source.mNetworkSeclectionDisableCounter[index];
12548d106780b6a638552749e54e169fc72537d4bcccxinhe            }
12558d106780b6a638552749e54e169fc72537d4bcccxinhe            mTemporarilyDisabledTimestamp = source.mTemporarilyDisabledTimestamp;
12568d106780b6a638552749e54e169fc72537d4bcccxinhe            mNetworkSelectionBSSID = source.mNetworkSelectionBSSID;
1257584dc6b8b9628d930de4ea3ad94894886294b855xinhe            setConnectChoice(source.getConnectChoice());
1258584dc6b8b9628d930de4ea3ad94894886294b855xinhe            setConnectChoiceTimestamp(source.getConnectChoiceTimestamp());
1259cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein            setHasEverConnected(source.getHasEverConnected());
12608d106780b6a638552749e54e169fc72537d4bcccxinhe        }
12618d106780b6a638552749e54e169fc72537d4bcccxinhe
12628d106780b6a638552749e54e169fc72537d4bcccxinhe        public void writeToParcel(Parcel dest) {
12638d106780b6a638552749e54e169fc72537d4bcccxinhe            dest.writeInt(getNetworkSelectionStatus());
12648d106780b6a638552749e54e169fc72537d4bcccxinhe            dest.writeInt(getNetworkSelectionDisableReason());
12658d106780b6a638552749e54e169fc72537d4bcccxinhe            for (int index = NETWORK_SELECTION_ENABLE; index < NETWORK_SELECTION_DISABLED_MAX;
12668d106780b6a638552749e54e169fc72537d4bcccxinhe                    index++) {
12678d106780b6a638552749e54e169fc72537d4bcccxinhe                dest.writeInt(getDisableReasonCounter(index));
12688d106780b6a638552749e54e169fc72537d4bcccxinhe            }
12698d106780b6a638552749e54e169fc72537d4bcccxinhe            dest.writeLong(getDisableTime());
12708d106780b6a638552749e54e169fc72537d4bcccxinhe            dest.writeString(getNetworkSelectionBSSID());
1271584dc6b8b9628d930de4ea3ad94894886294b855xinhe            if (getConnectChoice() != null) {
1272584dc6b8b9628d930de4ea3ad94894886294b855xinhe                dest.writeInt(CONNECT_CHOICE_EXISTS);
1273584dc6b8b9628d930de4ea3ad94894886294b855xinhe                dest.writeString(getConnectChoice());
1274584dc6b8b9628d930de4ea3ad94894886294b855xinhe                dest.writeLong(getConnectChoiceTimestamp());
1275584dc6b8b9628d930de4ea3ad94894886294b855xinhe            } else {
1276584dc6b8b9628d930de4ea3ad94894886294b855xinhe                dest.writeInt(CONNECT_CHOICE_NOT_EXISTS);
1277584dc6b8b9628d930de4ea3ad94894886294b855xinhe            }
1278cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein            dest.writeInt(getHasEverConnected() ? 1 : 0);
12798d106780b6a638552749e54e169fc72537d4bcccxinhe        }
12808d106780b6a638552749e54e169fc72537d4bcccxinhe
12818d106780b6a638552749e54e169fc72537d4bcccxinhe        public void readFromParcel(Parcel in) {
12828d106780b6a638552749e54e169fc72537d4bcccxinhe            setNetworkSelectionStatus(in.readInt());
12838d106780b6a638552749e54e169fc72537d4bcccxinhe            setNetworkSelectionDisableReason(in.readInt());
12848d106780b6a638552749e54e169fc72537d4bcccxinhe            for (int index = NETWORK_SELECTION_ENABLE; index < NETWORK_SELECTION_DISABLED_MAX;
12858d106780b6a638552749e54e169fc72537d4bcccxinhe                    index++) {
12868d106780b6a638552749e54e169fc72537d4bcccxinhe                setDisableReasonCounter(index, in.readInt());
12878d106780b6a638552749e54e169fc72537d4bcccxinhe            }
12888d106780b6a638552749e54e169fc72537d4bcccxinhe            setDisableTime(in.readLong());
12898d106780b6a638552749e54e169fc72537d4bcccxinhe            setNetworkSelectionBSSID(in.readString());
1290584dc6b8b9628d930de4ea3ad94894886294b855xinhe            if (in.readInt() == CONNECT_CHOICE_EXISTS) {
1291584dc6b8b9628d930de4ea3ad94894886294b855xinhe                setConnectChoice(in.readString());
1292584dc6b8b9628d930de4ea3ad94894886294b855xinhe                setConnectChoiceTimestamp(in.readLong());
1293584dc6b8b9628d930de4ea3ad94894886294b855xinhe            } else {
1294584dc6b8b9628d930de4ea3ad94894886294b855xinhe                setConnectChoice(null);
1295584dc6b8b9628d930de4ea3ad94894886294b855xinhe                setConnectChoiceTimestamp(INVALID_NETWORK_SELECTION_DISABLE_TIMESTAMP);
1296584dc6b8b9628d930de4ea3ad94894886294b855xinhe            }
1297cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein            setHasEverConnected(in.readInt() != 0);
12988d106780b6a638552749e54e169fc72537d4bcccxinhe        }
12998d106780b6a638552749e54e169fc72537d4bcccxinhe    }
13008d106780b6a638552749e54e169fc72537d4bcccxinhe
13018d106780b6a638552749e54e169fc72537d4bcccxinhe    /**
13028d106780b6a638552749e54e169fc72537d4bcccxinhe     * @hide
13038d106780b6a638552749e54e169fc72537d4bcccxinhe     * network selection related member
13048d106780b6a638552749e54e169fc72537d4bcccxinhe     */
13058d106780b6a638552749e54e169fc72537d4bcccxinhe    private final NetworkSelectionStatus mNetworkSelectionStatus = new NetworkSelectionStatus();
13068d106780b6a638552749e54e169fc72537d4bcccxinhe
13078d106780b6a638552749e54e169fc72537d4bcccxinhe    /**
13088d106780b6a638552749e54e169fc72537d4bcccxinhe     * @hide
13098d106780b6a638552749e54e169fc72537d4bcccxinhe     * @return network selection status
13108d106780b6a638552749e54e169fc72537d4bcccxinhe     */
13118d106780b6a638552749e54e169fc72537d4bcccxinhe    public NetworkSelectionStatus getNetworkSelectionStatus() {
13128d106780b6a638552749e54e169fc72537d4bcccxinhe        return mNetworkSelectionStatus;
13138d106780b6a638552749e54e169fc72537d4bcccxinhe    }
13147c3606c103e95d3991267cca2592402a68779cafvandwalle    /**
13157c3606c103e95d3991267cca2592402a68779cafvandwalle     * @hide
13167c3606c103e95d3991267cca2592402a68779cafvandwalle     * Linked Configurations: represent the set of Wificonfigurations that are equivalent
13177c3606c103e95d3991267cca2592402a68779cafvandwalle     * regarding roaming and auto-joining.
13187c3606c103e95d3991267cca2592402a68779cafvandwalle     * The linked configuration may or may not have same SSID, and may or may not have same
13197c3606c103e95d3991267cca2592402a68779cafvandwalle     * credentials.
13207c3606c103e95d3991267cca2592402a68779cafvandwalle     * For instance, linked configurations will have same defaultGwMacAddress or same dhcp server.
13217c3606c103e95d3991267cca2592402a68779cafvandwalle     */
13227c3606c103e95d3991267cca2592402a68779cafvandwalle    public HashMap<String, Integer>  linkedConfigurations;
13237c3606c103e95d3991267cca2592402a68779cafvandwalle
13249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public WifiConfiguration() {
13255ee89800bee7c6c755778795a536e0e2f12b85ffIrfan Sheriff        networkId = INVALID_NETWORK_ID;
13269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        SSID = null;
13279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        BSSID = null;
13288a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng        FQDN = null;
13297226c8f95b5971af2710c8d2f8a8b6f2210e2420Vinit Deshpande        roamingConsortiumIds = new long[0];
13309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        priority = 0;
13319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        hiddenSSID = false;
13329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        allowedKeyManagement = new BitSet();
13339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        allowedProtocols = new BitSet();
13349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        allowedAuthAlgorithms = new BitSet();
13359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        allowedPairwiseCiphers = new BitSet();
13369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        allowedGroupCiphers = new BitSet();
13379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        wepKeys = new String[4];
13389b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff        for (int i = 0; i < wepKeys.length; i++) {
13399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            wepKeys[i] = null;
13404337476a6669ce52549ce4a60f5e4d07f8e3033fChung-yih Wang        }
13419b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff        enterpriseConfig = new WifiEnterpriseConfig();
1342e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle        selfAdded = false;
13438f13548615f647a1208ace5369b504cb41149965vandwalle        didSelfAdd = false;
1344e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle        ephemeral = false;
1345f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin        meteredHint = false;
1346fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin        useExternalScores = false;
1347ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle        validatedInternetAccess = false;
13486346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim        mIpConfiguration = new IpConfiguration();
13493e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber        lastUpdateUid = -1;
13503e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber        creatorUid = -1;
13516fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski        shared = true;
1352b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne        dtimInterval = 0;
13539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
135510652a95b16909acf26f31cdafc0c6aa09212f26Vinit Deshapnde    /**
13562522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande     * Identify if this configuration represents a passpoint network
13572522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande     */
13582522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande    public boolean isPasspoint() {
1359ad25bb89251c0552cfbc6c254853c79b7d9c121aVinit Deshpande        return !TextUtils.isEmpty(FQDN)
13602522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande                && !TextUtils.isEmpty(providerFriendlyName)
13612522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande                && enterpriseConfig != null
13622522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande                && enterpriseConfig.getEapMethod() != WifiEnterpriseConfig.Eap.NONE;
13632522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande    }
13642522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande
13652522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande    /**
1366111fa0274d1d6620f9634783585387f3b773949evandwalle     * Helper function, identify if a configuration is linked
1367111fa0274d1d6620f9634783585387f3b773949evandwalle     * @hide
1368111fa0274d1d6620f9634783585387f3b773949evandwalle     */
1369111fa0274d1d6620f9634783585387f3b773949evandwalle    public boolean isLinked(WifiConfiguration config) {
13708d106780b6a638552749e54e169fc72537d4bcccxinhe        if (config != null) {
13718d106780b6a638552749e54e169fc72537d4bcccxinhe            if (config.linkedConfigurations != null && linkedConfigurations != null) {
13728d106780b6a638552749e54e169fc72537d4bcccxinhe                if (config.linkedConfigurations.get(configKey()) != null
13738d106780b6a638552749e54e169fc72537d4bcccxinhe                        && linkedConfigurations.get(config.configKey()) != null) {
13748d106780b6a638552749e54e169fc72537d4bcccxinhe                    return true;
13758d106780b6a638552749e54e169fc72537d4bcccxinhe                }
1376111fa0274d1d6620f9634783585387f3b773949evandwalle            }
1377111fa0274d1d6620f9634783585387f3b773949evandwalle        }
1378111fa0274d1d6620f9634783585387f3b773949evandwalle        return  false;
13797c3606c103e95d3991267cca2592402a68779cafvandwalle    }
13807c3606c103e95d3991267cca2592402a68779cafvandwalle
13817c3606c103e95d3991267cca2592402a68779cafvandwalle    /**
1382c55cd103708493f9d45122236affbf08b49456f0Sky Faber     * Helper function, idenfity if a configuration should be treated as an enterprise network
1383c55cd103708493f9d45122236affbf08b49456f0Sky Faber     * @hide
1384c55cd103708493f9d45122236affbf08b49456f0Sky Faber     */
1385c55cd103708493f9d45122236affbf08b49456f0Sky Faber    public boolean isEnterprise() {
1386c55cd103708493f9d45122236affbf08b49456f0Sky Faber        return allowedKeyManagement.get(KeyMgmt.WPA_EAP) ||
1387c55cd103708493f9d45122236affbf08b49456f0Sky Faber            allowedKeyManagement.get(KeyMgmt.IEEE8021X);
1388c55cd103708493f9d45122236affbf08b49456f0Sky Faber    }
1389c55cd103708493f9d45122236affbf08b49456f0Sky Faber
13908dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy    @Override
13919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String toString() {
13928dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy        StringBuilder sbuf = new StringBuilder();
13939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (this.status == WifiConfiguration.Status.CURRENT) {
13949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sbuf.append("* ");
13959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else if (this.status == WifiConfiguration.Status.DISABLED) {
139663edd98d2eb744cc78dc3a3f8ec1ce7e6164d69dvandwalle            sbuf.append("- DSBLE ");
13979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
13989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sbuf.append("ID: ").append(this.networkId).append(" SSID: ").append(this.SSID).
1399b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande                append(" PROVIDER-NAME: ").append(this.providerFriendlyName).
14008d106780b6a638552749e54e169fc72537d4bcccxinhe                append(" BSSID: ").append(this.BSSID).append(" FQDN: ").append(this.FQDN)
14018d106780b6a638552749e54e169fc72537d4bcccxinhe                .append(" PRIO: ").append(this.priority)
1402e23993848c65c7fb2c91bb89989117d35dabe5c3mukesh agrawal                .append(" HIDDEN: ").append(this.hiddenSSID)
14038d106780b6a638552749e54e169fc72537d4bcccxinhe                .append('\n');
14048d106780b6a638552749e54e169fc72537d4bcccxinhe
14058d106780b6a638552749e54e169fc72537d4bcccxinhe
14068d106780b6a638552749e54e169fc72537d4bcccxinhe        sbuf.append(" NetworkSelectionStatus ")
14078d106780b6a638552749e54e169fc72537d4bcccxinhe                .append(mNetworkSelectionStatus.getNetworkStatusString() + "\n");
14088d106780b6a638552749e54e169fc72537d4bcccxinhe        if (mNetworkSelectionStatus.getNetworkSelectionDisableReason() > 0) {
14098d106780b6a638552749e54e169fc72537d4bcccxinhe            sbuf.append(" mNetworkSelectionDisableReason ")
14108d106780b6a638552749e54e169fc72537d4bcccxinhe                    .append(mNetworkSelectionStatus.getNetworkDisableReasonString() + "\n");
14118d106780b6a638552749e54e169fc72537d4bcccxinhe
14128d106780b6a638552749e54e169fc72537d4bcccxinhe            for (int index = mNetworkSelectionStatus.NETWORK_SELECTION_ENABLE;
14138d106780b6a638552749e54e169fc72537d4bcccxinhe                    index < mNetworkSelectionStatus.NETWORK_SELECTION_DISABLED_MAX; index++) {
14148d106780b6a638552749e54e169fc72537d4bcccxinhe                if (mNetworkSelectionStatus.getDisableReasonCounter(index) != 0) {
14158d106780b6a638552749e54e169fc72537d4bcccxinhe                    sbuf.append(NetworkSelectionStatus.getNetworkDisableReasonString(index)
14168d106780b6a638552749e54e169fc72537d4bcccxinhe                            + " counter:" + mNetworkSelectionStatus.getDisableReasonCounter(index)
14178d106780b6a638552749e54e169fc72537d4bcccxinhe                            + "\n");
14188d106780b6a638552749e54e169fc72537d4bcccxinhe                }
14198d106780b6a638552749e54e169fc72537d4bcccxinhe            }
14200561030490e418fcead83606249d8cfdc344a163Mike Lockwood        }
1421584dc6b8b9628d930de4ea3ad94894886294b855xinhe        if (mNetworkSelectionStatus.getConnectChoice() != null) {
1422584dc6b8b9628d930de4ea3ad94894886294b855xinhe            sbuf.append(" connect choice: ").append(mNetworkSelectionStatus.getConnectChoice());
1423584dc6b8b9628d930de4ea3ad94894886294b855xinhe            sbuf.append(" connect choice set time: ").append(mNetworkSelectionStatus
1424584dc6b8b9628d930de4ea3ad94894886294b855xinhe                    .getConnectChoiceTimestamp());
1425584dc6b8b9628d930de4ea3ad94894886294b855xinhe        }
1426cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein        sbuf.append(" hasEverConnected: ")
1427cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein                .append(mNetworkSelectionStatus.getHasEverConnected()).append("\n");
14288d106780b6a638552749e54e169fc72537d4bcccxinhe
14290561030490e418fcead83606249d8cfdc344a163Mike Lockwood        if (this.numAssociation > 0) {
14300561030490e418fcead83606249d8cfdc344a163Mike Lockwood            sbuf.append(" numAssociation ").append(this.numAssociation).append("\n");
143116a40cc7b597f0492f633cc0f742dc796955e7fdvandwalle        }
1432ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle        if (this.numNoInternetAccessReports > 0) {
1433ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle            sbuf.append(" numNoInternetAccessReports ");
1434ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle            sbuf.append(this.numNoInternetAccessReports).append("\n");
1435ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle        }
1436ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle        if (this.updateTime != null) {
1437edbedd28b6aa10c266e627a9609b1c538479f03bPierre Vandwalle            sbuf.append("update ").append(this.updateTime).append("\n");
1438ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle        }
1439ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle        if (this.creationTime != null) {
1440edbedd28b6aa10c266e627a9609b1c538479f03bPierre Vandwalle            sbuf.append("creation").append(this.creationTime).append("\n");
1441ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle        }
144294fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle        if (this.didSelfAdd) sbuf.append(" didSelfAdd");
144394fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle        if (this.selfAdded) sbuf.append(" selfAdded");
1444ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle        if (this.validatedInternetAccess) sbuf.append(" validatedInternetAccess");
14458faf2a2a15853368a14babf935c156664b5f0b6cJeff Davidson        if (this.ephemeral) sbuf.append(" ephemeral");
1446f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin        if (this.meteredHint) sbuf.append(" meteredHint");
1447fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin        if (this.useExternalScores) sbuf.append(" useExternalScores");
1448f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin        if (this.didSelfAdd || this.selfAdded || this.validatedInternetAccess
1449fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin            || this.ephemeral || this.meteredHint || this.useExternalScores) {
145016a40cc7b597f0492f633cc0f742dc796955e7fdvandwalle            sbuf.append("\n");
145116a40cc7b597f0492f633cc0f742dc796955e7fdvandwalle        }
14529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sbuf.append(" KeyMgmt:");
14539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (int k = 0; k < this.allowedKeyManagement.size(); k++) {
14549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (this.allowedKeyManagement.get(k)) {
14559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sbuf.append(" ");
14569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (k < KeyMgmt.strings.length) {
14579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    sbuf.append(KeyMgmt.strings[k]);
14589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                } else {
14599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    sbuf.append("??");
14609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
14619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
14629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
14639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sbuf.append(" Protocols:");
14649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (int p = 0; p < this.allowedProtocols.size(); p++) {
14659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (this.allowedProtocols.get(p)) {
14669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sbuf.append(" ");
14679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (p < Protocol.strings.length) {
14689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    sbuf.append(Protocol.strings[p]);
14699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                } else {
14709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    sbuf.append("??");
14719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
14729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
14739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
14749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sbuf.append('\n');
14759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sbuf.append(" AuthAlgorithms:");
14769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (int a = 0; a < this.allowedAuthAlgorithms.size(); a++) {
14779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (this.allowedAuthAlgorithms.get(a)) {
14789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sbuf.append(" ");
14799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (a < AuthAlgorithm.strings.length) {
14809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    sbuf.append(AuthAlgorithm.strings[a]);
14819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                } else {
14829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    sbuf.append("??");
14839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
14849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
14859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
14869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sbuf.append('\n');
14879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sbuf.append(" PairwiseCiphers:");
14889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (int pc = 0; pc < this.allowedPairwiseCiphers.size(); pc++) {
14899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (this.allowedPairwiseCiphers.get(pc)) {
14909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sbuf.append(" ");
14919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (pc < PairwiseCipher.strings.length) {
14929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    sbuf.append(PairwiseCipher.strings[pc]);
14939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                } else {
14949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    sbuf.append("??");
14959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
14969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
14979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
14989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sbuf.append('\n');
14999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sbuf.append(" GroupCiphers:");
15009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (int gc = 0; gc < this.allowedGroupCiphers.size(); gc++) {
15019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (this.allowedGroupCiphers.get(gc)) {
15029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                sbuf.append(" ");
15039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (gc < GroupCipher.strings.length) {
15049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    sbuf.append(GroupCipher.strings[gc]);
15059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                } else {
15069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    sbuf.append("??");
15079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
15089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
15099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
15105069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang        sbuf.append('\n').append(" PSK: ");
15119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (this.preSharedKey != null) {
15125069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang            sbuf.append('*');
15135069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang        }
151494fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle        sbuf.append("\nEnterprise config:\n");
15159b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff        sbuf.append(enterpriseConfig);
15169b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff
151794fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle        sbuf.append("IP config:\n");
15186346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim        sbuf.append(mIpConfiguration.toString());
1519128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff
15208d106780b6a638552749e54e169fc72537d4bcccxinhe        if (mNetworkSelectionStatus.getNetworkSelectionBSSID() != null) {
15218d106780b6a638552749e54e169fc72537d4bcccxinhe            sbuf.append(" networkSelectionBSSID="
15228d106780b6a638552749e54e169fc72537d4bcccxinhe                    + mNetworkSelectionStatus.getNetworkSelectionBSSID());
15238d106780b6a638552749e54e169fc72537d4bcccxinhe        }
152494fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle        long now_ms = System.currentTimeMillis();
15258d106780b6a638552749e54e169fc72537d4bcccxinhe        if (mNetworkSelectionStatus.getDisableTime() != NetworkSelectionStatus
15268d106780b6a638552749e54e169fc72537d4bcccxinhe                .INVALID_NETWORK_SELECTION_DISABLE_TIMESTAMP) {
152794fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle            sbuf.append('\n');
15288d106780b6a638552749e54e169fc72537d4bcccxinhe            long diff = now_ms - mNetworkSelectionStatus.getDisableTime();
15292ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle            if (diff <= 0) {
153094fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle                sbuf.append(" blackListed since <incorrect>");
15312ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle            } else {
1532aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy                sbuf.append(" blackListed: ").append(Long.toString(diff / 1000)).append("sec ");
153394fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle            }
153494fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle        }
1535aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy        if (creatorUid != 0) sbuf.append(" cuid=" + creatorUid);
15363e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber        if (creatorName != null) sbuf.append(" cname=" + creatorName);
15373e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber        if (lastUpdateUid != 0) sbuf.append(" luid=" + lastUpdateUid);
15383e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber        if (lastUpdateName != null) sbuf.append(" lname=" + lastUpdateName);
15391ac50cb32c08388540f53833c04a02f13fed0824Lorenzo Colitti        sbuf.append(" lcuid=" + lastConnectUid);
15401ac50cb32c08388540f53833c04a02f13fed0824Lorenzo Colitti        sbuf.append(" userApproved=" + userApprovedAsString(userApproved));
15411ac50cb32c08388540f53833c04a02f13fed0824Lorenzo Colitti        sbuf.append(" noInternetAccessExpected=" + noInternetAccessExpected);
15421248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti        sbuf.append(" ");
15433e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber
154494fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle        if (this.lastConnected != 0) {
154594fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle            sbuf.append('\n');
154694fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle            long diff = now_ms - this.lastConnected;
154794fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle            if (diff <= 0) {
154894fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle                sbuf.append("lastConnected since <incorrect>");
154994fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle            } else {
1550aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy                sbuf.append("lastConnected: ").append(Long.toString(diff / 1000)).append("sec ");
155194fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle            }
155294fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle        }
155394fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle        if (this.lastConnectionFailure != 0) {
155494fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle            sbuf.append('\n');
155594fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle            long diff = now_ms - this.lastConnectionFailure;
155694fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle            if (diff <= 0) {
15575ddc65b9860b7ef39a0921bcbca3cbc50abe3a2cPierre Vandwalle                sbuf.append("lastConnectionFailure since <incorrect> ");
155894fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle            } else {
1559aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy                sbuf.append("lastConnectionFailure: ").append(Long.toString(diff / 1000));
1560aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy                sbuf.append("sec ");
15612ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle            }
15622ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle        }
15638650c035609507340e3a66459cea16ef08cd03a6vandwalle        if (this.lastRoamingFailure != 0) {
15648650c035609507340e3a66459cea16ef08cd03a6vandwalle            sbuf.append('\n');
15658650c035609507340e3a66459cea16ef08cd03a6vandwalle            long diff = now_ms - this.lastRoamingFailure;
15668650c035609507340e3a66459cea16ef08cd03a6vandwalle            if (diff <= 0) {
15675ddc65b9860b7ef39a0921bcbca3cbc50abe3a2cPierre Vandwalle                sbuf.append("lastRoamingFailure since <incorrect> ");
15688650c035609507340e3a66459cea16ef08cd03a6vandwalle            } else {
1569aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy                sbuf.append("lastRoamingFailure: ").append(Long.toString(diff / 1000));
1570aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy                sbuf.append("sec ");
15718650c035609507340e3a66459cea16ef08cd03a6vandwalle            }
15728650c035609507340e3a66459cea16ef08cd03a6vandwalle        }
15738650c035609507340e3a66459cea16ef08cd03a6vandwalle        sbuf.append("roamingFailureBlackListTimeMilli: ").
15748650c035609507340e3a66459cea16ef08cd03a6vandwalle                append(Long.toString(this.roamingFailureBlackListTimeMilli));
1575448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle        sbuf.append('\n');
1576448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle        if (this.linkedConfigurations != null) {
1577aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy            for (String key : this.linkedConfigurations.keySet()) {
1578448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle                sbuf.append(" linked: ").append(key);
1579448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle                sbuf.append('\n');
1580448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle            }
1581448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle        }
158294fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle        sbuf.append("triggeredLow: ").append(this.numUserTriggeredWifiDisableLowRSSI);
158394fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle        sbuf.append(" triggeredBad: ").append(this.numUserTriggeredWifiDisableBadRSSI);
158494fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle        sbuf.append(" triggeredNotHigh: ").append(this.numUserTriggeredWifiDisableNotHighRSSI);
158594fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle        sbuf.append('\n');
158694fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle        sbuf.append("ticksLow: ").append(this.numTicksAtLowRSSI);
158794fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle        sbuf.append(" ticksBad: ").append(this.numTicksAtBadRSSI);
158894fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle        sbuf.append(" ticksNotHigh: ").append(this.numTicksAtNotHighRSSI);
1589448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle        sbuf.append('\n');
159094fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle        sbuf.append("triggeredJoin: ").append(this.numUserTriggeredJoinAttempts);
1591448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle        sbuf.append('\n');
15928f13548615f647a1208ace5369b504cb41149965vandwalle
15939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return sbuf.toString();
15949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
15959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1596b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff    /** {@hide} */
1597b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff    public String getPrintableSsid() {
1598b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff        if (SSID == null) return "";
1599b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff        final int length = SSID.length();
1600b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff        if (length > 2 && (SSID.charAt(0) == '"') && SSID.charAt(length - 1) == '"') {
1601b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff            return SSID.substring(1, length - 1);
1602b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff        }
1603b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff
1604b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff        /** The ascii-encoded string format is P"<ascii-encoded-string>"
1605b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff         * The decoding is implemented in the supplicant for a newly configured
1606b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff         * network.
1607b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff         */
1608b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff        if (length > 3 && (SSID.charAt(0) == 'P') && (SSID.charAt(1) == '"') &&
1609b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff                (SSID.charAt(length-1) == '"')) {
1610b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff            WifiSsid wifiSsid = WifiSsid.createFromAsciiEncoded(
1611b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff                    SSID.substring(2, length - 1));
1612b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff            return wifiSsid.toString();
1613b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff        }
1614b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff        return SSID;
1615b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff    }
1616b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff
16173e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber    /** @hide **/
16183e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber    public static String userApprovedAsString(int userApproved) {
16193e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber        switch (userApproved) {
16203e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber            case USER_APPROVED:
16213e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber                return "USER_APPROVED";
16223e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber            case USER_BANNED:
16233e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber                return "USER_BANNED";
16243e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber            case USER_UNSPECIFIED:
16253e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber                return "USER_UNSPECIFIED";
16263e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber            default:
16273e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber                return "INVALID";
16283e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber        }
16293e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber    }
16303e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber
163126d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff    /**
163226d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff     * Get an identifier for associating credentials with this config
163326d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff     * @param current configuration contains values for additional fields
163426d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff     *                that are not part of this configuration. Used
163526d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff     *                when a config with some fields is passed by an application.
163626d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff     * @throws IllegalStateException if config is invalid for key id generation
163726d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff     * @hide
163826d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff     */
1639ffadfb9ffdced62db215319d3edc7717802088fbVinit Deshapnde    public String getKeyIdForCredentials(WifiConfiguration current) {
164026d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff        String keyMgmt = null;
164126d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff
164226d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff        try {
164326d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff            // Get current config details for fields that are not initialized
164426d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff            if (TextUtils.isEmpty(SSID)) SSID = current.SSID;
164526d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff            if (allowedKeyManagement.cardinality() == 0) {
164626d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff                allowedKeyManagement = current.allowedKeyManagement;
164726d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff            }
164826d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff            if (allowedKeyManagement.get(KeyMgmt.WPA_EAP)) {
164926d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff                keyMgmt = KeyMgmt.strings[KeyMgmt.WPA_EAP];
165026d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff            }
165161b5a7689320274ce5fff9a9eae1866d8d696b9bJan Nordqvist            if (allowedKeyManagement.get(KeyMgmt.OSEN)) {
165261b5a7689320274ce5fff9a9eae1866d8d696b9bJan Nordqvist                keyMgmt = KeyMgmt.strings[KeyMgmt.OSEN];
165361b5a7689320274ce5fff9a9eae1866d8d696b9bJan Nordqvist            }
165426d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff            if (allowedKeyManagement.get(KeyMgmt.IEEE8021X)) {
165526d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff                keyMgmt += KeyMgmt.strings[KeyMgmt.IEEE8021X];
165626d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff            }
165726d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff
165826d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff            if (TextUtils.isEmpty(keyMgmt)) {
165926d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff                throw new IllegalStateException("Not an EAP network");
166026d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff            }
166126d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff
166226d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff            return trimStringForKeyId(SSID) + "_" + keyMgmt + "_" +
166326d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff                    trimStringForKeyId(enterpriseConfig.getKeyId(current != null ?
166426d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff                            current.enterpriseConfig : null));
166526d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff        } catch (NullPointerException e) {
166626d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff            throw new IllegalStateException("Invalid config details");
166726d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff        }
166826d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff    }
166926d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff
167026d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff    private String trimStringForKeyId(String string) {
167126d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff        // Remove quotes and spaces
167226d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff        return string.replace("\"", "").replace(" ", "");
167326d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff    }
167426d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff
16759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static BitSet readBitSet(Parcel src) {
16769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int cardinality = src.readInt();
16779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        BitSet set = new BitSet();
16799b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff        for (int i = 0; i < cardinality; i++) {
16809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            set.set(src.readInt());
16819b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff        }
16829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return set;
16849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
16859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static void writeBitSet(Parcel dest, BitSet set) {
16879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int nextSetBit = -1;
16889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeInt(set.cardinality());
16909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16919b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff        while ((nextSetBit = set.nextSetBit(nextSetBit + 1)) != -1) {
16929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(nextSetBit);
16939b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff        }
16949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
16959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1696ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff    /** @hide */
1697ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff    public int getAuthType() {
1698d49288352908e8cbc9a001e13df2eb35e78deb1aJan Nordqvist        if (allowedKeyManagement.cardinality() > 1) {
1699d49288352908e8cbc9a001e13df2eb35e78deb1aJan Nordqvist            throw new IllegalStateException("More than one auth type set");
170026d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff        }
1701ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff        if (allowedKeyManagement.get(KeyMgmt.WPA_PSK)) {
1702ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff            return KeyMgmt.WPA_PSK;
1703ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff        } else if (allowedKeyManagement.get(KeyMgmt.WPA2_PSK)) {
1704ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff            return KeyMgmt.WPA2_PSK;
1705ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff        } else if (allowedKeyManagement.get(KeyMgmt.WPA_EAP)) {
1706ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff            return KeyMgmt.WPA_EAP;
1707ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff        } else if (allowedKeyManagement.get(KeyMgmt.IEEE8021X)) {
1708ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff            return KeyMgmt.IEEE8021X;
1709ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff        }
1710ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff        return KeyMgmt.NONE;
1711ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff    }
1712ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff
17137c3606c103e95d3991267cca2592402a68779cafvandwalle    /* @hide
17147c3606c103e95d3991267cca2592402a68779cafvandwalle     * Cache the config key, this seems useful as a speed up since a lot of
17157c3606c103e95d3991267cca2592402a68779cafvandwalle     * lookups in the config store are done and based on this key.
17167c3606c103e95d3991267cca2592402a68779cafvandwalle     */
17177c3606c103e95d3991267cca2592402a68779cafvandwalle    String mCachedConfigKey;
17187c3606c103e95d3991267cca2592402a68779cafvandwalle
17197c3606c103e95d3991267cca2592402a68779cafvandwalle    /** @hide
17207c3606c103e95d3991267cca2592402a68779cafvandwalle     *  return the string used to calculate the hash in WifiConfigStore
17217c3606c103e95d3991267cca2592402a68779cafvandwalle     *  and uniquely identify this WifiConfiguration
17227c3606c103e95d3991267cca2592402a68779cafvandwalle     */
17237c3606c103e95d3991267cca2592402a68779cafvandwalle    public String configKey(boolean allowCached) {
17247c3606c103e95d3991267cca2592402a68779cafvandwalle        String key;
17257c3606c103e95d3991267cca2592402a68779cafvandwalle        if (allowCached && mCachedConfigKey != null) {
17267c3606c103e95d3991267cca2592402a68779cafvandwalle            key = mCachedConfigKey;
1727b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande        } else if (providerFriendlyName != null) {
1728b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande            key = FQDN + KeyMgmt.strings[KeyMgmt.WPA_EAP];
17296fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski            if (!shared) {
17306fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski                key += "-" + Integer.toString(UserHandle.getUserId(creatorUid));
17316fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski            }
17327c3606c103e95d3991267cca2592402a68779cafvandwalle        } else {
17338e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti            if (allowedKeyManagement.get(KeyMgmt.WPA_PSK)) {
17348e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti                key = SSID + KeyMgmt.strings[KeyMgmt.WPA_PSK];
17358e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti            } else if (allowedKeyManagement.get(KeyMgmt.WPA_EAP) ||
17368e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti                    allowedKeyManagement.get(KeyMgmt.IEEE8021X)) {
17378e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti                key = SSID + KeyMgmt.strings[KeyMgmt.WPA_EAP];
17388e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti            } else if (wepKeys[0] != null) {
17398e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti                key = SSID + "WEP";
17408e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti            } else {
17418e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti                key = SSID + KeyMgmt.strings[KeyMgmt.NONE];
17427c3606c103e95d3991267cca2592402a68779cafvandwalle            }
17436fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski            if (!shared) {
17446fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski                key += "-" + Integer.toString(UserHandle.getUserId(creatorUid));
17456fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski            }
17467c3606c103e95d3991267cca2592402a68779cafvandwalle            mCachedConfigKey = key;
17477c3606c103e95d3991267cca2592402a68779cafvandwalle        }
17487c3606c103e95d3991267cca2592402a68779cafvandwalle        return key;
17497c3606c103e95d3991267cca2592402a68779cafvandwalle    }
17507c3606c103e95d3991267cca2592402a68779cafvandwalle
17517c3606c103e95d3991267cca2592402a68779cafvandwalle    /** @hide
17527c3606c103e95d3991267cca2592402a68779cafvandwalle     * get configKey, force calculating the config string
17537c3606c103e95d3991267cca2592402a68779cafvandwalle     */
17547c3606c103e95d3991267cca2592402a68779cafvandwalle    public String configKey() {
17557c3606c103e95d3991267cca2592402a68779cafvandwalle        return configKey(false);
17567c3606c103e95d3991267cca2592402a68779cafvandwalle    }
17577c3606c103e95d3991267cca2592402a68779cafvandwalle
17586346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim    /** @hide */
17596346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim    public IpConfiguration getIpConfiguration() {
17606346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim        return mIpConfiguration;
17616346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim    }
17626346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim
17636346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim    /** @hide */
17646346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim    public void setIpConfiguration(IpConfiguration ipConfiguration) {
17656346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim        mIpConfiguration = ipConfiguration;
17666346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim    }
17676346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim
17686346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim    /** @hide */
17690a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti    public StaticIpConfiguration getStaticIpConfiguration() {
17700a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti        return mIpConfiguration.getStaticIpConfiguration();
17716346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim    }
17726346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim
17736346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim    /** @hide */
17740a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti    public void setStaticIpConfiguration(StaticIpConfiguration staticIpConfiguration) {
17750a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti        mIpConfiguration.setStaticIpConfiguration(staticIpConfiguration);
17766346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim    }
17776346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim
17786346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim    /** @hide */
17796346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim    public IpConfiguration.IpAssignment getIpAssignment() {
17806346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim        return mIpConfiguration.ipAssignment;
17816346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim    }
17826346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim
17836346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim    /** @hide */
17846346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim    public void setIpAssignment(IpConfiguration.IpAssignment ipAssignment) {
17856346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim        mIpConfiguration.ipAssignment = ipAssignment;
17866346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim    }
17876346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim
17886346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim    /** @hide */
17896346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim    public IpConfiguration.ProxySettings getProxySettings() {
17906346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim        return mIpConfiguration.proxySettings;
17916346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim    }
17926346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim
17936346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim    /** @hide */
17946346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim    public void setProxySettings(IpConfiguration.ProxySettings proxySettings) {
17956346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim        mIpConfiguration.proxySettings = proxySettings;
17966346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim    }
17976346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim
17986346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim    /** @hide */
17990a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti    public ProxyInfo getHttpProxy() {
18000a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti        return mIpConfiguration.httpProxy;
18010a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti    }
18020a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti
18030a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti    /** @hide */
18040a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti    public void setHttpProxy(ProxyInfo httpProxy) {
18050a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti        mIpConfiguration.httpProxy = httpProxy;
18060a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti    }
18070a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti
18080a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti    /** @hide */
18096346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim    public void setProxy(ProxySettings settings, ProxyInfo proxy) {
18106346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim        mIpConfiguration.proxySettings = settings;
18110a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti        mIpConfiguration.httpProxy = proxy;
18126346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim    }
18136346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim
181413f48ffab8c24d18a0a83e488a9b358a730580d4vandwalle    /** Implement the Parcelable interface {@hide} */
1815678979748585c5903125a404e448ad6c111dedadJaewan Kim    public int describeContents() {
1816678979748585c5903125a404e448ad6c111dedadJaewan Kim        return 0;
1817678979748585c5903125a404e448ad6c111dedadJaewan Kim    }
1818678979748585c5903125a404e448ad6c111dedadJaewan Kim
18196fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski    /** @hide */
1820a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande    public void setPasspointManagementObjectTree(String passpointManagementObjectTree) {
1821a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande        mPasspointManagementObjectTree = passpointManagementObjectTree;
1822a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande    }
1823a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande
1824a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande    /** @hide */
1825a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande    public String getMoTree() {
1826a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande        return mPasspointManagementObjectTree;
1827a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande    }
1828a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande
1829128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff    /** copy constructor {@hide} */
1830128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff    public WifiConfiguration(WifiConfiguration source) {
1831128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff        if (source != null) {
1832128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff            networkId = source.networkId;
1833128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff            status = source.status;
1834128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff            SSID = source.SSID;
1835128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff            BSSID = source.BSSID;
18368a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng            FQDN = source.FQDN;
1837a0d929e505432a8c84f3899696c910db16bd73bfVinit Deshpande            roamingConsortiumIds = source.roamingConsortiumIds.clone();
1838b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande            providerFriendlyName = source.providerFriendlyName;
1839128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff            preSharedKey = source.preSharedKey;
1840128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff
18418d106780b6a638552749e54e169fc72537d4bcccxinhe            mNetworkSelectionStatus.copy(source.getNetworkSelectionStatus());
1842a0be0fb2709124a567f89114b1d8e80f74452edcxinhe            apBand = source.apBand;
1843a0be0fb2709124a567f89114b1d8e80f74452edcxinhe            apChannel = source.apChannel;
1844a0be0fb2709124a567f89114b1d8e80f74452edcxinhe
1845128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff            wepKeys = new String[4];
18469b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff            for (int i = 0; i < wepKeys.length; i++) {
1847128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff                wepKeys[i] = source.wepKeys[i];
18489b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff            }
1849128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff
1850128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff            wepTxKeyIndex = source.wepTxKeyIndex;
1851128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff            priority = source.priority;
1852128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff            hiddenSSID = source.hiddenSSID;
1853128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff            allowedKeyManagement   = (BitSet) source.allowedKeyManagement.clone();
1854128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff            allowedProtocols       = (BitSet) source.allowedProtocols.clone();
1855128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff            allowedAuthAlgorithms  = (BitSet) source.allowedAuthAlgorithms.clone();
1856128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff            allowedPairwiseCiphers = (BitSet) source.allowedPairwiseCiphers.clone();
1857128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff            allowedGroupCiphers    = (BitSet) source.allowedGroupCiphers.clone();
18589b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff            enterpriseConfig = new WifiEnterpriseConfig(source.enterpriseConfig);
1859678979748585c5903125a404e448ad6c111dedadJaewan Kim
18607c3606c103e95d3991267cca2592402a68779cafvandwalle            defaultGwMacAddress = source.defaultGwMacAddress;
18617c3606c103e95d3991267cca2592402a68779cafvandwalle
18626346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim            mIpConfiguration = new IpConfiguration(source.mIpConfiguration);
18636346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim
18647c3606c103e95d3991267cca2592402a68779cafvandwalle            if ((source.linkedConfigurations != null)
18657c3606c103e95d3991267cca2592402a68779cafvandwalle                    && (source.linkedConfigurations.size() > 0)) {
18667c3606c103e95d3991267cca2592402a68779cafvandwalle                linkedConfigurations = new HashMap<String, Integer>();
18677c3606c103e95d3991267cca2592402a68779cafvandwalle                linkedConfigurations.putAll(source.linkedConfigurations);
18687c3606c103e95d3991267cca2592402a68779cafvandwalle            }
18697c3606c103e95d3991267cca2592402a68779cafvandwalle            mCachedConfigKey = null; //force null configKey
1870e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle            selfAdded = source.selfAdded;
1871ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle            validatedInternetAccess = source.validatedInternetAccess;
18728faf2a2a15853368a14babf935c156664b5f0b6cJeff Davidson            ephemeral = source.ephemeral;
1873f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin            meteredHint = source.meteredHint;
1874fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin            useExternalScores = source.useExternalScores;
18757c3606c103e95d3991267cca2592402a68779cafvandwalle            if (source.visibility != null) {
18767c3606c103e95d3991267cca2592402a68779cafvandwalle                visibility = new Visibility(source.visibility);
18777c3606c103e95d3991267cca2592402a68779cafvandwalle            }
18783a74e2ef1681eaae973fc989b3533a7f9c82e7b1vandwalle
18793a74e2ef1681eaae973fc989b3533a7f9c82e7b1vandwalle            lastFailure = source.lastFailure;
18808f13548615f647a1208ace5369b504cb41149965vandwalle            didSelfAdd = source.didSelfAdd;
18818f13548615f647a1208ace5369b504cb41149965vandwalle            lastConnectUid = source.lastConnectUid;
18828f13548615f647a1208ace5369b504cb41149965vandwalle            lastUpdateUid = source.lastUpdateUid;
18838f13548615f647a1208ace5369b504cb41149965vandwalle            creatorUid = source.creatorUid;
18843e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber            creatorName = source.creatorName;
18853e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber            lastUpdateName = source.lastUpdateName;
18862d0f71eea20470985abde98d759910a1ac40b257vandwalle            peerWifiConfiguration = source.peerWifiConfiguration;
18878d106780b6a638552749e54e169fc72537d4bcccxinhe
1888111fa0274d1d6620f9634783585387f3b773949evandwalle            lastConnected = source.lastConnected;
1889111fa0274d1d6620f9634783585387f3b773949evandwalle            lastDisconnected = source.lastDisconnected;
1890154b2cf6bbb99ee258b289846183172139a87dbavandwalle            lastConnectionFailure = source.lastConnectionFailure;
18918650c035609507340e3a66459cea16ef08cd03a6vandwalle            lastRoamingFailure = source.lastRoamingFailure;
18928650c035609507340e3a66459cea16ef08cd03a6vandwalle            lastRoamingFailureReason = source.lastRoamingFailureReason;
18938650c035609507340e3a66459cea16ef08cd03a6vandwalle            roamingFailureBlackListTimeMilli = source.roamingFailureBlackListTimeMilli;
1894154b2cf6bbb99ee258b289846183172139a87dbavandwalle            numScorerOverride = source.numScorerOverride;
1895154b2cf6bbb99ee258b289846183172139a87dbavandwalle            numScorerOverrideAndSwitchedNetwork = source.numScorerOverrideAndSwitchedNetwork;
18964eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle            numAssociation = source.numAssociation;
1897448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle            numUserTriggeredWifiDisableLowRSSI = source.numUserTriggeredWifiDisableLowRSSI;
1898448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle            numUserTriggeredWifiDisableBadRSSI = source.numUserTriggeredWifiDisableBadRSSI;
1899448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle            numUserTriggeredWifiDisableNotHighRSSI = source.numUserTriggeredWifiDisableNotHighRSSI;
1900448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle            numTicksAtLowRSSI = source.numTicksAtLowRSSI;
1901448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle            numTicksAtBadRSSI = source.numTicksAtBadRSSI;
1902448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle            numTicksAtNotHighRSSI = source.numTicksAtNotHighRSSI;
1903448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle            numUserTriggeredJoinAttempts = source.numUserTriggeredJoinAttempts;
19043e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber            userApproved = source.userApproved;
1905ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle            numNoInternetAccessReports = source.numNoInternetAccessReports;
19061248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti            noInternetAccessExpected = source.noInternetAccessExpected;
1907ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle            creationTime = source.creationTime;
1908ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle            updateTime = source.updateTime;
19096fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski            shared = source.shared;
19106346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim        }
19119e6222f4c126252c9950d072ab67d8b849d17643Irfan Sheriff    }
19129e6222f4c126252c9950d072ab67d8b849d17643Irfan Sheriff
19139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Implement the Parcelable interface {@hide} */
19146346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim    @Override
19159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void writeToParcel(Parcel dest, int flags) {
19169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeInt(networkId);
19179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeInt(status);
19188d106780b6a638552749e54e169fc72537d4bcccxinhe        mNetworkSelectionStatus.writeToParcel(dest);
19199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeString(SSID);
19209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeString(BSSID);
1921a0be0fb2709124a567f89114b1d8e80f74452edcxinhe        dest.writeInt(apBand);
1922a0be0fb2709124a567f89114b1d8e80f74452edcxinhe        dest.writeInt(apChannel);
19238a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng        dest.writeString(FQDN);
1924b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande        dest.writeString(providerFriendlyName);
1925a0d929e505432a8c84f3899696c910db16bd73bfVinit Deshpande        dest.writeInt(roamingConsortiumIds.length);
19267226c8f95b5971af2710c8d2f8a8b6f2210e2420Vinit Deshpande        for (long roamingConsortiumId : roamingConsortiumIds) {
1927b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande            dest.writeLong(roamingConsortiumId);
1928b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande        }
19299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeString(preSharedKey);
19309b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff        for (String wepKey : wepKeys) {
19319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeString(wepKey);
19329b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff        }
19339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeInt(wepTxKeyIndex);
19349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeInt(priority);
19359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeInt(hiddenSSID ? 1 : 0);
19365f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng        dest.writeInt(requirePMF ? 1 : 0);
19375f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng        dest.writeString(updateIdentifier);
19389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
19399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        writeBitSet(dest, allowedKeyManagement);
19409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        writeBitSet(dest, allowedProtocols);
19419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        writeBitSet(dest, allowedAuthAlgorithms);
19429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        writeBitSet(dest, allowedPairwiseCiphers);
19439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        writeBitSet(dest, allowedGroupCiphers);
19444337476a6669ce52549ce4a60f5e4d07f8e3033fChung-yih Wang
19459b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff        dest.writeParcelable(enterpriseConfig, flags);
1946678979748585c5903125a404e448ad6c111dedadJaewan Kim
19476346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim        dest.writeParcelable(mIpConfiguration, flags);
19487c3606c103e95d3991267cca2592402a68779cafvandwalle        dest.writeString(dhcpServer);
19497c3606c103e95d3991267cca2592402a68779cafvandwalle        dest.writeString(defaultGwMacAddress);
1950e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle        dest.writeInt(selfAdded ? 1 : 0);
19518f13548615f647a1208ace5369b504cb41149965vandwalle        dest.writeInt(didSelfAdd ? 1 : 0);
1952ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle        dest.writeInt(validatedInternetAccess ? 1 : 0);
19538faf2a2a15853368a14babf935c156664b5f0b6cJeff Davidson        dest.writeInt(ephemeral ? 1 : 0);
1954f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin        dest.writeInt(meteredHint ? 1 : 0);
1955fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin        dest.writeInt(useExternalScores ? 1 : 0);
19568f13548615f647a1208ace5369b504cb41149965vandwalle        dest.writeInt(creatorUid);
19578f13548615f647a1208ace5369b504cb41149965vandwalle        dest.writeInt(lastConnectUid);
19588f13548615f647a1208ace5369b504cb41149965vandwalle        dest.writeInt(lastUpdateUid);
19593e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber        dest.writeString(creatorName);
19603e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber        dest.writeString(lastUpdateName);
1961154b2cf6bbb99ee258b289846183172139a87dbavandwalle        dest.writeLong(lastConnectionFailure);
19628650c035609507340e3a66459cea16ef08cd03a6vandwalle        dest.writeLong(lastRoamingFailure);
19638650c035609507340e3a66459cea16ef08cd03a6vandwalle        dest.writeInt(lastRoamingFailureReason);
19648650c035609507340e3a66459cea16ef08cd03a6vandwalle        dest.writeLong(roamingFailureBlackListTimeMilli);
1965154b2cf6bbb99ee258b289846183172139a87dbavandwalle        dest.writeInt(numScorerOverride);
1966154b2cf6bbb99ee258b289846183172139a87dbavandwalle        dest.writeInt(numScorerOverrideAndSwitchedNetwork);
19674eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle        dest.writeInt(numAssociation);
1968448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle        dest.writeInt(numUserTriggeredWifiDisableLowRSSI);
1969448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle        dest.writeInt(numUserTriggeredWifiDisableBadRSSI);
1970448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle        dest.writeInt(numUserTriggeredWifiDisableNotHighRSSI);
1971448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle        dest.writeInt(numTicksAtLowRSSI);
1972448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle        dest.writeInt(numTicksAtBadRSSI);
1973448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle        dest.writeInt(numTicksAtNotHighRSSI);
1974448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle        dest.writeInt(numUserTriggeredJoinAttempts);
19753e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber        dest.writeInt(userApproved);
1976ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle        dest.writeInt(numNoInternetAccessReports);
19771248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti        dest.writeInt(noInternetAccessExpected ? 1 : 0);
19786fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski        dest.writeInt(shared ? 1 : 0);
1979a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande        dest.writeString(mPasspointManagementObjectTree);
19809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
19819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
19829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Implement the Parcelable interface {@hide} */
19839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final Creator<WifiConfiguration> CREATOR =
19849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Creator<WifiConfiguration>() {
19859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public WifiConfiguration createFromParcel(Parcel in) {
19869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                WifiConfiguration config = new WifiConfiguration();
19879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                config.networkId = in.readInt();
19889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                config.status = in.readInt();
19898d106780b6a638552749e54e169fc72537d4bcccxinhe                config.mNetworkSelectionStatus.readFromParcel(in);
19909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                config.SSID = in.readString();
19919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                config.BSSID = in.readString();
1992a0be0fb2709124a567f89114b1d8e80f74452edcxinhe                config.apBand = in.readInt();
1993a0be0fb2709124a567f89114b1d8e80f74452edcxinhe                config.apChannel = in.readInt();
19948a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng                config.FQDN = in.readString();
1995b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande                config.providerFriendlyName = in.readString();
1996b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande                int numRoamingConsortiumIds = in.readInt();
19977226c8f95b5971af2710c8d2f8a8b6f2210e2420Vinit Deshpande                config.roamingConsortiumIds = new long[numRoamingConsortiumIds];
1998b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande                for (int i = 0; i < numRoamingConsortiumIds; i++) {
1999a0d929e505432a8c84f3899696c910db16bd73bfVinit Deshpande                    config.roamingConsortiumIds[i] = in.readLong();
2000b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande                }
20019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                config.preSharedKey = in.readString();
20029b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff                for (int i = 0; i < config.wepKeys.length; i++) {
20039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    config.wepKeys[i] = in.readString();
20049b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff                }
20059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                config.wepTxKeyIndex = in.readInt();
20069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                config.priority = in.readInt();
20079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                config.hiddenSSID = in.readInt() != 0;
20085f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng                config.requirePMF = in.readInt() != 0;
20095f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng                config.updateIdentifier = in.readString();
20105f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng
20119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                config.allowedKeyManagement   = readBitSet(in);
20129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                config.allowedProtocols       = readBitSet(in);
20139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                config.allowedAuthAlgorithms  = readBitSet(in);
20149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                config.allowedPairwiseCiphers = readBitSet(in);
20159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                config.allowedGroupCiphers    = readBitSet(in);
20164337476a6669ce52549ce4a60f5e4d07f8e3033fChung-yih Wang
20179b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff                config.enterpriseConfig = in.readParcelable(null);
20186346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim                config.mIpConfiguration = in.readParcelable(null);
20197c3606c103e95d3991267cca2592402a68779cafvandwalle                config.dhcpServer = in.readString();
20207c3606c103e95d3991267cca2592402a68779cafvandwalle                config.defaultGwMacAddress = in.readString();
2021e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle                config.selfAdded = in.readInt() != 0;
20228f13548615f647a1208ace5369b504cb41149965vandwalle                config.didSelfAdd = in.readInt() != 0;
2023ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle                config.validatedInternetAccess = in.readInt() != 0;
20248faf2a2a15853368a14babf935c156664b5f0b6cJeff Davidson                config.ephemeral = in.readInt() != 0;
2025f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin                config.meteredHint = in.readInt() != 0;
2026fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin                config.useExternalScores = in.readInt() != 0;
20278f13548615f647a1208ace5369b504cb41149965vandwalle                config.creatorUid = in.readInt();
20288f13548615f647a1208ace5369b504cb41149965vandwalle                config.lastConnectUid = in.readInt();
20298f13548615f647a1208ace5369b504cb41149965vandwalle                config.lastUpdateUid = in.readInt();
20303e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber                config.creatorName = in.readString();
20313e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber                config.lastUpdateName = in.readString();
2032154b2cf6bbb99ee258b289846183172139a87dbavandwalle                config.lastConnectionFailure = in.readLong();
20338650c035609507340e3a66459cea16ef08cd03a6vandwalle                config.lastRoamingFailure = in.readLong();
20348650c035609507340e3a66459cea16ef08cd03a6vandwalle                config.lastRoamingFailureReason = in.readInt();
20358650c035609507340e3a66459cea16ef08cd03a6vandwalle                config.roamingFailureBlackListTimeMilli = in.readLong();
2036154b2cf6bbb99ee258b289846183172139a87dbavandwalle                config.numScorerOverride = in.readInt();
2037154b2cf6bbb99ee258b289846183172139a87dbavandwalle                config.numScorerOverrideAndSwitchedNetwork = in.readInt();
20384eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle                config.numAssociation = in.readInt();
2039448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle                config.numUserTriggeredWifiDisableLowRSSI = in.readInt();
2040448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle                config.numUserTriggeredWifiDisableBadRSSI = in.readInt();
2041448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle                config.numUserTriggeredWifiDisableNotHighRSSI = in.readInt();
2042448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle                config.numTicksAtLowRSSI = in.readInt();
2043448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle                config.numTicksAtBadRSSI = in.readInt();
2044448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle                config.numTicksAtNotHighRSSI = in.readInt();
2045448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle                config.numUserTriggeredJoinAttempts = in.readInt();
20463e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber                config.userApproved = in.readInt();
2047ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle                config.numNoInternetAccessReports = in.readInt();
20481248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti                config.noInternetAccessExpected = in.readInt() != 0;
20496fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski                config.shared = in.readInt() != 0;
2050a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande                config.mPasspointManagementObjectTree = in.readString();
20519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return config;
20529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
20539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public WifiConfiguration[] newArray(int size) {
20559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new WifiConfiguration[size];
20569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
20579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        };
2058aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy
2059aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy    /**
2060aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy     * Serializes the object for backup
2061aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy     * @hide
2062aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy     */
2063aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy    public byte[] getBytesForBackup() throws IOException {
2064aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy        ByteArrayOutputStream baos = new ByteArrayOutputStream();
2065aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy        DataOutputStream out = new DataOutputStream(baos);
2066aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy
2067aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy        out.writeInt(BACKUP_VERSION);
2068aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy        BackupUtils.writeString(out, SSID);
2069aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy        out.writeInt(apBand);
2070aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy        out.writeInt(apChannel);
2071aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy        BackupUtils.writeString(out, preSharedKey);
2072aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy        out.writeInt(getAuthType());
2073aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy        return baos.toByteArray();
2074aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy    }
2075aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy
2076aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy    /**
2077aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy     * Deserializes a byte array into the WiFiConfiguration Object
2078aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy     * @hide
2079aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy     */
2080aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy    public static WifiConfiguration getWifiConfigFromBackup(DataInputStream in) throws IOException,
2081aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy            BackupUtils.BadVersionException {
2082aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy        WifiConfiguration config = new WifiConfiguration();
2083aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy        int version = in.readInt();
2084aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy        if (version < 1 || version > BACKUP_VERSION) {
2085aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy            throw new BackupUtils.BadVersionException("Unknown Backup Serialization Version");
2086aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy        }
2087aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy
2088aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy        if (version == 1) return null; // Version 1 is a bad dataset.
2089aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy
2090aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy        config.SSID = BackupUtils.readString(in);
2091aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy        config.apBand = in.readInt();
2092aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy        config.apChannel = in.readInt();
2093aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy        config.preSharedKey = BackupUtils.readString(in);
2094aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy        config.allowedKeyManagement.set(in.readInt());
2095aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy        return config;
2096aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy    }
2097b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne}
2098