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 @@