diff --git a/vector/src/main/java/im/vector/app/features/MainActivity.kt b/vector/src/main/java/im/vector/app/features/MainActivity.kt index f160e77aa0..805a52958a 100644 --- a/vector/src/main/java/im/vector/app/features/MainActivity.kt +++ b/vector/src/main/java/im/vector/app/features/MainActivity.kt @@ -21,6 +21,7 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.os.Parcelable +import androidx.core.view.isVisible import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import com.airbnb.mvrx.viewModel @@ -49,6 +50,7 @@ import im.vector.app.features.signout.hard.SignedOutActivity import im.vector.app.features.start.StartAppAction import im.vector.app.features.start.StartAppViewEvent import im.vector.app.features.start.StartAppViewModel +import im.vector.app.features.start.StartAppViewState import im.vector.app.features.themes.ActivityOtherThemes import im.vector.app.features.ui.UiStateRepository import kotlinx.coroutines.Dispatchers @@ -127,6 +129,9 @@ class MainActivity : VectorBaseActivity(), UnlockedActivity override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + startAppViewModel.onEach { + renderState(it) + } startAppViewModel.viewEvents.stream() .onEach(::handleViewEvents) .launchIn(lifecycleScope) @@ -134,6 +139,13 @@ class MainActivity : VectorBaseActivity(), UnlockedActivity startAppViewModel.handle(StartAppAction.StartApp) } + private fun renderState(state: StartAppViewState) { + if (state.duration > 0) { + views.status.setText(R.string.updating_your_data) + } + views.status.isVisible = state.duration > 0 + } + private fun handleViewEvents(event: StartAppViewEvent) { when (event) { StartAppViewEvent.AppStarted -> handleAppStarted() diff --git a/vector/src/main/java/im/vector/app/features/start/StartAppViewModel.kt b/vector/src/main/java/im/vector/app/features/start/StartAppViewModel.kt index eeec52283d..b66a072195 100644 --- a/vector/src/main/java/im/vector/app/features/start/StartAppViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/start/StartAppViewModel.kt @@ -24,8 +24,12 @@ import im.vector.app.core.di.ActiveSessionSetter import im.vector.app.core.di.MavericksAssistedViewModelFactory import im.vector.app.core.di.hiltMavericksViewModelFactory import im.vector.app.core.platform.VectorViewModel +import im.vector.lib.core.utils.flow.tickerFlow import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch +import kotlin.time.Duration.Companion.seconds class StartAppViewModel @AssistedInject constructor( @Assisted val initialState: StartAppViewState, @@ -50,10 +54,20 @@ class StartAppViewModel @AssistedInject constructor( } private fun handleStartApp() { + startTimer() viewModelScope.launch(Dispatchers.IO) { // This can take time because of DB migration(s), so do it in a background task. activeSessionSetter.tryToSetActiveSession(startSync = true) _viewEvents.post(StartAppViewEvent.AppStarted) } } + + private fun startTimer() { + setState { copy(duration = 0) } + tickerFlow(viewModelScope, 1.seconds.inWholeMilliseconds) + .onEach { + setState { copy(duration = duration + 1) } + } + .launchIn(viewModelScope) + } } diff --git a/vector/src/main/res/layout/activity_main.xml b/vector/src/main/res/layout/activity_main.xml index c7bca50acb..ba5925f000 100644 --- a/vector/src/main/res/layout/activity_main.xml +++ b/vector/src/main/res/layout/activity_main.xml @@ -1,5 +1,4 @@ - - + + diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index ed0cf691e2..cf844d29b0 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -1625,6 +1625,7 @@ No network. Please check your Internet connection. "Change network" "Please wait…" + Updating your data… "All Communities"