From 8ef68fb1fcea117f9c32fdad9d3c84b6604c88ee Mon Sep 17 00:00:00 2001 From: Charlotte Lu Date: Mon, 8 Jan 2024 15:55:44 +0800 Subject: [PATCH] Add WEPNetworksPreferenceController. Test: Visual Test Fix: 317453032 Change-Id: Ifce83ffa32eeb0d1245b7c5e61c3cad3f85fa14e --- res/xml/wifi_configure_settings.xml | 5 + .../wifi/WepNetworksPreferenceController.kt | 86 ++++++++++++ .../WepNetworksPreferenceControllerTest.kt | 125 ++++++++++++++++++ 3 files changed, 216 insertions(+) create mode 100644 src/com/android/settings/wifi/WepNetworksPreferenceController.kt create mode 100644 tests/spa_unit/src/com/android/settings/wifi/WepNetworksPreferenceControllerTest.kt 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