Use repeatOnLifecycle api in MainActivity
This commit is contained in:
parent
2b2041c569
commit
8e4c8d1f13
3 changed files with 30 additions and 17 deletions
|
@ -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())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue