From 0b4fdc49fba83ad2a950681ef014b6927e438007 Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Fri, 4 Dec 2015 09:36:36 -0500 Subject: [PATCH] Create configure Wi-Fi screen Add a gear on Settings menu, and move a bunch of stuff from overflow and advanced screen to there. Also move add network to be the last item in the list rather than in overflow. Also fix WifiP2p breakage. Change-Id: I5c84c25e5ba9224f77dcd988b0b2850ae6e71168 --- res/values/strings.xml | 4 + res/xml/wifi_advanced_settings.xml | 41 +-- res/xml/wifi_configure_settings.xml | 64 ++++ .../settings/InstrumentedFragment.java | 1 + .../settings/wifi/AdvancedWifiSettings.java | 242 +-------------- .../settings/wifi/ConfigureWifiSettings.java | 293 ++++++++++++++++++ .../android/settings/wifi/WifiSettings.java | 97 +++--- .../settings/wifi/p2p/WifiP2pPeer.java | 25 +- 8 files changed, 421 insertions(+), 346 deletions(-) create mode 100644 res/xml/wifi_configure_settings.xml create mode 100644 src/com/android/settings/wifi/ConfigureWifiSettings.java diff --git a/res/values/strings.xml b/res/values/strings.xml index 8928307796c..d8a3d2b18f1 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1486,6 +1486,8 @@ Scan Advanced + + Configure Connect to network @@ -1656,6 +1658,8 @@ Saved networks Advanced Wi\u2011Fi + + Configure Wi\u2011Fi Wi\u2011Fi frequency band diff --git a/res/xml/wifi_advanced_settings.xml b/res/xml/wifi_advanced_settings.xml index ed6cfbd8332..8d9a6cd82cd 100644 --- a/res/xml/wifi_advanced_settings.xml +++ b/res/xml/wifi_advanced_settings.xml @@ -17,35 +17,6 @@ - - - - - - - - - - - - - - + diff --git a/res/xml/wifi_configure_settings.xml b/res/xml/wifi_configure_settings.xml new file mode 100644 index 00000000000..15e524a082d --- /dev/null +++ b/res/xml/wifi_configure_settings.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/com/android/settings/InstrumentedFragment.java b/src/com/android/settings/InstrumentedFragment.java index 80e11317a93..44fd1101978 100644 --- a/src/com/android/settings/InstrumentedFragment.java +++ b/src/com/android/settings/InstrumentedFragment.java @@ -31,6 +31,7 @@ public abstract class InstrumentedFragment extends PreferenceFragment { public static final int ACCESSIBILITY_TOGGLE_AUTOCLICK = UNDECLARED + 1; public static final int SOUND = UNDECLARED + 2; public static final int CONFIGURE_NOTIFICATION = UNDECLARED + 3; + public static final int CONFIGURE_WIFI = UNDECLARED + 4; /** * Declare the view of this category. diff --git a/src/com/android/settings/wifi/AdvancedWifiSettings.java b/src/com/android/settings/wifi/AdvancedWifiSettings.java index aaab0c5453f..8dfb024813d 100644 --- a/src/com/android/settings/wifi/AdvancedWifiSettings.java +++ b/src/com/android/settings/wifi/AdvancedWifiSettings.java @@ -18,68 +18,25 @@ package com.android.settings.wifi; import android.app.Dialog; import android.app.DialogFragment; -import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; -import android.content.IntentFilter; -import android.net.NetworkScoreManager; -import android.net.NetworkScorerAppManager; -import android.net.NetworkScorerAppManager.NetworkScorerAppData; -import android.net.wifi.WifiInfo; -import android.net.wifi.WifiManager; import android.net.wifi.WpsInfo; import android.os.Bundle; -import android.os.UserManager; -import android.provider.Settings; -import android.provider.Settings.Global; import android.security.Credentials; -import android.support.v14.preference.SwitchPreference; -import android.support.v7.preference.ListPreference; import android.support.v7.preference.Preference; import android.support.v7.preference.Preference.OnPreferenceClickListener; -import android.text.TextUtils; -import android.util.Log; -import android.widget.Toast; - import com.android.internal.logging.MetricsLogger; -import com.android.settings.AppListSwitchPreference; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; -import com.android.settings.Utils; - -import java.util.Collection; - -public class AdvancedWifiSettings extends SettingsPreferenceFragment - implements Preference.OnPreferenceChangeListener { +public class AdvancedWifiSettings extends SettingsPreferenceFragment { private static final String TAG = "AdvancedWifiSettings"; - private static final String KEY_MAC_ADDRESS = "mac_address"; - private static final String KEY_CURRENT_IP_ADDRESS = "current_ip_address"; - private static final String KEY_FREQUENCY_BAND = "frequency_band"; - private static final String KEY_NOTIFY_OPEN_NETWORKS = "notify_open_networks"; - private static final String KEY_SLEEP_POLICY = "sleep_policy"; + private static final String KEY_INSTALL_CREDENTIALS = "install_credentials"; - private static final String KEY_WIFI_ASSISTANT = "wifi_assistant"; private static final String KEY_WIFI_DIRECT = "wifi_direct"; private static final String KEY_WPS_PUSH = "wps_push_button"; private static final String KEY_WPS_PIN = "wps_pin_entry"; - private WifiManager mWifiManager; - private NetworkScoreManager mNetworkScoreManager; - private AppListSwitchPreference mWifiAssistantPreference; - - private IntentFilter mFilter; - private final BroadcastReceiver mReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (action.equals(WifiManager.LINK_CONFIGURATION_CHANGED_ACTION) || - action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) { - refreshWifiInfo(); - } - } - }; - @Override protected int getMetricsCategory() { return MetricsLogger.WIFI_ADVANCED; @@ -91,38 +48,14 @@ public class AdvancedWifiSettings extends SettingsPreferenceFragment addPreferencesFromResource(R.xml.wifi_advanced_settings); } - @Override - public void onActivityCreated(Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); - mFilter = new IntentFilter(); - mFilter.addAction(WifiManager.LINK_CONFIGURATION_CHANGED_ACTION); - mFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); - mNetworkScoreManager = - (NetworkScoreManager) getSystemService(Context.NETWORK_SCORE_SERVICE); - } - @Override public void onResume() { super.onResume(); initPreferences(); - getActivity().registerReceiver(mReceiver, mFilter); - refreshWifiInfo(); - } - - @Override - public void onPause() { - super.onPause(); - getActivity().unregisterReceiver(mReceiver); } private void initPreferences() { - SwitchPreference notifyOpenNetworks = - (SwitchPreference) findPreference(KEY_NOTIFY_OPEN_NETWORKS); - notifyOpenNetworks.setChecked(Settings.Global.getInt(getContentResolver(), - Settings.Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, 0) == 1); - notifyOpenNetworks.setEnabled(mWifiManager.isWifiEnabled()); - + final Context context = getActivity(); Intent intent = new Intent(Credentials.INSTALL_AS_USER_ACTION); intent.setClassName("com.android.certinstaller", "com.android.certinstaller.CertInstallerMain"); @@ -130,16 +63,6 @@ public class AdvancedWifiSettings extends SettingsPreferenceFragment Preference pref = findPreference(KEY_INSTALL_CREDENTIALS); pref.setIntent(intent); - final Context context = getActivity(); - mWifiAssistantPreference = (AppListSwitchPreference) findPreference(KEY_WIFI_ASSISTANT); - Collection scorers = - NetworkScorerAppManager.getAllValidScorers(context); - if (UserManager.get(context).isAdminUser() && !scorers.isEmpty()) { - mWifiAssistantPreference.setOnPreferenceChangeListener(this); - initWifiAssistantPreference(scorers); - } else if (mWifiAssistantPreference != null) { - getPreferenceScreen().removePreference(mWifiAssistantPreference); - } Intent wifiDirectIntent = new Intent(context, com.android.settings.Settings.WifiP2pSettingsActivity.class); @@ -165,165 +88,6 @@ public class AdvancedWifiSettings extends SettingsPreferenceFragment return true; } }); - - ListPreference frequencyPref = (ListPreference) findPreference(KEY_FREQUENCY_BAND); - - if (mWifiManager.isDualBandSupported()) { - frequencyPref.setOnPreferenceChangeListener(this); - int value = mWifiManager.getFrequencyBand(); - if (value != -1) { - frequencyPref.setValue(String.valueOf(value)); - updateFrequencyBandSummary(frequencyPref, value); - } else { - Log.e(TAG, "Failed to fetch frequency band"); - } - } else { - if (frequencyPref != null) { - // null if it has already been removed before resume - getPreferenceScreen().removePreference(frequencyPref); - } - } - - ListPreference sleepPolicyPref = (ListPreference) findPreference(KEY_SLEEP_POLICY); - if (sleepPolicyPref != null) { - if (Utils.isWifiOnly(context)) { - sleepPolicyPref.setEntries(R.array.wifi_sleep_policy_entries_wifi_only); - } - sleepPolicyPref.setOnPreferenceChangeListener(this); - int value = Settings.Global.getInt(getContentResolver(), - Settings.Global.WIFI_SLEEP_POLICY, - Settings.Global.WIFI_SLEEP_POLICY_NEVER); - String stringValue = String.valueOf(value); - sleepPolicyPref.setValue(stringValue); - updateSleepPolicySummary(sleepPolicyPref, stringValue); - } - } - - private void initWifiAssistantPreference(Collection scorers) { - int count = scorers.size(); - String[] packageNames = new String[count]; - int i = 0; - for (NetworkScorerAppData scorer : scorers) { - packageNames[i] = scorer.mPackageName; - i++; - } - mWifiAssistantPreference.setPackageNames(packageNames, - mNetworkScoreManager.getActiveScorerPackage()); - } - - private void updateSleepPolicySummary(Preference sleepPolicyPref, String value) { - if (value != null) { - String[] values = getResources().getStringArray(R.array.wifi_sleep_policy_values); - final int summaryArrayResId = Utils.isWifiOnly(getActivity()) ? - R.array.wifi_sleep_policy_entries_wifi_only : R.array.wifi_sleep_policy_entries; - String[] summaries = getResources().getStringArray(summaryArrayResId); - for (int i = 0; i < values.length; i++) { - if (value.equals(values[i])) { - if (i < summaries.length) { - sleepPolicyPref.setSummary(summaries[i]); - return; - } - } - } - } - - sleepPolicyPref.setSummary(""); - Log.e(TAG, "Invalid sleep policy value: " + value); - } - - private void updateFrequencyBandSummary(Preference frequencyBandPref, int index) { - String[] summaries = getResources().getStringArray(R.array.wifi_frequency_band_entries); - frequencyBandPref.setSummary(summaries[index]); - } - - @Override - public boolean onPreferenceTreeClick(Preference preference) { - String key = preference.getKey(); - - if (KEY_NOTIFY_OPEN_NETWORKS.equals(key)) { - Global.putInt(getContentResolver(), - Settings.Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, - ((SwitchPreference) preference).isChecked() ? 1 : 0); - } else { - return super.onPreferenceTreeClick(preference); - } - return true; - } - - @Override - public boolean onPreferenceChange(Preference preference, Object newValue) { - final Context context = getActivity(); - String key = preference.getKey(); - - if (KEY_FREQUENCY_BAND.equals(key)) { - try { - int value = Integer.parseInt((String) newValue); - mWifiManager.setFrequencyBand(value, true); - updateFrequencyBandSummary(preference, value); - } catch (NumberFormatException e) { - Toast.makeText(context, R.string.wifi_setting_frequency_band_error, - Toast.LENGTH_SHORT).show(); - return false; - } - } else if (KEY_WIFI_ASSISTANT.equals(key)) { - NetworkScorerAppData wifiAssistant = - NetworkScorerAppManager.getScorer(context, (String) newValue); - if (wifiAssistant == null) { - mNetworkScoreManager.setActiveScorer(null); - return true; - } - - Intent intent = new Intent(); - if (wifiAssistant.mConfigurationActivityClassName != null) { - // App has a custom configuration activity; launch that. - // This custom activity will be responsible for launching the system - // dialog. - intent.setClassName(wifiAssistant.mPackageName, - wifiAssistant.mConfigurationActivityClassName); - } else { - // Fall back on the system dialog. - intent.setAction(NetworkScoreManager.ACTION_CHANGE_ACTIVE); - intent.putExtra(NetworkScoreManager.EXTRA_PACKAGE_NAME, - wifiAssistant.mPackageName); - } - - startActivity(intent); - // Don't update the preference widget state until the child activity returns. - // It will be updated in onResume after the activity finishes. - return false; - } - - if (KEY_SLEEP_POLICY.equals(key)) { - try { - String stringValue = (String) newValue; - Settings.Global.putInt(getContentResolver(), Settings.Global.WIFI_SLEEP_POLICY, - Integer.parseInt(stringValue)); - updateSleepPolicySummary(preference, stringValue); - } catch (NumberFormatException e) { - Toast.makeText(context, R.string.wifi_setting_sleep_policy_error, - Toast.LENGTH_SHORT).show(); - return false; - } - } - - return true; - } - - private void refreshWifiInfo() { - final Context context = getActivity(); - WifiInfo wifiInfo = mWifiManager.getConnectionInfo(); - - Preference wifiMacAddressPref = findPreference(KEY_MAC_ADDRESS); - String macAddress = wifiInfo == null ? null : wifiInfo.getMacAddress(); - wifiMacAddressPref.setSummary(!TextUtils.isEmpty(macAddress) ? macAddress - : context.getString(R.string.status_unavailable)); - wifiMacAddressPref.setSelectable(false); - - Preference wifiIpAddressPref = findPreference(KEY_CURRENT_IP_ADDRESS); - String ipAddress = Utils.getWifiIpAddresses(context); - wifiIpAddressPref.setSummary(ipAddress == null ? - context.getString(R.string.status_unavailable) : ipAddress); - wifiIpAddressPref.setSelectable(false); } /* Wrapper class for the WPS dialog to properly handle life cycle events like rotation. */ diff --git a/src/com/android/settings/wifi/ConfigureWifiSettings.java b/src/com/android/settings/wifi/ConfigureWifiSettings.java new file mode 100644 index 00000000000..54ce036f4c5 --- /dev/null +++ b/src/com/android/settings/wifi/ConfigureWifiSettings.java @@ -0,0 +1,293 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.settings.wifi; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.net.NetworkScoreManager; +import android.net.NetworkScorerAppManager; +import android.net.wifi.WifiConfiguration; +import android.net.wifi.WifiInfo; +import android.net.wifi.WifiManager; +import android.os.Bundle; +import android.os.UserManager; +import android.provider.Settings; +import android.support.v14.preference.SwitchPreference; +import android.support.v7.preference.ListPreference; +import android.support.v7.preference.Preference; +import android.text.TextUtils; +import android.util.Log; +import android.widget.Toast; +import com.android.settings.AppListSwitchPreference; +import com.android.settings.InstrumentedFragment; +import com.android.settings.R; +import com.android.settings.SettingsPreferenceFragment; +import com.android.settings.Utils; + +import java.util.Collection; +import java.util.List; + +public class ConfigureWifiSettings extends SettingsPreferenceFragment + implements Preference.OnPreferenceChangeListener { + private static final String TAG = "ConfigureWifiSettings"; + + private static final String KEY_MAC_ADDRESS = "mac_address"; + private static final String KEY_SAVED_NETWORKS = "saved_networks"; + private static final String KEY_CURRENT_IP_ADDRESS = "current_ip_address"; + private static final String KEY_FREQUENCY_BAND = "frequency_band"; + private static final String KEY_NOTIFY_OPEN_NETWORKS = "notify_open_networks"; + private static final String KEY_SLEEP_POLICY = "sleep_policy"; + private static final String KEY_WIFI_ASSISTANT = "wifi_assistant"; + + private WifiManager mWifiManager; + private NetworkScoreManager mNetworkScoreManager; + private AppListSwitchPreference mWifiAssistantPreference; + + private IntentFilter mFilter; + + @Override + public void onCreate(Bundle icicle) { + super.onCreate(icicle); + addPreferencesFromResource(R.xml.wifi_configure_settings); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); + mFilter = new IntentFilter(); + mFilter.addAction(WifiManager.LINK_CONFIGURATION_CHANGED_ACTION); + mFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); + mNetworkScoreManager = + (NetworkScoreManager) getSystemService(Context.NETWORK_SCORE_SERVICE); + } + + @Override + public void onResume() { + super.onResume(); + initPreferences(); + getActivity().registerReceiver(mReceiver, mFilter); + refreshWifiInfo(); + } + + @Override + public void onPause() { + super.onPause(); + getActivity().unregisterReceiver(mReceiver); + } + + private void initPreferences() { + List configs = mWifiManager.getConfiguredNetworks(); + if (configs == null || configs.size() == 0) { + removePreference(KEY_SAVED_NETWORKS); + } + + SwitchPreference notifyOpenNetworks = + (SwitchPreference) findPreference(KEY_NOTIFY_OPEN_NETWORKS); + notifyOpenNetworks.setChecked(Settings.Global.getInt(getContentResolver(), + Settings.Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, 0) == 1); + notifyOpenNetworks.setEnabled(mWifiManager.isWifiEnabled()); + + final Context context = getActivity(); + mWifiAssistantPreference = (AppListSwitchPreference) findPreference(KEY_WIFI_ASSISTANT); + Collection scorers = + NetworkScorerAppManager.getAllValidScorers(context); + if (UserManager.get(context).isAdminUser() && !scorers.isEmpty()) { + mWifiAssistantPreference.setOnPreferenceChangeListener(this); + initWifiAssistantPreference(scorers); + } else if (mWifiAssistantPreference != null) { + getPreferenceScreen().removePreference(mWifiAssistantPreference); + } + + ListPreference frequencyPref = (ListPreference) findPreference(KEY_FREQUENCY_BAND); + + if (mWifiManager.isDualBandSupported()) { + frequencyPref.setOnPreferenceChangeListener(this); + int value = mWifiManager.getFrequencyBand(); + if (value != -1) { + frequencyPref.setValue(String.valueOf(value)); + updateFrequencyBandSummary(frequencyPref, value); + } else { + Log.e(TAG, "Failed to fetch frequency band"); + } + } else { + if (frequencyPref != null) { + // null if it has already been removed before resume + getPreferenceScreen().removePreference(frequencyPref); + } + } + + ListPreference sleepPolicyPref = (ListPreference) findPreference(KEY_SLEEP_POLICY); + if (sleepPolicyPref != null) { + if (Utils.isWifiOnly(context)) { + sleepPolicyPref.setEntries(R.array.wifi_sleep_policy_entries_wifi_only); + } + sleepPolicyPref.setOnPreferenceChangeListener(this); + int value = Settings.Global.getInt(getContentResolver(), + Settings.Global.WIFI_SLEEP_POLICY, + Settings.Global.WIFI_SLEEP_POLICY_NEVER); + String stringValue = String.valueOf(value); + sleepPolicyPref.setValue(stringValue); + updateSleepPolicySummary(sleepPolicyPref, stringValue); + } + } + + private void updateSleepPolicySummary(Preference sleepPolicyPref, String value) { + if (value != null) { + String[] values = getResources().getStringArray(R.array.wifi_sleep_policy_values); + final int summaryArrayResId = Utils.isWifiOnly(getActivity()) ? + R.array.wifi_sleep_policy_entries_wifi_only : R.array.wifi_sleep_policy_entries; + String[] summaries = getResources().getStringArray(summaryArrayResId); + for (int i = 0; i < values.length; i++) { + if (value.equals(values[i])) { + if (i < summaries.length) { + sleepPolicyPref.setSummary(summaries[i]); + return; + } + } + } + } + + sleepPolicyPref.setSummary(""); + Log.e(TAG, "Invalid sleep policy value: " + value); + } + + @Override + public boolean onPreferenceTreeClick(Preference preference) { + String key = preference.getKey(); + + if (KEY_NOTIFY_OPEN_NETWORKS.equals(key)) { + Settings.Global.putInt(getContentResolver(), + Settings.Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, + ((SwitchPreference) preference).isChecked() ? 1 : 0); + } else { + return super.onPreferenceTreeClick(preference); + } + return true; + } + + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + final Context context = getActivity(); + String key = preference.getKey(); + + if (KEY_FREQUENCY_BAND.equals(key)) { + try { + int value = Integer.parseInt((String) newValue); + mWifiManager.setFrequencyBand(value, true); + updateFrequencyBandSummary(preference, value); + } catch (NumberFormatException e) { + Toast.makeText(context, R.string.wifi_setting_frequency_band_error, + Toast.LENGTH_SHORT).show(); + return false; + } + } else if (KEY_WIFI_ASSISTANT.equals(key)) { + NetworkScorerAppManager.NetworkScorerAppData wifiAssistant = + NetworkScorerAppManager.getScorer(context, (String) newValue); + if (wifiAssistant == null) { + mNetworkScoreManager.setActiveScorer(null); + return true; + } + + Intent intent = new Intent(); + if (wifiAssistant.mConfigurationActivityClassName != null) { + // App has a custom configuration activity; launch that. + // This custom activity will be responsible for launching the system + // dialog. + intent.setClassName(wifiAssistant.mPackageName, + wifiAssistant.mConfigurationActivityClassName); + } else { + // Fall back on the system dialog. + intent.setAction(NetworkScoreManager.ACTION_CHANGE_ACTIVE); + intent.putExtra(NetworkScoreManager.EXTRA_PACKAGE_NAME, + wifiAssistant.mPackageName); + } + + startActivity(intent); + // Don't update the preference widget state until the child activity returns. + // It will be updated in onResume after the activity finishes. + return false; + } + + if (KEY_SLEEP_POLICY.equals(key)) { + try { + String stringValue = (String) newValue; + Settings.Global.putInt(getContentResolver(), Settings.Global.WIFI_SLEEP_POLICY, + Integer.parseInt(stringValue)); + updateSleepPolicySummary(preference, stringValue); + } catch (NumberFormatException e) { + Toast.makeText(context, R.string.wifi_setting_sleep_policy_error, + Toast.LENGTH_SHORT).show(); + return false; + } + } + + return true; + } + + private void refreshWifiInfo() { + final Context context = getActivity(); + WifiInfo wifiInfo = mWifiManager.getConnectionInfo(); + + Preference wifiMacAddressPref = findPreference(KEY_MAC_ADDRESS); + String macAddress = wifiInfo == null ? null : wifiInfo.getMacAddress(); + wifiMacAddressPref.setSummary(!TextUtils.isEmpty(macAddress) ? macAddress + : context.getString(R.string.status_unavailable)); + wifiMacAddressPref.setSelectable(false); + + Preference wifiIpAddressPref = findPreference(KEY_CURRENT_IP_ADDRESS); + String ipAddress = Utils.getWifiIpAddresses(context); + wifiIpAddressPref.setSummary(ipAddress == null ? + context.getString(R.string.status_unavailable) : ipAddress); + wifiIpAddressPref.setSelectable(false); + } + + private void updateFrequencyBandSummary(Preference frequencyBandPref, int index) { + String[] summaries = getResources().getStringArray(R.array.wifi_frequency_band_entries); + frequencyBandPref.setSummary(summaries[index]); + } + + private void initWifiAssistantPreference( + Collection scorers) { + int count = scorers.size(); + String[] packageNames = new String[count]; + int i = 0; + for (NetworkScorerAppManager.NetworkScorerAppData scorer : scorers) { + packageNames[i] = scorer.mPackageName; + i++; + } + mWifiAssistantPreference.setPackageNames(packageNames, + mNetworkScoreManager.getActiveScorerPackage()); + } + + @Override + protected int getMetricsCategory() { + return InstrumentedFragment.CONFIGURE_WIFI; + } + + private final BroadcastReceiver mReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (action.equals(WifiManager.LINK_CONFIGURATION_CHANGED_ACTION) || + action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) { + refreshWifiInfo(); + } + } + }; +} diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java index 74d3e512e78..87f72f51a56 100644 --- a/src/com/android/settings/wifi/WifiSettings.java +++ b/src/com/android/settings/wifi/WifiSettings.java @@ -32,7 +32,7 @@ import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Resources; -import android.content.res.TypedArray; +import android.graphics.drawable.Drawable; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.NetworkInfo.State; @@ -47,9 +47,11 @@ import android.os.RemoteException; import android.os.UserHandle; import android.provider.Settings; import android.support.v7.preference.Preference; +import android.support.v7.preference.PreferenceViewHolder; import android.text.Spannable; import android.text.style.TextAppearanceSpan; import android.util.Log; +import android.util.TypedValue; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.Gravity; @@ -99,14 +101,13 @@ public class WifiSettings extends RestrictedSettingsFragment /* package */ static final int MENU_ID_WPS_PBC = Menu.FIRST; private static final int MENU_ID_WPS_PIN = Menu.FIRST + 1; - private static final int MENU_ID_SAVED_NETWORK = Menu.FIRST + 2; - /* package */ static final int MENU_ID_ADD_NETWORK = Menu.FIRST + 3; private static final int MENU_ID_ADVANCED = Menu.FIRST + 4; private static final int MENU_ID_SCAN = Menu.FIRST + 5; private static final int MENU_ID_CONNECT = Menu.FIRST + 6; private static final int MENU_ID_FORGET = Menu.FIRST + 7; private static final int MENU_ID_MODIFY = Menu.FIRST + 8; private static final int MENU_ID_WRITE_NFC = Menu.FIRST + 9; + private static final int MENU_ID_CONFIGURE = Menu.FIRST + 10; public static final int WIFI_DIALOG_ID = 1; /* package */ static final int WPS_PBC_DIALOG_ID = 2; @@ -118,8 +119,6 @@ public class WifiSettings extends RestrictedSettingsFragment private static final String SAVE_DIALOG_ACCESS_POINT_STATE = "wifi_ap_state"; private static final String SAVED_WIFI_NFC_DIALOG_STATE = "wifi_nfc_dlg_state"; - private static boolean savedNetworksExist; - protected WifiManager mWifiManager; private WifiManager.ActionListener mConnectListener; private WifiManager.ActionListener mSaveListener; @@ -157,6 +156,7 @@ public class WifiSettings extends RestrictedSettingsFragment private HandlerThread mBgThread; private UserBadgeCache mUserBadgeCache; + private Preference mAddPreference; /* End of "used in Wifi Setup context" */ @@ -177,6 +177,14 @@ public class WifiSettings extends RestrictedSettingsFragment public void onCreate(Bundle icicle) { super.onCreate(icicle); addPreferencesFromResource(R.xml.wifi_settings); + mAddPreference = new Preference(getContext()); + Drawable ic_add = getContext().getDrawable(R.drawable.ic_menu_add).mutate(); + TypedValue tv = new TypedValue(); + getContext().getTheme().resolveAttribute(android.R.attr.colorAccent, tv, true); + ic_add.setTint(getContext().getColor(tv.resourceId)); + mAddPreference.setIcon(ic_add); + mAddPreference.setTitle(R.string.wifi_add_network); + mUserBadgeCache = new UserBadgeCache(getPackageManager()); mBgThread = new HandlerThread(TAG, Process.THREAD_PRIORITY_BACKGROUND); @@ -343,24 +351,14 @@ public class WifiSettings extends RestrictedSettingsFragment */ void addOptionsMenuItems(Menu menu) { final boolean wifiIsEnabled = mWifiTracker.isWifiEnabled(); - TypedArray ta = getActivity().getTheme().obtainStyledAttributes( - new int[] {R.attr.ic_menu_add, R.attr.ic_wps}); - menu.add(Menu.NONE, MENU_ID_ADD_NETWORK, 0, R.string.wifi_add_network) - .setIcon(ta.getDrawable(0)) - .setEnabled(wifiIsEnabled) - .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); - if (savedNetworksExist) { - menu.add(Menu.NONE, MENU_ID_SAVED_NETWORK, 0, R.string.wifi_saved_access_points_label) - .setIcon(ta.getDrawable(0)) - .setEnabled(wifiIsEnabled) - .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); - } menu.add(Menu.NONE, MENU_ID_SCAN, 0, R.string.menu_stats_refresh) .setEnabled(wifiIsEnabled) .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); menu.add(Menu.NONE, MENU_ID_ADVANCED, 0, R.string.wifi_menu_advanced) .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); - ta.recycle(); + menu.add(Menu.NONE, MENU_ID_CONFIGURE, 0, R.string.wifi_menu_configure) + .setIcon(R.drawable.ic_settings_24dp) + .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); } @Override @@ -419,22 +417,6 @@ public class WifiSettings extends RestrictedSettingsFragment MetricsLogger.action(getActivity(), MetricsLogger.ACTION_WIFI_FORCE_SCAN); mWifiTracker.forceScan(); return true; - case MENU_ID_ADD_NETWORK: - if (mWifiTracker.isWifiEnabled()) { - onAddNetworkPressed(); - } - return true; - case MENU_ID_SAVED_NETWORK: - if (getActivity() instanceof SettingsActivity) { - ((SettingsActivity) getActivity()).startPreferencePanel( - SavedAccessPointsWifiSettings.class.getCanonicalName(), null, - R.string.wifi_saved_access_points_titlebar, null, this, 0); - } else { - startFragment(this, SavedAccessPointsWifiSettings.class.getCanonicalName(), - R.string.wifi_saved_access_points_titlebar, - -1 /* Do not request a result */, null); - } - return true; case MENU_ID_ADVANCED: if (getActivity() instanceof SettingsActivity) { ((SettingsActivity) getActivity()).startPreferencePanel( @@ -446,6 +428,18 @@ public class WifiSettings extends RestrictedSettingsFragment null); } return true; + case MENU_ID_CONFIGURE: + if (getActivity() instanceof SettingsActivity) { + ((SettingsActivity) getActivity()).startPreferencePanel( + ConfigureWifiSettings.class.getCanonicalName(), null, + R.string.wifi_configure_titlebar, null, this, 0); + } else { + startFragment(this, ConfigureWifiSettings.class.getCanonicalName(), + R.string.wifi_configure_titlebar, -1 /* Do not request a results */, + null); + } + return true; + } return super.onOptionsItemSelected(item); } @@ -530,16 +524,14 @@ public class WifiSettings extends RestrictedSettingsFragment if (mSelectedAccessPoint.getSecurity() == AccessPoint.SECURITY_NONE && !mSelectedAccessPoint.isSaved() && !mSelectedAccessPoint.isActive()) { mSelectedAccessPoint.generateOpenNetworkConfig(); - if (!savedNetworksExist) { - savedNetworksExist = true; - getActivity().invalidateOptionsMenu(); - } connect(mSelectedAccessPoint.getConfig()); - } else if (mSelectedAccessPoint.isSaved()){ + } else if (mSelectedAccessPoint.isSaved()) { showDialog(mSelectedAccessPoint, WifiConfigUiBase.MODE_VIEW); } else { showDialog(mSelectedAccessPoint, WifiConfigUiBase.MODE_CONNECT); } + } else if (preference == mAddPreference) { + onAddNetworkPressed(); } else { return super.onPreferenceTreeClick(preference); } @@ -678,8 +670,23 @@ public class WifiSettings extends RestrictedSettingsFragment } if (!hasAvailableAccessPoints) { setProgressBarVisible(true); - addMessagePreference(R.string.wifi_empty_list_wifi_on); + Preference pref = new Preference(getContext()) { + @Override + public void onBindViewHolder(PreferenceViewHolder holder) { + super.onBindViewHolder(holder); + // Show a line on each side of add network. + holder.setDividerAllowedBelow(true); + } + }; + pref.setSelectable(false); + pref.setSummary(R.string.wifi_empty_list_wifi_on); + pref.setOrder(0); + getPreferenceScreen().addPreference(pref); + mAddPreference.setOrder(1); + getPreferenceScreen().addPreference(mAddPreference); } else { + mAddPreference.setOrder(index++); + getPreferenceScreen().addPreference(mAddPreference); setProgressBarVisible(false); } break; @@ -699,11 +706,6 @@ public class WifiSettings extends RestrictedSettingsFragment setProgressBarVisible(false); break; } - // Update "Saved Networks" menu option. - if (savedNetworksExist != mWifiTracker.doSavedNetworksExist()) { - savedNetworksExist = !savedNetworksExist; - getActivity().invalidateOptionsMenu(); - } } protected TextView initEmptyView() { @@ -768,11 +770,6 @@ public class WifiSettings extends RestrictedSettingsFragment @Override public void onWifiStateChanged(int state) { - Activity activity = getActivity(); - if (activity != null) { - activity.invalidateOptionsMenu(); - } - switch (state) { case WifiManager.WIFI_STATE_ENABLING: addMessagePreference(R.string.wifi_starting); diff --git a/src/com/android/settings/wifi/p2p/WifiP2pPeer.java b/src/com/android/settings/wifi/p2p/WifiP2pPeer.java index d4b50e60b30..a318e6f92b7 100644 --- a/src/com/android/settings/wifi/p2p/WifiP2pPeer.java +++ b/src/com/android/settings/wifi/p2p/WifiP2pPeer.java @@ -23,7 +23,6 @@ import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceViewHolder; import android.text.TextUtils; import android.widget.ImageView; - import com.android.settings.R; public class WifiP2pPeer extends Preference { @@ -41,15 +40,18 @@ public class WifiP2pPeer extends Preference { device = dev; setWidgetLayoutResource(R.layout.preference_widget_wifi_signal); mRssi = 60; //TODO: fix - } - - @Override - public void onBindViewHolder(PreferenceViewHolder view) { if (TextUtils.isEmpty(device.deviceName)) { setTitle(device.deviceAddress); } else { setTitle(device.deviceName); } + String[] statusArray = context.getResources().getStringArray(R.array.wifi_p2p_status); + setSummary(statusArray[device.status]); + } + + @Override + public void onBindViewHolder(PreferenceViewHolder view) { + super.onBindViewHolder(view); mSignal = (ImageView) view.findViewById(R.id.signal); if (mRssi == Integer.MAX_VALUE) { mSignal.setImageDrawable(null); @@ -57,8 +59,7 @@ public class WifiP2pPeer extends Preference { mSignal.setImageResource(R.drawable.wifi_signal_dark); mSignal.setImageState(STATE_SECURED, true); } - refresh(); - super.onBindViewHolder(view); + mSignal.setImageLevel(getLevel()); } @Override @@ -87,14 +88,4 @@ public class WifiP2pPeer extends Preference { } return WifiManager.calculateSignalLevel(mRssi, SIGNAL_LEVELS); } - - private void refresh() { - if (mSignal == null) { - return; - } - Context context = getContext(); - mSignal.setImageLevel(getLevel()); - String[] statusArray = context.getResources().getStringArray(R.array.wifi_p2p_status); - setSummary(statusArray[device.status]); - } }