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

View File

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

View File

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

View File

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

View File

@ -1,15 +1,20 @@
package com.looker.droidify.ui.viewmodels
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope
import com.looker.droidify.database.CursorOwner
import com.looker.droidify.database.DatabaseX
import com.looker.droidify.entity.ProductItem
import com.looker.droidify.ui.fragments.Source
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
class MainNavFragmentViewModelX : ViewModel() {
class MainNavFragmentViewModelX(val db: DatabaseX) : ViewModel() {
private val _order = MutableStateFlow(ProductItem.Order.LAST_UPDATE)
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")
}
}
}