1e78c1879058571c00879f0d3e756951302adf513Gilles Debunne/* 2e78c1879058571c00879f0d3e756951302adf513Gilles Debunne * Copyright (C) 2011 The Android Open Source Project 3e78c1879058571c00879f0d3e756951302adf513Gilles Debunne * 4e78c1879058571c00879f0d3e756951302adf513Gilles Debunne * Licensed under the Apache License, Version 2.0 (the "License"); 5e78c1879058571c00879f0d3e756951302adf513Gilles Debunne * you may not use this file except in compliance with the License. 6e78c1879058571c00879f0d3e756951302adf513Gilles Debunne * You may obtain a copy of the License at 7e78c1879058571c00879f0d3e756951302adf513Gilles Debunne * 8e78c1879058571c00879f0d3e756951302adf513Gilles Debunne * http://www.apache.org/licenses/LICENSE-2.0 9e78c1879058571c00879f0d3e756951302adf513Gilles Debunne * 10e78c1879058571c00879f0d3e756951302adf513Gilles Debunne * Unless required by applicable law or agreed to in writing, software 11e78c1879058571c00879f0d3e756951302adf513Gilles Debunne * distributed under the License is distributed on an "AS IS" BASIS, 12e78c1879058571c00879f0d3e756951302adf513Gilles Debunne * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e78c1879058571c00879f0d3e756951302adf513Gilles Debunne * See the License for the specific language governing permissions and 14e78c1879058571c00879f0d3e756951302adf513Gilles Debunne * limitations under the License. 15e78c1879058571c00879f0d3e756951302adf513Gilles Debunne */ 16e78c1879058571c00879f0d3e756951302adf513Gilles Debunne 17e78c1879058571c00879f0d3e756951302adf513Gilles Debunnepackage com.android.settings.wifi; 18e78c1879058571c00879f0d3e756951302adf513Gilles Debunne 19a7d31e8164aa1ca1d8bf86a7421c11780be7ceebPauloftheWestimport android.app.Dialog; 20a7d31e8164aa1ca1d8bf86a7421c11780be7ceebPauloftheWestimport android.app.DialogFragment; 21deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colittiimport android.content.BroadcastReceiver; 22e78c1879058571c00879f0d3e756951302adf513Gilles Debunneimport android.content.Context; 230f41b49d1f33e86ec4e7004f009c074b68a90be6Irfan Sheriffimport android.content.Intent; 24deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colittiimport android.content.IntentFilter; 25d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWestimport android.net.NetworkScoreManager; 26d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWestimport android.net.NetworkScorerAppManager; 27d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWestimport android.net.NetworkScorerAppManager.NetworkScorerAppData; 28e78c1879058571c00879f0d3e756951302adf513Gilles Debunneimport android.net.wifi.WifiInfo; 29e78c1879058571c00879f0d3e756951302adf513Gilles Debunneimport android.net.wifi.WifiManager; 30b4564c39b734227cd67e46d738caa6fb9d89c4cbPauloftheWestimport android.net.wifi.WpsInfo; 31e78c1879058571c00879f0d3e756951302adf513Gilles Debunneimport android.os.Bundle; 32739ae972d0ec75919aaf2bdd01f491ccad31b1ebJeff Davidsonimport android.os.UserHandle; 33e78c1879058571c00879f0d3e756951302adf513Gilles Debunneimport android.preference.ListPreference; 34e78c1879058571c00879f0d3e756951302adf513Gilles Debunneimport android.preference.Preference; 35b4564c39b734227cd67e46d738caa6fb9d89c4cbPauloftheWestimport android.preference.Preference.OnPreferenceClickListener; 36dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunneimport android.preference.PreferenceScreen; 37d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWestimport android.preference.SwitchPreference; 38dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunneimport android.provider.Settings; 3908aafd445f3df27efc574896ab490e0d399e9d17Jeff Sharkeyimport android.provider.Settings.Global; 400f41b49d1f33e86ec4e7004f009c074b68a90be6Irfan Sheriffimport android.security.Credentials; 41e78c1879058571c00879f0d3e756951302adf513Gilles Debunneimport android.text.TextUtils; 42e78c1879058571c00879f0d3e756951302adf513Gilles Debunneimport android.util.Log; 43e78c1879058571c00879f0d3e756951302adf513Gilles Debunneimport android.widget.Toast; 44e78c1879058571c00879f0d3e756951302adf513Gilles Debunne 458a963babe2e36b7a41f77b8d2598c97658196e58Chris Wrenimport com.android.internal.logging.MetricsLogger; 46ce32b21727422ac3ce4aca49d46746545cc4243dJeff Davidsonimport com.android.settings.AppListSwitchPreference; 47e78c1879058571c00879f0d3e756951302adf513Gilles Debunneimport com.android.settings.R; 48e78c1879058571c00879f0d3e756951302adf513Gilles Debunneimport com.android.settings.SettingsPreferenceFragment; 49e78c1879058571c00879f0d3e756951302adf513Gilles Debunneimport com.android.settings.Utils; 50e78c1879058571c00879f0d3e756951302adf513Gilles Debunne 51d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWestimport java.util.Collection; 52d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest 53e78c1879058571c00879f0d3e756951302adf513Gilles Debunnepublic class AdvancedWifiSettings extends SettingsPreferenceFragment 54e78c1879058571c00879f0d3e756951302adf513Gilles Debunne implements Preference.OnPreferenceChangeListener { 55e78c1879058571c00879f0d3e756951302adf513Gilles Debunne 56e78c1879058571c00879f0d3e756951302adf513Gilles Debunne private static final String TAG = "AdvancedWifiSettings"; 57e78c1879058571c00879f0d3e756951302adf513Gilles Debunne private static final String KEY_MAC_ADDRESS = "mac_address"; 58e78c1879058571c00879f0d3e756951302adf513Gilles Debunne private static final String KEY_CURRENT_IP_ADDRESS = "current_ip_address"; 59e78c1879058571c00879f0d3e756951302adf513Gilles Debunne private static final String KEY_FREQUENCY_BAND = "frequency_band"; 60dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne private static final String KEY_NOTIFY_OPEN_NETWORKS = "notify_open_networks"; 61dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne private static final String KEY_SLEEP_POLICY = "sleep_policy"; 620f41b49d1f33e86ec4e7004f009c074b68a90be6Irfan Sheriff private static final String KEY_INSTALL_CREDENTIALS = "install_credentials"; 63d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest private static final String KEY_WIFI_ASSISTANT = "wifi_assistant"; 64b4564c39b734227cd67e46d738caa6fb9d89c4cbPauloftheWest private static final String KEY_WIFI_DIRECT = "wifi_direct"; 65b4564c39b734227cd67e46d738caa6fb9d89c4cbPauloftheWest private static final String KEY_WPS_PUSH = "wps_push_button"; 667837b999862cf341b0f124be7ace1dfc64d0a5a8PauloftheWest private static final String KEY_WPS_PIN = "wps_pin_entry"; 67e78c1879058571c00879f0d3e756951302adf513Gilles Debunne 68e78c1879058571c00879f0d3e756951302adf513Gilles Debunne private WifiManager mWifiManager; 69eadeb11b1b474fd8f318a2f828e7f6e25653cfd5Jeff Davidson private NetworkScoreManager mNetworkScoreManager; 70ce32b21727422ac3ce4aca49d46746545cc4243dJeff Davidson private AppListSwitchPreference mWifiAssistantPreference; 71e78c1879058571c00879f0d3e756951302adf513Gilles Debunne 72deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti private IntentFilter mFilter; 73deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti private final BroadcastReceiver mReceiver = new BroadcastReceiver() { 74deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti @Override 75deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti public void onReceive(Context context, Intent intent) { 76deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti String action = intent.getAction(); 77deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti if (action.equals(WifiManager.LINK_CONFIGURATION_CHANGED_ACTION) || 78deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) { 79deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti refreshWifiInfo(); 80deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti } 81deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti } 82deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti }; 83deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti 84e78c1879058571c00879f0d3e756951302adf513Gilles Debunne @Override 858a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren protected int getMetricsCategory() { 868a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren return MetricsLogger.WIFI_ADVANCED; 878a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren } 888a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren 898a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren @Override 90e78c1879058571c00879f0d3e756951302adf513Gilles Debunne public void onCreate(Bundle savedInstanceState) { 91e78c1879058571c00879f0d3e756951302adf513Gilles Debunne super.onCreate(savedInstanceState); 92e78c1879058571c00879f0d3e756951302adf513Gilles Debunne addPreferencesFromResource(R.xml.wifi_advanced_settings); 93e78c1879058571c00879f0d3e756951302adf513Gilles Debunne } 94e78c1879058571c00879f0d3e756951302adf513Gilles Debunne 95e78c1879058571c00879f0d3e756951302adf513Gilles Debunne @Override 96e78c1879058571c00879f0d3e756951302adf513Gilles Debunne public void onActivityCreated(Bundle savedInstanceState) { 97e78c1879058571c00879f0d3e756951302adf513Gilles Debunne super.onActivityCreated(savedInstanceState); 98e78c1879058571c00879f0d3e756951302adf513Gilles Debunne mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); 99deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti mFilter = new IntentFilter(); 100deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti mFilter.addAction(WifiManager.LINK_CONFIGURATION_CHANGED_ACTION); 101deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti mFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); 102eadeb11b1b474fd8f318a2f828e7f6e25653cfd5Jeff Davidson mNetworkScoreManager = 103eadeb11b1b474fd8f318a2f828e7f6e25653cfd5Jeff Davidson (NetworkScoreManager) getSystemService(Context.NETWORK_SCORE_SERVICE); 104e78c1879058571c00879f0d3e756951302adf513Gilles Debunne } 105e78c1879058571c00879f0d3e756951302adf513Gilles Debunne 106e78c1879058571c00879f0d3e756951302adf513Gilles Debunne @Override 107e78c1879058571c00879f0d3e756951302adf513Gilles Debunne public void onResume() { 108e78c1879058571c00879f0d3e756951302adf513Gilles Debunne super.onResume(); 109e78c1879058571c00879f0d3e756951302adf513Gilles Debunne initPreferences(); 1108a7cd97457eba6965b9f7a6d527e29e07694bfb9Vinit Deshpande getActivity().registerReceiver(mReceiver, mFilter); 111e78c1879058571c00879f0d3e756951302adf513Gilles Debunne refreshWifiInfo(); 112e78c1879058571c00879f0d3e756951302adf513Gilles Debunne } 113e78c1879058571c00879f0d3e756951302adf513Gilles Debunne 114deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti @Override 115deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti public void onPause() { 116deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti super.onPause(); 117deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti getActivity().unregisterReceiver(mReceiver); 118deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti } 119deb8f08ace7e255939d793c8a5a0006d424734bcLorenzo Colitti 120e78c1879058571c00879f0d3e756951302adf513Gilles Debunne private void initPreferences() { 121d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest SwitchPreference notifyOpenNetworks = 122d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest (SwitchPreference) findPreference(KEY_NOTIFY_OPEN_NETWORKS); 123a2806b661f1d2926f243e9c5abe615046150fd5dJeff Brown notifyOpenNetworks.setChecked(Settings.Global.getInt(getContentResolver(), 124a2806b661f1d2926f243e9c5abe615046150fd5dJeff Brown Settings.Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, 0) == 1); 125dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne notifyOpenNetworks.setEnabled(mWifiManager.isWifiEnabled()); 126e78c1879058571c00879f0d3e756951302adf513Gilles Debunne 127b4564c39b734227cd67e46d738caa6fb9d89c4cbPauloftheWest Intent intent = new Intent(Credentials.INSTALL_AS_USER_ACTION); 1280f41b49d1f33e86ec4e7004f009c074b68a90be6Irfan Sheriff intent.setClassName("com.android.certinstaller", 1290f41b49d1f33e86ec4e7004f009c074b68a90be6Irfan Sheriff "com.android.certinstaller.CertInstallerMain"); 1300f41b49d1f33e86ec4e7004f009c074b68a90be6Irfan Sheriff intent.putExtra(Credentials.EXTRA_INSTALL_AS_UID, android.os.Process.WIFI_UID); 1310f41b49d1f33e86ec4e7004f009c074b68a90be6Irfan Sheriff Preference pref = findPreference(KEY_INSTALL_CREDENTIALS); 1320f41b49d1f33e86ec4e7004f009c074b68a90be6Irfan Sheriff pref.setIntent(intent); 1330f41b49d1f33e86ec4e7004f009c074b68a90be6Irfan Sheriff 134d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest final Context context = getActivity(); 135ce32b21727422ac3ce4aca49d46746545cc4243dJeff Davidson mWifiAssistantPreference = (AppListSwitchPreference) findPreference(KEY_WIFI_ASSISTANT); 136ce32b21727422ac3ce4aca49d46746545cc4243dJeff Davidson Collection<NetworkScorerAppData> scorers = 137ce32b21727422ac3ce4aca49d46746545cc4243dJeff Davidson NetworkScorerAppManager.getAllValidScorers(context); 138ce32b21727422ac3ce4aca49d46746545cc4243dJeff Davidson if (UserHandle.myUserId() == UserHandle.USER_OWNER && !scorers.isEmpty()) { 139ce32b21727422ac3ce4aca49d46746545cc4243dJeff Davidson mWifiAssistantPreference.setOnPreferenceChangeListener(this); 140ce32b21727422ac3ce4aca49d46746545cc4243dJeff Davidson initWifiAssistantPreference(scorers); 141ce32b21727422ac3ce4aca49d46746545cc4243dJeff Davidson } else if (mWifiAssistantPreference != null) { 142ce32b21727422ac3ce4aca49d46746545cc4243dJeff Davidson getPreferenceScreen().removePreference(mWifiAssistantPreference); 143d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest } 144d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest 145d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest Intent wifiDirectIntent = new Intent(context, 146b4564c39b734227cd67e46d738caa6fb9d89c4cbPauloftheWest com.android.settings.Settings.WifiP2pSettingsActivity.class); 147b4564c39b734227cd67e46d738caa6fb9d89c4cbPauloftheWest Preference wifiDirectPref = findPreference(KEY_WIFI_DIRECT); 148b4564c39b734227cd67e46d738caa6fb9d89c4cbPauloftheWest wifiDirectPref.setIntent(wifiDirectIntent); 149b4564c39b734227cd67e46d738caa6fb9d89c4cbPauloftheWest 150b4564c39b734227cd67e46d738caa6fb9d89c4cbPauloftheWest // WpsDialog: Create the dialog like WifiSettings does. 151b4564c39b734227cd67e46d738caa6fb9d89c4cbPauloftheWest Preference wpsPushPref = findPreference(KEY_WPS_PUSH); 152b4564c39b734227cd67e46d738caa6fb9d89c4cbPauloftheWest wpsPushPref.setOnPreferenceClickListener(new OnPreferenceClickListener() { 153b4564c39b734227cd67e46d738caa6fb9d89c4cbPauloftheWest public boolean onPreferenceClick(Preference arg0) { 154a7d31e8164aa1ca1d8bf86a7421c11780be7ceebPauloftheWest WpsFragment wpsFragment = new WpsFragment(WpsInfo.PBC); 155a7d31e8164aa1ca1d8bf86a7421c11780be7ceebPauloftheWest wpsFragment.show(getFragmentManager(), KEY_WPS_PUSH); 156b4564c39b734227cd67e46d738caa6fb9d89c4cbPauloftheWest return true; 157b4564c39b734227cd67e46d738caa6fb9d89c4cbPauloftheWest } 158b4564c39b734227cd67e46d738caa6fb9d89c4cbPauloftheWest }); 159b4564c39b734227cd67e46d738caa6fb9d89c4cbPauloftheWest 1607837b999862cf341b0f124be7ace1dfc64d0a5a8PauloftheWest // WpsDialog: Create the dialog like WifiSettings does. 1617837b999862cf341b0f124be7ace1dfc64d0a5a8PauloftheWest Preference wpsPinPref = findPreference(KEY_WPS_PIN); 1627837b999862cf341b0f124be7ace1dfc64d0a5a8PauloftheWest wpsPinPref.setOnPreferenceClickListener(new OnPreferenceClickListener(){ 1637837b999862cf341b0f124be7ace1dfc64d0a5a8PauloftheWest public boolean onPreferenceClick(Preference arg0) { 164a7d31e8164aa1ca1d8bf86a7421c11780be7ceebPauloftheWest WpsFragment wpsFragment = new WpsFragment(WpsInfo.DISPLAY); 165a7d31e8164aa1ca1d8bf86a7421c11780be7ceebPauloftheWest wpsFragment.show(getFragmentManager(), KEY_WPS_PIN); 1667837b999862cf341b0f124be7ace1dfc64d0a5a8PauloftheWest return true; 1677837b999862cf341b0f124be7ace1dfc64d0a5a8PauloftheWest } 1687837b999862cf341b0f124be7ace1dfc64d0a5a8PauloftheWest }); 1697837b999862cf341b0f124be7ace1dfc64d0a5a8PauloftheWest 170dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne ListPreference frequencyPref = (ListPreference) findPreference(KEY_FREQUENCY_BAND); 171e78c1879058571c00879f0d3e756951302adf513Gilles Debunne 172e78c1879058571c00879f0d3e756951302adf513Gilles Debunne if (mWifiManager.isDualBandSupported()) { 173dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne frequencyPref.setOnPreferenceChangeListener(this); 174e78c1879058571c00879f0d3e756951302adf513Gilles Debunne int value = mWifiManager.getFrequencyBand(); 175e78c1879058571c00879f0d3e756951302adf513Gilles Debunne if (value != -1) { 176dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne frequencyPref.setValue(String.valueOf(value)); 177998e9b3197b93688f48277823db488d386aa209fIrfan Sheriff updateFrequencyBandSummary(frequencyPref, value); 178e78c1879058571c00879f0d3e756951302adf513Gilles Debunne } else { 179e78c1879058571c00879f0d3e756951302adf513Gilles Debunne Log.e(TAG, "Failed to fetch frequency band"); 180e78c1879058571c00879f0d3e756951302adf513Gilles Debunne } 181e78c1879058571c00879f0d3e756951302adf513Gilles Debunne } else { 182dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne if (frequencyPref != null) { 183dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne // null if it has already been removed before resume 184dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne getPreferenceScreen().removePreference(frequencyPref); 185dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne } 186dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne } 187dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne 188dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne ListPreference sleepPolicyPref = (ListPreference) findPreference(KEY_SLEEP_POLICY); 189dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne if (sleepPolicyPref != null) { 190d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest if (Utils.isWifiOnly(context)) { 191dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne sleepPolicyPref.setEntries(R.array.wifi_sleep_policy_entries_wifi_only); 192dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne } 193dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne sleepPolicyPref.setOnPreferenceChangeListener(this); 194acee16f5ce4b9763a2f9f1fac22f6d252b51f9f6Christopher Tate int value = Settings.Global.getInt(getContentResolver(), 195acee16f5ce4b9763a2f9f1fac22f6d252b51f9f6Christopher Tate Settings.Global.WIFI_SLEEP_POLICY, 196acee16f5ce4b9763a2f9f1fac22f6d252b51f9f6Christopher Tate Settings.Global.WIFI_SLEEP_POLICY_NEVER); 197829c556645c5ce6ca18e6e0104ab42d3d4dc8bc2Gilles Debunne String stringValue = String.valueOf(value); 198829c556645c5ce6ca18e6e0104ab42d3d4dc8bc2Gilles Debunne sleepPolicyPref.setValue(stringValue); 199829c556645c5ce6ca18e6e0104ab42d3d4dc8bc2Gilles Debunne updateSleepPolicySummary(sleepPolicyPref, stringValue); 200e78c1879058571c00879f0d3e756951302adf513Gilles Debunne } 201e78c1879058571c00879f0d3e756951302adf513Gilles Debunne } 202e78c1879058571c00879f0d3e756951302adf513Gilles Debunne 203ce32b21727422ac3ce4aca49d46746545cc4243dJeff Davidson private void initWifiAssistantPreference(Collection<NetworkScorerAppData> scorers) { 204ce32b21727422ac3ce4aca49d46746545cc4243dJeff Davidson int count = scorers.size(); 205ce32b21727422ac3ce4aca49d46746545cc4243dJeff Davidson String[] packageNames = new String[count]; 206ce32b21727422ac3ce4aca49d46746545cc4243dJeff Davidson int i = 0; 207ce32b21727422ac3ce4aca49d46746545cc4243dJeff Davidson for (NetworkScorerAppData scorer : scorers) { 208ce32b21727422ac3ce4aca49d46746545cc4243dJeff Davidson packageNames[i] = scorer.mPackageName; 209ce32b21727422ac3ce4aca49d46746545cc4243dJeff Davidson i++; 210ce32b21727422ac3ce4aca49d46746545cc4243dJeff Davidson } 211ce32b21727422ac3ce4aca49d46746545cc4243dJeff Davidson mWifiAssistantPreference.setPackageNames(packageNames, 212ce32b21727422ac3ce4aca49d46746545cc4243dJeff Davidson mNetworkScoreManager.getActiveScorerPackage()); 213ce32b21727422ac3ce4aca49d46746545cc4243dJeff Davidson } 214ce32b21727422ac3ce4aca49d46746545cc4243dJeff Davidson 215829c556645c5ce6ca18e6e0104ab42d3d4dc8bc2Gilles Debunne private void updateSleepPolicySummary(Preference sleepPolicyPref, String value) { 216829c556645c5ce6ca18e6e0104ab42d3d4dc8bc2Gilles Debunne if (value != null) { 217829c556645c5ce6ca18e6e0104ab42d3d4dc8bc2Gilles Debunne String[] values = getResources().getStringArray(R.array.wifi_sleep_policy_values); 218829c556645c5ce6ca18e6e0104ab42d3d4dc8bc2Gilles Debunne final int summaryArrayResId = Utils.isWifiOnly(getActivity()) ? 219829c556645c5ce6ca18e6e0104ab42d3d4dc8bc2Gilles Debunne R.array.wifi_sleep_policy_entries_wifi_only : R.array.wifi_sleep_policy_entries; 220829c556645c5ce6ca18e6e0104ab42d3d4dc8bc2Gilles Debunne String[] summaries = getResources().getStringArray(summaryArrayResId); 221829c556645c5ce6ca18e6e0104ab42d3d4dc8bc2Gilles Debunne for (int i = 0; i < values.length; i++) { 222829c556645c5ce6ca18e6e0104ab42d3d4dc8bc2Gilles Debunne if (value.equals(values[i])) { 223829c556645c5ce6ca18e6e0104ab42d3d4dc8bc2Gilles Debunne if (i < summaries.length) { 224829c556645c5ce6ca18e6e0104ab42d3d4dc8bc2Gilles Debunne sleepPolicyPref.setSummary(summaries[i]); 225829c556645c5ce6ca18e6e0104ab42d3d4dc8bc2Gilles Debunne return; 226829c556645c5ce6ca18e6e0104ab42d3d4dc8bc2Gilles Debunne } 227829c556645c5ce6ca18e6e0104ab42d3d4dc8bc2Gilles Debunne } 228829c556645c5ce6ca18e6e0104ab42d3d4dc8bc2Gilles Debunne } 229829c556645c5ce6ca18e6e0104ab42d3d4dc8bc2Gilles Debunne } 230829c556645c5ce6ca18e6e0104ab42d3d4dc8bc2Gilles Debunne 231829c556645c5ce6ca18e6e0104ab42d3d4dc8bc2Gilles Debunne sleepPolicyPref.setSummary(""); 232829c556645c5ce6ca18e6e0104ab42d3d4dc8bc2Gilles Debunne Log.e(TAG, "Invalid sleep policy value: " + value); 233829c556645c5ce6ca18e6e0104ab42d3d4dc8bc2Gilles Debunne } 234829c556645c5ce6ca18e6e0104ab42d3d4dc8bc2Gilles Debunne 235998e9b3197b93688f48277823db488d386aa209fIrfan Sheriff private void updateFrequencyBandSummary(Preference frequencyBandPref, int index) { 236998e9b3197b93688f48277823db488d386aa209fIrfan Sheriff String[] summaries = getResources().getStringArray(R.array.wifi_frequency_band_entries); 237998e9b3197b93688f48277823db488d386aa209fIrfan Sheriff frequencyBandPref.setSummary(summaries[index]); 238998e9b3197b93688f48277823db488d386aa209fIrfan Sheriff } 239998e9b3197b93688f48277823db488d386aa209fIrfan Sheriff 240a2f301cc664c0dfa50e9bf8cd99231ec60bf41ffIsaac Levy @Override 241dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne public boolean onPreferenceTreeClick(PreferenceScreen screen, Preference preference) { 242dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne String key = preference.getKey(); 243dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne 244dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne if (KEY_NOTIFY_OPEN_NETWORKS.equals(key)) { 24508aafd445f3df27efc574896ab490e0d399e9d17Jeff Sharkey Global.putInt(getContentResolver(), 246a2806b661f1d2926f243e9c5abe615046150fd5dJeff Brown Settings.Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, 247d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest ((SwitchPreference) preference).isChecked() ? 1 : 0); 248dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne } else { 249dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne return super.onPreferenceTreeClick(screen, preference); 250dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne } 251dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne return true; 252dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne } 253dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne 254dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne @Override 255e78c1879058571c00879f0d3e756951302adf513Gilles Debunne public boolean onPreferenceChange(Preference preference, Object newValue) { 256d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest final Context context = getActivity(); 257e78c1879058571c00879f0d3e756951302adf513Gilles Debunne String key = preference.getKey(); 258e78c1879058571c00879f0d3e756951302adf513Gilles Debunne 259dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne if (KEY_FREQUENCY_BAND.equals(key)) { 260e78c1879058571c00879f0d3e756951302adf513Gilles Debunne try { 261998e9b3197b93688f48277823db488d386aa209fIrfan Sheriff int value = Integer.parseInt((String) newValue); 262998e9b3197b93688f48277823db488d386aa209fIrfan Sheriff mWifiManager.setFrequencyBand(value, true); 263998e9b3197b93688f48277823db488d386aa209fIrfan Sheriff updateFrequencyBandSummary(preference, value); 264e78c1879058571c00879f0d3e756951302adf513Gilles Debunne } catch (NumberFormatException e) { 265d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest Toast.makeText(context, R.string.wifi_setting_frequency_band_error, 266e78c1879058571c00879f0d3e756951302adf513Gilles Debunne Toast.LENGTH_SHORT).show(); 267e78c1879058571c00879f0d3e756951302adf513Gilles Debunne return false; 268e78c1879058571c00879f0d3e756951302adf513Gilles Debunne } 269d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest } else if (KEY_WIFI_ASSISTANT.equals(key)) { 270ce32b21727422ac3ce4aca49d46746545cc4243dJeff Davidson NetworkScorerAppData wifiAssistant = 271ce32b21727422ac3ce4aca49d46746545cc4243dJeff Davidson NetworkScorerAppManager.getScorer(context, (String) newValue); 272ce32b21727422ac3ce4aca49d46746545cc4243dJeff Davidson if (wifiAssistant == null) { 273eadeb11b1b474fd8f318a2f828e7f6e25653cfd5Jeff Davidson mNetworkScoreManager.setActiveScorer(null); 274d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest return true; 275d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest } 276d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest 277d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest Intent intent = new Intent(); 278d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest if (wifiAssistant.mConfigurationActivityClassName != null) { 279d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest // App has a custom configuration activity; launch that. 280d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest // This custom activity will be responsible for launching the system 281d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest // dialog. 282d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest intent.setClassName(wifiAssistant.mPackageName, 283d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest wifiAssistant.mConfigurationActivityClassName); 284d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest } else { 285d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest // Fall back on the system dialog. 286d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest intent.setAction(NetworkScoreManager.ACTION_CHANGE_ACTIVE); 287d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest intent.putExtra(NetworkScoreManager.EXTRA_PACKAGE_NAME, 288d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest wifiAssistant.mPackageName); 289d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest } 290d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest 291d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest startActivity(intent); 292ce32b21727422ac3ce4aca49d46746545cc4243dJeff Davidson // Don't update the preference widget state until the child activity returns. 293ce32b21727422ac3ce4aca49d46746545cc4243dJeff Davidson // It will be updated in onResume after the activity finishes. 294ce32b21727422ac3ce4aca49d46746545cc4243dJeff Davidson return false; 295e78c1879058571c00879f0d3e756951302adf513Gilles Debunne } 296e78c1879058571c00879f0d3e756951302adf513Gilles Debunne 297dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne if (KEY_SLEEP_POLICY.equals(key)) { 298dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne try { 299829c556645c5ce6ca18e6e0104ab42d3d4dc8bc2Gilles Debunne String stringValue = (String) newValue; 300acee16f5ce4b9763a2f9f1fac22f6d252b51f9f6Christopher Tate Settings.Global.putInt(getContentResolver(), Settings.Global.WIFI_SLEEP_POLICY, 301829c556645c5ce6ca18e6e0104ab42d3d4dc8bc2Gilles Debunne Integer.parseInt(stringValue)); 302829c556645c5ce6ca18e6e0104ab42d3d4dc8bc2Gilles Debunne updateSleepPolicySummary(preference, stringValue); 303dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne } catch (NumberFormatException e) { 304d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest Toast.makeText(context, R.string.wifi_setting_sleep_policy_error, 305dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne Toast.LENGTH_SHORT).show(); 306dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne return false; 307dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne } 308dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne } 309dcff7338ad5dd9a883c735afaed1a0e73ae8eb74Gilles Debunne 310e78c1879058571c00879f0d3e756951302adf513Gilles Debunne return true; 311e78c1879058571c00879f0d3e756951302adf513Gilles Debunne } 312e78c1879058571c00879f0d3e756951302adf513Gilles Debunne 313e78c1879058571c00879f0d3e756951302adf513Gilles Debunne private void refreshWifiInfo() { 314d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest final Context context = getActivity(); 315e78c1879058571c00879f0d3e756951302adf513Gilles Debunne WifiInfo wifiInfo = mWifiManager.getConnectionInfo(); 316e78c1879058571c00879f0d3e756951302adf513Gilles Debunne 317e78c1879058571c00879f0d3e756951302adf513Gilles Debunne Preference wifiMacAddressPref = findPreference(KEY_MAC_ADDRESS); 318e78c1879058571c00879f0d3e756951302adf513Gilles Debunne String macAddress = wifiInfo == null ? null : wifiInfo.getMacAddress(); 319e78c1879058571c00879f0d3e756951302adf513Gilles Debunne wifiMacAddressPref.setSummary(!TextUtils.isEmpty(macAddress) ? macAddress 320d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest : context.getString(R.string.status_unavailable)); 3217837b999862cf341b0f124be7ace1dfc64d0a5a8PauloftheWest wifiMacAddressPref.setSelectable(false); 322e78c1879058571c00879f0d3e756951302adf513Gilles Debunne 323e78c1879058571c00879f0d3e756951302adf513Gilles Debunne Preference wifiIpAddressPref = findPreference(KEY_CURRENT_IP_ADDRESS); 324d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest String ipAddress = Utils.getWifiIpAddresses(context); 325e78c1879058571c00879f0d3e756951302adf513Gilles Debunne wifiIpAddressPref.setSummary(ipAddress == null ? 326d60f85daadc27df47d0fb04e73f18c50ac70f3c7PauloftheWest context.getString(R.string.status_unavailable) : ipAddress); 3277837b999862cf341b0f124be7ace1dfc64d0a5a8PauloftheWest wifiIpAddressPref.setSelectable(false); 328e78c1879058571c00879f0d3e756951302adf513Gilles Debunne } 329e78c1879058571c00879f0d3e756951302adf513Gilles Debunne 330a7d31e8164aa1ca1d8bf86a7421c11780be7ceebPauloftheWest /* Wrapper class for the WPS dialog to properly handle life cycle events like rotation. */ 331a7d31e8164aa1ca1d8bf86a7421c11780be7ceebPauloftheWest public static class WpsFragment extends DialogFragment { 332a7d31e8164aa1ca1d8bf86a7421c11780be7ceebPauloftheWest private static int mWpsSetup; 333a7d31e8164aa1ca1d8bf86a7421c11780be7ceebPauloftheWest 334a7d31e8164aa1ca1d8bf86a7421c11780be7ceebPauloftheWest // Public default constructor is required for rotation. 335a7d31e8164aa1ca1d8bf86a7421c11780be7ceebPauloftheWest public WpsFragment() { 336a7d31e8164aa1ca1d8bf86a7421c11780be7ceebPauloftheWest super(); 337a7d31e8164aa1ca1d8bf86a7421c11780be7ceebPauloftheWest } 338a7d31e8164aa1ca1d8bf86a7421c11780be7ceebPauloftheWest 339a7d31e8164aa1ca1d8bf86a7421c11780be7ceebPauloftheWest public WpsFragment(int wpsSetup) { 340a7d31e8164aa1ca1d8bf86a7421c11780be7ceebPauloftheWest super(); 341a7d31e8164aa1ca1d8bf86a7421c11780be7ceebPauloftheWest mWpsSetup = wpsSetup; 342a7d31e8164aa1ca1d8bf86a7421c11780be7ceebPauloftheWest } 343a7d31e8164aa1ca1d8bf86a7421c11780be7ceebPauloftheWest 344a7d31e8164aa1ca1d8bf86a7421c11780be7ceebPauloftheWest @Override 345a7d31e8164aa1ca1d8bf86a7421c11780be7ceebPauloftheWest public Dialog onCreateDialog(Bundle savedInstanceState) { 346a7d31e8164aa1ca1d8bf86a7421c11780be7ceebPauloftheWest return new WpsDialog(getActivity(), mWpsSetup); 347a7d31e8164aa1ca1d8bf86a7421c11780be7ceebPauloftheWest } 348a7d31e8164aa1ca1d8bf86a7421c11780be7ceebPauloftheWest } 349a7d31e8164aa1ca1d8bf86a7421c11780be7ceebPauloftheWest 350e78c1879058571c00879f0d3e756951302adf513Gilles Debunne} 351