1/* 2 * Copyright (C) 2015 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16package com.android.settings.wifi; 17 18import static android.content.Context.WIFI_SERVICE; 19 20import android.content.Context; 21import android.content.Intent; 22import android.net.ConnectivityManager; 23import android.net.NetworkInfo; 24import android.net.NetworkScoreManager; 25import android.net.wifi.WifiManager; 26import android.provider.SearchIndexableResource; 27 28import com.android.internal.logging.nano.MetricsProto.MetricsEvent; 29import com.android.settings.R; 30import com.android.settings.dashboard.DashboardFragment; 31import com.android.settings.network.NetworkScoreManagerWrapper; 32import com.android.settings.network.NetworkScorerPickerPreferenceController; 33import com.android.settings.network.WifiCallingPreferenceController; 34import com.android.settings.search.BaseSearchIndexProvider; 35import com.android.settings.search.Indexable; 36import com.android.settings.wifi.p2p.WifiP2pPreferenceController; 37import com.android.settingslib.core.AbstractPreferenceController; 38 39import java.util.ArrayList; 40import java.util.Arrays; 41import java.util.List; 42 43public class ConfigureWifiSettings extends DashboardFragment { 44 45 private static final String TAG = "ConfigureWifiSettings"; 46 47 public static final String KEY_IP_ADDRESS = "current_ip_address"; 48 49 private WifiWakeupPreferenceController mWifiWakeupPreferenceController; 50 private UseOpenWifiPreferenceController mUseOpenWifiPreferenceController; 51 52 @Override 53 public int getMetricsCategory() { 54 return MetricsEvent.CONFIGURE_WIFI; 55 } 56 57 @Override 58 protected String getLogTag() { 59 return TAG; 60 } 61 62 @Override 63 public void onAttach(Context context) { 64 super.onAttach(context); 65 int tileLimit = 1; 66 if (mWifiWakeupPreferenceController.isAvailable()) { 67 tileLimit++; 68 } 69 if (mUseOpenWifiPreferenceController.isAvailable()) { 70 tileLimit++; 71 } 72 mProgressiveDisclosureMixin.setTileLimit(tileLimit); 73 } 74 75 @Override 76 protected int getPreferenceScreenResId() { 77 return R.xml.wifi_configure_settings; 78 } 79 80 @Override 81 protected List<AbstractPreferenceController> getPreferenceControllers(Context context) { 82 final NetworkScoreManagerWrapper networkScoreManagerWrapper = 83 new NetworkScoreManagerWrapper(context.getSystemService(NetworkScoreManager.class)); 84 mWifiWakeupPreferenceController = new WifiWakeupPreferenceController( 85 context, getLifecycle()); 86 mUseOpenWifiPreferenceController = new UseOpenWifiPreferenceController(context, this, 87 networkScoreManagerWrapper, getLifecycle()); 88 final WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); 89 final List<AbstractPreferenceController> controllers = new ArrayList<>(); 90 controllers.add(mWifiWakeupPreferenceController); 91 controllers.add(new NetworkScorerPickerPreferenceController(context, 92 networkScoreManagerWrapper)); 93 controllers.add(new NotifyOpenNetworksPreferenceController(context, getLifecycle())); 94 controllers.add(mUseOpenWifiPreferenceController); 95 controllers.add(new WifiInfoPreferenceController(context, getLifecycle(), wifiManager)); 96 controllers.add(new CellularFallbackPreferenceController(context)); 97 controllers.add(new WifiP2pPreferenceController(context, getLifecycle(), wifiManager)); 98 controllers.add(new WifiCallingPreferenceController(context)); 99 controllers.add(new WpsPreferenceController( 100 context, getLifecycle(), wifiManager, getFragmentManager())); 101 return controllers; 102 } 103 104 @Override 105 public void onActivityResult(int requestCode, int resultCode, Intent data) { 106 if (mUseOpenWifiPreferenceController == null || 107 !mUseOpenWifiPreferenceController.onActivityResult(requestCode, resultCode)) { 108 super.onActivityResult(requestCode, resultCode, data); 109 } 110 } 111 112 public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = 113 new BaseSearchIndexProvider() { 114 @Override 115 public List<SearchIndexableResource> getXmlResourcesToIndex(Context context, 116 boolean enabled) { 117 final SearchIndexableResource sir = new SearchIndexableResource(context); 118 sir.xmlResId = R.xml.wifi_configure_settings; 119 return Arrays.asList(sir); 120 } 121 122 @Override 123 public List<String> getNonIndexableKeys(Context context) { 124 List<String> keys = super.getNonIndexableKeys(context); 125 126 // If connected to WiFi, this IP address will be the same as the Status IP. 127 // Or, if there is no connection they will say unavailable. 128 ConnectivityManager cm = (ConnectivityManager) 129 context.getSystemService(Context.CONNECTIVITY_SERVICE); 130 NetworkInfo info = cm.getActiveNetworkInfo(); 131 if (info == null 132 || info.getType() == ConnectivityManager.TYPE_WIFI) { 133 keys.add(KEY_IP_ADDRESS); 134 } 135 136 return keys; 137 } 138 }; 139} 140