10b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk/* 20b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk * Copyright (C) 2015 The Android Open Source Project 30b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk * 40b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk * Licensed under the Apache License, Version 2.0 (the "License"); 50b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk * you may not use this file except in compliance with the License. 60b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk * You may obtain a copy of the License at 70b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk * 80b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk * http://www.apache.org/licenses/LICENSE-2.0 90b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk * 100b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk * Unless required by applicable law or agreed to in writing, software 110b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk * distributed under the License is distributed on an "AS IS" BASIS, 120b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk * See the License for the specific language governing permissions and 140b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk * limitations under the License. 150b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk */ 160b4fdc49fba83ad2a950681ef014b6927e438007Jason Monkpackage com.android.settings.wifi; 170b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk 18dfa9bb8914acd564bd73ba4f70fa50b28bd8cef4Amin Shaikhimport static android.content.Context.WIFI_SERVICE; 19dfa9bb8914acd564bd73ba4f70fa50b28bd8cef4Amin Shaikh 200b4fdc49fba83ad2a950681ef014b6927e438007Jason Monkimport android.content.Context; 211cf25748d61c4823b953dc57f7bdd5110cbf2c2fAmin Shaikhimport android.content.Intent; 224b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritzeimport android.net.ConnectivityManager; 234b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritzeimport android.net.NetworkInfo; 240b4fdc49fba83ad2a950681ef014b6927e438007Jason Monkimport android.net.wifi.WifiManager; 253aa547b50d09ea901ac4e649e7029345af97f32eAmin Shaikhimport android.provider.SearchIndexableResource; 26dfa9bb8914acd564bd73ba4f70fa50b28bd8cef4Amin Shaikh 27265d3c2a0c36251bf8a9f571d7239b6dd404d942Tamas Berghammerimport com.android.internal.logging.nano.MetricsProto.MetricsEvent; 280b4fdc49fba83ad2a950681ef014b6927e438007Jason Monkimport com.android.settings.R; 29925f23244a5e90e0694a602d4a1f2b5e8b748fefFan Zhangimport com.android.settings.dashboard.DashboardFragment; 303aa547b50d09ea901ac4e649e7029345af97f32eAmin Shaikhimport com.android.settings.search.BaseSearchIndexProvider; 313aa547b50d09ea901ac4e649e7029345af97f32eAmin Shaikhimport com.android.settings.search.Indexable; 329d2712cd78514eb35ba1d480738841f3c203ecfdStephen Chenimport com.android.settings.wifi.p2p.WifiP2pPreferenceController; 331d583e125faf3ae4c9cd82636d8f3ecf1cdec3aaTony Mantlerimport com.android.settingslib.core.AbstractPreferenceController; 340b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk 35925f23244a5e90e0694a602d4a1f2b5e8b748fefFan Zhangimport java.util.ArrayList; 363aa547b50d09ea901ac4e649e7029345af97f32eAmin Shaikhimport java.util.Arrays; 37925f23244a5e90e0694a602d4a1f2b5e8b748fefFan Zhangimport java.util.List; 380b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk 39925f23244a5e90e0694a602d4a1f2b5e8b748fefFan Zhangpublic class ConfigureWifiSettings extends DashboardFragment { 400b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk 41925f23244a5e90e0694a602d4a1f2b5e8b748fefFan Zhang private static final String TAG = "ConfigureWifiSettings"; 420b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk 434b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze public static final String KEY_IP_ADDRESS = "current_ip_address"; 442f5292454bb83e7df21d2b8086c5cbd59498fb87Salvador Martinez public static final int WIFI_WAKEUP_REQUEST_CODE = 600; 454b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze 467e27006a7bc8162b535aecb69cf2e5872bb19d77Stephen Chen private WifiWakeupPreferenceController mWifiWakeupPreferenceController; 471cf25748d61c4823b953dc57f7bdd5110cbf2c2fAmin Shaikh private UseOpenWifiPreferenceController mUseOpenWifiPreferenceController; 480b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk 490b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk @Override 50925f23244a5e90e0694a602d4a1f2b5e8b748fefFan Zhang public int getMetricsCategory() { 51925f23244a5e90e0694a602d4a1f2b5e8b748fefFan Zhang return MetricsEvent.CONFIGURE_WIFI; 520b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk } 530b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk 540b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk @Override 55925f23244a5e90e0694a602d4a1f2b5e8b748fefFan Zhang protected String getLogTag() { 56925f23244a5e90e0694a602d4a1f2b5e8b748fefFan Zhang return TAG; 570b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk } 580b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk 590b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk @Override 6072456a9ea677b91389ba4ece88842b65c45d5107Fan Zhang public int getInitialExpandedChildCount() { 613810036691fa25ef39021e8d244c13d54a892a91Joe LaPenna int tileLimit = 2; 627e27006a7bc8162b535aecb69cf2e5872bb19d77Stephen Chen if (mUseOpenWifiPreferenceController.isAvailable()) { 637e27006a7bc8162b535aecb69cf2e5872bb19d77Stephen Chen tileLimit++; 647e27006a7bc8162b535aecb69cf2e5872bb19d77Stephen Chen } 6572456a9ea677b91389ba4ece88842b65c45d5107Fan Zhang return tileLimit; 66a7b27b22b99e005cecd7b2deab74565683b3998aStephen Chen } 67a7b27b22b99e005cecd7b2deab74565683b3998aStephen Chen 68a7b27b22b99e005cecd7b2deab74565683b3998aStephen Chen @Override 69925f23244a5e90e0694a602d4a1f2b5e8b748fefFan Zhang protected int getPreferenceScreenResId() { 70925f23244a5e90e0694a602d4a1f2b5e8b748fefFan Zhang return R.xml.wifi_configure_settings; 710b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk } 720b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk 730b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk @Override 74f7843adabd4e8e1cc84a52721daabefa3a1410fdFan Zhang protected List<AbstractPreferenceController> createPreferenceControllers(Context context) { 752f5292454bb83e7df21d2b8086c5cbd59498fb87Salvador Martinez mWifiWakeupPreferenceController = new WifiWakeupPreferenceController(context, this); 761cf25748d61c4823b953dc57f7bdd5110cbf2c2fAmin Shaikh mUseOpenWifiPreferenceController = new UseOpenWifiPreferenceController(context, this, 77368c81e97b0f5902df5e5f76bed1ba31cbc8b43eFan Zhang getLifecycle()); 78dfa9bb8914acd564bd73ba4f70fa50b28bd8cef4Amin Shaikh final WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); 791d583e125faf3ae4c9cd82636d8f3ecf1cdec3aaTony Mantler final List<AbstractPreferenceController> controllers = new ArrayList<>(); 807e27006a7bc8162b535aecb69cf2e5872bb19d77Stephen Chen controllers.add(mWifiWakeupPreferenceController); 81dfa9bb8914acd564bd73ba4f70fa50b28bd8cef4Amin Shaikh controllers.add(new NotifyOpenNetworksPreferenceController(context, getLifecycle())); 821cf25748d61c4823b953dc57f7bdd5110cbf2c2fAmin Shaikh controllers.add(mUseOpenWifiPreferenceController); 831cf25748d61c4823b953dc57f7bdd5110cbf2c2fAmin Shaikh controllers.add(new WifiInfoPreferenceController(context, getLifecycle(), wifiManager)); 841cf25748d61c4823b953dc57f7bdd5110cbf2c2fAmin Shaikh controllers.add(new CellularFallbackPreferenceController(context)); 851cf25748d61c4823b953dc57f7bdd5110cbf2c2fAmin Shaikh controllers.add(new WifiP2pPreferenceController(context, getLifecycle(), wifiManager)); 86925f23244a5e90e0694a602d4a1f2b5e8b748fefFan Zhang return controllers; 870b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk } 883aa547b50d09ea901ac4e649e7029345af97f32eAmin Shaikh 891cf25748d61c4823b953dc57f7bdd5110cbf2c2fAmin Shaikh @Override 901cf25748d61c4823b953dc57f7bdd5110cbf2c2fAmin Shaikh public void onActivityResult(int requestCode, int resultCode, Intent data) { 917486f1cf121a6416f99fe8034e28d3592f49ea3eSalvador Martinez if (requestCode == WIFI_WAKEUP_REQUEST_CODE && mWifiWakeupPreferenceController != null) { 922f5292454bb83e7df21d2b8086c5cbd59498fb87Salvador Martinez mWifiWakeupPreferenceController.onActivityResult(requestCode, resultCode); 932f5292454bb83e7df21d2b8086c5cbd59498fb87Salvador Martinez return; 941cf25748d61c4823b953dc57f7bdd5110cbf2c2fAmin Shaikh } 957486f1cf121a6416f99fe8034e28d3592f49ea3eSalvador Martinez if (requestCode == UseOpenWifiPreferenceController.REQUEST_CODE_OPEN_WIFI_AUTOMATICALLY 967486f1cf121a6416f99fe8034e28d3592f49ea3eSalvador Martinez && mUseOpenWifiPreferenceController != null) { 972f5292454bb83e7df21d2b8086c5cbd59498fb87Salvador Martinez mUseOpenWifiPreferenceController.onActivityResult(requestCode, resultCode); 982f5292454bb83e7df21d2b8086c5cbd59498fb87Salvador Martinez return; 992f5292454bb83e7df21d2b8086c5cbd59498fb87Salvador Martinez } 1002f5292454bb83e7df21d2b8086c5cbd59498fb87Salvador Martinez super.onActivityResult(requestCode, resultCode, data); 1011cf25748d61c4823b953dc57f7bdd5110cbf2c2fAmin Shaikh } 1021cf25748d61c4823b953dc57f7bdd5110cbf2c2fAmin Shaikh 1033aa547b50d09ea901ac4e649e7029345af97f32eAmin Shaikh public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = 1043aa547b50d09ea901ac4e649e7029345af97f32eAmin Shaikh new BaseSearchIndexProvider() { 1053aa547b50d09ea901ac4e649e7029345af97f32eAmin Shaikh @Override 1063aa547b50d09ea901ac4e649e7029345af97f32eAmin Shaikh public List<SearchIndexableResource> getXmlResourcesToIndex(Context context, 1073aa547b50d09ea901ac4e649e7029345af97f32eAmin Shaikh boolean enabled) { 1083aa547b50d09ea901ac4e649e7029345af97f32eAmin Shaikh final SearchIndexableResource sir = new SearchIndexableResource(context); 1093aa547b50d09ea901ac4e649e7029345af97f32eAmin Shaikh sir.xmlResId = R.xml.wifi_configure_settings; 1103aa547b50d09ea901ac4e649e7029345af97f32eAmin Shaikh return Arrays.asList(sir); 1113aa547b50d09ea901ac4e649e7029345af97f32eAmin Shaikh } 1124b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze 1134b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze @Override 1144b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze public List<String> getNonIndexableKeys(Context context) { 115368c81e97b0f5902df5e5f76bed1ba31cbc8b43eFan Zhang List<String> keys = super.getNonIndexableKeys(context); 1164b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze 1174b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze // If connected to WiFi, this IP address will be the same as the Status IP. 1184b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze // Or, if there is no connection they will say unavailable. 1194b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze ConnectivityManager cm = (ConnectivityManager) 1204b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze context.getSystemService(Context.CONNECTIVITY_SERVICE); 1214b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze NetworkInfo info = cm.getActiveNetworkInfo(); 1224b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze if (info == null 1234b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze || info.getType() == ConnectivityManager.TYPE_WIFI) { 1244b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze keys.add(KEY_IP_ADDRESS); 1254b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze } 1264b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze 1274b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze return keys; 1284b0677a2a45e2542b44e906c91e4bf57ed00f44eMatthew Fritze } 129848f67d17a2a452da8549ab787e4419b927e5698Ben Lin 130848f67d17a2a452da8549ab787e4419b927e5698Ben Lin protected boolean isPageSearchEnabled(Context context) { 131848f67d17a2a452da8549ab787e4419b927e5698Ben Lin return context.getResources() 132848f67d17a2a452da8549ab787e4419b927e5698Ben Lin .getBoolean(R.bool.config_show_wifi_settings); 133848f67d17a2a452da8549ab787e4419b927e5698Ben Lin } 1343aa547b50d09ea901ac4e649e7029345af97f32eAmin Shaikh }; 1350b4fdc49fba83ad2a950681ef014b6927e438007Jason Monk} 136