Skip to content

Commit

Permalink
ref: use view model to reflect changes in IngredientsProductFragment.kt
Browse files Browse the repository at this point in the history
  • Loading branch information
VaiTon committed Jun 19, 2021
1 parent 6aecf7f commit 8f4a344
Show file tree
Hide file tree
Showing 4 changed files with 77 additions and 60 deletions.
Expand Up @@ -448,7 +448,7 @@ class ProductEditActivity : BaseActivity() {
val alreadySent = error == "This picture has already been sent."
if (alreadySent && performOCR) {
hideImageProgress(position, getString(R.string.image_uploaded_successfully))
performOCR(image.barcode, "ingredients_${getProductLanguageForEdition()}")
withContext(Dispatchers.Main) { performOCR(image.barcode, "ingredients_${getProductLanguageForEdition()}") }
} else {
hideImageProgress(position, error, true)
}
Expand Down
Expand Up @@ -153,6 +153,43 @@ class IngredientsProductFragment : BaseFragment() {
binding.extractIngredientsPrompt.setOnClickListener { extractIngredients() }
binding.imageViewIngredients.setOnClickListener { openFullScreen() }

binding.viewModel = viewModel

viewModel.vitaminsTags.observe(viewLifecycleOwner) {
if (it.isNotEmpty()) {
binding.cvVitaminsTagsText.visibility = View.VISIBLE
binding.vitaminsTagsText.text = SpannableStringBuilder()
.bold { append(getString(R.string.vitamin_tags_text)) }
.append(tagListToString(it))
} else binding.cvVitaminsTagsText.visibility = View.GONE
}
viewModel.aminoAcidTagsList.observe(viewLifecycleOwner) {
if (it.isNotEmpty()) {
binding.cvAminoAcidTagsText.visibility = View.VISIBLE
binding.aminoAcidTagsText.text = SpannableStringBuilder()
.bold { append(getString(R.string.amino_acid_tags_text)) }
.append(tagListToString(it))
} else binding.cvAminoAcidTagsText.visibility = View.GONE
}

viewModel.mineralTags.observe(viewLifecycleOwner) {
if (it.isNotEmpty()) {
binding.cvMineralTagsText.visibility = View.VISIBLE
binding.mineralTagsText.text = SpannableStringBuilder()
.bold { append(getString(R.string.mineral_tags_text)) }
.append(tagListToString(it))
} else binding.cvMineralTagsText.visibility = View.GONE
}

viewModel.mineralTags.observe(viewLifecycleOwner) {
if (it.isNotEmpty()) {
binding.otherNutritionTags.visibility = View.VISIBLE
binding.otherNutritionTags.text = SpannableStringBuilder()
.bold { append(getString(R.string.other_tags_text)) }
.append(tagListToString(it))
}
}

refreshView(productState)
}

Expand All @@ -173,34 +210,7 @@ class IngredientsProductFragment : BaseFragment() {
val product = this.productState.product!!
viewModel.product.value = product

val vitaminTagsList = product.vitaminTags
val aminoAcidTagsList = product.aminoAcidTags
val mineralTags = product.mineralTags
val otherNutritionTags = product.otherNutritionTags
if (vitaminTagsList.isNotEmpty()) {
binding.cvVitaminsTagsText.visibility = View.VISIBLE
binding.vitaminsTagsText.text = SpannableStringBuilder()
.bold { append(getString(R.string.vitamin_tags_text)) }
.append(tagListToString(vitaminTagsList))
}
if (aminoAcidTagsList.isNotEmpty()) {
binding.cvAminoAcidTagsText.visibility = View.VISIBLE
binding.aminoAcidTagsText.text = SpannableStringBuilder()
.bold { append(getString(R.string.amino_acid_tags_text)) }
.append(tagListToString(aminoAcidTagsList))
}
if (mineralTags.isNotEmpty()) {
binding.cvMineralTagsText.visibility = View.VISIBLE
binding.mineralTagsText.text = SpannableStringBuilder()
.bold { append(getString(R.string.mineral_tags_text)) }
.append(tagListToString(mineralTags))
}
if (otherNutritionTags.isNotEmpty()) {
binding.otherNutritionTags.visibility = View.VISIBLE
binding.otherNutritionTags.text = SpannableStringBuilder()
.bold { append(getString(R.string.other_tags_text)) }
.append(tagListToString(otherNutritionTags))
}

binding.textAdditiveProduct.text = SpannableStringBuilder()
.bold { append(getString(R.string.txtAdditives)) }

Expand Down Expand Up @@ -268,9 +278,9 @@ class IngredientsProductFragment : BaseFragment() {

binding.textTraceProduct.append(traces.joinToString(", ") {
getSearchLinkText(
getTracesName(language, it),
SearchType.TRACE,
requireActivity()
getTracesName(language, it),
SearchType.TRACE,
requireActivity()
)
})
} else {
Expand All @@ -293,13 +303,13 @@ class IngredientsProductFragment : BaseFragment() {

private fun getTracesName(languageCode: String, tag: String): String {
val allergenName = daoSession.allergenNameDao.queryBuilder()
.where(AllergenNameDao.Properties.AllergenTag.eq(tag), AllergenNameDao.Properties.LanguageCode.eq(languageCode))
.unique()
.where(AllergenNameDao.Properties.AllergenTag.eq(tag), AllergenNameDao.Properties.LanguageCode.eq(languageCode))
.unique()
return if (allergenName != null) allergenName.name else tag
}

private fun tagListToString(tagList: List<String>) =
tagList.joinToString(", ", " ") { it.substring(3) }
tagList.joinToString(", ", " ") { it.substring(3) }


private fun getAllergensTag(allergen: AllergenName): CharSequence {
Expand All @@ -308,7 +318,7 @@ class IngredientsProductFragment : BaseFragment() {
override fun onClick(view: View) {
if (allergen.isWikiDataIdPresent) {
wikidataClient.doSomeThing(
allergen.wikiDataId
allergen.wikiDataId
).subscribe { result ->
val activity = activity
if (activity?.isFinishing == false) {
Expand All @@ -335,8 +345,8 @@ class IngredientsProductFragment : BaseFragment() {
INGREDIENT_REGEX.findAll(ingredientsText).forEach { match ->

val allergenTxt = match.value
.replace("[()]+".toRegex(), "")
.replace("[,.-]".toRegex(), " ")
.replace("[()]+".toRegex(), "")
.replace("[,.-]".toRegex(), " ")
allergenTags.find { tag -> tag.contains(allergenTxt, true) }?.let {
var start = match.range.first
var end = match.range.last + 1
Expand All @@ -350,13 +360,12 @@ class IngredientsProductFragment : BaseFragment() {
}
}
ssb.insert(0, SpannableStringBuilder()
.bold { append(getString(R.string.txtIngredients) + ' ') })
.bold { append(getString(R.string.txtIngredients) + ' ') })
}
}

fun showAdditives(additives: List<AdditiveName>) {
fun showAdditives(additives: List<AdditiveName>) =
showAdditives(additives, binding.textAdditiveProduct, wikidataClient, this, disp)
}

private fun setAdditivesState(state: ProductInfoState) {
when (state) {
Expand Down Expand Up @@ -449,13 +458,13 @@ class IngredientsProductFragment : BaseFragment() {
private fun openFullScreen() {
if (ingredientsImgUrl != null && productState.product != null) {
FullScreenActivityOpener.openForUrl(
this,
client,
productState.product!!,
ProductImageField.INGREDIENTS,
ingredientsImgUrl!!,
binding.imageViewIngredients,
localeManager.getLanguage()
this,
client,
productState.product!!,
ProductImageField.INGREDIENTS,
ingredientsImgUrl!!,
binding.imageViewIngredients,
localeManager.getLanguage()
)
} else {
newIngredientImage()
Expand All @@ -473,9 +482,9 @@ class IngredientsProductFragment : BaseFragment() {
binding.addPhotoLabel.visibility = View.GONE
ingredientsImgUrl = newPhotoFile.absolutePath
Picasso.get()
.load(newPhotoFile)
.fit()
.into(binding.imageViewIngredients)
.load(newPhotoFile)
.fit()
.into(binding.imageViewIngredients)
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
Expand Down
Expand Up @@ -15,10 +15,7 @@
*/
package openfoodfacts.github.scrachx.openfood.features.product.view.ingredients

import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.liveData
import androidx.lifecycle.switchMap
import androidx.lifecycle.*
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.rx2.await
import openfoodfacts.github.scrachx.openfood.models.Product
Expand Down Expand Up @@ -72,4 +69,10 @@ class ProductIngredientsViewModel @Inject constructor(
}
}


val vitaminsTags = product.map(Product::vitaminTags)
val mineralTags = product.map(Product::mineralTags)
val otherNutritionTags = product.map(Product::otherNutritionTags)
val aminoAcidTagsList = product.map(Product::aminoAcidTags)

}
15 changes: 10 additions & 5 deletions app/src/main/res/layout/fragment_ingredients_product.xml
Expand Up @@ -5,6 +5,11 @@

<data>

<import type="openfoodfacts.github.scrachx.openfood.features.product.view.ingredients.ProductIngredientsViewModel" />

<variable
name="viewModel"
type="ProductIngredientsViewModel" />
</data>

<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
Expand Down Expand Up @@ -32,24 +37,24 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/activity_vertical_margin"
android:visibility="gone"
app:arrowAlignment="center"
app:arrowMarginStart="0dp"
app:shouldDisplayImmediately="false"
app:backgroundColor="@android:color/holo_green_light"
app:textColor="@android:color/white"
android:visibility="gone"
app:identifier="ingredient_image_tip_box"
app:message="@string/image_edit_tip" />
app:message="@string/image_edit_tip"
app:shouldDisplayImmediately="false"
app:textColor="@android:color/white" />

<ImageButton
android:id="@+id/imageViewIngredients"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="@dimen/spacing_normal"
android:layout_marginTop="@dimen/spacing_tiny"
android:layout_marginRight="@dimen/spacing_normal"
android:adjustViewBounds="true"
android:layout_marginTop="@dimen/spacing_tiny"
android:background="?android:selectableItemBackground"
android:maxHeight="120dp"
android:scaleType="fitCenter"
Expand Down

0 comments on commit 8f4a344

Please sign in to comment.