Add: Database instance to Main fragments VM

This commit is contained in:
machiav3lli 2022-01-03 00:29:16 +01:00
parent 6c21afb8a1
commit 70eee26048
5 changed files with 34 additions and 10 deletions

View File

@ -5,8 +5,8 @@ import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.viewModels
import androidx.lifecycle.Lifecycle import androidx.lifecycle.Lifecycle
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle import androidx.lifecycle.repeatOnLifecycle
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
@ -26,7 +26,7 @@ import kotlinx.coroutines.launch
class ExploreFragment : MainNavFragmentX(), CursorOwner.Callback { class ExploreFragment : MainNavFragmentX(), CursorOwner.Callback {
override val viewModel: MainNavFragmentViewModelX by viewModels() override lateinit var viewModel: MainNavFragmentViewModelX
private lateinit var binding: FragmentExploreXBinding private lateinit var binding: FragmentExploreXBinding
override val source = Source.AVAILABLE override val source = Source.AVAILABLE
@ -41,6 +41,9 @@ class ExploreFragment : MainNavFragmentX(), CursorOwner.Callback {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
binding = FragmentExploreXBinding.inflate(inflater, container, false) binding = FragmentExploreXBinding.inflate(inflater, container, false)
binding.lifecycleOwner = this binding.lifecycleOwner = this
val viewModelFactory = MainNavFragmentViewModelX.Factory(mainActivityX.db)
viewModel = ViewModelProvider(this, viewModelFactory)
.get(MainNavFragmentViewModelX::class.java)
binding.recyclerView.apply { binding.recyclerView.apply {
layoutManager = LinearLayoutManager(context) layoutManager = LinearLayoutManager(context)

View File

@ -5,7 +5,7 @@ import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.viewModels import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.looker.droidify.database.CursorOwner import com.looker.droidify.database.CursorOwner
@ -26,7 +26,7 @@ import io.reactivex.rxjava3.schedulers.Schedulers
class InstalledFragment : MainNavFragmentX(), CursorOwner.Callback { class InstalledFragment : MainNavFragmentX(), CursorOwner.Callback {
override val viewModel: MainNavFragmentViewModelX by viewModels() override lateinit var viewModel: MainNavFragmentViewModelX
private lateinit var binding: FragmentInstalledXBinding private lateinit var binding: FragmentInstalledXBinding
private val installedItemAdapter = ItemAdapter<VAppItem>() private val installedItemAdapter = ItemAdapter<VAppItem>()
@ -47,6 +47,9 @@ class InstalledFragment : MainNavFragmentX(), CursorOwner.Callback {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
binding = FragmentInstalledXBinding.inflate(inflater, container, false) binding = FragmentInstalledXBinding.inflate(inflater, container, false)
binding.lifecycleOwner = this binding.lifecycleOwner = this
val viewModelFactory = MainNavFragmentViewModelX.Factory(mainActivityX.db)
viewModel = ViewModelProvider(this, viewModelFactory)
.get(MainNavFragmentViewModelX::class.java)
installedFastAdapter = FastAdapter.with(installedItemAdapter) installedFastAdapter = FastAdapter.with(installedItemAdapter)
installedFastAdapter?.setHasStableIds(true) installedFastAdapter?.setHasStableIds(true)

View File

@ -5,7 +5,7 @@ import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.viewModels import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.looker.droidify.database.CursorOwner import com.looker.droidify.database.CursorOwner
@ -26,7 +26,7 @@ import io.reactivex.rxjava3.schedulers.Schedulers
class LatestFragment : MainNavFragmentX(), CursorOwner.Callback { class LatestFragment : MainNavFragmentX(), CursorOwner.Callback {
override val viewModel: MainNavFragmentViewModelX by viewModels() override lateinit var viewModel: MainNavFragmentViewModelX
private lateinit var binding: FragmentLatestXBinding private lateinit var binding: FragmentLatestXBinding
private val updatedItemAdapter = ItemAdapter<VAppItem>() private val updatedItemAdapter = ItemAdapter<VAppItem>()
@ -47,6 +47,9 @@ class LatestFragment : MainNavFragmentX(), CursorOwner.Callback {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
binding = FragmentLatestXBinding.inflate(inflater, container, false) binding = FragmentLatestXBinding.inflate(inflater, container, false)
binding.lifecycleOwner = this binding.lifecycleOwner = this
val viewModelFactory = MainNavFragmentViewModelX.Factory(mainActivityX.db)
viewModel = ViewModelProvider(this, viewModelFactory)
.get(MainNavFragmentViewModelX::class.java)
updatedFastAdapter = FastAdapter.with(updatedItemAdapter) updatedFastAdapter = FastAdapter.with(updatedItemAdapter)
updatedFastAdapter?.setHasStableIds(true) updatedFastAdapter?.setHasStableIds(true)

View File

@ -10,7 +10,7 @@ import com.looker.droidify.ui.viewmodels.MainNavFragmentViewModelX
abstract class MainNavFragmentX : Fragment(), CursorOwner.Callback { abstract class MainNavFragmentX : Fragment(), CursorOwner.Callback {
val mainActivityX: MainActivityX val mainActivityX: MainActivityX
get() = requireActivity() as MainActivityX get() = requireActivity() as MainActivityX
abstract val viewModel: MainNavFragmentViewModelX abstract var viewModel: MainNavFragmentViewModelX
abstract val source: Source abstract val source: Source
open fun onBackPressed(): Boolean = false open fun onBackPressed(): Boolean = false

View File

@ -1,15 +1,20 @@
package com.looker.droidify.ui.viewmodels package com.looker.droidify.ui.viewmodels
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.looker.droidify.database.CursorOwner import com.looker.droidify.database.CursorOwner
import com.looker.droidify.database.DatabaseX
import com.looker.droidify.entity.ProductItem import com.looker.droidify.entity.ProductItem
import com.looker.droidify.ui.fragments.Source import com.looker.droidify.ui.fragments.Source
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.* import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
class MainNavFragmentViewModelX : ViewModel() { class MainNavFragmentViewModelX(val db: DatabaseX) : ViewModel() {
private val _order = MutableStateFlow(ProductItem.Order.LAST_UPDATE) private val _order = MutableStateFlow(ProductItem.Order.LAST_UPDATE)
private val _sections = MutableStateFlow<ProductItem.Section>(ProductItem.Section.All) private val _sections = MutableStateFlow<ProductItem.Section>(ProductItem.Section.All)
@ -86,4 +91,14 @@ class MainNavFragmentViewModelX : ViewModel() {
} }
} }
} }
}
class Factory(val db: DatabaseX) : ViewModelProvider.Factory {
@Suppress("unchecked_cast")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(MainNavFragmentViewModelX::class.java)) {
return MainNavFragmentViewModelX(db) as T
}
throw IllegalArgumentException("Unknown ViewModel class")
}
}
}