From a43534417b3b416f7cc615779f04a14fd69dab96 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Sun, 14 Aug 2022 19:53:21 +0200 Subject: [PATCH] Fix scrolling to top when managing plugins --- .../ui/settings/extensions/PluginsFragment.kt | 8 +++++--- .../ui/settings/extensions/PluginsViewModel.kt | 17 +++++++++++------ app/src/main/res/layout/fragment_plugins.xml | 2 +- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt index 8bc980ed..632eab14 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt @@ -90,9 +90,11 @@ class PluginsFragment : Fragment() { pluginViewModel.handlePluginAction(activity, url, it, isLocal) } - observe(pluginViewModel.filteredPlugins) { - (plugin_recycler_view?.adapter as? PluginAdapter?)?.updateList(it) - plugin_recycler_view?.scrollToPosition(0) + observe(pluginViewModel.filteredPlugins) { (scrollToTop, list) -> + (plugin_recycler_view?.adapter as? PluginAdapter?)?.updateList(list) + + if (scrollToTop) + plugin_recycler_view?.scrollToPosition(0) } if (isLocal) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsViewModel.kt index 9cb844fb..dec9e7de 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsViewModel.kt @@ -22,14 +22,19 @@ import kotlinx.coroutines.launch import me.xdrop.fuzzywuzzy.FuzzySearch typealias Plugin = Pair +/** + * The boolean signifies if the plugin list should be scrolled to the top, used for searching. + * */ +typealias PluginViewDataUpdate = Pair> class PluginsViewModel : ViewModel() { + /** plugins is an unaltered list of plugins */ private var plugins: List = emptyList() /** filteredPlugins is a subset of plugins following the current search query and tv type selection */ - private var _filteredPlugins = MutableLiveData>() - var filteredPlugins: LiveData> = _filteredPlugins + private var _filteredPlugins = MutableLiveData() + var filteredPlugins: LiveData = _filteredPlugins val tvTypes = mutableListOf() private var currentQuery: String? = null @@ -169,7 +174,7 @@ class PluginsViewModel : ViewModel() { } this.plugins = list - _filteredPlugins.postValue(list.filterTvTypes().sortByQuery(currentQuery)) + _filteredPlugins.postValue(false to list.filterTvTypes().sortByQuery(currentQuery)) } // Perhaps can be optimized? @@ -191,7 +196,7 @@ class PluginsViewModel : ViewModel() { } fun updateFilteredPlugins() { - _filteredPlugins.postValue(plugins.filterTvTypes().sortByQuery(currentQuery)) + _filteredPlugins.postValue(false to plugins.filterTvTypes().sortByQuery(currentQuery)) } fun updatePluginList(repositoryUrl: String) = viewModelScope.launch { @@ -201,7 +206,7 @@ class PluginsViewModel : ViewModel() { fun search(query: String?) { currentQuery = query - _filteredPlugins.postValue(filteredPlugins.value?.sortByQuery(query)) + _filteredPlugins.postValue(true to (filteredPlugins.value?.second?.sortByQuery(query) ?: emptyList())) } /** @@ -217,6 +222,6 @@ class PluginsViewModel : ViewModel() { } plugins = downloadedPlugins - _filteredPlugins.postValue(downloadedPlugins.filterTvTypes().sortByQuery(currentQuery)) + _filteredPlugins.postValue(false to downloadedPlugins.filterTvTypes().sortByQuery(currentQuery)) } } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_plugins.xml b/app/src/main/res/layout/fragment_plugins.xml index 45255d6d..fa2b2151 100644 --- a/app/src/main/res/layout/fragment_plugins.xml +++ b/app/src/main/res/layout/fragment_plugins.xml @@ -11,7 +11,7 @@ + android:background="?attr/primaryGrayBackground">