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