Remove code for old wifi tether feature

Change-Id: If92798ddf075801e66cd97ecacff2f8df1e41985
Fix: 64032458
Test: rerun robotests
This commit is contained in:
Fan Zhang
2017-07-25 14:18:47 -07:00
parent 3eb22656eb
commit defb1183ec
9 changed files with 6 additions and 791 deletions

View File

@@ -1,154 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2010 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.
-->
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="300sp"
android:layout_height="wrap_content"
android:fadeScrollbars="false">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"
android:orientation="vertical">
<LinearLayout android:id="@+id/info"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/wifi_section" />
<LinearLayout android:id="@+id/type"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/wifi_section"
android:visibility="gone">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/wifi_item">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/wifi_item_label"
android:layout_marginTop="8dip"
android:text="@string/wifi_ssid" />
<EditText android:id="@+id/ssid"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/wifi_item_edit_content"
android:singleLine="true"
android:hint="@string/wifi_ssid_hint"
android:inputType="textNoSuggestions"
android:maxLength="32" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/wifi_item">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/wifi_item_label"
android:layout_marginTop="8dip"
android:text="@string/wifi_security" />
<Spinner android:id="@+id/security"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/wifi_item_content"
android:prompt="@string/wifi_security"
android:entries="@array/wifi_ap_security" />
</LinearLayout>
</LinearLayout>
<LinearLayout android:id="@+id/fields"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/wifi_section"
android:visibility="gone">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/wifi_item">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/wifi_item_label"
android:layout_marginTop="8dip"
android:text="@string/wifi_password" />
<EditText android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/wifi_item_edit_content"
android:singleLine="true"
android:password="true"
android:maxLength="63"
android:imeOptions="flagForceAscii" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/wifi_item">
<TextView android:id="@+id/hint"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/wifi_item_label"
android:text="@string/credentials_password_too_short"
android:layout_marginTop="8dip"
android:layout_marginBottom="10sp"/>
<CheckBox android:id="@+id/show_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/wifi_item_content"
android:text="@string/wifi_show_password" />
</LinearLayout>
</LinearLayout>
<LinearLayout android:id="@+id/fields"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/wifi_section" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/wifi_item">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/wifi_item_label"
android:layout_marginTop="8dip"
android:text="@string/wifi_ap_band_config" />
<Spinner android:id="@+id/choose_channel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/wifi_item_content"
android:prompt="@string/wifi_ap_band_config" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</ScrollView>

View File

@@ -235,13 +235,6 @@
<item>@string/wifi_security_psk_generic</item> <item>@string/wifi_security_psk_generic</item>
</string-array> </string-array>
<!-- Wi-Fi AP settings. The type of security a Wi-Fi AP supports. -->
<!-- Note that adding/removing/moving the items will need wifi settings code change. -->
<string-array name="wifi_ap_security">
<item>@string/wifi_security_none</item>
<item>@string/wifi_security_wpa2</item>
</string-array>
<!-- Match this with the constants in WifiDialog. --> <skip /> <!-- Match this with the constants in WifiDialog. --> <skip />
<!-- Wi-Fi settings. The type of EAP method a Wi-Fi network has. --> <!-- Wi-Fi settings. The type of EAP method a Wi-Fi network has. -->
<string-array name="wifi_eap_method"> <string-array name="wifi_eap_method">

View File

@@ -2088,8 +2088,6 @@
<string name="wifi_hotspot_configure_ap_text">Wi\u2011Fi hotspot setup</string> <string name="wifi_hotspot_configure_ap_text">Wi\u2011Fi hotspot setup</string>
<!-- Summary Used to open the ssid and security dialog for Wifi Access Point. [CHAR LIMIT=60] --> <!-- Summary Used to open the ssid and security dialog for Wifi Access Point. [CHAR LIMIT=60] -->
<string name="wifi_hotspot_configure_ap_text_summary">AndroidAP WPA2 PSK hotspot</string> <string name="wifi_hotspot_configure_ap_text_summary">AndroidAP WPA2 PSK hotspot</string>
<!-- Subtext on configuration preference to indicate SSID and security chosen -->
<string name="wifi_tether_configure_subtext"><xliff:g id="network_ssid">%1$s</xliff:g> <xliff:g id="network_security">%2$s</xliff:g> hotspot</string>
<!-- Default access point SSID used for tethering --> <!-- Default access point SSID used for tethering -->
<string name="wifi_tether_configure_ssid_default">AndroidHotspot</string> <string name="wifi_tether_configure_ssid_default">AndroidHotspot</string>
@@ -5177,7 +5175,6 @@
<string name="credentials_old_password">Current password:</string> <string name="credentials_old_password">Current password:</string>
<!-- Description of dialog to reset credential storage [CHAR LIMIT=NONE] --> <!-- Description of dialog to reset credential storage [CHAR LIMIT=NONE] -->
<string name="credentials_reset_hint">Remove all the contents?</string> <string name="credentials_reset_hint">Remove all the contents?</string>
<string name="credentials_password_too_short">The password must have at least 8 characters.</string>
<!-- Error message [CHAR LIMIT=NONE] --> <!-- Error message [CHAR LIMIT=NONE] -->
<string name="credentials_wrong_password">Incorrect password.</string> <string name="credentials_wrong_password">Incorrect password.</string>
<!-- Error message [CHAR LIMIT=NONE] --> <!-- Error message [CHAR LIMIT=NONE] -->

View File

@@ -28,16 +28,6 @@
android:title="@string/usb_tethering_button_text" android:title="@string/usb_tethering_button_text"
android:summary="@string/usb_tethering_subtext" /> android:summary="@string/usb_tethering_subtext" />
<SwitchPreference
android:key="enable_wifi_ap"
android:title="@string/wifi_hotspot_checkbox_text"
android:summary="@string/summary_two_lines_placeholder" />
<Preference
android:key="wifi_ap_ssid_and_security"
android:title="@string/wifi_tether_configure_ap_text"
android:persistent="false" />
<SwitchPreference <SwitchPreference
android:key="enable_bluetooth_tethering" android:key="enable_bluetooth_tethering"
android:title="@string/bluetooth_tether_checkbox_text" android:title="@string/bluetooth_tether_checkbox_text"

View File

@@ -16,95 +16,64 @@
package com.android.settings; package com.android.settings;
import static android.net.ConnectivityManager.TETHERING_BLUETOOTH;
import static android.net.ConnectivityManager.TETHERING_USB;
import android.app.Activity; import android.app.Activity;
import android.app.Dialog;
import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothPan; import android.bluetooth.BluetoothPan;
import android.bluetooth.BluetoothProfile; import android.bluetooth.BluetoothProfile;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.hardware.usb.UsbManager; import android.hardware.usb.UsbManager;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.os.Bundle; import android.os.Bundle;
import android.os.Environment; import android.os.Environment;
import android.os.Handler; import android.os.Handler;
import android.os.UserManager; import android.os.UserManager;
import android.support.v14.preference.SwitchPreference; import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.Preference; import android.support.v7.preference.Preference;
import android.util.Log;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.datausage.DataSaverBackend; import com.android.settings.datausage.DataSaverBackend;
import com.android.settings.wifi.WifiApDialog;
import com.android.settings.wifi.WifiApEnabler;
import com.android.settings.wifi.tether.WifiTetherPreferenceController; import com.android.settings.wifi.tether.WifiTetherPreferenceController;
import com.android.settings.wifi.tether.WifiTetherSettings;
import com.android.settingslib.TetherUtil; import com.android.settingslib.TetherUtil;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
import static android.net.ConnectivityManager.TETHERING_BLUETOOTH;
import static android.net.ConnectivityManager.TETHERING_USB;
import static android.net.ConnectivityManager.TETHERING_WIFI;
/* /*
* Displays preferences for Tethering. * Displays preferences for Tethering.
*/ */
public class TetherSettings extends RestrictedSettingsFragment public class TetherSettings extends RestrictedSettingsFragment
implements DialogInterface.OnClickListener, Preference.OnPreferenceChangeListener, implements DataSaverBackend.Listener {
DataSaverBackend.Listener {
private static final String USB_TETHER_SETTINGS = "usb_tether_settings"; private static final String USB_TETHER_SETTINGS = "usb_tether_settings";
private static final String ENABLE_WIFI_AP = "enable_wifi_ap";
private static final String ENABLE_BLUETOOTH_TETHERING = "enable_bluetooth_tethering"; private static final String ENABLE_BLUETOOTH_TETHERING = "enable_bluetooth_tethering";
private static final String DATA_SAVER_FOOTER = "disabled_on_data_saver"; private static final String DATA_SAVER_FOOTER = "disabled_on_data_saver";
private static final int DIALOG_AP_SETTINGS = 1;
private static final String TAG = "TetheringSettings"; private static final String TAG = "TetheringSettings";
private SwitchPreference mUsbTether; private SwitchPreference mUsbTether;
private WifiApEnabler mWifiApEnabler;
private SwitchPreference mEnableWifiAp;
private SwitchPreference mBluetoothTether; private SwitchPreference mBluetoothTether;
private BroadcastReceiver mTetherChangeReceiver; private BroadcastReceiver mTetherChangeReceiver;
private String[] mUsbRegexs; private String[] mUsbRegexs;
private String[] mWifiRegexs;
private String[] mBluetoothRegexs; private String[] mBluetoothRegexs;
private AtomicReference<BluetoothPan> mBluetoothPan = new AtomicReference<BluetoothPan>(); private AtomicReference<BluetoothPan> mBluetoothPan = new AtomicReference<>();
private Handler mHandler = new Handler(); private Handler mHandler = new Handler();
private OnStartTetheringCallback mStartTetheringCallback; private OnStartTetheringCallback mStartTetheringCallback;
private static final String WIFI_AP_SSID_AND_SECURITY = "wifi_ap_ssid_and_security";
private static final int CONFIG_SUBTEXT = R.string.wifi_tether_configure_subtext;
private String[] mSecurityType;
private Preference mCreateNetwork;
private WifiApDialog mDialog;
private WifiManager mWifiManager;
private WifiConfiguration mWifiConfig = null;
private ConnectivityManager mCm; private ConnectivityManager mCm;
private WifiTetherPreferenceController mWifiTetherPreferenceController; private WifiTetherPreferenceController mWifiTetherPreferenceController;
private boolean mRestartWifiApAfterConfigChange;
private boolean mUsbConnected; private boolean mUsbConnected;
private boolean mMassStorageActive; private boolean mMassStorageActive;
@@ -157,24 +126,17 @@ public class TetherSettings extends RestrictedSettingsFragment
BluetoothProfile.PAN); BluetoothProfile.PAN);
} }
mEnableWifiAp =
(SwitchPreference) findPreference(ENABLE_WIFI_AP);
Preference wifiApSettings = findPreference(WIFI_AP_SSID_AND_SECURITY);
mUsbTether = (SwitchPreference) findPreference(USB_TETHER_SETTINGS); mUsbTether = (SwitchPreference) findPreference(USB_TETHER_SETTINGS);
mBluetoothTether = (SwitchPreference) findPreference(ENABLE_BLUETOOTH_TETHERING); mBluetoothTether = (SwitchPreference) findPreference(ENABLE_BLUETOOTH_TETHERING);
mDataSaverBackend.addListener(this); mDataSaverBackend.addListener(this);
mCm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); mCm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
mUsbRegexs = mCm.getTetherableUsbRegexs(); mUsbRegexs = mCm.getTetherableUsbRegexs();
mWifiRegexs = mCm.getTetherableWifiRegexs();
mBluetoothRegexs = mCm.getTetherableBluetoothRegexs(); mBluetoothRegexs = mCm.getTetherableBluetoothRegexs();
final boolean usbAvailable = mUsbRegexs.length != 0; final boolean usbAvailable = mUsbRegexs.length != 0;
final boolean wifiAvailable = mWifiRegexs.length != 0;
final boolean bluetoothAvailable = mBluetoothRegexs.length != 0; final boolean bluetoothAvailable = mBluetoothRegexs.length != 0;
if (!usbAvailable || Utils.isMonkeyRunning()) { if (!usbAvailable || Utils.isMonkeyRunning()) {
@@ -182,18 +144,6 @@ public class TetherSettings extends RestrictedSettingsFragment
} }
mWifiTetherPreferenceController.displayPreference(getPreferenceScreen()); mWifiTetherPreferenceController.displayPreference(getPreferenceScreen());
if (WifiTetherSettings.isTetherSettingPageEnabled()) {
removePreference(ENABLE_WIFI_AP);
removePreference(WIFI_AP_SSID_AND_SECURITY);
} else {
if (wifiAvailable && !Utils.isMonkeyRunning()) {
mWifiApEnabler = new WifiApEnabler(activity, mDataSaverBackend, mEnableWifiAp);
initWifiTethering();
} else {
getPreferenceScreen().removePreference(mEnableWifiAp);
getPreferenceScreen().removePreference(wifiApSettings);
}
}
if (!bluetoothAvailable) { if (!bluetoothAvailable) {
getPreferenceScreen().removePreference(mBluetoothTether); getPreferenceScreen().removePreference(mBluetoothTether);
@@ -225,7 +175,6 @@ public class TetherSettings extends RestrictedSettingsFragment
@Override @Override
public void onDataSaverChanged(boolean isDataSaving) { public void onDataSaverChanged(boolean isDataSaving) {
mDataSaverEnabled = isDataSaving; mDataSaverEnabled = isDataSaving;
mEnableWifiAp.setEnabled(!mDataSaverEnabled);
mUsbTether.setEnabled(!mDataSaverEnabled); mUsbTether.setEnabled(!mDataSaverEnabled);
mBluetoothTether.setEnabled(!mDataSaverEnabled); mBluetoothTether.setEnabled(!mDataSaverEnabled);
mDataSaverFooter.setVisible(mDataSaverEnabled); mDataSaverFooter.setVisible(mDataSaverEnabled);
@@ -239,47 +188,6 @@ public class TetherSettings extends RestrictedSettingsFragment
public void onBlacklistStatusChanged(int uid, boolean isBlacklisted) { public void onBlacklistStatusChanged(int uid, boolean isBlacklisted) {
} }
private void initWifiTethering() {
final Activity activity = getActivity();
mWifiConfig = mWifiManager.getWifiApConfiguration();
mSecurityType = getResources().getStringArray(R.array.wifi_ap_security);
mCreateNetwork = findPreference(WIFI_AP_SSID_AND_SECURITY);
mRestartWifiApAfterConfigChange = false;
if (mWifiConfig == null) {
final String s = activity.getString(
com.android.internal.R.string.wifi_tether_configure_ssid_default);
mCreateNetwork.setSummary(String.format(activity.getString(CONFIG_SUBTEXT),
s, mSecurityType[WifiApDialog.OPEN_INDEX]));
} else {
int index = WifiApDialog.getSecurityTypeIndex(mWifiConfig);
mCreateNetwork.setSummary(String.format(activity.getString(CONFIG_SUBTEXT),
mWifiConfig.SSID,
mSecurityType[index]));
}
}
@Override
public Dialog onCreateDialog(int id) {
if (id == DIALOG_AP_SETTINGS) {
final Activity activity = getActivity();
mDialog = new WifiApDialog(activity, this, mWifiConfig);
return mDialog;
}
return null;
}
@Override
public int getDialogMetricsCategory(int dialogId) {
if (dialogId == DIALOG_AP_SETTINGS) {
return MetricsEvent.DIALOG_AP_SETTINGS;
}
return 0;
}
private class TetherChangeReceiver extends BroadcastReceiver { private class TetherChangeReceiver extends BroadcastReceiver {
@Override @Override
public void onReceive(Context content, Intent intent) { public void onReceive(Context content, Intent intent) {
@@ -295,20 +203,6 @@ public class TetherSettings extends RestrictedSettingsFragment
updateState(available.toArray(new String[available.size()]), updateState(available.toArray(new String[available.size()]),
active.toArray(new String[active.size()]), active.toArray(new String[active.size()]),
errored.toArray(new String[errored.size()])); errored.toArray(new String[errored.size()]));
if (mWifiManager.getWifiApState() == WifiManager.WIFI_AP_STATE_DISABLED
&& mRestartWifiApAfterConfigChange) {
mRestartWifiApAfterConfigChange = false;
Log.d(TAG, "Restarting WifiAp due to prior config change.");
startTethering(TETHERING_WIFI);
}
} else if (action.equals(WifiManager.WIFI_AP_STATE_CHANGED_ACTION)) {
int state = intent.getIntExtra(WifiManager.EXTRA_WIFI_AP_STATE, 0);
if (state == WifiManager.WIFI_AP_STATE_DISABLED
&& mRestartWifiApAfterConfigChange) {
mRestartWifiApAfterConfigChange = false;
Log.d(TAG, "Restarting WifiAp due to prior config change.");
startTethering(TETHERING_WIFI);
}
} else if (action.equals(Intent.ACTION_MEDIA_SHARED)) { } else if (action.equals(Intent.ACTION_MEDIA_SHARED)) {
mMassStorageActive = true; mMassStorageActive = true;
updateState(); updateState();
@@ -360,7 +254,6 @@ public class TetherSettings extends RestrictedSettingsFragment
mMassStorageActive = Environment.MEDIA_SHARED.equals(Environment.getExternalStorageState()); mMassStorageActive = Environment.MEDIA_SHARED.equals(Environment.getExternalStorageState());
mTetherChangeReceiver = new TetherChangeReceiver(); mTetherChangeReceiver = new TetherChangeReceiver();
IntentFilter filter = new IntentFilter(ConnectivityManager.ACTION_TETHER_STATE_CHANGED); IntentFilter filter = new IntentFilter(ConnectivityManager.ACTION_TETHER_STATE_CHANGED);
filter.addAction(WifiManager.WIFI_AP_STATE_CHANGED_ACTION);
Intent intent = activity.registerReceiver(mTetherChangeReceiver, filter); Intent intent = activity.registerReceiver(mTetherChangeReceiver, filter);
filter = new IntentFilter(); filter = new IntentFilter();
@@ -378,10 +271,6 @@ public class TetherSettings extends RestrictedSettingsFragment
activity.registerReceiver(mTetherChangeReceiver, filter); activity.registerReceiver(mTetherChangeReceiver, filter);
if (intent != null) mTetherChangeReceiver.onReceive(activity, intent); if (intent != null) mTetherChangeReceiver.onReceive(activity, intent);
if (mWifiApEnabler != null) {
mEnableWifiAp.setOnPreferenceChangeListener(this);
mWifiApEnabler.resume();
}
updateState(); updateState();
} }
@@ -396,10 +285,6 @@ public class TetherSettings extends RestrictedSettingsFragment
getActivity().unregisterReceiver(mTetherChangeReceiver); getActivity().unregisterReceiver(mTetherChangeReceiver);
mTetherChangeReceiver = null; mTetherChangeReceiver = null;
mStartTetheringCallback = null; mStartTetheringCallback = null;
if (mWifiApEnabler != null) {
mEnableWifiAp.setOnPreferenceChangeListener(null);
mWifiApEnabler.pause();
}
} }
private void updateState() { private void updateState() {
@@ -415,7 +300,6 @@ public class TetherSettings extends RestrictedSettingsFragment
updateBluetoothState(); updateBluetoothState();
} }
private void updateUsbState(String[] available, String[] tethered, private void updateUsbState(String[] available, String[] tethered,
String[] errored) { String[] errored) {
boolean usbAvailable = mUsbConnected && !mMassStorageActive; boolean usbAvailable = mUsbConnected && !mMassStorageActive;
@@ -477,18 +361,6 @@ public class TetherSettings extends RestrictedSettingsFragment
} }
} }
@Override
public boolean onPreferenceChange(Preference preference, Object value) {
boolean enable = (Boolean) value;
if (enable) {
startTethering(TETHERING_WIFI);
} else {
mCm.stopTethering(TETHERING_WIFI);
}
return false;
}
public static boolean isProvisioningNeededButUnavailable(Context context) { public static boolean isProvisioningNeededButUnavailable(Context context) {
return (TetherUtil.isProvisioningNeeded(context) return (TetherUtil.isProvisioningNeeded(context)
&& !isIntentAvailable(context)); && !isIntentAvailable(context));
@@ -541,37 +413,11 @@ public class TetherSettings extends RestrictedSettingsFragment
// connected. Need to update state manually. // connected. Need to update state manually.
updateState(); updateState();
} }
} else if (preference == mCreateNetwork) {
showDialog(DIALOG_AP_SETTINGS);
} }
return super.onPreferenceTreeClick(preference); return super.onPreferenceTreeClick(preference);
} }
public void onClick(DialogInterface dialogInterface, int button) {
if (button == DialogInterface.BUTTON_POSITIVE) {
mWifiConfig = mDialog.getConfig();
if (mWifiConfig != null) {
/**
* if soft AP is stopped, bring up
* else restart with new config
* TODO: update config on a running access point when framework support is added
*/
if (mWifiManager.getWifiApState() == WifiManager.WIFI_AP_STATE_ENABLED) {
Log.d("TetheringSettings",
"Wifi AP config changed while enabled, stop and restart");
mRestartWifiApAfterConfigChange = true;
mCm.stopTethering(TETHERING_WIFI);
}
mWifiManager.setWifiApConfiguration(mWifiConfig);
int index = WifiApDialog.getSecurityTypeIndex(mWifiConfig);
mCreateNetwork.setSummary(String.format(getActivity().getString(CONFIG_SUBTEXT),
mWifiConfig.SSID,
mSecurityType[index]));
}
}
}
@Override @Override
public int getHelpResource() { public int getHelpResource() {
return R.string.help_url_tether; return R.string.help_url_tether;
@@ -592,7 +438,7 @@ public class TetherSettings extends RestrictedSettingsFragment
final WeakReference<TetherSettings> mTetherSettings; final WeakReference<TetherSettings> mTetherSettings;
OnStartTetheringCallback(TetherSettings settings) { OnStartTetheringCallback(TetherSettings settings) {
mTetherSettings = new WeakReference<TetherSettings>(settings); mTetherSettings = new WeakReference<>(settings);
} }
@Override @Override

View File

@@ -1,263 +0,0 @@
/*
* Copyright (C) 2010 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.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiConfiguration.AuthAlgorithm;
import android.net.wifi.WifiConfiguration.KeyMgmt;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.text.Editable;
import android.text.InputType;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import com.android.settings.R;
import java.nio.charset.Charset;
/**
* Dialog to configure the SSID and security settings
* for Access Point operation
*/
public class WifiApDialog extends AlertDialog implements View.OnClickListener,
TextWatcher, AdapterView.OnItemSelectedListener {
static final int BUTTON_SUBMIT = DialogInterface.BUTTON_POSITIVE;
private final DialogInterface.OnClickListener mListener;
public static final int OPEN_INDEX = 0;
public static final int WPA2_INDEX = 1;
private View mView;
private TextView mSsid;
private int mSecurityTypeIndex = OPEN_INDEX;
private EditText mPassword;
private int mBandIndex = OPEN_INDEX;
WifiConfiguration mWifiConfig;
WifiManager mWifiManager;
private Context mContext;
private static final String TAG = "WifiApDialog";
public WifiApDialog(Context context, DialogInterface.OnClickListener listener,
WifiConfiguration wifiConfig) {
super(context);
mListener = listener;
mWifiConfig = wifiConfig;
if (wifiConfig != null) {
mSecurityTypeIndex = getSecurityTypeIndex(wifiConfig);
}
mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
mContext = context;
}
public static int getSecurityTypeIndex(WifiConfiguration wifiConfig) {
if (wifiConfig.allowedKeyManagement.get(KeyMgmt.WPA2_PSK)) {
return WPA2_INDEX;
}
return OPEN_INDEX;
}
public WifiConfiguration getConfig() {
WifiConfiguration config = new WifiConfiguration();
/**
* TODO: SSID in WifiConfiguration for soft ap
* is being stored as a raw string without quotes.
* This is not the case on the client side. We need to
* make things consistent and clean it up
*/
config.SSID = mSsid.getText().toString();
config.apBand = mBandIndex;
switch (mSecurityTypeIndex) {
case OPEN_INDEX:
config.allowedKeyManagement.set(KeyMgmt.NONE);
return config;
case WPA2_INDEX:
config.allowedKeyManagement.set(KeyMgmt.WPA2_PSK);
config.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN);
if (mPassword.length() != 0) {
String password = mPassword.getText().toString();
config.preSharedKey = password;
}
return config;
}
return null;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
boolean mInit = true;
mView = getLayoutInflater().inflate(R.layout.wifi_ap_dialog, null);
Spinner mSecurity = ((Spinner) mView.findViewById(R.id.security));
final Spinner mChannel = (Spinner) mView.findViewById(R.id.choose_channel);
setView(mView);
setInverseBackgroundForced(true);
Context context = getContext();
setTitle(R.string.wifi_tether_configure_ap_text);
mView.findViewById(R.id.type).setVisibility(View.VISIBLE);
mSsid = (TextView) mView.findViewById(R.id.ssid);
mPassword = (EditText) mView.findViewById(R.id.password);
ArrayAdapter <CharSequence> channelAdapter;
String countryCode = mWifiManager.getCountryCode();
if (!mWifiManager.isDualBandSupported() || countryCode == null) {
//If no country code, 5GHz AP is forbidden
Log.i(TAG,(!mWifiManager.isDualBandSupported() ? "Device do not support 5GHz " :"")
+ (countryCode == null ? " NO country code" :"") + " forbid 5GHz");
channelAdapter = ArrayAdapter.createFromResource(mContext,
R.array.wifi_ap_band_config_2G_only, android.R.layout.simple_spinner_item);
mWifiConfig.apBand = 0;
} else {
channelAdapter = ArrayAdapter.createFromResource(mContext,
R.array.wifi_ap_band_config_full, android.R.layout.simple_spinner_item);
}
channelAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
setButton(BUTTON_SUBMIT, context.getString(R.string.wifi_save), mListener);
setButton(DialogInterface.BUTTON_NEGATIVE,
context.getString(R.string.wifi_cancel), mListener);
if (mWifiConfig != null) {
mSsid.setText(mWifiConfig.SSID);
if (mWifiConfig.apBand == 0) {
mBandIndex = 0;
} else {
mBandIndex = 1;
}
mSecurity.setSelection(mSecurityTypeIndex);
if (mSecurityTypeIndex == WPA2_INDEX) {
mPassword.setText(mWifiConfig.preSharedKey);
}
}
mChannel.setAdapter(channelAdapter);
mChannel.setOnItemSelectedListener(
new AdapterView.OnItemSelectedListener() {
boolean mInit = true;
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int position,
long id) {
if (!mInit) {
mBandIndex = position;
mWifiConfig.apBand = mBandIndex;
Log.i(TAG, "config on channelIndex : " + mBandIndex + " Band: " +
mWifiConfig.apBand);
} else {
mInit = false;
mChannel.setSelection(mBandIndex);
}
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
}
);
mSsid.addTextChangedListener(this);
mPassword.addTextChangedListener(this);
((CheckBox) mView.findViewById(R.id.show_password)).setOnClickListener(this);
mSecurity.setOnItemSelectedListener(this);
super.onCreate(savedInstanceState);
showSecurityFields();
validate();
}
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
mPassword.setInputType(
InputType.TYPE_CLASS_TEXT |
(((CheckBox) mView.findViewById(R.id.show_password)).isChecked() ?
InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD :
InputType.TYPE_TEXT_VARIATION_PASSWORD));
}
private void validate() {
String mSsidString = mSsid.getText().toString();
if ((mSsid != null && mSsid.length() == 0)
|| ((mSecurityTypeIndex == WPA2_INDEX) && mPassword.length() < 8)
|| (mSsid != null &&
Charset.forName("UTF-8").encode(mSsidString).limit() > 32)) {
getButton(BUTTON_SUBMIT).setEnabled(false);
} else {
getButton(BUTTON_SUBMIT).setEnabled(true);
}
}
public void onClick(View view) {
mPassword.setInputType(
InputType.TYPE_CLASS_TEXT | (((CheckBox) view).isChecked() ?
InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD :
InputType.TYPE_TEXT_VARIATION_PASSWORD));
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void afterTextChanged(Editable editable) {
validate();
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
mSecurityTypeIndex = position;
showSecurityFields();
validate();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
private void showSecurityFields() {
if (mSecurityTypeIndex == OPEN_INDEX) {
mView.findViewById(R.id.fields).setVisibility(View.GONE);
return;
}
mView.findViewById(R.id.fields).setVisibility(View.VISIBLE);
}
}

View File

@@ -1,188 +0,0 @@
/*
* Copyright (C) 2010 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.ConnectivityManager;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.provider.Settings;
import android.support.v14.preference.SwitchPreference;
import android.text.BidiFormatter;
import com.android.settings.R;
import com.android.settings.datausage.DataSaverBackend;
import java.util.ArrayList;
/**
* @deprecated in favor of WifiTetherPreferenceController and WifiTetherSettings
*/
@Deprecated
public class WifiApEnabler {
private final Context mContext;
private final SwitchPreference mSwitch;
private final CharSequence mOriginalSummary;
private final DataSaverBackend mDataSaverBackend;
private WifiManager mWifiManager;
private final IntentFilter mIntentFilter;
ConnectivityManager mCm;
private String[] mWifiRegexs;
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (WifiManager.WIFI_AP_STATE_CHANGED_ACTION.equals(action)) {
int state = intent.getIntExtra(
WifiManager.EXTRA_WIFI_AP_STATE, WifiManager.WIFI_AP_STATE_FAILED);
if (state == WifiManager.WIFI_AP_STATE_FAILED) {
int reason = intent.getIntExtra(WifiManager.EXTRA_WIFI_AP_FAILURE_REASON,
WifiManager.SAP_START_FAILURE_GENERAL);
handleWifiApStateChanged(state, reason);
} else {
handleWifiApStateChanged(state, WifiManager.SAP_START_FAILURE_GENERAL);
}
} else if (ConnectivityManager.ACTION_TETHER_STATE_CHANGED.equals(action)) {
ArrayList<String> available = intent.getStringArrayListExtra(
ConnectivityManager.EXTRA_AVAILABLE_TETHER);
ArrayList<String> active = intent.getStringArrayListExtra(
ConnectivityManager.EXTRA_ACTIVE_TETHER);
ArrayList<String> errored = intent.getStringArrayListExtra(
ConnectivityManager.EXTRA_ERRORED_TETHER);
updateTetherState(available.toArray(), active.toArray(), errored.toArray());
} else if (Intent.ACTION_AIRPLANE_MODE_CHANGED.equals(action)) {
enableWifiSwitch();
}
}
};
public WifiApEnabler(Context context, DataSaverBackend dataSaverBackend,
SwitchPreference switchPreference) {
mContext = context;
mDataSaverBackend = dataSaverBackend;
mSwitch = switchPreference;
mOriginalSummary = switchPreference.getSummary();
switchPreference.setPersistent(false);
mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
mCm = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
mWifiRegexs = mCm.getTetherableWifiRegexs();
mIntentFilter = new IntentFilter(WifiManager.WIFI_AP_STATE_CHANGED_ACTION);
mIntentFilter.addAction(ConnectivityManager.ACTION_TETHER_STATE_CHANGED);
mIntentFilter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);
}
public void resume() {
mContext.registerReceiver(mReceiver, mIntentFilter);
enableWifiSwitch();
}
public void pause() {
mContext.unregisterReceiver(mReceiver);
}
private void enableWifiSwitch() {
boolean isAirplaneMode = Settings.Global.getInt(mContext.getContentResolver(),
Settings.Global.AIRPLANE_MODE_ON, 0) != 0;
if(!isAirplaneMode) {
mSwitch.setEnabled(!mDataSaverBackend.isDataSaverEnabled());
} else {
mSwitch.setSummary(mOriginalSummary);
mSwitch.setEnabled(false);
}
}
private void updateConfigSummary(WifiConfiguration wifiConfig) {
String s = mContext.getString(
com.android.internal.R.string.wifi_tether_configure_ssid_default);
mSwitch.setSummary(mContext.getString(R.string.wifi_tether_enabled_subtext,
BidiFormatter.getInstance().unicodeWrap(
(wifiConfig == null) ? s : wifiConfig.SSID)));
}
private void updateTetherState(Object[] available, Object[] tethered, Object[] errored) {
boolean wifiTethered = false;
boolean wifiErrored = false;
for (Object o : tethered) {
String s = (String)o;
for (String regex : mWifiRegexs) {
if (s.matches(regex)) wifiTethered = true;
}
}
for (Object o: errored) {
String s = (String)o;
for (String regex : mWifiRegexs) {
if (s.matches(regex)) wifiErrored = true;
}
}
if (wifiTethered) {
WifiConfiguration wifiConfig = mWifiManager.getWifiApConfiguration();
updateConfigSummary(wifiConfig);
} else if (wifiErrored) {
mSwitch.setSummary(R.string.wifi_error);
} else {
mSwitch.setSummary(R.string.wifi_hotspot_off_subtext);
}
}
private void handleWifiApStateChanged(int state, int reason) {
switch (state) {
case WifiManager.WIFI_AP_STATE_ENABLING:
mSwitch.setSummary(R.string.wifi_tether_starting);
mSwitch.setEnabled(false);
break;
case WifiManager.WIFI_AP_STATE_ENABLED:
/**
* Summary on enable is handled by tether
* broadcast notice
*/
mSwitch.setChecked(true);
/* Doesnt need the airplane check */
mSwitch.setEnabled(!mDataSaverBackend.isDataSaverEnabled());
break;
case WifiManager.WIFI_AP_STATE_DISABLING:
mSwitch.setSummary(R.string.wifi_tether_stopping);
mSwitch.setChecked(false);
mSwitch.setEnabled(false);
break;
case WifiManager.WIFI_AP_STATE_DISABLED:
mSwitch.setChecked(false);
mSwitch.setSummary(mOriginalSummary);
enableWifiSwitch();
break;
default:
mSwitch.setChecked(false);
if (reason == WifiManager.SAP_START_FAILURE_NO_CHANNEL) {
mSwitch.setSummary(R.string.wifi_sap_no_channel_error);
} else {
mSwitch.setSummary(R.string.wifi_error);
}
enableWifiSwitch();
}
}
}

View File

@@ -73,7 +73,6 @@ public class WifiTetherPreferenceController extends AbstractPreferenceController
public boolean isAvailable() { public boolean isAvailable() {
return mWifiRegexs != null return mWifiRegexs != null
&& mWifiRegexs.length != 0 && mWifiRegexs.length != 0
&& WifiTetherSettings.isTetherSettingPageEnabled()
&& !Utils.isMonkeyRunning(); && !Utils.isMonkeyRunning();
} }

View File

@@ -26,7 +26,6 @@ import android.content.IntentFilter;
import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager; import android.net.wifi.WifiManager;
import android.os.Bundle; import android.os.Bundle;
import android.os.SystemProperties;
import android.os.UserManager; import android.os.UserManager;
import android.support.annotation.VisibleForTesting; import android.support.annotation.VisibleForTesting;
import android.util.Log; import android.util.Log;
@@ -44,10 +43,6 @@ import java.util.List;
public class WifiTetherSettings extends RestrictedDashboardFragment public class WifiTetherSettings extends RestrictedDashboardFragment
implements WifiTetherBasePreferenceController.OnTetherConfigUpdateListener { implements WifiTetherBasePreferenceController.OnTetherConfigUpdateListener {
public static boolean isTetherSettingPageEnabled() {
return SystemProperties.getBoolean("settings.ui.wifi.tether.enabled", true);
}
private static final IntentFilter TETHER_STATE_CHANGE_FILTER; private static final IntentFilter TETHER_STATE_CHANGE_FILTER;
private WifiTetherSwitchBarController mSwitchBarController; private WifiTetherSwitchBarController mSwitchBarController;