From 6a3db1f45bbe8de1051e8ea23e41e7c815698600 Mon Sep 17 00:00:00 2001 From: cjybyjk Date: Wed, 2 Mar 2022 17:52:19 +0800 Subject: [PATCH] Settings: SoftAp: add Hidden SSID preference Signed-off-by: cjybyjk Change-Id: I8a222a9a9ae8f005953b738368168d551a502491 Signed-off-by: Pranav Vashi --- res/values/evolution_strings.xml | 2 + res/xml/wifi_tether_settings.xml | 5 ++ ...iTetherHiddenSsidPreferenceController.java | 79 +++++++++++++++++++ .../wifi/tether/WifiTetherSettings.java | 11 +++ .../wifi/tether/WifiTetherSettingsTest.java | 6 ++ 5 files changed, 103 insertions(+) create mode 100644 src/com/android/settings/wifi/tether/WifiTetherHiddenSsidPreferenceController.java diff --git a/res/values/evolution_strings.xml b/res/values/evolution_strings.xml index 2a949196f32..d00d968c24e 100644 --- a/res/values/evolution_strings.xml +++ b/res/values/evolution_strings.xml @@ -140,6 +140,8 @@ Long-press to copy + Hidden network + Your mobile hotspot\'s name won\'t appear in the list of available WLAN networks. Connected devices List and manage devices connected to the hotspot List devices connected to the hotspot diff --git a/res/xml/wifi_tether_settings.xml b/res/xml/wifi_tether_settings.xml index c9dbafd67a9..6d2d676e5f5 100644 --- a/res/xml/wifi_tether_settings.xml +++ b/res/xml/wifi_tether_settings.xml @@ -72,4 +72,9 @@ android:key="wifi_tether_client_manager" android:title="@string/wifi_hotspot_client_manager_title" android:fragment="com.android.settings.wifi.tether.WifiTetherClientManager" /> + + diff --git a/src/com/android/settings/wifi/tether/WifiTetherHiddenSsidPreferenceController.java b/src/com/android/settings/wifi/tether/WifiTetherHiddenSsidPreferenceController.java new file mode 100644 index 00000000000..a4d4667767c --- /dev/null +++ b/src/com/android/settings/wifi/tether/WifiTetherHiddenSsidPreferenceController.java @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2022 Project Kaleidoscope + * + * 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 android.content.Context; +import android.net.wifi.SoftApConfiguration; +import android.util.FeatureFlagUtils; + +import androidx.preference.Preference; +import androidx.preference.SwitchPreferenceCompat; + +import com.android.settings.R; +import com.android.settings.core.FeatureFlags; +import com.android.settings.wifi.tether.WifiTetherBasePreferenceController; + +/** + * This controller helps to manage the state of hide SSID switch preference. + */ +public class WifiTetherHiddenSsidPreferenceController extends + WifiTetherBasePreferenceController { + + public static final String DEDUP_POSTFIX = "_2"; + public static final String PREF_KEY = "wifi_tether_hidden_ssid"; + + private boolean mHiddenSsid; + + public WifiTetherHiddenSsidPreferenceController(Context context, + WifiTetherBasePreferenceController.OnTetherConfigUpdateListener listener) { + super(context, listener); + + if (mWifiManager != null) { + final SoftApConfiguration config = mWifiManager.getSoftApConfiguration(); + if (config != null) { + mHiddenSsid = config.isHiddenSsid(); + } + } + } + + @Override + public String getPreferenceKey() { + return FeatureFlagUtils.isEnabled(mContext, FeatureFlags.TETHER_ALL_IN_ONE) + ? PREF_KEY + DEDUP_POSTFIX : PREF_KEY; + } + + @Override + public void updateDisplay() { + if (mPreference == null) { + return; + } + ((SwitchPreferenceCompat) mPreference).setChecked(mHiddenSsid); + } + + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + mHiddenSsid = (Boolean) newValue; + if (mListener != null) { + mListener.onTetherConfigUpdated(this); + } + return true; + } + + public boolean isHiddenSsidEnabled() { + return mHiddenSsid; + } +} diff --git a/src/com/android/settings/wifi/tether/WifiTetherSettings.java b/src/com/android/settings/wifi/tether/WifiTetherSettings.java index e9b5ac86a26..c5a4444a89a 100644 --- a/src/com/android/settings/wifi/tether/WifiTetherSettings.java +++ b/src/com/android/settings/wifi/tether/WifiTetherSettings.java @@ -50,6 +50,7 @@ import com.android.settingslib.search.SearchIndexable; import com.android.settingslib.wifi.WifiEnterpriseRestrictionUtils; import com.android.settings.wifi.tether.WifiTetherClientManagerPreferenceController; +import com.android.settings.wifi.tether.WifiTetherHiddenSsidPreferenceController; import java.util.ArrayList; import java.util.List; @@ -82,6 +83,9 @@ public class WifiTetherSettings extends RestrictedDashboardFragment @VisibleForTesting static final String KEY_WIFI_TETHER_CLIENT_MANAGER = WifiTetherClientManagerPreferenceController.PREF_KEY; + @VisibleForTesting + static final String KEY_WIFI_TETHER_HIDDEN_SSID = + WifiTetherHiddenSsidPreferenceController.PREF_KEY; @VisibleForTesting SettingsMainSwitchBar mMainSwitchBar; @@ -97,6 +101,8 @@ public class WifiTetherSettings extends RestrictedDashboardFragment @VisibleForTesting WifiTetherAutoOffPreferenceController mWifiTetherAutoOffPreferenceController; private WifiTetherClientManagerPreferenceController mClientPrefController; + @VisibleForTesting + WifiTetherHiddenSsidPreferenceController mHiddenSsidPrefController; @VisibleForTesting boolean mUnavailable; @@ -207,6 +213,7 @@ public class WifiTetherSettings extends RestrictedDashboardFragment use(WifiTetherMaximizeCompatibilityPreferenceController.class); mWifiTetherAutoOffPreferenceController = use(WifiTetherAutoOffPreferenceController.class); mClientPrefController = use(WifiTetherClientManagerPreferenceController.class); + mHiddenSsidPrefController = use(WifiTetherHiddenSsidPreferenceController.class); } @Override @@ -292,6 +299,7 @@ public class WifiTetherSettings extends RestrictedDashboardFragment new WifiTetherAutoOffPreferenceController(context, KEY_WIFI_TETHER_AUTO_OFF)); controllers.add(new WifiTetherMaximizeCompatibilityPreferenceController(context, listener)); controllers.add(new WifiTetherClientManagerPreferenceController(context, listener)); + controllers.add(new WifiTetherHiddenSsidPreferenceController(context, listener)); return controllers; } @@ -338,6 +346,7 @@ public class WifiTetherSettings extends RestrictedDashboardFragment } mWifiTetherAutoOffPreferenceController.updateConfig(configBuilder); mClientPrefController.updateConfig(configBuilder); + configBuilder.setHiddenSsid(mHiddenSsidPrefController.isHiddenSsidEnabled()); return configBuilder.build(); } @@ -347,6 +356,7 @@ public class WifiTetherSettings extends RestrictedDashboardFragment use(WifiTetherPasswordPreferenceController.class).updateDisplay(); use(WifiTetherMaximizeCompatibilityPreferenceController.class).updateDisplay(); use(WifiTetherAutoOffPreferenceController.class).updateDisplay(); + use(WifiTetherHiddenSsidPreferenceController.class).updateDisplay(); } public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = @@ -385,6 +395,7 @@ public class WifiTetherSettings extends RestrictedDashboardFragment keys.add(KEY_WIFI_TETHER_AUTO_OFF); keys.add(KEY_WIFI_TETHER_MAXIMIZE_COMPATIBILITY); keys.add(KEY_WIFI_TETHER_CLIENT_MANAGER); + keys.add(KEY_WIFI_TETHER_HIDDEN_SSID); keys.add(KEY_WIFI_HOTSPOT_SPEED); keys.add(KEY_INSTANT_HOTSPOT); } else { diff --git a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java index 0bc0a32daa6..774f4427530 100644 --- a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java +++ b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java @@ -275,6 +275,7 @@ public class WifiTetherSettingsTest { assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_PASSWORD); assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_AUTO_OFF); assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_MAXIMIZE_COMPATIBILITY); + assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_HIDDEN_SSID); assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_HOTSPOT_SPEED); assertThat(keys).doesNotContain(WifiTetherSettings.KEY_INSTANT_HOTSPOT); } @@ -293,6 +294,7 @@ public class WifiTetherSettingsTest { assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_PASSWORD); assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_AUTO_OFF); assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_MAXIMIZE_COMPATIBILITY); + assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_HIDDEN_SSID); assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_HOTSPOT_SPEED); assertThat(keys).contains(WifiTetherSettings.KEY_INSTANT_HOTSPOT); } @@ -311,6 +313,7 @@ public class WifiTetherSettingsTest { assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_PASSWORD); assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_AUTO_OFF); assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_MAXIMIZE_COMPATIBILITY); + assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_HIDDEN_SSID); assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_HOTSPOT_SPEED); assertThat(keys).contains(WifiTetherSettings.KEY_INSTANT_HOTSPOT); } @@ -329,6 +332,7 @@ public class WifiTetherSettingsTest { assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_PASSWORD); assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_AUTO_OFF); assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_MAXIMIZE_COMPATIBILITY); + assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_HIDDEN_SSID); assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_HOTSPOT_SPEED); assertThat(keys).contains(WifiTetherSettings.KEY_INSTANT_HOTSPOT); } @@ -348,6 +352,7 @@ public class WifiTetherSettingsTest { assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_PASSWORD); assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_AUTO_OFF); assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_MAXIMIZE_COMPATIBILITY); + assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_HIDDEN_SSID); assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_HOTSPOT_SPEED); // contains assertThat(keys).contains(WifiTetherSettings.KEY_INSTANT_HOTSPOT); @@ -367,6 +372,7 @@ public class WifiTetherSettingsTest { assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_PASSWORD); assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_AUTO_OFF); assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_MAXIMIZE_COMPATIBILITY); + assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_HIDDEN_SSID); assertThat(keys).doesNotContain(WifiTetherSettings.KEY_INSTANT_HOTSPOT); // contains assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_HOTSPOT_SECURITY);