Move servers check to Activity (#136)
Remove MainViewModel Change startDestination when no servers are found
This commit is contained in:
parent
ba584473dd
commit
cc0ab920fd
5 changed files with 26 additions and 78 deletions
|
@ -114,7 +114,6 @@ private fun ImageView.loadImage(url: String, @DrawableRes errorPlaceHolderId: In
|
|||
.placeholder(R.color.neutral_800)
|
||||
.error(errorPlaceHolderId)
|
||||
.into(this)
|
||||
.view
|
||||
|
||||
return this
|
||||
}
|
||||
|
|
|
@ -2,30 +2,25 @@ package dev.jdtech.jellyfin
|
|||
|
||||
import android.os.Bundle
|
||||
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
|
||||
import androidx.navigation.ui.setupActionBarWithNavController
|
||||
import com.google.android.material.bottomnavigation.BottomNavigationView
|
||||
import com.google.android.material.navigation.NavigationBarView
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import dev.jdtech.jellyfin.database.ServerDatabaseDao
|
||||
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
|
||||
import javax.inject.Inject
|
||||
|
||||
@AndroidEntryPoint
|
||||
class MainActivity : AppCompatActivity() {
|
||||
|
||||
private lateinit var binding: ActivityMainAppBinding
|
||||
private val viewModel: MainViewModel by viewModels()
|
||||
@Inject
|
||||
lateinit var database: ServerDatabaseDao
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
installSplashScreen()
|
||||
|
@ -44,6 +39,14 @@ class MainActivity : AppCompatActivity() {
|
|||
|
||||
val navController = navHostFragment.navController
|
||||
|
||||
val nServers = database.getServersCount()
|
||||
if (nServers < 1) {
|
||||
val inflater = navController.navInflater
|
||||
val graph = inflater.inflate(R.navigation.app_navigation)
|
||||
graph.setStartDestination(R.id.addServerFragment)
|
||||
navController.setGraph(graph, intent.extras)
|
||||
}
|
||||
|
||||
// Passing each menu ID as a set of Ids because each
|
||||
// menu should be considered as top level destinations.
|
||||
val appBarConfiguration = AppBarConfiguration(
|
||||
|
@ -66,16 +69,6 @@ class MainActivity : AppCompatActivity() {
|
|||
}
|
||||
|
||||
loadDownloadLocation(applicationContext)
|
||||
|
||||
lifecycleScope.launch {
|
||||
repeatOnLifecycle(Lifecycle.State.STARTED) {
|
||||
viewModel.onNavigateToAddServer(lifecycleScope) {
|
||||
if (it) {
|
||||
navController.navigate(HomeFragmentDirections.actionHomeFragmentToAddServerFragment())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onSupportNavigateUp(): Boolean {
|
||||
|
|
|
@ -1,24 +1,20 @@
|
|||
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.database.ServerDatabaseDao
|
||||
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
|
||||
import javax.inject.Inject
|
||||
|
||||
@AndroidEntryPoint
|
||||
internal class MainActivityTv : FragmentActivity() {
|
||||
|
||||
private lateinit var binding: ActivityMainTvBinding
|
||||
private val viewModel: MainViewModel by viewModels()
|
||||
@Inject
|
||||
lateinit var database: ServerDatabaseDao
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
@ -28,17 +24,14 @@ internal class MainActivityTv : FragmentActivity() {
|
|||
val navHostFragment =
|
||||
supportFragmentManager.findFragmentById(R.id.tv_nav_host) as NavHostFragment
|
||||
val navController = navHostFragment.navController
|
||||
val nServers = database.getServersCount()
|
||||
if (nServers < 1) {
|
||||
val inflater = navController.navInflater
|
||||
val graph = inflater.inflate(R.navigation.tv_navigation)
|
||||
graph.setStartDestination(R.id.addServerTvFragment)
|
||||
navController.setGraph(graph, intent.extras)
|
||||
}
|
||||
|
||||
loadDownloadLocation(applicationContext)
|
||||
|
||||
lifecycleScope.launch {
|
||||
repeatOnLifecycle(Lifecycle.State.STARTED) {
|
||||
viewModel.onNavigateToAddServer(lifecycleScope) {
|
||||
if (it) {
|
||||
navController.navigate(HomeFragmentDirections.actionHomeFragmentToAddServerFragment())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -23,6 +23,9 @@ interface ServerDatabaseDao {
|
|||
@Query("select * from servers")
|
||||
fun getAllServersSync(): List<Server>
|
||||
|
||||
@Query("select count(*) from servers")
|
||||
fun getServersCount(): Int
|
||||
|
||||
@Query("delete from servers where id = :id")
|
||||
fun delete(id: String)
|
||||
}
|
|
@ -1,40 +0,0 @@
|
|||
package dev.jdtech.jellyfin.viewmodels
|
||||
|
||||
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
|
||||
import javax.inject.Inject
|
||||
|
||||
@HiltViewModel
|
||||
class MainViewModel
|
||||
@Inject
|
||||
constructor(
|
||||
private val database: ServerDatabaseDao,
|
||||
) : ViewModel() {
|
||||
private val navigateToAddServer = MutableSharedFlow<Boolean>()
|
||||
|
||||
fun onNavigateToAddServer(scope: LifecycleCoroutineScope, collector: (Boolean) -> Unit) {
|
||||
scope.launch { navigateToAddServer.collect { collector(it) } }
|
||||
}
|
||||
|
||||
init {
|
||||
Timber.d("Start Main")
|
||||
viewModelScope.launch {
|
||||
val servers: List<Server>
|
||||
withContext(Dispatchers.IO) {
|
||||
servers = database.getAllServersSync()
|
||||
}
|
||||
if (servers.isEmpty()) {
|
||||
navigateToAddServer.emit(true)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue