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]); - } }