Add dhcp in advanced settings toggle.

Test: Unit Test
Fix: 329002870
Change-Id: I5c57deb1e8ed0dd59a7699b56f5eb99ca29876b8
This commit is contained in:
Charlotte Lu
2024-03-11 11:28:41 +08:00
parent 46369353ed
commit 08f8f0ce9e
7 changed files with 151 additions and 0 deletions

View File

@@ -708,6 +708,13 @@
style="@style/wifi_item_spinner"
android:prompt="@string/wifi_privacy_settings"
android:entries="@array/wifi_privacy_entries"/>
<Spinner android:id="@+id/dhcp_settings"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/wifi_item_spinner"
android:prompt="@string/wifi_privacy_device_name_settings"
android:entries="@array/wifi_dhcp_entries"/>
</LinearLayout>
<LinearLayout

View File

@@ -1078,6 +1078,11 @@
<item>Use device MAC</item>
</string-array>
<string-array name="wifi_dhcp_entries">
<item>Send device name to network</item>
<item>Don\u0027t send device name to network</item>
</string-array>
<string-array name="wifi_hidden_entries">
<item>No</item>
<item>Yes</item>

View File

@@ -72,6 +72,7 @@ import com.android.settings.ProxySelector;
import com.android.settings.R;
import com.android.settings.network.SubscriptionUtil;
import com.android.settings.utils.AndroidKeystoreAliasLoader;
import com.android.settings.wifi.details2.WifiPrivacyPreferenceController;
import com.android.settings.wifi.dpp.WifiDppUtils;
import com.android.settingslib.Utils;
import com.android.settingslib.utils.ThreadUtils;
@@ -154,6 +155,10 @@ public class WifiConfigController implements TextWatcher,
@VisibleForTesting static final int PRIVACY_SPINNER_INDEX_RANDOMIZED_MAC = 0;
@VisibleForTesting static final int PRIVACY_SPINNER_INDEX_DEVICE_MAC = 1;
// Should be the same index value as wifi_dhcp_entries in arrays.xml
@VisibleForTesting static final int DHCP_SPINNER_INDEX_SEND_DHCP_HOST_NAME_ENABLE = 0;
@VisibleForTesting static final int DHCP_SPINNER_INDEX_SEND_DHCP_HOST_NAME_DISABLE = 1;
/* Phase2 methods supported by PEAP are limited */
private ArrayAdapter<CharSequence> mPhase2PeapAdapter;
/* Phase2 methods supported by TTLS are limited */
@@ -194,6 +199,7 @@ public class WifiConfigController implements TextWatcher,
private Spinner mMeteredSettingsSpinner;
private Spinner mHiddenSettingsSpinner;
private Spinner mPrivacySettingsSpinner;
private Spinner mDhcpSettingsSpinner;
private TextView mHiddenWarningView;
private TextView mProxyHostView;
private TextView mProxyPortView;
@@ -291,6 +297,7 @@ public class WifiConfigController implements TextWatcher,
mMeteredSettingsSpinner = mView.findViewById(R.id.metered_settings);
mHiddenSettingsSpinner = mView.findViewById(R.id.hidden_settings);
mPrivacySettingsSpinner = mView.findViewById(R.id.privacy_settings);
mDhcpSettingsSpinner = mView.findViewById(R.id.dhcp_settings);
if (mWifiManager.isConnectedMacRandomizationSupported()) {
View privacySettingsLayout = mView.findViewById(R.id.privacy_settings_fields);
privacySettingsLayout.setVisibility(View.VISIBLE);
@@ -323,6 +330,12 @@ public class WifiConfigController implements TextWatcher,
config.macRandomizationSetting == WifiConfiguration.RANDOMIZATION_PERSISTENT
? PRIVACY_SPINNER_INDEX_RANDOMIZED_MAC : PRIVACY_SPINNER_INDEX_DEVICE_MAC);
mDhcpSettingsSpinner.setSelection(
config.isSendDhcpHostnameEnabled()
? DHCP_SPINNER_INDEX_SEND_DHCP_HOST_NAME_ENABLE :
DHCP_SPINNER_INDEX_SEND_DHCP_HOST_NAME_DISABLE
);
if (config.getIpConfiguration().getIpAssignment() == IpAssignment.STATIC) {
mIpSettingsSpinner.setSelection(STATIC_IP);
showAdvancedFields = true;
@@ -841,6 +854,12 @@ public class WifiConfigController implements TextWatcher,
: WifiConfiguration.RANDOMIZATION_NONE;
}
if (mDhcpSettingsSpinner != null) {
config.setSendDhcpHostnameEnabled(WifiPrivacyPreferenceController.Companion
.translatePrefValueToSendDhcpHostnameEnabled(mDhcpSettingsSpinner
.getSelectedItemPosition()));
}
return config;
}

View File

@@ -74,6 +74,7 @@ import com.android.settings.ProxySelector;
import com.android.settings.R;
import com.android.settings.network.SubscriptionUtil;
import com.android.settings.utils.AndroidKeystoreAliasLoader;
import com.android.settings.wifi.details2.WifiPrivacyPreferenceController;
import com.android.settings.wifi.details2.WifiPrivacyPreferenceController2;
import com.android.settings.wifi.dpp.WifiDppUtils;
import com.android.settingslib.Utils;
@@ -208,6 +209,8 @@ public class WifiConfigController2 implements TextWatcher,
private Spinner mHiddenSettingsSpinner;
@Nullable
private Spinner mPrivacySettingsSpinner;
@Nullable
private Spinner mDhcpSettingsSpinner;
private TextView mHiddenWarningView;
private TextView mProxyHostView;
private TextView mProxyPortView;
@@ -308,6 +311,7 @@ public class WifiConfigController2 implements TextWatcher,
mHiddenSettingsSpinner = mView.findViewById(R.id.hidden_settings);
if (!mHideMeteredAndPrivacy && mWifiManager.isConnectedMacRandomizationSupported()) {
mPrivacySettingsSpinner = mView.findViewById(R.id.privacy_settings);
mDhcpSettingsSpinner = mView.findViewById(R.id.dhcp_settings);
mView.findViewById(R.id.privacy_settings_fields).setVisibility(View.VISIBLE);
}
mHiddenSettingsSpinner.setOnItemSelectedListener(this);
@@ -342,6 +346,13 @@ public class WifiConfigController2 implements TextWatcher,
mPrivacySettingsSpinner.setSelection(prefMacValue);
}
if (mDhcpSettingsSpinner != null) {
final int prefDhcpValue = WifiPrivacyPreferenceController.Companion
.translateSendDhcpHostnameEnabledToPrefValue(
config.isSendDhcpHostnameEnabled());
mDhcpSettingsSpinner.setSelection(prefDhcpValue);
}
if (config.getIpConfiguration().getIpAssignment() == IpAssignment.STATIC) {
mIpSettingsSpinner.setSelection(STATIC_IP);
showAdvancedFields = true;
@@ -854,6 +865,12 @@ public class WifiConfigController2 implements TextWatcher,
.getSelectedItemPosition());
}
if (mDhcpSettingsSpinner != null) {
config.setSendDhcpHostnameEnabled(WifiPrivacyPreferenceController.Companion
.translatePrefValueToSendDhcpHostnameEnabled(mDhcpSettingsSpinner
.getSelectedItemPosition()));
}
return config;
}

View File

@@ -63,4 +63,32 @@ class WifiPrivacyPreferenceController(context: Context, preferenceKey: String) :
}
})
}
companion object {
private const val PREF_SEND_DHCP_HOST_NAME_ENABLE = 0
private const val PREF_SEND_DHCP_HOST_NAME_DISABLE = 1
/**
* Returns preference index value.
*
* @param isSendDhcpHostnameEnabled determines whether device name can be sent.
* @return index value of preference
*/
fun translateSendDhcpHostnameEnabledToPrefValue(
isSendDhcpHostnameEnabled: Boolean
): Int {
return if (isSendDhcpHostnameEnabled) PREF_SEND_DHCP_HOST_NAME_ENABLE
else PREF_SEND_DHCP_HOST_NAME_DISABLE
}
/**
* Returns whether device name can be sent.
*
* @param prefDhcpRandomized is preference index value
* @return is send dhcp host name enabled
*/
fun translatePrefValueToSendDhcpHostnameEnabled(prefDhcpRandomized: Int): Boolean {
return prefDhcpRandomized == PREF_SEND_DHCP_HOST_NAME_ENABLE
}
}
}

View File

@@ -16,6 +16,7 @@
package com.android.settings.wifi;
import static com.android.settings.wifi.WifiConfigController.DHCP_SPINNER_INDEX_SEND_DHCP_HOST_NAME_DISABLE;
import static com.android.settings.wifi.WifiConfigController2.DEFAULT_ANONYMOUS_ID;
import static com.android.settings.wifi.WifiConfigController2.WIFI_EAP_METHOD_SIM;
@@ -56,6 +57,7 @@ import android.widget.TextView;
import com.android.settings.R;
import com.android.settings.network.SubscriptionUtil;
import com.android.settings.utils.AndroidKeystoreAliasLoader;
import com.android.settings.wifi.details2.WifiPrivacyPreferenceController;
import com.android.settings.wifi.details2.WifiPrivacyPreferenceController2;
import com.android.wifitrackerlib.WifiEntry;
@@ -512,6 +514,42 @@ public class WifiConfigController2Test {
assertThat(config.macRandomizationSetting).isEqualTo(WifiConfiguration.RANDOMIZATION_NONE);
}
@Test
public void loadSavedDhcpValue_true() {
checkSavedDhcpValue(true);
}
@Test
public void loadSavedDhcpValue_false() {
checkSavedDhcpValue(false);
}
private void checkSavedDhcpValue(boolean dhcpValue) {
when(mWifiEntry.isSaved()).thenReturn(true);
final WifiConfiguration mockWifiConfig = mock(WifiConfiguration.class);
when(mockWifiConfig.getIpConfiguration()).thenReturn(mock(IpConfiguration.class));
when(mockWifiConfig.isSendDhcpHostnameEnabled()).thenReturn(dhcpValue);
when(mWifiEntry.getWifiConfiguration()).thenReturn(mockWifiConfig);
createController(mWifiEntry, WifiConfigUiBase2.MODE_CONNECT, false);
final Spinner dhcpSetting = mView.findViewById(R.id.dhcp_settings);
final int expectedPrefValue =
WifiPrivacyPreferenceController.Companion
.translateSendDhcpHostnameEnabledToPrefValue(dhcpValue);
assertThat(dhcpSetting.getVisibility()).isEqualTo(View.VISIBLE);
assertThat(dhcpSetting.getSelectedItemPosition()).isEqualTo(expectedPrefValue);
}
@Test
public void saveDhcpValue_changedToFalse() {
createController(mWifiEntry, WifiConfigUiBase2.MODE_CONNECT, false);
final Spinner privacySetting = mView.findViewById(R.id.dhcp_settings);
privacySetting.setSelection(DHCP_SPINNER_INDEX_SEND_DHCP_HOST_NAME_DISABLE);
WifiConfiguration config = mController.getConfig();
assertThat(config.isSendDhcpHostnameEnabled()).isEqualTo(false);
}
@Test
public void replaceTtsString_whenTargetMatched_shouldSuccess() {
createController(mWifiEntry, WifiConfigUiBase2.MODE_CONNECT, false);

View File

@@ -18,6 +18,8 @@ package com.android.settings.wifi;
import static com.android.settings.wifi.WifiConfigController.PRIVACY_SPINNER_INDEX_DEVICE_MAC;
import static com.android.settings.wifi.WifiConfigController.PRIVACY_SPINNER_INDEX_RANDOMIZED_MAC;
import static com.android.settings.wifi.WifiConfigController.DHCP_SPINNER_INDEX_SEND_DHCP_HOST_NAME_ENABLE;
import static com.android.settings.wifi.WifiConfigController.DHCP_SPINNER_INDEX_SEND_DHCP_HOST_NAME_DISABLE;
import static com.google.common.truth.Truth.assertThat;
@@ -450,6 +452,41 @@ public class WifiConfigControllerTest {
assertThat(config.macRandomizationSetting).isEqualTo(WifiConfiguration.RANDOMIZATION_NONE);
}
@Test
public void loadSavedDhcpValue_true() {
checkSavedDhcpValue(true);
}
@Test
public void loadSavedDhcpValue_false() {
checkSavedDhcpValue(false);
}
private void checkSavedDhcpValue(boolean dhcpValue) {
when(mAccessPoint.isSaved()).thenReturn(true);
final WifiConfiguration mockWifiConfig = mock(WifiConfiguration.class);
when(mockWifiConfig.getIpConfiguration()).thenReturn(mock(IpConfiguration.class));
when(mockWifiConfig.isSendDhcpHostnameEnabled()).thenReturn(dhcpValue);
when(mAccessPoint.getConfig()).thenReturn(mockWifiConfig);
mController = new TestWifiConfigController(mConfigUiBase, mView, mAccessPoint,
WifiConfigUiBase.MODE_CONNECT);
final Spinner dhcpSetting = mView.findViewById(R.id.dhcp_settings);
assertThat(dhcpSetting.getVisibility()).isEqualTo(View.VISIBLE);
assertThat(dhcpSetting.getSelectedItemPosition()).isEqualTo(
dhcpValue ? DHCP_SPINNER_INDEX_SEND_DHCP_HOST_NAME_ENABLE :
DHCP_SPINNER_INDEX_SEND_DHCP_HOST_NAME_DISABLE);
}
@Test
public void saveDhcpValue_changedToFalse() {
final Spinner privacySetting = mView.findViewById(R.id.dhcp_settings);
privacySetting.setSelection(DHCP_SPINNER_INDEX_SEND_DHCP_HOST_NAME_DISABLE);
WifiConfiguration config = mController.getConfig();
assertThat(config.isSendDhcpHostnameEnabled()).isEqualTo(false);
}
@Test
public void replaceTtsString_whenTargetMatched_shouldSuccess() {
final CharSequence[] display = {"PEAP", "AKA1", "AKA2'"};