Move servers check to Activity (#136)

Remove MainViewModel
Change startDestination when no servers are found
This commit is contained in:
Jarne Demeulemeester 2022-07-25 13:44:15 +02:00 committed by GitHub
parent ba584473dd
commit cc0ab920fd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 26 additions and 78 deletions

View file

@ -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
}

View file

@ -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 {

View file

@ -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())
}
}
}
}
}
}

View file

@ -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)
}

View file

@ -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)
}
}
}
}