diff --git a/src/main/kotlin/com/looker/droidify/ui/fragments/ExploreFragment.kt b/src/main/kotlin/com/looker/droidify/ui/fragments/ExploreFragment.kt index 9a03b185..17e1bf26 100644 --- a/src/main/kotlin/com/looker/droidify/ui/fragments/ExploreFragment.kt +++ b/src/main/kotlin/com/looker/droidify/ui/fragments/ExploreFragment.kt @@ -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) diff --git a/src/main/kotlin/com/looker/droidify/ui/fragments/InstalledFragment.kt b/src/main/kotlin/com/looker/droidify/ui/fragments/InstalledFragment.kt index c2df2c3b..549566cb 100644 --- a/src/main/kotlin/com/looker/droidify/ui/fragments/InstalledFragment.kt +++ b/src/main/kotlin/com/looker/droidify/ui/fragments/InstalledFragment.kt @@ -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() @@ -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) diff --git a/src/main/kotlin/com/looker/droidify/ui/fragments/LatestFragment.kt b/src/main/kotlin/com/looker/droidify/ui/fragments/LatestFragment.kt index 3744bcc7..203cb6c9 100644 --- a/src/main/kotlin/com/looker/droidify/ui/fragments/LatestFragment.kt +++ b/src/main/kotlin/com/looker/droidify/ui/fragments/LatestFragment.kt @@ -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() @@ -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) diff --git a/src/main/kotlin/com/looker/droidify/ui/fragments/MainNavFragmentX.kt b/src/main/kotlin/com/looker/droidify/ui/fragments/MainNavFragmentX.kt index 3abcb73c..56686390 100644 --- a/src/main/kotlin/com/looker/droidify/ui/fragments/MainNavFragmentX.kt +++ b/src/main/kotlin/com/looker/droidify/ui/fragments/MainNavFragmentX.kt @@ -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 diff --git a/src/main/kotlin/com/looker/droidify/ui/viewmodels/MainNavFragmentViewModelX.kt b/src/main/kotlin/com/looker/droidify/ui/viewmodels/MainNavFragmentViewModelX.kt index 30832c56..ad6e8457 100644 --- a/src/main/kotlin/com/looker/droidify/ui/viewmodels/MainNavFragmentViewModelX.kt +++ b/src/main/kotlin/com/looker/droidify/ui/viewmodels/MainNavFragmentViewModelX.kt @@ -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.All) @@ -86,4 +91,14 @@ class MainNavFragmentViewModelX : ViewModel() { } } } -} \ No newline at end of file + + class Factory(val db: DatabaseX) : ViewModelProvider.Factory { + @Suppress("unchecked_cast") + override fun create(modelClass: Class): T { + if (modelClass.isAssignableFrom(MainNavFragmentViewModelX::class.java)) { + return MainNavFragmentViewModelX(db) as T + } + throw IllegalArgumentException("Unknown ViewModel class") + } + } +}