Skip to content

Commit 0953a01

Browse files
committed
searchfilters: convert to ViewModel (part 1 of 3)
The ViewModel that hosts the search filters logic. It facilitates the communication with the SearchFragment* and the *DialogFragment based filter UI's
1 parent 3590979 commit 0953a01

1 file changed

Lines changed: 88 additions & 0 deletions

File tree

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package org.schabi.newpipe.fragments.list.search
2+
3+
import androidx.lifecycle.LiveData
4+
import androidx.lifecycle.MutableLiveData
5+
import androidx.lifecycle.ViewModel
6+
import androidx.lifecycle.viewmodel.initializer
7+
import androidx.lifecycle.viewmodel.viewModelFactory
8+
import org.schabi.newpipe.extractor.NewPipe
9+
import org.schabi.newpipe.extractor.search.filter.FilterItem
10+
import org.schabi.newpipe.fragments.list.search.filter.SearchFilterLogic
11+
import org.schabi.newpipe.fragments.list.search.filter.SearchFilterLogic.Factory.Variant
12+
13+
class SearchViewModel(
14+
val serviceId: Int,
15+
logicVariant: Variant,
16+
userSelectedContentFilterList: List<Int>,
17+
userSelectedSortFilterList: List<Int>
18+
) : ViewModel() {
19+
20+
private val selectedContentFilterMutableLiveData: MutableLiveData<MutableList<FilterItem>> =
21+
MutableLiveData()
22+
private var selectedSortFilterLiveData: MutableLiveData<MutableList<FilterItem>> =
23+
MutableLiveData()
24+
private var userSelectedSortFilterListMutableLiveData: MutableLiveData<ArrayList<Int>> =
25+
MutableLiveData()
26+
private var userSelectedContentFilterListMutableLiveData: MutableLiveData<ArrayList<Int>> =
27+
MutableLiveData()
28+
private var doSearchMutableLiveData: MutableLiveData<Boolean> = MutableLiveData()
29+
30+
val selectedContentFilterItemListLiveData: LiveData<MutableList<FilterItem>>
31+
get() = selectedContentFilterMutableLiveData
32+
val selectedSortFilterItemListLiveData: LiveData<MutableList<FilterItem>>
33+
get() = selectedSortFilterLiveData
34+
val userSelectedContentFilterListLiveData: LiveData<ArrayList<Int>>
35+
get() = userSelectedContentFilterListMutableLiveData
36+
val userSelectedSortFilterListLiveData: LiveData<ArrayList<Int>>
37+
get() = userSelectedSortFilterListMutableLiveData
38+
val doSearchLiveData: LiveData<Boolean>
39+
get() = doSearchMutableLiveData
40+
41+
val searchFilterLogic = SearchFilterLogic.Factory.create(
42+
logicVariant, NewPipe.getService(serviceId).searchQHFactory, null
43+
)
44+
45+
init {
46+
searchFilterLogic.restorePreviouslySelectedFilters(
47+
userSelectedContentFilterList,
48+
userSelectedSortFilterList
49+
)
50+
51+
searchFilterLogic.setCallback { userSelectedContentFilter: List<FilterItem?>,
52+
userSelectedSortFilter: List<FilterItem?> ->
53+
selectedContentFilterMutableLiveData.value =
54+
userSelectedContentFilter as MutableList<FilterItem>
55+
selectedSortFilterLiveData.value =
56+
userSelectedSortFilter as MutableList<FilterItem>
57+
userSelectedContentFilterListMutableLiveData.value =
58+
searchFilterLogic.selectedContentFilters
59+
userSelectedSortFilterListMutableLiveData.value =
60+
searchFilterLogic.selectedSortFilters
61+
62+
doSearchMutableLiveData.value = true
63+
}
64+
}
65+
66+
fun weConsumedDoSearchLiveData() {
67+
doSearchMutableLiveData.value = false
68+
}
69+
70+
companion object {
71+
72+
fun getFactory(
73+
serviceId: Int,
74+
logicVariant: Variant,
75+
userSelectedContentFilterList: ArrayList<Int>,
76+
userSelectedSortFilterList: ArrayList<Int>
77+
) = viewModelFactory {
78+
initializer {
79+
SearchViewModel(
80+
serviceId,
81+
logicVariant,
82+
userSelectedContentFilterList,
83+
userSelectedSortFilterList
84+
)
85+
}
86+
}
87+
}
88+
}

0 commit comments

Comments
 (0)