summaryrefslogtreecommitdiffhomepage
path: root/android/app/src
diff options
context:
space:
mode:
authorDavid Göransson <david.goransson@mullvad.net>2024-08-01 13:51:18 +0200
committerDavid Göransson <david.goransson@mullvad.net>2024-08-01 13:52:30 +0200
commit8351f4459e4c94253e308611564f7b0063e6b446 (patch)
tree206606f1fd9bd7861a39f557117facc921aefbde /android/app/src
parentf4ca8a3c591748b1d49f82b1276617dfcfc31dca (diff)
downloadmullvadvpn-8351f4459e4c94253e308611564f7b0063e6b446.tar.xz
mullvadvpn-8351f4459e4c94253e308611564f7b0063e6b446.zip
Fix splash screen freeze
Diffstat (limited to 'android/app/src')
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/MullvadApp.kt2
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt19
2 files changed, 21 insertions, 0 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/MullvadApp.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/MullvadApp.kt
index 9827c45a92..ac54689c35 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/MullvadApp.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/MullvadApp.kt
@@ -9,6 +9,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.semantics.testTagsAsResourceId
import androidx.navigation.NavHostController
+import co.touchlab.kermit.Logger
import com.ramcosta.composedestinations.DestinationsNavHost
import com.ramcosta.composedestinations.generated.NavGraphs
import com.ramcosta.composedestinations.generated.destinations.ChangelogDestination
@@ -56,6 +57,7 @@ fun MullvadApp() {
// Globally handle daemon dropped connection with NoDaemonScreen
LaunchedEffectCollect(serviceVm.uiSideEffect) {
+ Logger.i { "DaemonScreenEvent: $it" }
when (it) {
DaemonScreenEvent.Show ->
navigator.navigate(NoDaemonDestination) { launchSingleTop = true }
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt
index d4bcf3776a..a4ae131139 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt
@@ -10,11 +10,15 @@ import androidx.core.view.WindowCompat
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
+import kotlinx.coroutines.flow.filter
+import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch
import net.mullvad.mullvadvpn.compose.screen.MullvadApp
import net.mullvad.mullvadvpn.di.paymentModule
import net.mullvad.mullvadvpn.di.uiModule
import net.mullvad.mullvadvpn.lib.common.util.SdkUtils.requestNotificationPermissionIfMissing
+import net.mullvad.mullvadvpn.lib.daemon.grpc.GrpcConnectivityState
+import net.mullvad.mullvadvpn.lib.daemon.grpc.ManagementService
import net.mullvad.mullvadvpn.lib.intent.IntentProvider
import net.mullvad.mullvadvpn.lib.theme.AppTheme
import net.mullvad.mullvadvpn.repository.PrivacyDisclaimerRepository
@@ -40,6 +44,7 @@ class MainActivity : ComponentActivity(), AndroidScopeComponent {
private val privacyDisclaimerRepository by inject<PrivacyDisclaimerRepository>()
private val serviceConnectionManager by inject<ServiceConnectionManager>()
private val splashCompleteRepository by inject<SplashCompleteRepository>()
+ private val managementService by inject<ManagementService>()
private var isReadyNextDraw: Boolean = false
@@ -79,6 +84,20 @@ class MainActivity : ComponentActivity(), AndroidScopeComponent {
}
}
+ override fun onRestoreInstanceState(savedInstanceState: Bundle) {
+ super.onRestoreInstanceState(savedInstanceState)
+ lifecycleScope.launch {
+ if (privacyDisclaimerRepository.hasAcceptedPrivacyDisclosure()) {
+ // If service is to be started wait for it to be connected before dismissing Splash
+ // screen
+ managementService.connectionState
+ .filter { it is GrpcConnectivityState.Ready }
+ .first()
+ }
+ splashCompleteRepository.onSplashCompleted()
+ }
+ }
+
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
intentProvider.setStartIntent(intent)