Skip to content

Commit f22d55a

Browse files
committed
refactor
1 parent 6d316b0 commit f22d55a

File tree

5 files changed

+121
-110
lines changed

5 files changed

+121
-110
lines changed

pluto-plugins/plugins/datastore/lib/src/main/java/com/pluto/plugins/datastore/pref/PlutoDatastoreWatcher.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,8 @@ object PlutoDatastoreWatcher {
3838
@Keep
3939
internal data class PreferenceHolder(val name: String, val preferences: DataStore<Preferences>) : SelectorOption() {
4040
override fun displayText(): CharSequence = name
41+
42+
override fun equals(other: Any?): Boolean {
43+
return other is PreferenceHolder && other.name == name
44+
}
4145
}
Lines changed: 78 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -1,78 +1,78 @@
1-
package com.pluto.plugins.datastore.pref.compose.internal
2-
3-
import android.os.Bundle
4-
import android.view.LayoutInflater
5-
import android.view.View
6-
import android.view.ViewGroup
7-
import androidx.compose.foundation.layout.Box
8-
import androidx.compose.foundation.layout.fillMaxHeight
9-
import androidx.compose.foundation.layout.fillMaxWidth
10-
import androidx.compose.material3.MaterialTheme
11-
import androidx.compose.runtime.collectAsState
12-
import androidx.compose.runtime.mutableStateOf
13-
import androidx.compose.ui.Modifier
14-
import androidx.compose.ui.platform.ComposeView
15-
import androidx.compose.ui.platform.ViewCompositionStrategy
16-
import androidx.core.graphics.Insets
17-
import androidx.core.view.ViewCompat
18-
import androidx.core.view.WindowInsetsCompat
19-
import androidx.fragment.app.Fragment
20-
import androidx.fragment.app.viewModels
21-
import com.pluto.plugins.datastore.pref.compose.internal.compose.FilterView
22-
import com.pluto.plugins.datastore.pref.compose.internal.compose.MainComposable
23-
import kotlin.math.max
24-
import kotlinx.coroutines.flow.update
25-
26-
internal class BaseFragment : Fragment() {
27-
28-
private val viewModel by viewModels<BaseViewModel>()
29-
private val insets = mutableStateOf(Insets.NONE)
30-
31-
override fun onCreateView(
32-
inflater: LayoutInflater,
33-
container: ViewGroup?,
34-
savedInstanceState: Bundle?
35-
) = ComposeView(context = requireContext()).apply {
36-
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnDetachedFromWindow)
37-
setContent {
38-
MaterialTheme {
39-
Box(
40-
Modifier
41-
.fillMaxWidth()
42-
.fillMaxHeight()
43-
) {
44-
val state = viewModel.output.collectAsState(initial = null)
45-
state.value?.let {
46-
MainComposable(
47-
data = it,
48-
insets = insets,
49-
onExit = { activity?.finish() },
50-
onFilterClick = { viewModel.showFilterView.update { true } },
51-
updateValue = viewModel.updateValue
52-
)
53-
}
54-
FilterView(
55-
showFilterState = viewModel.showFilterView,
56-
filterState = viewModel.filteredPref,
57-
insets = insets,
58-
)
59-
}
60-
}
61-
}
62-
}
63-
64-
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
65-
super.onViewCreated(view, savedInstanceState)
66-
ViewCompat.setOnApplyWindowInsetsListener(view) { _, windowInsets ->
67-
val systemBarsInsets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
68-
val imeInsets = windowInsets.getInsets(WindowInsetsCompat.Type.ime())
69-
insets.value = Insets.of(
70-
0,
71-
max(systemBarsInsets.top, imeInsets.top),
72-
0,
73-
max(systemBarsInsets.bottom, imeInsets.bottom)
74-
)
75-
windowInsets
76-
}
77-
}
78-
}
1+
// package com.pluto.plugins.datastore.pref.compose.internal
2+
//
3+
// import android.os.Bundle
4+
// import android.view.LayoutInflater
5+
// import android.view.View
6+
// import android.view.ViewGroup
7+
// import androidx.compose.foundation.layout.Box
8+
// import androidx.compose.foundation.layout.fillMaxHeight
9+
// import androidx.compose.foundation.layout.fillMaxWidth
10+
// import androidx.compose.material3.MaterialTheme
11+
// import androidx.compose.runtime.collectAsState
12+
// import androidx.compose.runtime.mutableStateOf
13+
// import androidx.compose.ui.Modifier
14+
// import androidx.compose.ui.platform.ComposeView
15+
// import androidx.compose.ui.platform.ViewCompositionStrategy
16+
// import androidx.core.graphics.Insets
17+
// import androidx.core.view.ViewCompat
18+
// import androidx.core.view.WindowInsetsCompat
19+
// import androidx.fragment.app.Fragment
20+
// import androidx.fragment.app.viewModels
21+
// import com.pluto.plugins.datastore.pref.compose.internal.compose.FilterView
22+
// import com.pluto.plugins.datastore.pref.compose.internal.compose.MainComposable
23+
// import kotlin.math.max
24+
// import kotlinx.coroutines.flow.update
25+
//
26+
// internal class BaseFragment : Fragment() {
27+
//
28+
// private val viewModel by viewModels<BaseViewModel>()
29+
// private val insets = mutableStateOf(Insets.NONE)
30+
//
31+
// override fun onCreateView(
32+
// inflater: LayoutInflater,
33+
// container: ViewGroup?,
34+
// savedInstanceState: Bundle?
35+
// ) = ComposeView(context = requireContext()).apply {
36+
// setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnDetachedFromWindow)
37+
// setContent {
38+
// MaterialTheme {
39+
// Box(
40+
// Modifier
41+
// .fillMaxWidth()
42+
// .fillMaxHeight()
43+
// ) {
44+
// val state = viewModel.output.collectAsState(initial = null)
45+
// state.value?.let {
46+
// MainComposable(
47+
// data = it,
48+
// insets = insets,
49+
// onExit = { activity?.finish() },
50+
// onFilterClick = { viewModel.showFilterView.update { true } },
51+
// updateValue = viewModel.updateValue
52+
// )
53+
// }
54+
// FilterView(
55+
// showFilterState = viewModel.showFilterView,
56+
// filterState = viewModel.filteredPref,
57+
// insets = insets,
58+
// )
59+
// }
60+
// }
61+
// }
62+
// }
63+
//
64+
// override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
65+
// super.onViewCreated(view, savedInstanceState)
66+
// ViewCompat.setOnApplyWindowInsetsListener(view) { _, windowInsets ->
67+
// val systemBarsInsets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
68+
// val imeInsets = windowInsets.getInsets(WindowInsetsCompat.Type.ime())
69+
// insets.value = Insets.of(
70+
// 0,
71+
// max(systemBarsInsets.top, imeInsets.top),
72+
// 0,
73+
// max(systemBarsInsets.bottom, imeInsets.bottom)
74+
// )
75+
// windowInsets
76+
// }
77+
// }
78+
// }

pluto-plugins/plugins/datastore/lib/src/main/java/com/pluto/plugins/datastore/pref/compose/internal/BaseViewModel.kt

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
package com.pluto.plugins.datastore.pref.compose.internal
22

3-
import androidx.compose.runtime.MutableState
4-
import androidx.compose.runtime.mutableStateOf
3+
import android.app.Application
54
import androidx.datastore.preferences.core.booleanPreferencesKey
65
import androidx.datastore.preferences.core.doublePreferencesKey
76
import androidx.datastore.preferences.core.edit
87
import androidx.datastore.preferences.core.floatPreferencesKey
98
import androidx.datastore.preferences.core.longPreferencesKey
109
import androidx.datastore.preferences.core.stringPreferencesKey
11-
import androidx.lifecycle.ViewModel
10+
import androidx.lifecycle.AndroidViewModel
1211
import androidx.lifecycle.viewModelScope
1312
import com.pluto.plugins.datastore.pref.PlutoDatastoreWatcher
13+
import com.pluto.plugins.datastore.pref.PreferenceHolder
1414
import kotlinx.coroutines.FlowPreview
1515
import kotlinx.coroutines.flow.MutableStateFlow
1616
import kotlinx.coroutines.flow.combine
@@ -19,19 +19,21 @@ import kotlinx.coroutines.flow.map
1919
import kotlinx.coroutines.launch
2020

2121
@OptIn(FlowPreview::class)
22-
internal class BaseViewModel : ViewModel() {
22+
internal class BaseViewModel(application: Application) : AndroidViewModel(application) {
2323

2424
internal val output = MutableStateFlow<List<PrefUiModel>>(listOf())
25-
internal val filteredPref = MutableStateFlow<Map<String, Boolean>>(mapOf())
26-
internal val showFilterView: MutableStateFlow<Boolean> = MutableStateFlow(false)
27-
private val expandedMap = mutableMapOf<String, MutableState<Boolean>>()
25+
internal val filteredPref = MutableStateFlow<Set<PreferenceHolder>>(emptySet())
26+
// internal val showFilterView: MutableStateFlow<Boolean> = MutableStateFlow(false)
27+
// private val expandedMap = mutableMapOf<String, MutableState<Boolean>>()
2828

2929
init {
3030
viewModelScope.launch {
3131
PlutoDatastoreWatcher.sources.map { list ->
32-
filteredPref.value = list.associate {
33-
it.name to (filteredPref.value[it.name] ?: true)
34-
}
32+
// filteredPref.value = list.toList()
33+
// filteredPref.value = list.associate {
34+
// it.name to (filteredPref.value[it.name] ?: true)
35+
// }
36+
filteredPref.value = list
3537
list.map { prefHolder ->
3638
prefHolder.preferences.data.map { pref ->
3739
pref to prefHolder.name
@@ -49,20 +51,21 @@ internal class BaseViewModel : ViewModel() {
4951
prefName = namePrefPair.second
5052
)
5153
},
52-
isExpanded = expandedMap.getOrPut(namePrefPair.second) {
53-
mutableStateOf(true)
54-
}
54+
// isExpanded = expandedMap.getOrPut(namePrefPair.second) {
55+
// mutableStateOf(true)
56+
// }
5557
)
5658
}
5759
}
58-
}.flattenMerge()
59-
.combine(filteredPref) { prefList, filterMap ->
60-
prefList.filter {
61-
filterMap[it.name] ?: true
62-
}
63-
}.collect { list ->
64-
output.value = list
60+
}.flattenMerge().combine(filteredPref) { prefList, filterList ->
61+
prefList.filter { uiModel ->
62+
filterList.find { it.name == uiModel.name }?.let {
63+
true
64+
} ?: run { false }
6565
}
66+
}.collect { list ->
67+
output.value = list
68+
}
6669
}
6770
}
6871

pluto-plugins/plugins/datastore/lib/src/main/java/com/pluto/plugins/datastore/pref/compose/internal/DataModels.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ package com.pluto.plugins.datastore.pref.compose.internal
33
import androidx.compose.runtime.MutableState
44
import androidx.compose.runtime.mutableStateOf
55

6-
data class PrefUiModel(
6+
internal data class PrefUiModel(
77
val name: String,
88
val data: List<PrefElement>,
99
val isExpanded: MutableState<Boolean> = mutableStateOf(true)
1010
)
1111

12-
data class PrefElement(
12+
internal data class PrefElement(
1313
val prefName: String,
1414
val key: String,
1515
val value: Any

pluto-plugins/plugins/datastore/lib/src/main/java/com/pluto/plugins/datastore/pref/ui/ListFragment.kt

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import androidx.lifecycle.Observer
99
import androidx.lifecycle.lifecycleScope
1010
import com.pluto.plugin.share.Shareable
1111
import com.pluto.plugin.share.lazyContentSharer
12-
import com.pluto.plugins.datastore.pref.PreferenceHolder
12+
import com.pluto.plugins.datastore.pref.PlutoDatastoreWatcher
1313
import com.pluto.plugins.datastore.pref.R
1414
import com.pluto.plugins.datastore.pref.Session
1515
import com.pluto.plugins.datastore.pref.compose.internal.BaseViewModel
@@ -21,6 +21,7 @@ import com.pluto.utilities.DebugLog
2121
import com.pluto.utilities.autoClearInitializer
2222
import com.pluto.utilities.extensions.hideKeyboard
2323
import com.pluto.utilities.extensions.linearLayoutManager
24+
import com.pluto.utilities.extensions.toast
2425
import com.pluto.utilities.list.BaseAdapter
2526
import com.pluto.utilities.list.CustomItemDecorator
2627
import com.pluto.utilities.list.DiffAwareAdapter
@@ -34,6 +35,7 @@ import com.pluto.utilities.views.keyvalue.edit.KeyValuePairEditor
3435
import com.pluto.utilities.views.keyvalue.edit.lazyKeyValuePairEditor
3536
import kotlinx.coroutines.flow.launchIn
3637
import kotlinx.coroutines.flow.onEach
38+
import kotlinx.coroutines.flow.update
3739

3840
internal class ListFragment : Fragment(R.layout.pluto_dts___fragment_list) {
3941
private val binding by viewBinding(PlutoDtsFragmentListBinding::bind)
@@ -88,18 +90,20 @@ internal class ListFragment : Fragment(R.layout.pluto_dts___fragment_list) {
8890
}
8991

9092
private fun openFilterView() {
93+
toast("selected : ${baseVM.filteredPref.value.size}")
9194
dataSelector.selectMultiple(
9295
title = getString(R.string.pluto_dts___datastore_pref_filter),
93-
list = viewModel.getPrefFiles(),
94-
preSelected = viewModel.getSelectedPrefFiles()
96+
list = PlutoDatastoreWatcher.sources.value.toList(),
97+
preSelected = baseVM.filteredPref.value.toList()
9598
).observe(viewLifecycleOwner) {
96-
val listOfSharePrefFiles = arrayListOf<PreferenceHolder>()
97-
it.forEach { option ->
98-
if (option is PreferenceHolder) {
99-
listOfSharePrefFiles.add(option)
100-
}
101-
}
102-
viewModel.setSelectedPrefFiles(listOfSharePrefFiles)
99+
baseVM.filteredPref.update { it }
100+
// val listOfSharePrefFiles = arrayListOf<PreferenceHolder>()
101+
// it.forEach { option ->
102+
// if (option is PreferenceHolder) {
103+
// listOfSharePrefFiles.add(option)
104+
// }
105+
// }
106+
// viewModel.setSelectedPrefFiles(listOfSharePrefFiles)
103107
}
104108
}
105109

0 commit comments

Comments
 (0)