From a967b2997d1afd14bab8c6b9461950d04b4d8283 Mon Sep 17 00:00:00 2001 From: liveHarshit Date: Mon, 27 May 2019 18:20:18 +0530 Subject: [PATCH] fix: Retain chip state and search results after re-selecting the chip (#1818) --- .../general/search/SearchResultsFragment.kt | 77 ++++++------------- .../general/search/SearchViewModel.kt | 16 ---- 2 files changed, 24 insertions(+), 69 deletions(-) diff --git a/app/src/main/java/org/fossasia/openevent/general/search/SearchResultsFragment.kt b/app/src/main/java/org/fossasia/openevent/general/search/SearchResultsFragment.kt index bffda8eb0e..87fa7af606 100644 --- a/app/src/main/java/org/fossasia/openevent/general/search/SearchResultsFragment.kt +++ b/app/src/main/java/org/fossasia/openevent/general/search/SearchResultsFragment.kt @@ -10,7 +10,6 @@ import android.view.View import android.view.ViewGroup import android.widget.CompoundButton import androidx.core.content.ContextCompat -import androidx.core.view.children import androidx.core.view.isVisible import androidx.fragment.app.Fragment import androidx.lifecycle.Observer @@ -76,7 +75,7 @@ class SearchResultsFragment : Fragment(), CompoundButton.OnCheckedChangeListener rootView = inflater.inflate(R.layout.fragment_search_results, container, false) setPostponeSharedElementTransition() - setChips(eventDate, eventType) + setChips() setToolbar(activity, getString(R.string.search_results)) setHasOptionsMenu(true) @@ -125,17 +124,6 @@ class SearchResultsFragment : Fragment(), CompoundButton.OnCheckedChangeListener rootView.searchRootLayout.longSnackbar(it) }) - searchViewModel.chipClickable - .nonNull() - .observe(this, Observer { - rootView.chipGroup.children.forEach { chip -> - if (chip is Chip) { - chip.isClickable = it - if (chip.isChecked) chip.isClickable = false - } - } - }) - rootView.retry.setOnClickListener { performSearch() } @@ -159,7 +147,6 @@ class SearchResultsFragment : Fragment(), CompoundButton.OnCheckedChangeListener date != getString(R.string.anytime) && type != getString(R.string.anything) -> { addChips(date, true) addChips(type, true) - addChips(getString(R.string.clear_all), false) } date != getString(R.string.anytime) && type == getString(R.string.anything) -> { addChips(date, true) @@ -241,7 +228,6 @@ class SearchResultsFragment : Fragment(), CompoundButton.OnCheckedChangeListener val date = eventDate val freeEvents = safeArgs.freeEvents val sortBy = safeArgs.sort - searchViewModel.setChipNotClickable() searchViewModel.searchEvent = query searchViewModel.loadEvents(location, date, type, freeEvents, sortBy) } @@ -282,46 +268,31 @@ class SearchResultsFragment : Fragment(), CompoundButton.OnCheckedChangeListener } override fun onCheckedChanged(buttonView: CompoundButton?, isChecked: Boolean) { - if (isChecked) { - if (buttonView?.text == getString(R.string.clear_all)) { - searchViewModel.savedTime = null - searchViewModel.savedType = null - eventDate = getString(R.string.anytime) - eventType = getString(R.string.anything) - rootView.noSearchResults.isVisible = false - favoriteEventsRecyclerAdapter.submitList(null) - searchViewModel.clearEvents() - searchViewModel.clearTimeAndType() - if (searchViewModel.isConnected()) performSearch() - else showNoInternetError(true) - setChips() + days.forEach { + if (it == buttonView?.text) { + searchViewModel.savedTime = if (isChecked) it else null + eventDate = if (isChecked) it else getString(R.string.anytime) + setChips(date = it) + refreshEvents() + return@forEach } - days.forEach { - if (it == buttonView?.text) { - searchViewModel.savedTime = it - eventDate = it - setChips(date = it) - rootView.noSearchResults.isVisible = false - favoriteEventsRecyclerAdapter.submitList(null) - searchViewModel.clearEvents() - if (searchViewModel.isConnected()) performSearch() - else showNoInternetError(true) - return@forEach - } - } - eventTypesList?.forEach { - if (it.name == buttonView?.text) { - searchViewModel.savedType = it.name - eventType = it.name - setChips(type = it.name) - rootView.noSearchResults.isVisible = false - favoriteEventsRecyclerAdapter.submitList(null) - searchViewModel.clearEvents() - if (searchViewModel.isConnected()) performSearch() - else showNoInternetError(true) - return@forEach - } + } + eventTypesList?.forEach { + if (it.name == buttonView?.text) { + searchViewModel.savedType = if (isChecked) it.name else null + eventType = if (isChecked) it.name else getString(R.string.anything) + refreshEvents() + return@forEach } } } + + private fun refreshEvents() { + setChips() + rootView.noSearchResults.isVisible = false + favoriteEventsRecyclerAdapter.submitList(null) + searchViewModel.clearEvents() + if (searchViewModel.isConnected()) performSearch() + else showNoInternetError(true) + } } diff --git a/app/src/main/java/org/fossasia/openevent/general/search/SearchViewModel.kt b/app/src/main/java/org/fossasia/openevent/general/search/SearchViewModel.kt index 6771f86729..e43ffed8d0 100644 --- a/app/src/main/java/org/fossasia/openevent/general/search/SearchViewModel.kt +++ b/app/src/main/java/org/fossasia/openevent/general/search/SearchViewModel.kt @@ -41,8 +41,6 @@ class SearchViewModel( private val mutableError = SingleLiveEvent() val error: LiveData = mutableError val connection: LiveData = mutableConnectionLiveData - private val mutableChipClickable = MutableLiveData() - val chipClickable: LiveData = mutableChipClickable var searchEvent: String? = null var savedLocation: String? = null var savedType: String? = null @@ -78,13 +76,8 @@ class SearchViewModel( savedTime = preference.getString(SAVED_TIME) } - fun setChipNotClickable() { - mutableChipClickable.value = false - } - fun loadEvents(location: String, time: String, type: String, freeEvents: Boolean, sortBy: String) { if (mutableEvents.value != null) { - mutableChipClickable.value = true return } if (!isConnected()) return @@ -316,7 +309,6 @@ class SearchViewModel( .distinctUntilChanged() .doOnSubscribe { mutableShowShimmerResults.value = true - mutableChipClickable.value = false }.doFinally { stopLoaders() }.subscribe({ @@ -331,7 +323,6 @@ class SearchViewModel( private fun stopLoaders() { mutableShowShimmerResults.value = false - mutableChipClickable.value = true } fun setFavorite(eventId: Long, favorite: Boolean) { @@ -351,13 +342,6 @@ class SearchViewModel( mutableEvents.value = null } - fun clearTimeAndType() { - preference.apply { - putString(SAVED_TYPE, "Anything") - putString(SAVED_TIME, "Anytime") - } - } - override fun onCleared() { super.onCleared() compositeDisposable.clear()