diff --git a/app/src/main/java/dev/jdtech/jellyfin/MainActivity.kt b/app/src/main/java/dev/jdtech/jellyfin/MainActivity.kt index d0f6f975..7d3e158a 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/MainActivity.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/MainActivity.kt @@ -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()) + } + } } } } diff --git a/app/src/main/java/dev/jdtech/jellyfin/MainActivityTv.kt b/app/src/main/java/dev/jdtech/jellyfin/MainActivityTv.kt index 22848b10..60768872 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/MainActivityTv.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/MainActivityTv.kt @@ -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()) + } + } } } } diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/MainViewModel.kt b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/MainViewModel.kt index 38e2921a..6258186e 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/MainViewModel.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/MainViewModel.kt @@ -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() - val navigateToAddServer: LiveData = _navigateToAddServer + private val navigateToAddServer = MutableSharedFlow() + + 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 - } } \ No newline at end of file