From 1a13cb3383cb3944e423672c9e5e94fae7643764 Mon Sep 17 00:00:00 2001 From: Ritika Pahwa <83745993+RitikaPahwa4444@users.noreply.github.com> Date: Tue, 15 Apr 2025 02:43:33 +0530 Subject: [PATCH 01/17] Add v5.3.0 to CHANGELOG.md --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0da417cfa9..df55b1124f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Wikimedia Commons for Android +## v5.3.0 + +### What's changed +* Enable EmailAuth support +* Explore map images no longer show "Unknown" +* Fix crash when removing last two images of multiupload +* Mark ❌ for closed locations (P3999) in Nearby +* Fix two pin labels staying visible at the same time in Explore map +* Refactoring and minor UI improvements + ## v5.2.0 v5.2.0 boasts several new functionalities like: From 78d29bcf2039e5afdd166600a11db365b4c1cfb6 Mon Sep 17 00:00:00 2001 From: Sonal Yadav Date: Tue, 15 Apr 2025 09:23:26 +0530 Subject: [PATCH 02/17] FIX : Custom picker detect images that is already in commons (#6288) * Fix: Exclude specific text from being posted in WikidataFeedback * Add detection logic for images already on Commons in custom picker --- .../customselector/ui/adapter/ImageAdapter.kt | 50 ++++++++----------- .../ui/selector/CustomSelectorActivity.kt | 21 ++++---- .../nrw/commons/nearby/WikidataFeedback.kt | 2 +- 3 files changed, 34 insertions(+), 39 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/customselector/ui/adapter/ImageAdapter.kt b/app/src/main/java/fr/free/nrw/commons/customselector/ui/adapter/ImageAdapter.kt index ff623d4960..abb2dc84a5 100644 --- a/app/src/main/java/fr/free/nrw/commons/customselector/ui/adapter/ImageAdapter.kt +++ b/app/src/main/java/fr/free/nrw/commons/customselector/ui/adapter/ImageAdapter.kt @@ -26,6 +26,7 @@ import kotlinx.coroutines.MainScope import kotlinx.coroutines.cancel import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import java.util.TreeMap import kotlin.collections.ArrayList @@ -342,45 +343,36 @@ class ImageAdapter( numberOfSelectedImagesMarkedAsNotForUpload-- } notifyItemChanged(position, ImageUnselected()) - - // Getting index from all images index when switch is on - val indexes = - if (showAlreadyActionedImages) { - ImageHelper.getIndexList(selectedImages, images) - - // Getting index from actionable images when switch is off - } else { - ImageHelper.getIndexList(selectedImages, ArrayList(actionableImagesMap.values)) - } - for (index in indexes) { - notifyItemChanged(index, ImageSelectedOrUpdated()) - } } else { + val image = images[position] + scope.launch(ioDispatcher) { + val imageSHA1 = imageLoader.getSHA1(image, defaultDispatcher) + withContext(Dispatchers.Main) { if (holder.isItemUploaded()) { Toast.makeText(context, R.string.custom_selector_already_uploaded_image_text, Toast.LENGTH_SHORT).show() - } else { - if (holder.isItemNotForUpload()) { - numberOfSelectedImagesMarkedAsNotForUpload++ - } + return@withContext + } - // Getting index from all images index when switch is on - val indexes: ArrayList = - if (showAlreadyActionedImages) { - selectedImages.add(images[position]) - ImageHelper.getIndexList(selectedImages, images) + if (imageSHA1.isNotEmpty() && imageLoader.getFromUploaded(imageSHA1) != null) { + holder.itemUploaded() + Toast.makeText(context, R.string.custom_selector_already_uploaded_image_text, Toast.LENGTH_SHORT).show() + return@withContext + } - // Getting index from actionable images when switch is off - } else { - selectedImages.add(ArrayList(actionableImagesMap.values)[position]) - ImageHelper.getIndexList(selectedImages, ArrayList(actionableImagesMap.values)) + if (!holder.isItemUploaded() && imageSHA1.isNotEmpty() && imageLoader.getFromUploaded(imageSHA1) != null) { + Toast.makeText(context, R.string.custom_selector_already_uploaded_image_text, Toast.LENGTH_SHORT).show() } - for (index in indexes) { - notifyItemChanged(index, ImageSelectedOrUpdated()) + if (holder.isItemNotForUpload()) { + numberOfSelectedImagesMarkedAsNotForUpload++ + } + selectedImages.add(image) + notifyItemChanged(position, ImageSelectedOrUpdated()) + + imageSelectListener.onSelectedImagesChanged(selectedImages, numberOfSelectedImagesMarkedAsNotForUpload) } } } - imageSelectListener.onSelectedImagesChanged(selectedImages, numberOfSelectedImagesMarkedAsNotForUpload) } /** diff --git a/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivity.kt b/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivity.kt index 4e2d58babe..6b78dfd413 100644 --- a/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivity.kt +++ b/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivity.kt @@ -638,17 +638,20 @@ class CustomSelectorActivity : finishPickImages(arrayListOf()) return } - var i = 0 - while (i < selectedImages.size) { - val path = selectedImages[i].path - val file = File(path) - if (!file.exists()) { - selectedImages.removeAt(i) - i-- + scope.launch(ioDispatcher) { + val uniqueImages = selectedImages.distinctBy { image -> + CustomSelectorUtils.getImageSHA1( + image.uri, + ioDispatcher, + fileUtilsWrapper, + contentResolver + ) + } + + withContext(Dispatchers.Main) { + finishPickImages(ArrayList(uniqueImages)) } - i++ } - finishPickImages(selectedImages) } /** diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/WikidataFeedback.kt b/app/src/main/java/fr/free/nrw/commons/nearby/WikidataFeedback.kt index e5196bee89..a1bad1f268 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/WikidataFeedback.kt +++ b/app/src/main/java/fr/free/nrw/commons/nearby/WikidataFeedback.kt @@ -103,4 +103,4 @@ class WikidataFeedback : BaseActivity() { onBackPressed() return true } -} +} \ No newline at end of file From ed42d85f6766f5707c54bb0bf63b6cfbe2f3b14c Mon Sep 17 00:00:00 2001 From: "translatewiki.net" Date: Thu, 17 Apr 2025 14:01:53 +0200 Subject: [PATCH 03/17] Localisation updates from https://translatewiki.net. --- app/src/main/res/values-ru/strings.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index d25d949ae7..b984183de3 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -170,6 +170,7 @@ Слишком много неудачных попыток. Пожалуйста, попробуйте ещё раз через несколько минут. Извините, но участник с таким именем был заблокирован на Викискладе Вы должны ввести код двухфакторной аутентификации. + Код подтверждения был отправлен на адрес вашей электронной почты. Пожалуйста, введите его для входа. Ошибка входа в систему Загрузка Введите название для этой группы файлов @@ -275,6 +276,7 @@ Стать бета-тестером Подпишитесь на наш канал бета-версии на Google Play и получите ранний доступ к новым функциям и исправлениям ошибок Код 2ФА + Код подтверждения электронной почты Вы действительно хотите выйти? Ошибка медиафайла Подкатегории не найдены. From 7479d96675c3270f33d55e227c849691f6354ef1 Mon Sep 17 00:00:00 2001 From: Khushbu Khemchandani Date: Mon, 21 Apr 2025 11:19:15 +0530 Subject: [PATCH 04/17] Code Enhancement (Explore Map) (#6293) * Exclude past locations (P585) from Nearby query * "Send" button text should be white * Custom picker: logic * Revert back changes * Enhancement :- Explore Map information * Enhancement :- Explore Map information * Style --------- Co-authored-by: Nicolas Raoul --- .../customselector/ui/adapter/ImageAdapter.kt | 8 ++++---- .../commons/explore/map/ExploreMapFragment.java | 16 ++++++++++++++-- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/customselector/ui/adapter/ImageAdapter.kt b/app/src/main/java/fr/free/nrw/commons/customselector/ui/adapter/ImageAdapter.kt index abb2dc84a5..20a2fe70a0 100644 --- a/app/src/main/java/fr/free/nrw/commons/customselector/ui/adapter/ImageAdapter.kt +++ b/app/src/main/java/fr/free/nrw/commons/customselector/ui/adapter/ImageAdapter.kt @@ -348,12 +348,12 @@ class ImageAdapter( scope.launch(ioDispatcher) { val imageSHA1 = imageLoader.getSHA1(image, defaultDispatcher) withContext(Dispatchers.Main) { - if (holder.isItemUploaded()) { - Toast.makeText(context, R.string.custom_selector_already_uploaded_image_text, Toast.LENGTH_SHORT).show() + if (holder.isItemUploaded()) { + Toast.makeText(context, R.string.custom_selector_already_uploaded_image_text, Toast.LENGTH_SHORT).show() return@withContext } - if (imageSHA1.isNotEmpty() && imageLoader.getFromUploaded(imageSHA1) != null) { + if (imageSHA1.isNotEmpty() && imageLoader.getFromUploaded(imageSHA1) != null) { holder.itemUploaded() Toast.makeText(context, R.string.custom_selector_already_uploaded_image_text, Toast.LENGTH_SHORT).show() return@withContext @@ -369,7 +369,7 @@ class ImageAdapter( selectedImages.add(image) notifyItemChanged(position, ImageSelectedOrUpdated()) - imageSelectListener.onSelectedImagesChanged(selectedImages, numberOfSelectedImagesMarkedAsNotForUpload) + imageSelectListener.onSelectedImagesChanged(selectedImages, numberOfSelectedImagesMarkedAsNotForUpload) } } } diff --git a/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapFragment.java b/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapFragment.java index 60758ac201..a222a98ac7 100644 --- a/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapFragment.java @@ -717,8 +717,20 @@ private void addMarkerToMap(BaseMarker nearbyBaseMarker) { authorUser = Html.fromHtml(authorUser, Html.FROM_HTML_MODE_LEGACY).toString(); } - OverlayItem item = new OverlayItem(nearbyBaseMarker.getPlace().name, - authorUser, point); + String title = nearbyBaseMarker.getPlace().name; + // Remove "File:" if present at start + if (title.startsWith("File:")) { + title = title.substring(5); + } + // Remove extensions like .jpg, .jpeg, .png, .svg (case insensitive) + title = title.replaceAll("(?i)\\.(jpg|jpeg|png|svg)$", ""); + title = title.replace("_", " "); + //Truncate if too long because it doesn't fit the screen + if (title.length() > 43) { + title = title.substring(0, 40) + "…"; + } + + OverlayItem item = new OverlayItem(title, authorUser, point); item.setMarker(d); items.add(item); ItemizedOverlayWithFocus overlay = new ItemizedOverlayWithFocus(items, From 30762971db0b8b54674f1d458605449fb146becc Mon Sep 17 00:00:00 2001 From: "translatewiki.net" Date: Mon, 21 Apr 2025 14:01:47 +0200 Subject: [PATCH 05/17] Localisation updates from https://translatewiki.net. --- app/src/main/res/values-bn/strings.xml | 8 ++++++ app/src/main/res/values-de/strings.xml | 14 +++++++--- app/src/main/res/values-fr/strings.xml | 3 +++ app/src/main/res/values-io/strings.xml | 6 +++++ app/src/main/res/values-ko/strings.xml | 5 ++-- app/src/main/res/values-ps/strings.xml | 36 +++++++++++++++----------- app/src/main/res/values-zh/strings.xml | 3 +++ 7 files changed, 55 insertions(+), 20 deletions(-) diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index a7a3da9a77..9b2fde3133 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -2,6 +2,7 @@