Merge "Create configure Wi-Fi screen"

This commit is contained in:
Jason Monk
2015-12-04 18:17:25 +00:00
committed by Android (Google) Code Review
8 changed files with 421 additions and 346 deletions

View File

@@ -1486,6 +1486,8 @@
<string name="wifi_menu_scan">Scan</string>
<!-- Menu option to Wi-Fi advanced settings -->
<string name="wifi_menu_advanced">Advanced</string>
<!-- Menu option to Wi-Fi configure settings -->
<string name="wifi_menu_configure">Configure</string>
<!-- Menu option to connect to a Wi-Fi network -->
<string name="wifi_menu_connect">Connect to network</string>
<!-- Menu option to remember a temporary Wi-Fi network -->
@@ -1656,6 +1658,8 @@
<string name="wifi_saved_access_points_titlebar">Saved networks</string>
<!-- Wi-Fi settings screen, advanced, settings section. This is a header shown above advanced wifi settings. [CHAR LIMIT=30] -->
<string name="wifi_advanced_titlebar">Advanced Wi\u2011Fi</string>
<!-- Wi-Fi settings screen, configure, settings section. This is a header shown above configure wifi settings. [CHAR LIMIT=30] -->
<string name="wifi_configure_titlebar">Configure Wi\u2011Fi</string>
<!-- Wi-Fi settings screen, setting title for setting the band [CHAR LIMIT=50]-->
<string name="wifi_setting_frequency_band_title">Wi\u2011Fi frequency band</string>
<!-- Wi-Fi settings screen, setting summary for setting the wifi frequency band [CHAR LIMIT=50]-->

View File

@@ -17,35 +17,6 @@
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/wifi_advanced_titlebar">
<!-- android:dependency="enable_wifi" -->
<SwitchPreference
android:key="notify_open_networks"
android:title="@string/wifi_notify_open_networks"
android:summary="@string/wifi_notify_open_networks_summary"
android:persistent="false" />
<ListPreference
android:key="sleep_policy"
android:title="@string/wifi_setting_sleep_policy_title"
android:persistent="false"
android:entries="@array/wifi_sleep_policy_entries"
android:entryValues="@array/wifi_sleep_policy_values" />
<com.android.settings.AppListSwitchPreference
android:key="wifi_assistant"
android:title="@string/wifi_automatically_connect_title"
android:summary="@string/wifi_automatically_connect_summary"
android:dialogTitle="@string/wifi_select_assistant_dialog_title"
android:persistent="false" />
<ListPreference
android:key="frequency_band"
android:title="@string/wifi_setting_frequency_band_title"
android:summary="@string/wifi_setting_frequency_band_summary"
android:persistent="false"
android:entries="@array/wifi_frequency_band_entries"
android:entryValues="@array/wifi_frequency_band_values" />
<Preference
android:key="install_credentials"
android:title="@string/wifi_install_credentials"
@@ -66,14 +37,4 @@
android:title="@string/wifi_menu_wps_pin"
android:persistent="false" />
<Preference
android:key="mac_address"
android:title="@string/wifi_advanced_mac_address_title"
android:layout="@layout/wifi_advance_layout" />
<Preference
android:key="current_ip_address"
android:title="@string/wifi_advanced_ip_address_title"
android:layout="@layout/wifi_advance_layout" />
</PreferenceScreen>
</PreferenceScreen>

View File

@@ -0,0 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 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.
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/wifi_configure_titlebar">
<Preference
android:key="saved_networks"
android:title="@string/wifi_saved_access_points_label"
android:fragment="com.android.settings.wifi.SavedAccessPointsWifiSettings" />
<!-- android:dependency="enable_wifi" -->
<SwitchPreference
android:key="notify_open_networks"
android:title="@string/wifi_notify_open_networks"
android:summary="@string/wifi_notify_open_networks_summary"
android:persistent="false" />
<ListPreference
android:key="sleep_policy"
android:title="@string/wifi_setting_sleep_policy_title"
android:persistent="false"
android:entries="@array/wifi_sleep_policy_entries"
android:entryValues="@array/wifi_sleep_policy_values" />
<com.android.settings.AppListSwitchPreference
android:key="wifi_assistant"
android:title="@string/wifi_automatically_connect_title"
android:summary="@string/wifi_automatically_connect_summary"
android:dialogTitle="@string/wifi_select_assistant_dialog_title"
android:persistent="false" />
<ListPreference
android:key="frequency_band"
android:title="@string/wifi_setting_frequency_band_title"
android:summary="@string/wifi_setting_frequency_band_summary"
android:persistent="false"
android:entries="@array/wifi_frequency_band_entries"
android:entryValues="@array/wifi_frequency_band_values" />
<Preference
android:key="mac_address"
android:title="@string/wifi_advanced_mac_address_title"
android:layout="@layout/wifi_advance_layout" />
<Preference
android:key="current_ip_address"
android:title="@string/wifi_advanced_ip_address_title"
android:layout="@layout/wifi_advance_layout" />
</PreferenceScreen>

View File

@@ -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.

View File

@@ -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<NetworkScorerAppData> 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<NetworkScorerAppData> 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. */

View File

@@ -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<WifiConfiguration> 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<NetworkScorerAppManager.NetworkScorerAppData> 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<NetworkScorerAppManager.NetworkScorerAppData> 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();
}
}
};
}

View File

@@ -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);

View File

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