From 61a50cec72cca0d2a0586691554447834fee3d3e Mon Sep 17 00:00:00 2001 From: Javinator9889 Date: Tue, 30 Jun 2020 11:03:17 +0200 Subject: [PATCH] Load disease information whether is visible while sliding up the bottom sheet --- .../fragments/diseases/DiseasesFragment.kt | 26 ++++++++++++++----- .../fragments/diseases/adapter/Disease.kt | 6 ++++- .../viewmodels/DiseaseInformationViewModel.kt | 7 ++++- 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/diseases/DiseasesFragment.kt b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/diseases/DiseasesFragment.kt index dbc255a..325629f 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/diseases/DiseasesFragment.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/diseases/DiseasesFragment.kt @@ -87,8 +87,6 @@ class DiseasesFragment : BaseFragmentView(), LayoutVisibilityChange { if (it.isEmpty()) return@observe parsedHTMLTexts = it - upperAdsAdapter.add(Ads()) - lowerAdsAdapter.add(Ads()) it.forEachIndexed { i, parsedText -> val animation = if (i % 2 == 0) R.raw.virus_red @@ -96,9 +94,9 @@ class DiseasesFragment : BaseFragmentView(), LayoutVisibilityChange { val layoutId = if (i % 2 == 0) R.layout.disease_card_layout else R.layout.disease_card_alt_layout - diseasesAdapter.add( - Disease(animation, parsedText, layoutId, i) - ) + val disease = Disease(animation, parsedText, layoutId, i) + if (diseasesAdapter.getAdapterPosition(disease) == -1) + diseasesAdapter.add(disease) } loading.visibility = View.INVISIBLE container.visibility = View.VISIBLE @@ -151,6 +149,20 @@ class DiseasesFragment : BaseFragmentView(), LayoutVisibilityChange { fastAdapter.addEventHook(DiseaseClickEventHook()) fastAdapter.withSavedInstanceState(savedInstanceState) behavior = BottomSheetBehavior.from(view.contentLayout) + behavior.addBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback() { + override fun onStateChanged(bottomSheet: View, newState: Int) { + if (newState == STATE_EXPANDED) { + if (upperAdsAdapter.adapterItemCount == 0) + upperAdsAdapter.add(Ads()) + if (lowerAdsAdapter.adapterItemCount == 0) + lowerAdsAdapter.add(Ads()) + informationViewModel.parseHtml() + } + } + + override fun onSlide(bottomSheet: View, slideOffset: Float) {} + + }) view.countChart.setDrawGridBackground(false) view.countChart.axisLeft.setDrawGridLines(false) view.countChart.axisRight.setDrawGridLines(false) @@ -226,8 +238,8 @@ class DiseasesFragment : BaseFragmentView(), LayoutVisibilityChange { } override fun onVisibilityChanged(visibility: Int) { - if (visibility == View.VISIBLE) - lifecycleScope.launchWhenCreated { informationViewModel.parseHtml() } + /*if (visibility == View.VISIBLE) + lifecycleScope.launchWhenCreated { informationViewModel.parseHtml() }*/ } private suspend fun setCountText( diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/diseases/adapter/Disease.kt b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/diseases/adapter/Disease.kt index 15ed326..299c205 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/diseases/adapter/Disease.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/diseases/adapter/Disease.kt @@ -36,9 +36,13 @@ data class Disease( override val type: Int ) : AbstractItem() { + init { + identifier = type.toLong() + } + override fun getViewHolder(v: View): ViewHolder = ViewHolder(v) - class ViewHolder(private val view: View) : + class ViewHolder(view: View) : FastAdapter.ViewHolder(view) { val cardContainer: MaterialCardView = view.findViewById(R.id.cardDiseaseContainer) diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/viewmodels/DiseaseInformationViewModel.kt b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/viewmodels/DiseaseInformationViewModel.kt index 276d164..89b5868 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/viewmodels/DiseaseInformationViewModel.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/viewmodels/DiseaseInformationViewModel.kt @@ -35,6 +35,7 @@ import kotlinx.coroutines.* import org.sufficientlysecure.htmltextview.HtmlFormatter import org.sufficientlysecure.htmltextview.HtmlFormatterBuilder import timber.log.Timber +import java.util.concurrent.atomic.AtomicBoolean private const val DATA_KEY = "text:html:text" private const val PARSED_JSON_KEY = "text:json:parsed" @@ -43,6 +44,7 @@ class DiseaseInformationViewModel( private val state: SavedStateHandle ) : ViewModel() { private val informationList: DiseasesList = loadHtmlData() + private val isHTMLParsed = AtomicBoolean(false) val parsedHTMLText: MutableLiveData> = state.getLiveData(DATA_KEY, emptyList()) @@ -60,7 +62,9 @@ class DiseaseInformationViewModel( fun parseHtml() = viewModelScope.launch { Timber.d("Parsing HTML") - if (!state.get>(DATA_KEY).isNullOrEmpty()) + if (!state.get>(DATA_KEY) + .isNullOrEmpty() || isHTMLParsed.get() + ) return@launch val parsedItemsList = ArrayList(informationList.diseases.size) @@ -104,6 +108,7 @@ class DiseaseInformationViewModel( } } } + isHTMLParsed.set(true) } private fun createHTML(htmlText: String): Spanned =