From 6b7cb63d816103e73ee4cb82008474cc6bacef8b Mon Sep 17 00:00:00 2001 From: VaiTon Date: Sat, 27 Feb 2021 19:52:04 +0100 Subject: [PATCH] fix: query attribute_groups only for the actual UI language. Closes https://github.com/openfoodfacts/openfoodfacts-androidapp/issues/3857 --- .../ServerAttributesFragment.kt | 3 - .../scrachx/openfood/network/ApiFields.kt | 101 +++++++++++++++++ .../openfood/network/OpenFoodAPIClient.kt | 26 ++--- app/src/main/res/values/strings.xml | 106 ------------------ 4 files changed, 110 insertions(+), 126 deletions(-) diff --git a/app/src/main/java/openfoodfacts/github/scrachx/openfood/features/product/view/serverattributes/ServerAttributesFragment.kt b/app/src/main/java/openfoodfacts/github/scrachx/openfood/features/product/view/serverattributes/ServerAttributesFragment.kt index 4b9355256d10..e219ded8ce97 100644 --- a/app/src/main/java/openfoodfacts/github/scrachx/openfood/features/product/view/serverattributes/ServerAttributesFragment.kt +++ b/app/src/main/java/openfoodfacts/github/scrachx/openfood/features/product/view/serverattributes/ServerAttributesFragment.kt @@ -1,7 +1,6 @@ package openfoodfacts.github.scrachx.openfood.features.product.view.serverattributes import android.os.Bundle -import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -29,8 +28,6 @@ class ServerAttributesFragment : BaseFragment() { super.onViewCreated(view, savedInstanceState) val attributeGroups = productState.product!!.getLocalAttributeGroups(requireContext()) - Log.i("ServerAttributes", attributeGroups.toString()) - binding.attrsList.setAdapter(AttributeGroupsAdapter(attributeGroups, requireActivity())) } diff --git a/app/src/main/java/openfoodfacts/github/scrachx/openfood/network/ApiFields.kt b/app/src/main/java/openfoodfacts/github/scrachx/openfood/network/ApiFields.kt index 65b7a66f7043..5a4f9d5b95b6 100644 --- a/app/src/main/java/openfoodfacts/github/scrachx/openfood/network/ApiFields.kt +++ b/app/src/main/java/openfoodfacts/github/scrachx/openfood/network/ApiFields.kt @@ -13,6 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:Suppress("MemberVisibilityCanBePrivate") + package openfoodfacts.github.scrachx.openfood.network import openfoodfacts.github.scrachx.openfood.models.ProductImageField @@ -163,6 +165,9 @@ object ApiFields { ProductImageField.NUTRITION, ProductImageField.PACKAGING ) + const val LANGUAGES_CODES = "languages_codes" + const val URL = "url" + const val ALLERGENS = "allergens" @JvmStatic @Contract(pure = true) @@ -171,5 +176,101 @@ object ApiFields { @JvmStatic @Contract(pure = true) fun lcIngredientsKey(lang: String) = "${Prefix.INGREDIENTS_TEXT}$lang" + + const val NUTRITION_GRADES_TAGS = "nutrition_grades_tags" + + const val OTHER = "other" + + val PRODUCT_COMMON_FIELDS = setOf( + PRODUCT_NAME, + GENERIC_NAME, + IMAGE_SMALL_URL, + IMAGE_FRONT_URL, + IMAGE_INGREDIENTS_URL, + IMAGE_NUTRITION_URL, + IMAGE_PACKAGING_URL, + IMAGE_URL, + SELECTED_IMAGES, + LANGUAGES_CODES, + VITAMINS_TAGS, + MINERALS_TAGS, + AMINO_ACIDS_TAGS, + OTHER_NUTRITIONAL_SUBSTANCES_TAGS, + URL, + BARCODE, + TRACES_TAGS, + INGREDIENTS_MAY_PALM_OIL_TAGS, + BRANDS_TAGS, + TRACES, + CATEGORIES_TAGS, + INGREDIENTS_TEXT, + INGREDIENTS_FROM_PALM_OIL_TAGS, + SERVING_SIZE, + ALLERGENS_TAGS, + ALLERGENS, + ORIGINS, + STORES, + NUTRITION_GRADE_FR, + NUTRITION_GRADES_TAGS, + NUTRIENT_LEVELS, + ECOSCORE, + COUNTRIES, + COUNTRIES_TAGS, + BRANDS, + PACKAGING, + LABELS_TAGS, + LABELS_HIERARCHY, + CITIES_TAGS, + QUANTITY, + INGREDIENTS_PALM_OIL_N, + LINK, + EMB_CODES_TAGS, + STATES_TAGS, + CREATOR, + CREATED_DATE_TIME, + LAST_MODIFIED_TIME, + LAST_MODIFIED_BY, + EDITORS_TAGS, + NOVA_GROUPS, + LANG, + PURCHASE_PLACES, + NUTRITION_DATA_PER, + NO_NUTRITION_DATA, + OTHER, + OTHER_INFORMATION, + CONSERVATION_CONDITIONS, + RECYCLING_INSTRUCTIONS_TO_DISCARD, + RECYCLING_INSTRUCTIONS_TO_RECYCLE, + WARNING, + CUSTOMER_SERVICE, + ENVIRONMENT_INFOCARD, + ENVIRONMENT_IMPACT_LEVEL_TAGS, + INGREDIENTS_ANALYSIS_TAGS, + INGREDIENTS, + STATES_TAGS + ) + + val PRODUCT_LOCAL_FIELDS = setOf( + PRODUCT_NAME to true, + GENERIC_NAME to true, + INGREDIENTS_TEXT to true, + OTHER_INFORMATION to true, + CONSERVATION_CONDITIONS to true, + RECYCLING_INSTRUCTIONS_TO_DISCARD to true, + RECYCLING_INSTRUCTIONS_TO_RECYCLE to true, + WARNING to true, + ATTRIBUTE_GROUPS to false, + CUSTOMER_SERVICE to true, + IMAGE_FRONT_URL to true, + IMAGE_INGREDIENTS_URL to true, + IMAGE_NUTRITION_URL to true, + IMAGE_PACKAGING_URL to true + ) + + val PRODUCT_IMAGES_FIELDS = setOf( + PRODUCT_NAME, GENERIC_NAME, BARCODE, LANG, IMAGE_SMALL_URL, IMAGES, + IMAGE_FRONT_URL, IMAGE_INGREDIENTS_URL, IMAGE_NUTRITION_URL, + IMAGE_PACKAGING_URL, IMAGE_URL, SELECTED_IMAGES + ) } } \ No newline at end of file diff --git a/app/src/main/java/openfoodfacts/github/scrachx/openfood/network/OpenFoodAPIClient.kt b/app/src/main/java/openfoodfacts/github/scrachx/openfood/network/OpenFoodAPIClient.kt index 5889d21c9f45..162e02256325 100644 --- a/app/src/main/java/openfoodfacts/github/scrachx/openfood/network/OpenFoodAPIClient.kt +++ b/app/src/main/java/openfoodfacts/github/scrachx/openfood/network/OpenFoodAPIClient.kt @@ -8,7 +8,6 @@ import android.widget.Toast import androidx.core.content.edit import com.afollestad.materialdialogs.MaterialDialog import com.fasterxml.jackson.databind.JsonNode -import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import io.reactivex.Completable import io.reactivex.Single import io.reactivex.disposables.CompositeDisposable @@ -34,15 +33,9 @@ import openfoodfacts.github.scrachx.openfood.models.entities.OfflineSavedProduct import openfoodfacts.github.scrachx.openfood.models.entities.ToUploadProduct import openfoodfacts.github.scrachx.openfood.models.entities.ToUploadProductDao import openfoodfacts.github.scrachx.openfood.network.CommonApiManager.productsApi -import openfoodfacts.github.scrachx.openfood.network.services.ProductsAPI import openfoodfacts.github.scrachx.openfood.utils.* import openfoodfacts.github.scrachx.openfood.utils.LocaleHelper.getLanguage import openfoodfacts.github.scrachx.openfood.utils.Utils.daoSession -import openfoodfacts.github.scrachx.openfood.utils.Utils.defaultHttpClient -import retrofit2.Retrofit -import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory -import retrofit2.converter.jackson.JacksonConverterFactory -import retrofit2.converter.scalars.ScalarsConverterFactory import java.io.File import java.io.IOException import java.util.* @@ -60,14 +53,14 @@ class OpenFoodAPIClient(private val context: Context) { } private fun getAllFields(): String { - val allFields = context.resources.getStringArray(R.array.product_all_fields_array) - val fieldsToLocalize = context.resources.getStringArray(R.array.fields_array) - val langCode = getLanguage(context) + val allFields = ApiFields.Keys.PRODUCT_COMMON_FIELDS + val fieldsToLocalize = ApiFields.Keys.PRODUCT_LOCAL_FIELDS + val langCode = getLanguage(context) val fieldsSet = allFields.toMutableSet() - fieldsToLocalize.forEach { fieldToLocalize -> - fieldsSet.add("${fieldToLocalize}_$langCode") - fieldsSet.add("${fieldToLocalize}_en") + fieldsToLocalize.forEach { (field, shouldAddEn) -> + fieldsSet.add("${field}_$langCode") + if (shouldAddEn) fieldsSet.add("${field}_en") } return fieldsSet.joinToString(",") } @@ -95,10 +88,9 @@ class OpenFoodAPIClient(private val context: Context) { * @param barcode product barcode */ fun getProductImages(barcode: String): Single { - val fields = setOf( - *context.resources.getStringArray(R.array.product_images_fields_array), - "product_name_${getLanguage(context)}" - ).joinToString(",") + val fields = ApiFields.Keys.PRODUCT_IMAGES_FIELDS.toMutableSet().also { + it += ApiFields.Keys.lcProductNameKey(getLanguage(context)) + }.joinToString(",") return productsApi.getProductByBarcode( barcode, fields, diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4dc1899f7eb9..31d57aafa67a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -310,112 +310,6 @@ - - product_name - generic_name - code - lang - image_small_url - images - image_front_url - image_ingredients_url - image_nutrition_url - image_packaging_url - image_url - selected_images - - - - - product_name - generic_name - image_small_url - image_front_url - image_ingredients_url - image_nutrition_url - image_packaging_url - image_url - selected_images - languages_codes - vitamins_tags - minerals_tags - amino_acids_tags - other_nutritional_substances_tags - url - code - traces_tags - ingredients_that_may_be_from_palm_oil_tags - additives_tags - allergens_hierarchy - manufacturing_places - nutriments - ingredients_from_palm_oil_tags - brands_tags - traces - categories_tags - ingredients_text - ingredients_from_or_that_may_be_from_palm_oil_n - serving_size - allergens_tags - allergens - origins - stores - nutrition_grade_fr - nutrition_grades_tags - nutrient_levels - ecoscore_grade - countries - countries_tags - brands - packaging - labels_tags - labels_hierarchy - cities_tags - quantity - ingredients_from_palm_oil_n - link - emb_codes_tags - states_tags - creator - created_t - last_modified_t - last_modified_by - editors_tags - nova_groups - lang - purchase_places - nutrition_data_per - no_nutrition_data - other - other_information - conservation_conditions - recycling_instructions_to_discard - recycling_instructions_to_recycle - warning - customer_service - environment_infocard - environment_impact_level_tags - ingredients_analysis_tags - ingredients - states_tags - - - product_name - generic_name - ingredients_text - other_information - conservation_conditions - recycling_instructions_to_discard - recycling_instructions_to_recycle - warning - attribute_groups - customer_service - image_front_url - image_ingredients_url - image_nutrition_url - image_packaging_url - - https://world-%1$s.openfoodfacts.org/ingredients?translate=1