Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix bug with spinner for vitamin_a in ProductEditNutritionFactsFragment #3821

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -10,5 +10,5 @@ object AnalyticsService {

fun setTag(key: String, value: String) = Sentry.setTag(key, value)

fun record(exception: Exception) = Sentry.captureException(exception)
}
fun record(exception: Throwable) = Sentry.captureException(exception)
}
Expand Up @@ -15,8 +15,6 @@
*/
package openfoodfacts.github.scrachx.openfood.features.product.edit

import android.app.Activity
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.text.Editable
Expand All @@ -32,10 +30,12 @@ import android.widget.*
import android.widget.AdapterView.OnItemSelectedListener
import androidx.core.widget.doAfterTextChanged
import com.afollestad.materialdialogs.MaterialDialog
import com.google.android.material.textfield.TextInputLayout
import com.squareup.picasso.Callback
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.rxkotlin.addTo
import openfoodfacts.github.scrachx.openfood.R
import openfoodfacts.github.scrachx.openfood.app.AnalyticsService
import openfoodfacts.github.scrachx.openfood.databinding.FragmentAddProductNutritionFactsBinding
import openfoodfacts.github.scrachx.openfood.features.shared.views.CustomValidatingEditTextView
import openfoodfacts.github.scrachx.openfood.images.ProductImage
Expand Down Expand Up @@ -71,7 +71,6 @@ class ProductEditNutritionFactsFragment : ProductEditFragment() {
private var _binding: FragmentAddProductNutritionFactsBinding? = null
private val binding get() = _binding!!
private var photoReceiverHandler: PhotoReceiverHandler? = null
private var activity: Activity? = null
private var photoFile: File? = null
private var productCode: String? = null
private var mOfflineSavedProduct: OfflineSavedProduct? = null
Expand All @@ -87,7 +86,7 @@ class ProductEditNutritionFactsFragment : ProductEditFragment() {


override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
_binding = FragmentAddProductNutritionFactsBinding.inflate(inflater)
_binding = FragmentAddProductNutritionFactsBinding.inflate(inflater, container, false)
return binding.root
}

Expand Down Expand Up @@ -146,8 +145,7 @@ class ProductEditNutritionFactsFragment : ProductEditFragment() {
binding.radioGroup.jumpDrawablesToCurrentState()
}
} else {
Toast.makeText(activity, R.string.error_adding_nutrition_facts, Toast.LENGTH_SHORT).show()
requireActivity().finish()
closeScreenWithAlert()
}
binding.alcohol.imeOptions = EditorInfo.IME_ACTION_DONE
binding.energyKcal.requestFocus()
Expand All @@ -156,8 +154,8 @@ class ProductEditNutritionFactsFragment : ProductEditFragment() {
it.addValidListener()
it.checkValue()
}
if (getActivity() is ProductEditActivity && (getActivity() as ProductEditActivity?)!!.initialValues != null) {
addAllFieldsToMap((getActivity() as ProductEditActivity?)!!.initialValues!!)
(activity as? ProductEditActivity)?.initialValues?.let { values ->
addAllFieldsToMap(values)
}
}

Expand Down Expand Up @@ -378,11 +376,6 @@ class ProductEditNutritionFactsFragment : ProductEditFragment() {
private fun getPositionInServingUnitArray(unit: String) =
SERVING_UNITS.indexOfFirst { it.equals(unit, ignoreCase = true) }.coerceAtLeast(0)

override fun onAttach(context: Context) {
super.onAttach(context)
activity = getActivity()
}

private fun addNutritionFactsImage() {
val path = imagePath
if (path == null) {
Expand Down Expand Up @@ -646,16 +639,18 @@ class ProductEditNutritionFactsFragment : ProductEditFragment() {
}

private fun displayAddNutrientDialog() {
val origNutrients = resources.getStringArray(R.array.nutrients_array).toMutableList()
usedNutrientsIndexes.forEach { origNutrients.removeAt(it) }
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there was an IndexOutOfBoundsException

origNutrients.sortWith(Collator.getInstance(Locale.getDefault()))
val nutrients = resources.getStringArray(R.array.nutrients_array)
.mapIndexedNotNull { index, nutrient ->
if (usedNutrientsIndexes.contains(index)) null else nutrient
}
.sortedWith(Collator.getInstance(Locale.getDefault()))

MaterialDialog.Builder(requireActivity())
.title(R.string.choose_nutrient)
.items(origNutrients)
.items(nutrients)
.itemsCallback { _, _, _, text ->
usedNutrientsIndexes.add(origNutrients.indexOf(text))
val textView = addNutrientRow(origNutrients.indexOf(text), text.toString())
usedNutrientsIndexes.add(nutrients.indexOf(text))
val textView = addNutrientRow(nutrients.indexOf(text), text.toString())
allEditViews.add(textView)
textView.addValidListener()
}
Expand All @@ -682,7 +677,8 @@ class ProductEditNutritionFactsFragment : ProductEditFragment() {
val nutrientCompleteName = PARAMS_OTHER_NUTRIENTS[index]
val rowView = layoutInflater.inflate(R.layout.nutrition_facts_table_row, binding.tableLayout, false) as TableRow
val editText: CustomValidatingEditTextView = rowView.findViewById(R.id.value)
editText.hint = hint
val til: TextInputLayout = rowView.findViewById(R.id.value_til)
til.hint = hint
val nutrientShortName = getShortName(nutrientCompleteName)
editText.entryName = nutrientShortName
editText.keyListener = keyListener
Expand All @@ -698,22 +694,41 @@ class ProductEditNutritionFactsFragment : ProductEditFragment() {
// Setup unit spinner
val unitSpinner = rowView.findViewById<Spinner>(R.id.spinner_unit)
val modSpinner = rowView.findViewById<Spinner>(R.id.spinner_mod)
if (Nutriments.PH == nutrientShortName) {
unitSpinner.visibility = View.INVISIBLE
} else if (Nutriments.STARCH == nutrientShortName) {
val arrayAdapter = ArrayAdapter(requireActivity(), android.R.layout.simple_spinner_item, requireActivity().resources.getStringArray(R.array.weights_array))
arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
unitSpinner.adapter = arrayAdapter
starchEditText = editText
when (nutrientShortName) {
Nutriments.PH -> {
unitSpinner.visibility = View.INVISIBLE
}
Nutriments.STARCH -> {
val arrayAdapter = ArrayAdapter(requireActivity(), android.R.layout.simple_spinner_item, requireActivity().resources.getStringArray(R.array.weights_array))
arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
unitSpinner.adapter = arrayAdapter
starchEditText = editText
}
Nutriments.VITAMIN_A, Nutriments.VITAMIN_D, Nutriments.VITAMIN_E -> {
val arrayAdapter = ArrayAdapter(requireActivity(), android.R.layout.simple_spinner_item, requireActivity().resources.getStringArray(R.array.weight_all_units))
arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
unitSpinner.adapter = arrayAdapter
}
}
if (preFillValues) {
unitSpinner.setSelection(unitSelectedIndex)
modSpinner.setSelection(modSelectedIndex)
try {
if (preFillValues) {
unitSpinner.setSelection(unitSelectedIndex)
modSpinner.setSelection(modSelectedIndex)
}
} catch (t: Throwable) {
AnalyticsService.record(IllegalStateException("Can't find weight units for nutriment: $nutrientShortName", t))
closeScreenWithAlert()
}

binding.tableLayout.addView(rowView)
return editText
}

private fun closeScreenWithAlert() {
Toast.makeText(requireContext(), R.string.error_adding_nutrition_facts, Toast.LENGTH_SHORT).show()
requireActivity().finish()
}

/**
* Converts a given quantity's unit to grams.
*
Expand Down Expand Up @@ -891,4 +906,4 @@ class ProductEditNutritionFactsFragment : ProductEditFragment() {
private val NUTRIENTS_UNITS = listOf(UNIT_GRAM, UNIT_MILLIGRAM, UNIT_MICROGRAM, UNIT_DV, UNIT_IU)
private val SERVING_UNITS = listOf(UNIT_GRAM, UNIT_MILLIGRAM, UNIT_MICROGRAM, UNIT_LITER, UNIT_MILLILITRE)
}
}
}
Expand Up @@ -843,13 +843,11 @@
app:layout_constraintStart_toStartOf="@+id/spinner_sodium_unit"
app:layout_constraintTop_toTopOf="@id/alcohol_til" />

<TableLayout
<LinearLayout
android:id="@+id/table_layout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:shrinkColumns="0"
android:stretchColumns="0"
android:orientation="vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/alcohol_til" />
Expand Down