Loading packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/framework/compose/DisposableBroadcastReceiverAsUser.kt +5 −4 Original line number Diff line number Diff line Loading @@ -21,9 +21,8 @@ import android.content.Intent import android.content.IntentFilter import android.os.UserHandle import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalLifecycleOwner import com.android.settingslib.spa.framework.util.collectLatestWithLifecycle import com.android.settingslib.spaprivileged.framework.common.broadcastReceiverAsUserFlow /** Loading @@ -35,6 +34,8 @@ fun DisposableBroadcastReceiverAsUser( userHandle: UserHandle, onReceive: (Intent) -> Unit, ) { LocalContext.current.broadcastReceiverAsUserFlow(intentFilter, userHandle) .collectLatestWithLifecycle(LocalLifecycleOwner.current, action = onReceive) val context = LocalContext.current LaunchedEffect(Unit) { context.broadcastReceiverAsUserFlow(intentFilter, userHandle).collect(onReceive) } } packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/framework/compose/DisposableBroadcastReceiverAsUserTest.kt +46 −26 Original line number Diff line number Diff line Loading @@ -22,10 +22,11 @@ import android.content.Intent import android.content.IntentFilter import android.os.UserHandle import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.test.junit4.createComposeRule import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.lifecycle.testing.TestLifecycleOwner import androidx.test.ext.junit.runners.AndroidJUnit4 import org.junit.Rule import org.junit.Test Loading @@ -38,12 +39,12 @@ import org.mockito.kotlin.mock @RunWith(AndroidJUnit4::class) class DisposableBroadcastReceiverAsUserTest { @get:Rule val composeTestRule = createComposeRule() @get:Rule val composeTestRule = createComposeRule() private var registeredBroadcastReceiver: BroadcastReceiver? = null private val context = mock<Context> { private val context = mock<Context> { on { registerReceiverAsUser( any(), Loading @@ -53,19 +54,24 @@ class DisposableBroadcastReceiverAsUserTest { isNull(), eq(Context.RECEIVER_NOT_EXPORTED), ) } doAnswer { } doAnswer { registeredBroadcastReceiver = it.arguments[0] as BroadcastReceiver null } on { unregisterReceiver(any()) } doAnswer { if (registeredBroadcastReceiver === it.arguments[0]) { registeredBroadcastReceiver = null } } } @Test fun broadcastReceiver_registered() { composeTestRule.setContent { CompositionLocalProvider( LocalContext provides context, LocalLifecycleOwner provides TestLifecycleOwner(), ) { CompositionLocalProvider(LocalContext provides context) { DisposableBroadcastReceiverAsUser(INTENT_FILTER, USER_HANDLE) {} } } Loading @@ -77,10 +83,7 @@ class DisposableBroadcastReceiverAsUserTest { fun broadcastReceiver_isCalledOnReceive() { var onReceiveIsCalled = false composeTestRule.setContent { CompositionLocalProvider( LocalContext provides context, LocalLifecycleOwner provides TestLifecycleOwner(), ) { CompositionLocalProvider(LocalContext provides context) { DisposableBroadcastReceiverAsUser(INTENT_FILTER, USER_HANDLE) { onReceiveIsCalled = true } Loading @@ -92,6 +95,23 @@ class DisposableBroadcastReceiverAsUserTest { composeTestRule.waitUntil { onReceiveIsCalled } } @Test fun broadcastReceiver_unregistered() { var isBroadcastReceiverRegistered by mutableStateOf(true) composeTestRule.setContent { if (isBroadcastReceiverRegistered) { CompositionLocalProvider(LocalContext provides context) { DisposableBroadcastReceiverAsUser(INTENT_FILTER, USER_HANDLE) {} } } } composeTestRule.waitUntil { registeredBroadcastReceiver != null } isBroadcastReceiverRegistered = false composeTestRule.waitUntil { registeredBroadcastReceiver == null } } private companion object { val USER_HANDLE: UserHandle = UserHandle.of(0) Loading Loading
packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/framework/compose/DisposableBroadcastReceiverAsUser.kt +5 −4 Original line number Diff line number Diff line Loading @@ -21,9 +21,8 @@ import android.content.Intent import android.content.IntentFilter import android.os.UserHandle import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalLifecycleOwner import com.android.settingslib.spa.framework.util.collectLatestWithLifecycle import com.android.settingslib.spaprivileged.framework.common.broadcastReceiverAsUserFlow /** Loading @@ -35,6 +34,8 @@ fun DisposableBroadcastReceiverAsUser( userHandle: UserHandle, onReceive: (Intent) -> Unit, ) { LocalContext.current.broadcastReceiverAsUserFlow(intentFilter, userHandle) .collectLatestWithLifecycle(LocalLifecycleOwner.current, action = onReceive) val context = LocalContext.current LaunchedEffect(Unit) { context.broadcastReceiverAsUserFlow(intentFilter, userHandle).collect(onReceive) } }
packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/framework/compose/DisposableBroadcastReceiverAsUserTest.kt +46 −26 Original line number Diff line number Diff line Loading @@ -22,10 +22,11 @@ import android.content.Intent import android.content.IntentFilter import android.os.UserHandle import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.test.junit4.createComposeRule import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.lifecycle.testing.TestLifecycleOwner import androidx.test.ext.junit.runners.AndroidJUnit4 import org.junit.Rule import org.junit.Test Loading @@ -38,12 +39,12 @@ import org.mockito.kotlin.mock @RunWith(AndroidJUnit4::class) class DisposableBroadcastReceiverAsUserTest { @get:Rule val composeTestRule = createComposeRule() @get:Rule val composeTestRule = createComposeRule() private var registeredBroadcastReceiver: BroadcastReceiver? = null private val context = mock<Context> { private val context = mock<Context> { on { registerReceiverAsUser( any(), Loading @@ -53,19 +54,24 @@ class DisposableBroadcastReceiverAsUserTest { isNull(), eq(Context.RECEIVER_NOT_EXPORTED), ) } doAnswer { } doAnswer { registeredBroadcastReceiver = it.arguments[0] as BroadcastReceiver null } on { unregisterReceiver(any()) } doAnswer { if (registeredBroadcastReceiver === it.arguments[0]) { registeredBroadcastReceiver = null } } } @Test fun broadcastReceiver_registered() { composeTestRule.setContent { CompositionLocalProvider( LocalContext provides context, LocalLifecycleOwner provides TestLifecycleOwner(), ) { CompositionLocalProvider(LocalContext provides context) { DisposableBroadcastReceiverAsUser(INTENT_FILTER, USER_HANDLE) {} } } Loading @@ -77,10 +83,7 @@ class DisposableBroadcastReceiverAsUserTest { fun broadcastReceiver_isCalledOnReceive() { var onReceiveIsCalled = false composeTestRule.setContent { CompositionLocalProvider( LocalContext provides context, LocalLifecycleOwner provides TestLifecycleOwner(), ) { CompositionLocalProvider(LocalContext provides context) { DisposableBroadcastReceiverAsUser(INTENT_FILTER, USER_HANDLE) { onReceiveIsCalled = true } Loading @@ -92,6 +95,23 @@ class DisposableBroadcastReceiverAsUserTest { composeTestRule.waitUntil { onReceiveIsCalled } } @Test fun broadcastReceiver_unregistered() { var isBroadcastReceiverRegistered by mutableStateOf(true) composeTestRule.setContent { if (isBroadcastReceiverRegistered) { CompositionLocalProvider(LocalContext provides context) { DisposableBroadcastReceiverAsUser(INTENT_FILTER, USER_HANDLE) {} } } } composeTestRule.waitUntil { registeredBroadcastReceiver != null } isBroadcastReceiverRegistered = false composeTestRule.waitUntil { registeredBroadcastReceiver == null } } private companion object { val USER_HANDLE: UserHandle = UserHandle.of(0) Loading