From c9069badf9f9ba49a9cb62e65d59ba8181dcd336 Mon Sep 17 00:00:00 2001 From: Oussama Hassine Date: Fri, 5 Apr 2024 15:17:31 +0200 Subject: [PATCH] fix: run observers on workers thread to avoid ANRs (WPB-6051) (#2857) --- .../com/wire/android/ui/WireActivity.kt | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/app/src/main/kotlin/com/wire/android/ui/WireActivity.kt b/app/src/main/kotlin/com/wire/android/ui/WireActivity.kt index aa29d1a9667..a8fe5eba5c6 100644 --- a/app/src/main/kotlin/com/wire/android/ui/WireActivity.kt +++ b/app/src/main/kotlin/com/wire/android/ui/WireActivity.kt @@ -38,7 +38,6 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.runtime.rememberUpdatedState import androidx.compose.runtime.staticCompositionLocalOf -import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalSoftwareKeyboardController @@ -107,14 +106,15 @@ import com.wire.android.util.deeplink.DeepLinkResult import com.wire.android.util.ui.updateScreenSettings import dagger.Lazy import dagger.hilt.android.AndroidEntryPoint +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.onSubscription import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import javax.inject.Inject -@OptIn(ExperimentalComposeUiApi::class) @AndroidEntryPoint @Suppress("TooManyFunctions") class WireActivity : AppCompatActivity() { @@ -157,7 +157,7 @@ class WireActivity : AppCompatActivity() { appLogger.i("$TAG proximity sensor") proximitySensorManager.initialize() - lifecycleScope.launch { + lifecycleScope.launch(Dispatchers.Default) { appLogger.i("$TAG persistent connection status") viewModel.observePersistentConnectionStatus() @@ -173,10 +173,12 @@ class WireActivity : AppCompatActivity() { InitialAppState.LOGGED_IN -> HomeScreenDestination } appLogger.i("$TAG composable content") - setComposableContent(startDestination) { - appLogger.i("$TAG splash hide") - shouldKeepSplashOpen = false - handleDeepLink(intent, savedInstanceState) + withContext(Dispatchers.Main) { + setComposableContent(startDestination) { + appLogger.i("$TAG splash hide") + shouldKeepSplashOpen = false + handleDeepLink(intent, savedInstanceState) + } } } } @@ -464,15 +466,17 @@ class WireActivity : AppCompatActivity() { override fun onResume() { super.onResume() - lifecycleScope.launch { + lifecycleScope.launch(Dispatchers.Default) { lockCodeTimeManager.get().observeAppLock() // Listen to one flow in a lifecycle-aware manner using flowWithLifecycle .flowWithLifecycle(lifecycle, Lifecycle.State.STARTED) .first().let { if (it) { - startActivity( - Intent(this@WireActivity, AppLockActivity::class.java) - ) + withContext(Dispatchers.Main) { + startActivity( + Intent(this@WireActivity, AppLockActivity::class.java) + ) + } } } }