diff --git a/app/src/main/java/cz/movapp/app/ui/dictionary/DictionaryFavoritesFragment.kt b/app/src/main/java/cz/movapp/app/ui/dictionary/DictionaryFavoritesFragment.kt index d0ee4c2f..e04cd183 100644 --- a/app/src/main/java/cz/movapp/app/ui/dictionary/DictionaryFavoritesFragment.kt +++ b/app/src/main/java/cz/movapp/app/ui/dictionary/DictionaryFavoritesFragment.kt @@ -23,6 +23,8 @@ class DictionaryFavoritesFragment : Fragment() { private val binding get() = _binding!! + private var forceFavoritesReload = true + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -45,7 +47,7 @@ class DictionaryFavoritesFragment : Fragment() { mainSharedViewModel.selectedLanguage.observe(viewLifecycleOwner, Observer { lang -> val adapter = getRVAdapter() - if(adapter.langPair != lang){ + if (adapter.langPair != lang) { dictionarySharedViewModel.onLanguageChanged(lang) if (favoritesViewModel.favorites.value != null) { @@ -72,8 +74,9 @@ class DictionaryFavoritesFragment : Fragment() { val adapter = getRVAdapter() adapter.favoritesIds = favoritesIds.map { it.translationId } as MutableList + adapter.setFavorites(forceFavoritesReload) - adapter.setFavorites() + forceFavoritesReload = false } private fun getRVAdapter(): DictionaryPhrasesSearchAllAdapter { @@ -91,6 +94,7 @@ class DictionaryFavoritesFragment : Fragment() { binding.recyclerViewDictionaryFavorites.adapter = null _binding = null + forceFavoritesReload = true } } \ No newline at end of file diff --git a/app/src/main/java/cz/movapp/app/ui/dictionary/DictionaryPhrasesSearchAllAdapter.kt b/app/src/main/java/cz/movapp/app/ui/dictionary/DictionaryPhrasesSearchAllAdapter.kt index be18b241..bbe037db 100644 --- a/app/src/main/java/cz/movapp/app/ui/dictionary/DictionaryPhrasesSearchAllAdapter.kt +++ b/app/src/main/java/cz/movapp/app/ui/dictionary/DictionaryPhrasesSearchAllAdapter.kt @@ -18,7 +18,7 @@ class DictionaryPhrasesSearchAllAdapter( UNSET, FROM, TO } - fun search(constraint: String, isFavorites : Boolean = false) { + fun search(constraint: String, isFavorites: Boolean = false) { val searchString = stripDiacritics(constraint.lowercase(Locale.getDefault()).trim()) var result = if (searchString.isEmpty()) { wholeDataset @@ -34,19 +34,22 @@ class DictionaryPhrasesSearchAllAdapter( filtered.sortedWith(firstFavoritesThenByLevenshteinThenRestComparator(constraint)) } - if(isFavorites){ + if (isFavorites) { result = result.filter { favoritesIds.contains(it.id) } } submitList(result) } - fun setFavorites() { - submitList(if (languagePair.isReversed) { - wholeDataset.filter { favoritesIds.contains(it.id) }.sortedBy { it.source_stripped } - } else { - wholeDataset.filter { favoritesIds.contains(it.id) }.sortedBy { it.main_stripped } - }) + fun setFavorites(force: Boolean) { + val filteredDataset = wholeDataset.filter { favoritesIds.contains(it.id) } + if (force || currentList.isEmpty() || (filteredDataset - currentList.toSet()).isNotEmpty()) { + submitList(if (languagePair.isReversed) { + filteredDataset.sortedBy { it.source_stripped } + } else { + filteredDataset.sortedBy { it.main_stripped } + }) + } } private fun firstFavoritesThenByLevenshteinThenRestComparator(constraint: String) =