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.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 {
|
||||||
|
repeatOnLifecycle(Lifecycle.State.STARTED) {
|
||||||
|
viewModel.onNavigateToAddServer(lifecycleScope) {
|
||||||
if (it) {
|
if (it) {
|
||||||
navController.navigate(HomeFragmentDirections.actionHomeFragmentToAddServerFragment())
|
navController.navigate(HomeFragmentDirections.actionHomeFragmentToAddServerFragment())
|
||||||
viewModel.doneNavigateToAddServer()
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
||||||
|
repeatOnLifecycle(Lifecycle.State.STARTED) {
|
||||||
|
viewModel.onNavigateToAddServer(lifecycleScope) {
|
||||||
if (it) {
|
if (it) {
|
||||||
navController.navigate(HomeFragmentDirections.actionHomeFragmentToAddServerFragment())
|
navController.navigate(HomeFragmentDirections.actionHomeFragmentToAddServerFragment())
|
||||||
viewModel.doneNavigateToAddServer()
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
|
||||||
}
|
|
||||||
}
|
}
|
Loading…
Reference in a new issue