Skip to content
Snippets Groups Projects
Verified Commit c16e1cdd authored by Sebastian's avatar Sebastian
Browse files

Do not do UI work while receiving hasDb and not started

parent 20be1411
No related branches found
No related tags found
1 merge request!118Do not do UI work while receiving hasDb and not started
Pipeline #11864 passed
......@@ -29,6 +29,9 @@ import android.text.format.DateUtils.FORMAT_SHOW_DATE
import android.text.format.DateUtils.WEEK_IN_MILLIS
import android.text.format.DateUtils.getRelativeDateTimeString
import android.text.format.DateUtils.getRelativeTimeSpanString
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.LiveData
import androidx.lifecycle.Observer
import org.briarproject.mailbox.R
object UiUtils {
......@@ -51,4 +54,16 @@ object UiUtils {
else -> getRelativeTimeSpanString(time, now, MIN_DATE_RESOLUTION, flags).toString()
}
}
fun <T> LiveData<T>.observeOnce(lifecycleOwner: LifecycleOwner, observer: Observer<T>) {
observe(
lifecycleOwner,
object : Observer<T> {
override fun onChanged(t: T?) {
observer.onChanged(t)
removeObserver(this)
}
}
)
}
}
......@@ -25,6 +25,7 @@ import androidx.activity.viewModels
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Lifecycle.State.DESTROYED
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
......@@ -52,6 +53,7 @@ import org.briarproject.mailbox.android.StatusManager.Starting
import org.briarproject.mailbox.android.StatusManager.Stopped
import org.briarproject.mailbox.android.StatusManager.Stopping
import org.briarproject.mailbox.android.StatusManager.Wiping
import org.briarproject.mailbox.android.UiUtils.observeOnce
import org.briarproject.mailbox.core.lifecycle.LifecycleManager.LifecycleState.NOT_STARTED
import org.briarproject.mailbox.core.util.LogUtils.info
import org.slf4j.LoggerFactory.getLogger
......@@ -95,17 +97,21 @@ class MainActivity : AppCompatActivity() {
LOG.info { "do we have a saved instance state? " + (savedInstanceState != null) }
lifecycleScope.launch {
val hasDb = viewModel.hasDb()
val haveDb = MutableLiveData<Boolean>()
haveDb.observeOnce(this) { hasDb ->
val hadBeenStartedOnSave =
savedInstanceState?.getBoolean(BUNDLE_LIFECYCLE_HAS_STARTED) ?: false
LOG.info { "do we have a db? $hasDb, had been started on save: $hadBeenStartedOnSave" }
onDbChecked(hasDb, hadBeenStartedOnSave)
launchAndRepeatWhileStarted {
viewModel.appState.collect { onAppStateChanged(it) }
}
}
lifecycleScope.launch {
haveDb.value = viewModel.hasDb()
}
}
private fun onAppStateChanged(state: MailboxAppState) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment