FilterProvider: Inject and manage instances using hilt
This also switchers to default gson instance without any modifier changes fixing issues happening with missing params. Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
@@ -21,30 +21,28 @@ package com.aurora.store.data.providers
|
||||
|
||||
import android.content.Context
|
||||
import com.aurora.store.data.Filter
|
||||
import com.aurora.store.data.SingletonHolder
|
||||
import com.aurora.store.util.Preferences
|
||||
import com.google.gson.Gson
|
||||
import com.google.gson.GsonBuilder
|
||||
import java.lang.reflect.Modifier
|
||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
|
||||
class FilterProvider private constructor(var context: Context) {
|
||||
@Singleton
|
||||
class FilterProvider @Inject constructor(
|
||||
private val gson: Gson,
|
||||
@ApplicationContext private val context: Context
|
||||
) {
|
||||
|
||||
companion object : SingletonHolder<FilterProvider, Context>(::FilterProvider) {
|
||||
companion object {
|
||||
const val PREFERENCE_FILTER = "PREFERENCE_FILTER"
|
||||
}
|
||||
|
||||
private var gson: Gson = GsonBuilder()
|
||||
.excludeFieldsWithModifiers(Modifier.TRANSIENT)
|
||||
.create()
|
||||
|
||||
fun getSavedFilter(): Filter {
|
||||
var rawFilter = Preferences.getString(context, PREFERENCE_FILTER)
|
||||
if (rawFilter.isEmpty())
|
||||
rawFilter = "{}"
|
||||
return gson.fromJson(rawFilter, Filter::class.java)
|
||||
val rawFilter = Preferences.getString(context, PREFERENCE_FILTER)
|
||||
return gson.fromJson(rawFilter.ifEmpty { "{}" }, Filter::class.java)
|
||||
}
|
||||
|
||||
fun saveFilter(filter: Filter) {
|
||||
Preferences.putString(context, PREFERENCE_FILTER, gson.toJson(filter))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ import com.aurora.gplayapi.data.models.App
|
||||
import com.aurora.gplayapi.data.models.SearchBundle
|
||||
import com.aurora.store.R
|
||||
import com.aurora.store.data.Filter
|
||||
import com.aurora.store.data.providers.FilterProvider
|
||||
import com.aurora.store.data.providers.FilterProvider.Companion.PREFERENCE_FILTER
|
||||
import com.aurora.store.databinding.FragmentSearchResultBinding
|
||||
import com.aurora.store.util.Preferences
|
||||
import com.aurora.store.view.custom.recycler.EndlessRecyclerOnScrollListener
|
||||
@@ -60,7 +60,6 @@ class SearchResultsFragment : BaseFragment(R.layout.fragment_search_result),
|
||||
private lateinit var searchView: TextInputEditText
|
||||
|
||||
private lateinit var sharedPreferences: SharedPreferences
|
||||
private lateinit var filter: Filter
|
||||
|
||||
private var query: String? = null
|
||||
private var searchBundle: SearchBundle = SearchBundle()
|
||||
@@ -74,7 +73,6 @@ class SearchResultsFragment : BaseFragment(R.layout.fragment_search_result),
|
||||
|
||||
sharedPreferences = Preferences.getPrefs(view.context)
|
||||
sharedPreferences.registerOnSharedPreferenceChangeListener(this)
|
||||
filter = FilterProvider.with(view.context).getSavedFilter()
|
||||
|
||||
// Toolbar
|
||||
binding.layoutViewToolbar.apply {
|
||||
@@ -121,7 +119,7 @@ class SearchResultsFragment : BaseFragment(R.layout.fragment_search_result),
|
||||
context?.let {
|
||||
sharedPreferences.unregisterOnSharedPreferenceChangeListener(this)
|
||||
if (Preferences.getBoolean(it, Preferences.PREFERENCE_FILTER_SEARCH)) {
|
||||
FilterProvider.with(it).saveFilter(Filter())
|
||||
viewModel.filterProvider.saveFilter(Filter())
|
||||
}
|
||||
}
|
||||
super.onDestroyView()
|
||||
@@ -242,7 +240,7 @@ class SearchResultsFragment : BaseFragment(R.layout.fragment_search_result),
|
||||
val tempList:MutableList<App> = mutableListOf()
|
||||
tempList.addAll(appList)
|
||||
|
||||
filter = FilterProvider.with(requireContext()).getSavedFilter()
|
||||
val filter = viewModel.filterProvider.getSavedFilter()
|
||||
return tempList
|
||||
.asSequence()
|
||||
.filter { it.displayName.isNotEmpty() } // Some of the apps may not have metadata
|
||||
@@ -255,11 +253,6 @@ class SearchResultsFragment : BaseFragment(R.layout.fragment_search_result),
|
||||
}
|
||||
|
||||
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
|
||||
if (key == FilterProvider.PREFERENCE_FILTER) {
|
||||
filter = FilterProvider.with(requireContext()).getSavedFilter()
|
||||
query?.let {
|
||||
queryViewModel(it)
|
||||
}
|
||||
}
|
||||
if (key == PREFERENCE_FILTER) query?.let { queryViewModel(it) }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ import com.aurora.store.databinding.SheetFilterBinding
|
||||
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
|
||||
import com.google.android.material.chip.Chip
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import javax.inject.Inject
|
||||
|
||||
@AndroidEntryPoint
|
||||
class FilterSheet : BottomSheetDialogFragment(R.layout.sheet_filter) {
|
||||
@@ -35,12 +36,15 @@ class FilterSheet : BottomSheetDialogFragment(R.layout.sheet_filter) {
|
||||
private var _binding: SheetFilterBinding? = null
|
||||
private val binding get() = _binding!!
|
||||
|
||||
@Inject
|
||||
lateinit var filterProvider: FilterProvider
|
||||
|
||||
private lateinit var filter: Filter
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
_binding = SheetFilterBinding.bind(view)
|
||||
filter = FilterProvider.with(requireContext()).getSavedFilter()
|
||||
filter = filterProvider.getSavedFilter()
|
||||
|
||||
attachSingleChips()
|
||||
attachMultipleChips()
|
||||
@@ -54,7 +58,7 @@ class FilterSheet : BottomSheetDialogFragment(R.layout.sheet_filter) {
|
||||
|
||||
private fun attachActions() {
|
||||
binding.btnPositive.setOnClickListener {
|
||||
FilterProvider.with(requireContext()).saveFilter(filter)
|
||||
filterProvider.saveFilter(filter)
|
||||
dismissAllowingStateLoss()
|
||||
}
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@ import com.aurora.gplayapi.helpers.SearchHelper
|
||||
import com.aurora.gplayapi.helpers.WebSearchHelper
|
||||
import com.aurora.store.data.network.HttpClient
|
||||
import com.aurora.store.data.providers.AuthProvider
|
||||
import com.aurora.store.data.providers.FilterProvider
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||
import javax.inject.Inject
|
||||
@@ -42,6 +43,7 @@ import kotlinx.coroutines.supervisorScope
|
||||
@HiltViewModel
|
||||
@SuppressLint("StaticFieldLeak") // false positive, see https://github.com/google/dagger/issues/3253
|
||||
class SearchResultViewModel @Inject constructor(
|
||||
val filterProvider: FilterProvider,
|
||||
@ApplicationContext private val context: Context
|
||||
) : ViewModel() {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user