Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d830acf6 authored by Chaohui Wang's avatar Chaohui Wang
Browse files

Send initial status for wifiStateFlow

To make sure this flow is never empty, use unknown as default.

Fix: 383050153
Flag: EXEMPT bug fix
Test: manual - on Network & internet
Test: unit test
Change-Id: Iaa421749ab917ebc651a95ccdf1a4ab1cb9ba112
parent 18fe317f
Loading
Loading
Loading
Loading
+8 −5
Original line number Diff line number Diff line
@@ -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,10 +33,12 @@ class WifiRepository(
        context.broadcastReceiverFlow(IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION)),
) {

    fun wifiStateFlow() = wifiStateChangedActionFlow
    fun wifiStateFlow(): Flow<Int> =
        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 {
+18 −8
Original line number Diff line number Diff line
@@ -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 {
    @Test
    fun wifiStateFlow_enabled() = runBlocking {
        val wifiStateChangedIntent =
            Intent().apply {
                putExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_ENABLED)
    })
            }
        val repository = WifiRepository(context, flowOf(wifiStateChangedIntent))

    private val repository = WifiRepository(context, mockWifiStateChangedActionFlow)
        val wifiState = repository.wifiStateFlow().lastWithTimeoutOrNull()

        assertThat(wifiState).isEqualTo(WifiManager.WIFI_STATE_ENABLED)
    }

    @Test
    fun wifiStateFlow() = runBlocking {
        val wifiState = repository.wifiStateFlow().firstWithTimeoutOrNull()
    fun wifiStateFlow_unknown() = runBlocking {
        val repository = WifiRepository(context, emptyFlow())

        assertThat(wifiState).isEqualTo(WifiManager.WIFI_STATE_ENABLED)
        val wifiState = repository.wifiStateFlow().lastWithTimeoutOrNull()

        assertThat(wifiState).isEqualTo(WifiManager.WIFI_STATE_UNKNOWN)
    }
}