Merge "Make it possible to have open tether network" into pi-dev
am: b410c21a01
Change-Id: Ieeefbfefd31cae9969effad32f929616cd5d2a25
This commit is contained in:
@@ -2162,6 +2162,8 @@
|
||||
<string name="wifi_hotspot_tethering_on_subtext" product="default">Sharing this phone\u2019s internet connection via hotspot</string>
|
||||
<!-- Summary text when hotspot is on for local-only -->
|
||||
<string name="wifi_hotspot_on_local_only_subtext">App is sharing content. To share internet connection, turn hotspot off, then on</string>
|
||||
<!-- Summary text when no password is set [CHAR LIMIT=60] -->
|
||||
<string name="wifi_hotspot_no_password_subtext">No password set</string>
|
||||
|
||||
<!-- Wifi hotspot settings -->
|
||||
<!-- Label for Wifi hotspot name. -->
|
||||
|
@@ -86,9 +86,14 @@ public class ValidatedEditTextPreference extends CustomEditTextPreference {
|
||||
super.onBindViewHolder(holder);
|
||||
|
||||
final TextView textView = (TextView) holder.findViewById(android.R.id.summary);
|
||||
if (textView != null && mIsSummaryPassword) {
|
||||
if (textView == null) {
|
||||
return;
|
||||
}
|
||||
if (mIsSummaryPassword) {
|
||||
textView.setInputType(
|
||||
InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
|
||||
} else {
|
||||
textView.setInputType(InputType.TYPE_CLASS_TEXT);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -50,10 +50,11 @@ public class WifiUtils {
|
||||
return ssid.length() < SSID_ASCII_MIN_LENGTH;
|
||||
}
|
||||
|
||||
public static boolean isPasswordValid(String password) {
|
||||
public static boolean isHotspotPasswordValid(String password) {
|
||||
if (TextUtils.isEmpty(password)) {
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
final int length = password.length();
|
||||
return length >= PASSWORD_MIN_LENGTH && length <= PASSWORD_MAX_LENGTH;
|
||||
}
|
||||
|
@@ -20,11 +20,15 @@ import android.content.Context;
|
||||
import android.net.wifi.WifiConfiguration;
|
||||
import android.support.v7.preference.EditTextPreference;
|
||||
import android.support.v7.preference.Preference;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.widget.ValidatedEditTextPreference;
|
||||
import com.android.settings.wifi.WifiUtils;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class WifiTetherPasswordPreferenceController extends WifiTetherBasePreferenceController
|
||||
implements ValidatedEditTextPreference.Validator {
|
||||
|
||||
@@ -49,6 +53,8 @@ public class WifiTetherPasswordPreferenceController extends WifiTetherBasePrefer
|
||||
if (config != null) {
|
||||
mPassword = config.preSharedKey;
|
||||
Log.d(TAG, "Updating password in Preference, " + mPassword);
|
||||
} else {
|
||||
mPassword = generateRandomPassword();
|
||||
}
|
||||
((ValidatedEditTextPreference) mPreference).setValidator(this);
|
||||
((ValidatedEditTextPreference) mPreference).setIsSummaryPassword(true);
|
||||
@@ -67,13 +73,35 @@ public class WifiTetherPasswordPreferenceController extends WifiTetherBasePrefer
|
||||
return mPassword;
|
||||
}
|
||||
|
||||
public int getSecuritySettingForPassword() {
|
||||
// We should return NONE when no password is set
|
||||
if (TextUtils.isEmpty(mPassword)) {
|
||||
return WifiConfiguration.KeyMgmt.NONE;
|
||||
}
|
||||
// Only other currently supported type is WPA2 so we'll try that
|
||||
return WifiConfiguration.KeyMgmt.WPA2_PSK;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isTextValid(String value) {
|
||||
return WifiUtils.isPasswordValid(value);
|
||||
return WifiUtils.isHotspotPasswordValid(value);
|
||||
}
|
||||
|
||||
private static String generateRandomPassword() {
|
||||
String randomUUID = UUID.randomUUID().toString();
|
||||
//first 12 chars from xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
|
||||
return randomUUID.substring(0, 8) + randomUUID.substring(9, 13);
|
||||
}
|
||||
|
||||
private void updatePasswordDisplay(EditTextPreference preference) {
|
||||
preference.setText(mPassword);
|
||||
preference.setSummary(mPassword);
|
||||
ValidatedEditTextPreference pref = (ValidatedEditTextPreference) preference;
|
||||
pref.setText(mPassword);
|
||||
if (!TextUtils.isEmpty(mPassword)) {
|
||||
pref.setIsSummaryPassword(true);
|
||||
pref.setSummary(mPassword);
|
||||
} else {
|
||||
pref.setIsSummaryPassword(false);
|
||||
pref.setSummary(R.string.wifi_hotspot_no_password_subtext);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -161,8 +161,8 @@ public class WifiTetherSettings extends RestrictedDashboardFragment
|
||||
|
||||
config.SSID = mSSIDPreferenceController.getSSID();
|
||||
config.preSharedKey = mPasswordPreferenceController.getPassword();
|
||||
ensureWifiConfigHasPassword(config);
|
||||
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA2_PSK);
|
||||
config.allowedKeyManagement.set(
|
||||
mPasswordPreferenceController.getSecuritySettingForPassword());
|
||||
config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
|
||||
config.apBand = mApBandPreferenceController.getBandIndex();
|
||||
return config;
|
||||
@@ -182,15 +182,6 @@ public class WifiTetherSettings extends RestrictedDashboardFragment
|
||||
.updateDisplay();
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
static void ensureWifiConfigHasPassword(WifiConfiguration config) {
|
||||
if (TextUtils.isEmpty(config.preSharedKey)) {
|
||||
String randomUUID = UUID.randomUUID().toString();
|
||||
//first 12 chars from xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
|
||||
config.preSharedKey = randomUUID.substring(0, 8) + randomUUID.substring(9, 13);
|
||||
}
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
class TetherChangeReceiver extends BroadcastReceiver {
|
||||
@Override
|
||||
|
@@ -39,9 +39,10 @@ public class WifiUtilsTest {
|
||||
public void testPassword() {
|
||||
final String longPassword = "123456789012345678901234567890"
|
||||
+ "1234567890123456789012345678901234567890";
|
||||
assertThat(WifiUtils.isPasswordValid("123")).isFalse();
|
||||
assertThat(WifiUtils.isPasswordValid("12345678")).isTrue();
|
||||
assertThat(WifiUtils.isPasswordValid("1234567890")).isTrue();
|
||||
assertThat(WifiUtils.isPasswordValid(longPassword)).isFalse();
|
||||
assertThat(WifiUtils.isHotspotPasswordValid("123")).isFalse();
|
||||
assertThat(WifiUtils.isHotspotPasswordValid("12345678")).isTrue();
|
||||
assertThat(WifiUtils.isHotspotPasswordValid("1234567890")).isTrue();
|
||||
assertThat(WifiUtils.isHotspotPasswordValid(longPassword)).isFalse();
|
||||
assertThat(WifiUtils.isHotspotPasswordValid("")).isTrue();
|
||||
}
|
||||
}
|
||||
|
@@ -113,4 +113,36 @@ public class WifiTetherPasswordPreferenceControllerTest {
|
||||
assertThat(mController.getPassword()).isEqualTo(config.preSharedKey);
|
||||
assertThat(mPreference.getSummary()).isEqualTo(config.preSharedKey);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getSecuritySettingForPassword_returnCorrectType() {
|
||||
// valid wpa2 password
|
||||
mController.displayPreference(mScreen);
|
||||
assertThat(mController.getSecuritySettingForPassword())
|
||||
.isEqualTo(WifiConfiguration.KeyMgmt.WPA2_PSK);
|
||||
|
||||
// password which is empty returns NONE
|
||||
mConfig = new WifiConfiguration();
|
||||
mConfig.SSID = "test_1234";
|
||||
mConfig.preSharedKey = "";
|
||||
when(mContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(mWifiManager);
|
||||
when(mWifiManager.getWifiApConfiguration()).thenReturn(mConfig);
|
||||
mController = new WifiTetherPasswordPreferenceController(mContext, mListener);
|
||||
|
||||
mController.displayPreference(mScreen);
|
||||
assertThat(mController.getSecuritySettingForPassword())
|
||||
.isEqualTo(WifiConfiguration.KeyMgmt.NONE);
|
||||
|
||||
// default for unsupported types is wpa2
|
||||
mConfig = new WifiConfiguration();
|
||||
mConfig.SSID = "test_1234";
|
||||
mConfig.preSharedKey = "short";
|
||||
when(mContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(mWifiManager);
|
||||
when(mWifiManager.getWifiApConfiguration()).thenReturn(mConfig);
|
||||
mController = new WifiTetherPasswordPreferenceController(mContext, mListener);
|
||||
|
||||
mController.displayPreference(mScreen);
|
||||
assertThat(mController.getSecuritySettingForPassword())
|
||||
.isEqualTo(WifiConfiguration.KeyMgmt.WPA2_PSK);
|
||||
}
|
||||
}
|
||||
|
@@ -1,38 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2017 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.tether;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import android.net.wifi.WifiConfiguration;
|
||||
|
||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
@RunWith(SettingsRobolectricTestRunner.class)
|
||||
public class WifiTetherSettingsTest {
|
||||
|
||||
@Test
|
||||
public void ensureWifiConfigHasPassword_shouldGeneratePassword() {
|
||||
WifiConfiguration config = new WifiConfiguration();
|
||||
WifiTetherSettings.ensureWifiConfigHasPassword(config);
|
||||
|
||||
assertThat(config.preSharedKey).isNotEmpty();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user