Skip to content

Commit 7d8e631

Browse files
authored
chore(shared-preferences): filter logic migrated to dataSelector (#309)
1 parent 800de54 commit 7d8e631

26 files changed

+132
-834
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.pluto.plugins.preferences
2+
3+
import androidx.fragment.app.Fragment
4+
5+
internal class BaseFragment : Fragment(R.layout.pluto_pref___fragment_base)

pluto-plugins/plugins/shared-preferences/lib/src/main/java/com/pluto/plugins/preferences/PlutoSharePreferencesPlugin.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class PlutoSharePreferencesPlugin() : Plugin(ID) {
1717
version = BuildConfig.VERSION_NAME
1818
)
1919

20-
override fun getView(): Fragment = SharedPrefFragment()
20+
override fun getView(): Fragment = BaseFragment()
2121

2222
override fun getDeveloperDetails(): DeveloperDetails {
2323
return DeveloperDetails(
@@ -28,7 +28,6 @@ class PlutoSharePreferencesPlugin() : Plugin(ID) {
2828
}
2929

3030
override fun onPluginInstalled() {
31-
SharedPrefRepo.init(context)
3231
}
3332

3433
override fun onPluginDataCleared() {

pluto-plugins/plugins/shared-preferences/lib/src/main/java/com/pluto/plugins/preferences/SharedPrefFragment.kt

Lines changed: 0 additions & 5 deletions
This file was deleted.

pluto-plugins/plugins/shared-preferences/lib/src/main/java/com/pluto/plugins/preferences/ui/DataModel.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,17 @@ package com.pluto.plugins.preferences.ui
22

33
import androidx.annotation.Keep
44
import com.pluto.utilities.list.ListItem
5+
import com.pluto.utilities.selector.SelectorOption
56
import com.pluto.utilities.views.keyvalue.KeyValuePairEditMetaData
67
import com.squareup.moshi.JsonClass
78

89
@Keep
910
@JsonClass(generateAdapter = true)
1011
internal data class SharedPrefFile(
11-
val label: String,
12+
val label: CharSequence,
1213
val isDefault: Boolean
13-
) : ListItem() {
14-
override fun isSame(other: Any): Boolean {
15-
return other is SharedPrefFile && other.label == this.label
16-
}
14+
) : SelectorOption() {
15+
override fun displayText(): CharSequence = label
1716
}
1817

1918
internal data class SharedPrefKeyValuePair(

pluto-plugins/plugins/shared-preferences/lib/src/main/java/com/pluto/plugins/preferences/ui/EditProcessor.kt

Lines changed: 0 additions & 39 deletions
This file was deleted.

pluto-plugins/plugins/shared-preferences/lib/src/main/java/com/pluto/plugins/preferences/ui/ListFragment.kt

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,13 @@ import androidx.fragment.app.Fragment
77
import androidx.fragment.app.activityViewModels
88
import androidx.lifecycle.Observer
99
import androidx.lifecycle.lifecycleScope
10-
import androidx.navigation.fragment.findNavController
1110
import com.pluto.plugin.share.Shareable
1211
import com.pluto.plugin.share.lazyContentSharer
1312
import com.pluto.plugins.preferences.R
1413
import com.pluto.plugins.preferences.Session
15-
import com.pluto.plugins.preferences.SharedPrefRepo
1614
import com.pluto.plugins.preferences.databinding.PlutoPrefFragmentListBinding
17-
import com.pluto.plugins.preferences.ui.EditProcessor.Companion.fromEditorData
18-
import com.pluto.plugins.preferences.ui.EditProcessor.Companion.toEditorData
15+
import com.pluto.plugins.preferences.utils.fromEditorData
16+
import com.pluto.plugins.preferences.utils.toEditorData
1917
import com.pluto.utilities.autoClearInitializer
2018
import com.pluto.utilities.extensions.hideKeyboard
2119
import com.pluto.utilities.extensions.linearLayoutManager
@@ -25,6 +23,7 @@ import com.pluto.utilities.list.CustomItemDecorator
2523
import com.pluto.utilities.list.DiffAwareAdapter
2624
import com.pluto.utilities.list.DiffAwareHolder
2725
import com.pluto.utilities.list.ListItem
26+
import com.pluto.utilities.selector.lazyDataSelector
2827
import com.pluto.utilities.setOnDebounceClickListener
2928
import com.pluto.utilities.viewBinding
3029
import com.pluto.utilities.views.keyvalue.KeyValuePairEditResult
@@ -37,6 +36,7 @@ internal class ListFragment : Fragment(R.layout.pluto_pref___fragment_list) {
3736
private val keyValuePairEditor: KeyValuePairEditor by lazyKeyValuePairEditor()
3837
private val prefAdapter: BaseAdapter by autoClearInitializer { SharedPrefAdapter(onActionListener) }
3938
private val contentSharer by lazyContentSharer()
39+
private val dataSelector by lazyDataSelector()
4040

4141
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
4242
super.onViewCreated(view, savedInstanceState)
@@ -60,14 +60,14 @@ internal class ListFragment : Fragment(R.layout.pluto_pref___fragment_list) {
6060
binding.options.setOnDebounceClickListener {
6161
context?.showMoreOptions(it, R.menu.pluto_pref___menu_more_options) { item ->
6262
when (item.itemId) {
63-
R.id.filter -> findNavController().navigate(R.id.openFilterSettings)
63+
R.id.filter -> openFilterView()
6464
}
6565
}
6666
}
67-
binding.filter.setOnDebounceClickListener { findNavController().navigate(R.id.openFilterSettings) }
67+
binding.filter.setOnDebounceClickListener { openFilterView() }
6868
binding.search.setText(Session.searchText)
69-
viewModel.preferences.removeObserver(sharedPrefObserver)
70-
viewModel.preferences.observe(viewLifecycleOwner, sharedPrefObserver)
69+
viewModel.preferenceList.removeObserver(sharedPrefObserver)
70+
viewModel.preferenceList.observe(viewLifecycleOwner, sharedPrefObserver)
7171
keyValuePairEditor.result.removeObserver(keyValuePairEditObserver)
7272
keyValuePairEditor.result.observe(viewLifecycleOwner, keyValuePairEditObserver)
7373

@@ -76,9 +76,25 @@ internal class ListFragment : Fragment(R.layout.pluto_pref___fragment_list) {
7676
}
7777
}
7878

79+
private fun openFilterView() {
80+
dataSelector.selectMultiple(
81+
title = getString(R.string.pluto_pref___shared_pref_filter),
82+
list = viewModel.getPrefFiles(),
83+
preSelected = viewModel.getSelectedPrefFiles()
84+
).observe(viewLifecycleOwner) {
85+
val listOfSharePrefFiles = arrayListOf<SharedPrefFile>()
86+
it.forEach { option ->
87+
if (option is SharedPrefFile) {
88+
listOfSharePrefFiles.add(option)
89+
}
90+
}
91+
viewModel.setSelectedPrefFiles(listOfSharePrefFiles)
92+
}
93+
}
94+
7995
private fun filteredPrefs(search: String): List<SharedPrefKeyValuePair> {
8096
var list = emptyList<SharedPrefKeyValuePair>()
81-
viewModel.preferences.value?.let {
97+
viewModel.preferenceList.value?.let {
8298
list = it.filter { pref ->
8399
pref.key.contains(search, true)
84100
}
@@ -91,8 +107,7 @@ internal class ListFragment : Fragment(R.layout.pluto_pref___fragment_list) {
91107
it.value?.let { value ->
92108
if (it.metaData is SharedPrefKeyValuePair) {
93109
val pref: SharedPrefKeyValuePair = it.metaData as SharedPrefKeyValuePair
94-
SharedPrefRepo.set(requireContext(), pref, pref.fromEditorData(value))
95-
viewModel.refresh()
110+
viewModel.setPrefData(pref, pref.fromEditorData(value))
96111
}
97112
}
98113
}
Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.pluto.plugins.preferences.ui
22

33
import android.view.ViewGroup
4-
import com.pluto.plugins.preferences.ui.filter.FilterItemHolder
54
import com.pluto.utilities.list.BaseAdapter
65
import com.pluto.utilities.list.DiffAwareHolder
76
import com.pluto.utilities.list.ListItem
@@ -11,21 +10,18 @@ internal class SharedPrefAdapter(private val listener: OnActionListener) : BaseA
1110
override fun getItemViewType(item: ListItem): Int? {
1211
return when (item) {
1312
is SharedPrefKeyValuePair -> ITEM_TYPE_PAIR
14-
is SharedPrefFile -> ITEM_TYPE_FILTER
1513
else -> null
1614
}
1715
}
1816

1917
override fun onViewHolderCreated(parent: ViewGroup, viewType: Int): DiffAwareHolder? {
2018
return when (viewType) {
2119
ITEM_TYPE_PAIR -> KeyValueItemHolder(parent, listener)
22-
ITEM_TYPE_FILTER -> FilterItemHolder(parent, listener)
2320
else -> null
2421
}
2522
}
2623

2724
companion object {
2825
const val ITEM_TYPE_PAIR = 1001
29-
const val ITEM_TYPE_FILTER = 1002
3026
}
3127
}

pluto-plugins/plugins/shared-preferences/lib/src/main/java/com/pluto/plugins/preferences/ui/SharedPrefViewModel.kt

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,31 @@ import android.app.Application
44
import androidx.lifecycle.AndroidViewModel
55
import androidx.lifecycle.LiveData
66
import androidx.lifecycle.MutableLiveData
7-
import com.pluto.plugins.preferences.SharedPrefRepo
7+
import com.pluto.plugins.preferences.utils.SharedPrefUtils
88

99
internal class SharedPrefViewModel(application: Application) : AndroidViewModel(application) {
1010

11-
val preferences: LiveData<List<SharedPrefKeyValuePair>>
11+
val preferenceList: LiveData<List<SharedPrefKeyValuePair>>
1212
get() = _preferences
1313
private val _preferences = MutableLiveData<List<SharedPrefKeyValuePair>>()
1414

15+
private val sharePrefUtils = SharedPrefUtils(application.applicationContext)
16+
1517
fun refresh() {
16-
_preferences.postValue(SharedPrefRepo.get(getApplication()))
18+
_preferences.postValue(sharePrefUtils.get())
19+
}
20+
21+
fun getPrefFiles(): List<SharedPrefFile> = sharePrefUtils.allPreferenceFiles
22+
23+
fun getSelectedPrefFiles(): List<SharedPrefFile> = sharePrefUtils.selectedPreferenceFiles
24+
25+
fun setSelectedPrefFiles(files: List<SharedPrefFile>) {
26+
sharePrefUtils.selectedPreferenceFiles = files
27+
refresh()
28+
}
29+
30+
fun setPrefData(pair: SharedPrefKeyValuePair, data: Any) {
31+
sharePrefUtils.set(pair, data)
32+
refresh()
1733
}
1834
}

pluto-plugins/plugins/shared-preferences/lib/src/main/java/com/pluto/plugins/preferences/ui/filter/FilterFragment.kt

Lines changed: 0 additions & 87 deletions
This file was deleted.

pluto-plugins/plugins/shared-preferences/lib/src/main/java/com/pluto/plugins/preferences/ui/filter/FilterItemHolder.kt

Lines changed: 0 additions & 40 deletions
This file was deleted.

0 commit comments

Comments
 (0)