diff --git a/src/com/android/settings/wifi/repository/WifiRepository.kt b/src/com/android/settings/wifi/repository/WifiRepository.kt index 77f0b1b47cf..39bf1aaec07 100644 --- a/src/com/android/settings/wifi/repository/WifiRepository.kt +++ b/src/com/android/settings/wifi/repository/WifiRepository.kt @@ -25,6 +25,7 @@ import com.android.settingslib.spaprivileged.framework.common.broadcastReceiverF import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.onStart class WifiRepository( private val context: Context, @@ -32,11 +33,13 @@ class WifiRepository( context.broadcastReceiverFlow(IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION)), ) { - fun wifiStateFlow() = wifiStateChangedActionFlow - .map { intent -> - intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN) - } - .onEach { Log.d(TAG, "wifiStateFlow: $it") } + fun wifiStateFlow(): Flow = + wifiStateChangedActionFlow + .map { intent -> + intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN) + } + .onStart { emit(WifiManager.WIFI_STATE_UNKNOWN) } + .onEach { Log.d(TAG, "wifiStateFlow: $it") } private companion object { private const val TAG = "WifiRepository" diff --git a/tests/spa_unit/src/com/android/settings/wifi/repository/WifiRepositoryTest.kt b/tests/spa_unit/src/com/android/settings/wifi/repository/WifiRepositoryTest.kt index dae3617c37e..f39e70d9322 100644 --- a/tests/spa_unit/src/com/android/settings/wifi/repository/WifiRepositoryTest.kt +++ b/tests/spa_unit/src/com/android/settings/wifi/repository/WifiRepositoryTest.kt @@ -21,8 +21,9 @@ import android.content.Intent import android.net.wifi.WifiManager import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 -import com.android.settingslib.spa.testutils.firstWithTimeoutOrNull +import com.android.settingslib.spa.testutils.lastWithTimeoutOrNull import com.google.common.truth.Truth.assertThat +import kotlinx.coroutines.flow.emptyFlow import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.runBlocking import org.junit.Test @@ -33,16 +34,25 @@ class WifiRepositoryTest { private val context: Context = ApplicationProvider.getApplicationContext() - private val mockWifiStateChangedActionFlow = flowOf(Intent().apply { - putExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_ENABLED) - }) - - private val repository = WifiRepository(context, mockWifiStateChangedActionFlow) - @Test - fun wifiStateFlow() = runBlocking { - val wifiState = repository.wifiStateFlow().firstWithTimeoutOrNull() + fun wifiStateFlow_enabled() = runBlocking { + val wifiStateChangedIntent = + Intent().apply { + putExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_ENABLED) + } + val repository = WifiRepository(context, flowOf(wifiStateChangedIntent)) + + val wifiState = repository.wifiStateFlow().lastWithTimeoutOrNull() assertThat(wifiState).isEqualTo(WifiManager.WIFI_STATE_ENABLED) } + + @Test + fun wifiStateFlow_unknown() = runBlocking { + val repository = WifiRepository(context, emptyFlow()) + + val wifiState = repository.wifiStateFlow().lastWithTimeoutOrNull() + + assertThat(wifiState).isEqualTo(WifiManager.WIFI_STATE_UNKNOWN) + } }