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.activity.viewModels
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen 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.fragment.NavHostFragment
import androidx.navigation.ui.AppBarConfiguration import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.NavigationUI 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.fragments.HomeFragmentDirections
import dev.jdtech.jellyfin.utils.loadDownloadLocation import dev.jdtech.jellyfin.utils.loadDownloadLocation
import dev.jdtech.jellyfin.viewmodels.MainViewModel import dev.jdtech.jellyfin.viewmodels.MainViewModel
import kotlinx.coroutines.launch
@AndroidEntryPoint @AndroidEntryPoint
class MainActivity : AppCompatActivity() { class MainActivity : AppCompatActivity() {
@ -62,10 +66,13 @@ class MainActivity : AppCompatActivity() {
loadDownloadLocation(applicationContext) loadDownloadLocation(applicationContext)
viewModel.navigateToAddServer.observe(this) { lifecycleScope.launch {
if (it) { repeatOnLifecycle(Lifecycle.State.STARTED) {
navController.navigate(HomeFragmentDirections.actionHomeFragmentToAddServerFragment()) viewModel.onNavigateToAddServer(lifecycleScope) {
viewModel.doneNavigateToAddServer() if (it) {
navController.navigate(HomeFragmentDirections.actionHomeFragmentToAddServerFragment())
}
}
} }
} }
} }

View file

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

View file

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