TestAccessPointBuilder.java revision ce6b0b2539dbb562b5c0e720d51bd3d35af437cf
19853743705603e0b5214e5995bea8c9267708813Dave Schaefer/*
29853743705603e0b5214e5995bea8c9267708813Dave Schaefer * Copyright (C) 2017 The Android Open Source Project
39853743705603e0b5214e5995bea8c9267708813Dave Schaefer *
49853743705603e0b5214e5995bea8c9267708813Dave Schaefer * Licensed under the Apache License, Version 2.0 (the "License");
59853743705603e0b5214e5995bea8c9267708813Dave Schaefer * you may not use this file except in compliance with the License.
69853743705603e0b5214e5995bea8c9267708813Dave Schaefer * You may obtain a copy of the License at
79853743705603e0b5214e5995bea8c9267708813Dave Schaefer *
89853743705603e0b5214e5995bea8c9267708813Dave Schaefer *      http://www.apache.org/licenses/LICENSE-2.0
99853743705603e0b5214e5995bea8c9267708813Dave Schaefer *
109853743705603e0b5214e5995bea8c9267708813Dave Schaefer * Unless required by applicable law or agreed to in writing, software
119853743705603e0b5214e5995bea8c9267708813Dave Schaefer * distributed under the License is distributed on an "AS IS" BASIS,
129853743705603e0b5214e5995bea8c9267708813Dave Schaefer * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139853743705603e0b5214e5995bea8c9267708813Dave Schaefer * See the License for the specific language governing permissions and
149853743705603e0b5214e5995bea8c9267708813Dave Schaefer * limitations under the License.
159853743705603e0b5214e5995bea8c9267708813Dave Schaefer */
169853743705603e0b5214e5995bea8c9267708813Dave Schaefer
179853743705603e0b5214e5995bea8c9267708813Dave Schaeferpackage com.android.settingslib.wifi;
189853743705603e0b5214e5995bea8c9267708813Dave Schaefer
199853743705603e0b5214e5995bea8c9267708813Dave Schaeferimport android.content.Context;
209853743705603e0b5214e5995bea8c9267708813Dave Schaeferimport android.net.ConnectivityManager;
219853743705603e0b5214e5995bea8c9267708813Dave Schaeferimport android.net.NetworkInfo;
229853743705603e0b5214e5995bea8c9267708813Dave Schaeferimport android.net.wifi.WifiConfiguration;
2396a53579088a21590cb02e5befc88ef965520d3eSundeep Ghumanimport android.net.wifi.WifiInfo;
249853743705603e0b5214e5995bea8c9267708813Dave Schaeferimport android.os.Bundle;
259853743705603e0b5214e5995bea8c9267708813Dave Schaefer
269853743705603e0b5214e5995bea8c9267708813Dave Schaefer/**
279853743705603e0b5214e5995bea8c9267708813Dave Schaefer* Build and return a valid AccessPoint.
289853743705603e0b5214e5995bea8c9267708813Dave Schaefer*
29ce6b0b2539dbb562b5c0e720d51bd3d35af437cfSundeep Ghuman* Only intended for testing the AccessPoint class or creating Access points to be used in testing
30ce6b0b2539dbb562b5c0e720d51bd3d35af437cfSundeep Ghuman* applications. AccessPoints were designed to only be populated by the mechanisms of scan results
31ce6b0b2539dbb562b5c0e720d51bd3d35af437cfSundeep Ghuman* and wifi configurations.
329853743705603e0b5214e5995bea8c9267708813Dave Schaefer*/
339853743705603e0b5214e5995bea8c9267708813Dave Schaeferpublic class TestAccessPointBuilder {
349853743705603e0b5214e5995bea8c9267708813Dave Schaefer    // match the private values in WifiManager
359853743705603e0b5214e5995bea8c9267708813Dave Schaefer    private static final int MIN_RSSI = -100;
369853743705603e0b5214e5995bea8c9267708813Dave Schaefer    private static final int MAX_RSSI = -55;
379853743705603e0b5214e5995bea8c9267708813Dave Schaefer
389853743705603e0b5214e5995bea8c9267708813Dave Schaefer    // set some sensible defaults
399853743705603e0b5214e5995bea8c9267708813Dave Schaefer    private int mRssi = AccessPoint.UNREACHABLE_RSSI;
4096a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman    private int mNetworkId = WifiConfiguration.INVALID_NETWORK_ID;
419853743705603e0b5214e5995bea8c9267708813Dave Schaefer    private String ssid = "TestSsid";
429853743705603e0b5214e5995bea8c9267708813Dave Schaefer    private NetworkInfo mNetworkInfo = null;
43ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu    private String mFqdn = null;
44ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu    private String mProviderFriendlyName = null;
45ce6b0b2539dbb562b5c0e720d51bd3d35af437cfSundeep Ghuman    private int mSecurity = AccessPoint.SECURITY_NONE;
4696a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman    private WifiConfiguration mWifiConfig;
4796a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman    private WifiInfo mWifiInfo;
489853743705603e0b5214e5995bea8c9267708813Dave Schaefer
499853743705603e0b5214e5995bea8c9267708813Dave Schaefer    Context mContext;
509853743705603e0b5214e5995bea8c9267708813Dave Schaefer
519853743705603e0b5214e5995bea8c9267708813Dave Schaefer    public TestAccessPointBuilder(Context context) {
529853743705603e0b5214e5995bea8c9267708813Dave Schaefer        mContext = context;
539853743705603e0b5214e5995bea8c9267708813Dave Schaefer    }
549853743705603e0b5214e5995bea8c9267708813Dave Schaefer
559853743705603e0b5214e5995bea8c9267708813Dave Schaefer    public AccessPoint build() {
569853743705603e0b5214e5995bea8c9267708813Dave Schaefer        Bundle bundle = new Bundle();
579853743705603e0b5214e5995bea8c9267708813Dave Schaefer
5896a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        WifiConfiguration wifiConfig = new WifiConfiguration();
5996a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        wifiConfig.networkId = mNetworkId;
609853743705603e0b5214e5995bea8c9267708813Dave Schaefer
619853743705603e0b5214e5995bea8c9267708813Dave Schaefer        bundle.putString(AccessPoint.KEY_SSID, ssid);
6296a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        bundle.putParcelable(AccessPoint.KEY_CONFIG, wifiConfig);
639853743705603e0b5214e5995bea8c9267708813Dave Schaefer        bundle.putParcelable(AccessPoint.KEY_NETWORKINFO, mNetworkInfo);
6496a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        bundle.putParcelable(AccessPoint.KEY_WIFIINFO, mWifiInfo);
65ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu        if (mFqdn != null) {
66ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu            bundle.putString(AccessPoint.KEY_FQDN, mFqdn);
67ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu        }
68ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu        if (mProviderFriendlyName != null) {
69ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu            bundle.putString(AccessPoint.KEY_PROVIDER_FRIENDLY_NAME, mProviderFriendlyName);
70ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu        }
71ce6b0b2539dbb562b5c0e720d51bd3d35af437cfSundeep Ghuman        bundle.putInt(AccessPoint.KEY_SECURITY, mSecurity);
72ce6b0b2539dbb562b5c0e720d51bd3d35af437cfSundeep Ghuman
739853743705603e0b5214e5995bea8c9267708813Dave Schaefer        AccessPoint ap = new AccessPoint(mContext, bundle);
749853743705603e0b5214e5995bea8c9267708813Dave Schaefer        ap.setRssi(mRssi);
759853743705603e0b5214e5995bea8c9267708813Dave Schaefer        return ap;
769853743705603e0b5214e5995bea8c9267708813Dave Schaefer    }
779853743705603e0b5214e5995bea8c9267708813Dave Schaefer
789853743705603e0b5214e5995bea8c9267708813Dave Schaefer    public TestAccessPointBuilder setActive(boolean active) {
799853743705603e0b5214e5995bea8c9267708813Dave Schaefer        if (active) {
809853743705603e0b5214e5995bea8c9267708813Dave Schaefer            mNetworkInfo = new NetworkInfo(
819853743705603e0b5214e5995bea8c9267708813Dave Schaefer                ConnectivityManager.TYPE_DUMMY,
829853743705603e0b5214e5995bea8c9267708813Dave Schaefer                ConnectivityManager.TYPE_DUMMY,
839853743705603e0b5214e5995bea8c9267708813Dave Schaefer                "TestNetwork",
849853743705603e0b5214e5995bea8c9267708813Dave Schaefer                "TestNetwork");
859853743705603e0b5214e5995bea8c9267708813Dave Schaefer        } else {
869853743705603e0b5214e5995bea8c9267708813Dave Schaefer            mNetworkInfo = null;
879853743705603e0b5214e5995bea8c9267708813Dave Schaefer        }
889853743705603e0b5214e5995bea8c9267708813Dave Schaefer        return this;
899853743705603e0b5214e5995bea8c9267708813Dave Schaefer    }
909853743705603e0b5214e5995bea8c9267708813Dave Schaefer
919853743705603e0b5214e5995bea8c9267708813Dave Schaefer    /**
9296a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman     * Set the rssi based upon the desired signal level.
93ce78a5f2d33716fde95f12b1e02df953d013e986Sundeep Ghuman     *
9496a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman     * <p>Side effect: if this AccessPoint was previously unreachable,
9596a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman     * setting the level will also make it reachable.
9696a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman     */
979853743705603e0b5214e5995bea8c9267708813Dave Schaefer    public TestAccessPointBuilder setLevel(int level) {
98b9647ebba07f4c7e1db9ccbbd3acc78323271c9dSundeep Ghuman        // Reversal of WifiManager.calculateSignalLevels
99b9647ebba07f4c7e1db9ccbbd3acc78323271c9dSundeep Ghuman        if (level == 0) {
100b9647ebba07f4c7e1db9ccbbd3acc78323271c9dSundeep Ghuman            mRssi = MIN_RSSI;
101b9647ebba07f4c7e1db9ccbbd3acc78323271c9dSundeep Ghuman        } else if (level >= AccessPoint.SIGNAL_LEVELS) {
102b9647ebba07f4c7e1db9ccbbd3acc78323271c9dSundeep Ghuman            mRssi = MAX_RSSI;
103b9647ebba07f4c7e1db9ccbbd3acc78323271c9dSundeep Ghuman        } else {
104b9647ebba07f4c7e1db9ccbbd3acc78323271c9dSundeep Ghuman            float inputRange = MAX_RSSI - MIN_RSSI;
105b9647ebba07f4c7e1db9ccbbd3acc78323271c9dSundeep Ghuman            float outputRange = AccessPoint.SIGNAL_LEVELS - 1;
106b9647ebba07f4c7e1db9ccbbd3acc78323271c9dSundeep Ghuman            mRssi = (int) (level * inputRange / outputRange + MIN_RSSI);
1079853743705603e0b5214e5995bea8c9267708813Dave Schaefer        }
1089853743705603e0b5214e5995bea8c9267708813Dave Schaefer        return this;
1099853743705603e0b5214e5995bea8c9267708813Dave Schaefer    }
1109853743705603e0b5214e5995bea8c9267708813Dave Schaefer
11196a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman    public TestAccessPointBuilder setNetworkInfo(NetworkInfo info) {
11296a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        mNetworkInfo = info;
11396a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        return this;
11496a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman    }
11596a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman
11696a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman    public TestAccessPointBuilder setRssi(int rssi) {
11796a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        mRssi = rssi;
11896a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        return this;
11996a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman    }
12096a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman
1219853743705603e0b5214e5995bea8c9267708813Dave Schaefer    /**
1229853743705603e0b5214e5995bea8c9267708813Dave Schaefer    * Set whether the AccessPoint is reachable.
1239853743705603e0b5214e5995bea8c9267708813Dave Schaefer    * Side effect: if the signal level was not previously set,
1249853743705603e0b5214e5995bea8c9267708813Dave Schaefer    * making an AccessPoint reachable will set the signal to the minimum level.
1259853743705603e0b5214e5995bea8c9267708813Dave Schaefer    */
1269853743705603e0b5214e5995bea8c9267708813Dave Schaefer    public TestAccessPointBuilder setReachable(boolean reachable) {
1279853743705603e0b5214e5995bea8c9267708813Dave Schaefer        if (reachable) {
1289853743705603e0b5214e5995bea8c9267708813Dave Schaefer            // only override the mRssi if it hasn't been set yet
1299853743705603e0b5214e5995bea8c9267708813Dave Schaefer            if (mRssi == AccessPoint.UNREACHABLE_RSSI) {
1309853743705603e0b5214e5995bea8c9267708813Dave Schaefer                mRssi = MIN_RSSI;
1319853743705603e0b5214e5995bea8c9267708813Dave Schaefer            }
1329853743705603e0b5214e5995bea8c9267708813Dave Schaefer        } else {
1339853743705603e0b5214e5995bea8c9267708813Dave Schaefer            mRssi = AccessPoint.UNREACHABLE_RSSI;
1349853743705603e0b5214e5995bea8c9267708813Dave Schaefer        }
1359853743705603e0b5214e5995bea8c9267708813Dave Schaefer        return this;
1369853743705603e0b5214e5995bea8c9267708813Dave Schaefer    }
1379853743705603e0b5214e5995bea8c9267708813Dave Schaefer
1389853743705603e0b5214e5995bea8c9267708813Dave Schaefer    public TestAccessPointBuilder setSaved(boolean saved){
1399853743705603e0b5214e5995bea8c9267708813Dave Schaefer        if (saved) {
14096a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman             mNetworkId = 1;
1419853743705603e0b5214e5995bea8c9267708813Dave Schaefer        } else {
14296a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman             mNetworkId = WifiConfiguration.INVALID_NETWORK_ID;
1439853743705603e0b5214e5995bea8c9267708813Dave Schaefer        }
1449853743705603e0b5214e5995bea8c9267708813Dave Schaefer        return this;
1459853743705603e0b5214e5995bea8c9267708813Dave Schaefer    }
1469853743705603e0b5214e5995bea8c9267708813Dave Schaefer
147ce6b0b2539dbb562b5c0e720d51bd3d35af437cfSundeep Ghuman    public TestAccessPointBuilder setSecurity(int security) {
148ce6b0b2539dbb562b5c0e720d51bd3d35af437cfSundeep Ghuman        mSecurity = security;
149ce6b0b2539dbb562b5c0e720d51bd3d35af437cfSundeep Ghuman        return this;
150ce6b0b2539dbb562b5c0e720d51bd3d35af437cfSundeep Ghuman    }
151ce6b0b2539dbb562b5c0e720d51bd3d35af437cfSundeep Ghuman
1529853743705603e0b5214e5995bea8c9267708813Dave Schaefer    public TestAccessPointBuilder setSsid(String newSsid) {
1539853743705603e0b5214e5995bea8c9267708813Dave Schaefer        ssid = newSsid;
1549853743705603e0b5214e5995bea8c9267708813Dave Schaefer        return this;
1559853743705603e0b5214e5995bea8c9267708813Dave Schaefer    }
156ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu
157ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu    public TestAccessPointBuilder setFqdn(String fqdn) {
158ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu        mFqdn = fqdn;
159ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu        return this;
160ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu    }
161ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu
162ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu    public TestAccessPointBuilder setProviderFriendlyName(String friendlyName) {
163ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu        mProviderFriendlyName = friendlyName;
164ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu        return this;
165ced37dba7b2ce04ea65a47273d5892ace90ac33cPeter Qiu    }
16696a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman
16796a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman    public TestAccessPointBuilder setWifiInfo(WifiInfo info) {
16896a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        mWifiInfo = info;
16996a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        return this;
17096a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman    }
17196a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman
17296a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman    /**
17396a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman     * Set the networkId in the WifiConfig.
17496a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman     *
17596a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman     * <p>Setting this to a value other than {@link WifiConfiguration#INVALID_NETWORK_ID} makes this
17696a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman     * AccessPoint a saved network.
17796a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman     */
17896a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman    public TestAccessPointBuilder setNetworkId(int networkId) {
17996a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        mNetworkId = networkId;
18096a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman        return this;
18196a53579088a21590cb02e5befc88ef965520d3eSundeep Ghuman    }
1829853743705603e0b5214e5995bea8c9267708813Dave Schaefer}
183