Use repeatOnLifecycle api in MainActivity

This commit is contained in:
Jarne Demeulemeester 2022-07-03 14:57:46 +02:00
parent 2b2041c569
commit 8e4c8d1f13
No known key found for this signature in database
GPG key ID: 65C6006F2032DD14
3 changed files with 30 additions and 17 deletions

View file

@ -5,6 +5,9 @@ import android.view.View
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import androidx.navigation.fragment.NavHostFragment
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.NavigationUI
@ -15,6 +18,7 @@ import dev.jdtech.jellyfin.databinding.ActivityMainAppBinding
import dev.jdtech.jellyfin.fragments.HomeFragmentDirections
import dev.jdtech.jellyfin.utils.loadDownloadLocation
import dev.jdtech.jellyfin.viewmodels.MainViewModel
import kotlinx.coroutines.launch
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
@ -62,10 +66,13 @@ class MainActivity : AppCompatActivity() {
loadDownloadLocation(applicationContext)
viewModel.navigateToAddServer.observe(this) {
if (it) {
navController.navigate(HomeFragmentDirections.actionHomeFragmentToAddServerFragment())
viewModel.doneNavigateToAddServer()
lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.STARTED) {
viewModel.onNavigateToAddServer(lifecycleScope) {
if (it) {
navController.navigate(HomeFragmentDirections.actionHomeFragmentToAddServerFragment())
}
}
}
}
}

View file

@ -3,12 +3,16 @@ package dev.jdtech.jellyfin
import android.os.Bundle
import androidx.activity.viewModels
import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import androidx.navigation.fragment.NavHostFragment
import dagger.hilt.android.AndroidEntryPoint
import dev.jdtech.jellyfin.databinding.ActivityMainTvBinding
import dev.jdtech.jellyfin.tv.ui.HomeFragmentDirections
import dev.jdtech.jellyfin.utils.loadDownloadLocation
import dev.jdtech.jellyfin.viewmodels.MainViewModel
import kotlinx.coroutines.launch
@AndroidEntryPoint
internal class MainActivityTv : FragmentActivity() {
@ -27,10 +31,13 @@ internal class MainActivityTv : FragmentActivity() {
loadDownloadLocation(applicationContext)
viewModel.navigateToAddServer.observe(this) {
if (it) {
navController.navigate(HomeFragmentDirections.actionHomeFragmentToAddServerFragment())
viewModel.doneNavigateToAddServer()
lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.STARTED) {
viewModel.onNavigateToAddServer(lifecycleScope) {
if (it) {
navController.navigate(HomeFragmentDirections.actionHomeFragmentToAddServerFragment())
}
}
}
}
}

View file

@ -1,13 +1,13 @@
package dev.jdtech.jellyfin.viewmodels
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.LifecycleCoroutineScope
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
import dev.jdtech.jellyfin.database.Server
import dev.jdtech.jellyfin.database.ServerDatabaseDao
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import timber.log.Timber
@ -19,8 +19,11 @@ class MainViewModel
constructor(
private val database: ServerDatabaseDao,
) : ViewModel() {
private val _navigateToAddServer = MutableLiveData<Boolean>()
val navigateToAddServer: LiveData<Boolean> = _navigateToAddServer
private val navigateToAddServer = MutableSharedFlow<Boolean>()
fun onNavigateToAddServer(scope: LifecycleCoroutineScope, collector: (Boolean) -> Unit) {
scope.launch { navigateToAddServer.collect { collector(it) } }
}
init {
Timber.d("Start Main")
@ -30,12 +33,8 @@ constructor(
servers = database.getAllServersSync()
}
if (servers.isEmpty()) {
_navigateToAddServer.value = true
navigateToAddServer.emit(true)
}
}
}
fun doneNavigateToAddServer() {
_navigateToAddServer.value = false
}
}