diff --git a/res/xml/wifi_configure_settings.xml b/res/xml/wifi_configure_settings.xml
index bf795d057d1..5866c5898d9 100644
--- a/res/xml/wifi_configure_settings.xml
+++ b/res/xml/wifi_configure_settings.xml
@@ -34,6 +34,11 @@
settings:keywords="@string/keywords_wifi_notify_open_networks"
settings:controller="com.android.settings.wifi.NotifyOpenNetworksPreferenceController"/>
+
+
Boolean
+ get() = { carrierAllowed }
+ override val onCheckedChange: (Boolean) -> Unit = { newChecked ->
+ wifiManager.setWepAllowed(newChecked)
+ wepAllowedFlow.override(newChecked)
+ }
+ })
+ }
+
+ override fun getSummary(): String = mContext.getString(
+ if (carrierAllowed) {
+ R.string.wifi_allow_wep_networks_summary
+ } else {
+ R.string.wifi_allow_wep_networks_summary_carrier_not_allow
+ }
+ )
+
+ private val carrierAllowed: Boolean
+ get() = wifiManager.isWepSupported
+
+ val wepAllowedFlow = OverridableFlow(callbackFlow {
+ wifiManager.queryWepAllowed(Dispatchers.Default.asExecutor(), ::trySend)
+
+ awaitClose { }
+ })
+}
\ No newline at end of file
diff --git a/tests/spa_unit/src/com/android/settings/wifi/WepNetworksPreferenceControllerTest.kt b/tests/spa_unit/src/com/android/settings/wifi/WepNetworksPreferenceControllerTest.kt
new file mode 100644
index 00000000000..994abbf5a60
--- /dev/null
+++ b/tests/spa_unit/src/com/android/settings/wifi/WepNetworksPreferenceControllerTest.kt
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2024 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.Context
+import android.net.wifi.WifiManager
+import androidx.compose.ui.test.assertIsOff
+import androidx.compose.ui.test.assertIsOn
+import androidx.compose.ui.test.junit4.createComposeRule
+import androidx.compose.ui.test.onNodeWithText
+import androidx.compose.ui.test.onRoot
+import androidx.compose.ui.test.performClick
+import androidx.preference.PreferenceManager
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.android.settings.R
+import com.android.settings.spa.preference.ComposePreference
+import java.util.function.Consumer
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.kotlin.any
+import org.mockito.kotlin.doAnswer
+import org.mockito.kotlin.doReturn
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.spy
+
+@RunWith(AndroidJUnit4::class)
+class WepNetworksPreferenceControllerTest {
+
+ @get:Rule
+ val composeTestRule = createComposeRule()
+
+ private var wepAllowed = true
+
+ private val mockWifiManager = mock {
+ on { queryWepAllowed(any(), any()) } doAnswer {
+ @Suppress("UNCHECKED_CAST")
+ val consumer = it.arguments[1] as Consumer
+ consumer.accept(wepAllowed)
+ }
+ on { it.isWepSupported } doReturn true
+ }
+
+ private var context: Context =
+ spy(ApplicationProvider.getApplicationContext()) {
+ on { getSystemService(WifiManager::class.java) } doReturn mockWifiManager
+ }
+ private var controller = WepNetworksPreferenceController(context, TEST_KEY)
+
+ private val preference = ComposePreference(context).apply { key = TEST_KEY }
+ private val preferenceScreen = PreferenceManager(context).createPreferenceScreen(context)
+
+
+ @Before
+ fun setUp() {
+ preferenceScreen.addPreference(preference)
+ controller.displayPreference(preferenceScreen)
+ }
+
+ @Test
+ fun wepAllowedTrue_turnOn() {
+ wepAllowed = true
+ composeTestRule.setContent {
+ controller.Content()
+ }
+ composeTestRule.onNodeWithText(context.getString(R.string.wifi_allow_wep_networks))
+ .assertIsOn()
+ }
+
+ @Test
+ fun wepAllowedFalse_turnOff() {
+ wepAllowed = false
+ composeTestRule.setContent {
+ controller.Content()
+ }
+ composeTestRule.onNodeWithText(context.getString(R.string.wifi_allow_wep_networks))
+ .assertIsOff()
+ }
+
+ @Test
+ fun onClick_turnOn() {
+ wepAllowed = false
+ composeTestRule.setContent {
+ controller.Content()
+ }
+
+ composeTestRule.onRoot().performClick()
+
+ composeTestRule.onNodeWithText(context.getString(R.string.wifi_allow_wep_networks))
+ .assertIsOn()
+ }
+
+ @Test
+ fun onClick_turnOff() {
+ wepAllowed = true
+ composeTestRule.setContent {
+ controller.Content()
+ }
+
+ composeTestRule.onRoot().performClick()
+
+ composeTestRule.onNodeWithText(context.getString(R.string.wifi_allow_wep_networks))
+ .assertIsOff()
+ }
+
+ private companion object {
+ const val TEST_KEY = "test_key"
+ }
+}
\ No newline at end of file