From cc0ab920fde5d517b80f8ad25f38cf0e00d52d9b Mon Sep 17 00:00:00 2001 From: Jarne Demeulemeester <32322857+jarnedemeulemeester@users.noreply.github.com> Date: Mon, 25 Jul 2022 13:44:15 +0200 Subject: [PATCH] Move servers check to Activity (#136) Remove MainViewModel Change startDestination when no servers are found --- .../dev/jdtech/jellyfin/BindingAdapters.kt | 1 - .../java/dev/jdtech/jellyfin/MainActivity.kt | 31 ++++++-------- .../dev/jdtech/jellyfin/MainActivityTv.kt | 29 +++++--------- .../jellyfin/database/ServerDatabaseDao.kt | 3 ++ .../jellyfin/viewmodels/MainViewModel.kt | 40 ------------------- 5 files changed, 26 insertions(+), 78 deletions(-) delete mode 100644 app/src/main/java/dev/jdtech/jellyfin/viewmodels/MainViewModel.kt diff --git a/app/src/main/java/dev/jdtech/jellyfin/BindingAdapters.kt b/app/src/main/java/dev/jdtech/jellyfin/BindingAdapters.kt index 73650944..61876c10 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/BindingAdapters.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/BindingAdapters.kt @@ -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 } diff --git a/app/src/main/java/dev/jdtech/jellyfin/MainActivity.kt b/app/src/main/java/dev/jdtech/jellyfin/MainActivity.kt index 43873ba8..4e8361bd 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/MainActivity.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/MainActivity.kt @@ -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 { diff --git a/app/src/main/java/dev/jdtech/jellyfin/MainActivityTv.kt b/app/src/main/java/dev/jdtech/jellyfin/MainActivityTv.kt index 60768872..f7c7a1fb 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/MainActivityTv.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/MainActivityTv.kt @@ -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()) - } - } - } - } } } \ No newline at end of file diff --git a/app/src/main/java/dev/jdtech/jellyfin/database/ServerDatabaseDao.kt b/app/src/main/java/dev/jdtech/jellyfin/database/ServerDatabaseDao.kt index 9f3b0a98..017b3d81 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/database/ServerDatabaseDao.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/database/ServerDatabaseDao.kt @@ -23,6 +23,9 @@ interface ServerDatabaseDao { @Query("select * from servers") fun getAllServersSync(): List + @Query("select count(*) from servers") + fun getServersCount(): Int + @Query("delete from servers where id = :id") fun delete(id: String) } \ No newline at end of file diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/MainViewModel.kt b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/MainViewModel.kt deleted file mode 100644 index 6258186e..00000000 --- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/MainViewModel.kt +++ /dev/null @@ -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() - - fun onNavigateToAddServer(scope: LifecycleCoroutineScope, collector: (Boolean) -> Unit) { - scope.launch { navigateToAddServer.collect { collector(it) } } - } - - init { - Timber.d("Start Main") - viewModelScope.launch { - val servers: List - withContext(Dispatchers.IO) { - servers = database.getAllServersSync() - } - if (servers.isEmpty()) { - navigateToAddServer.emit(true) - } - } - } -} \ No newline at end of file