Compare commits

...

5 commits

Author SHA1 Message Date
Amir E. Aharoni
b8d340fbe8
Rephrase the string copy_image_caption_description (#6472)
Some checks are pending
Android CI / Run tests and generate APK (push) Waiting to run
I was going over all the strings and documenting them (see #6457),
and I had a very hard time understand what this message does.
I read the code and finally figured it out. I added qq documentation
for it so now it's clearer, but I also think that the English
message can be clearer:
* "subsequent" changed to "the next" - shorter, easier word.
* "media" changed to "item" - "media" could mean a lot of things,
  and "item" is clearer in this context.
2025-10-11 14:54:40 +09:00
Amir E. Aharoni
dd1814c793
Change filename to username in toasts about sending thanks (#6467)
This fixes #6466.

Also fix the messages themselves a bit:
* Removed "successfully" from the success message. This word
  is usually redundant, because the message already says that it
  was done. (In MediaWiki, there's a specific convention about it:
  https://www.mediawiki.org/wiki/Help:System_message#Avoid_jargon_and_slanghttps://www.mediawiki.org/wiki/Help:System_message#Avoid_jargon_and_slang
)
* Added a missing preposition to the failure message.

Co-authored-by: Nicolas Raoul <nicolas.raoul@gmail.com>
2025-10-11 14:53:57 +09:00
VoidRaven
adb6181e9f
fix: map crash (fixes #6432) (#6479)
* fix: map crash (fixes #6432)

* Fix typos in comments in ExploreMapFragment.kt

---------

Co-authored-by: Nicolas Raoul <nicolas.raoul@gmail.com>
2025-10-11 14:38:07 +09:00
Jason-Whitmore
0a4b179db5
Fixes Issue 6436: getString(...) must not be null (#6474)
* DatabaseUtils.kt: change getString() to allow null returns

Before this change, a call to getString() would assume that the specified column
name actually exists. A bad String input would cause a null value to be returned
to getString(), which would then throw a NPE because getString() can only return
non null Strings.

This change expands the getString() method to check if the column name exists.
If it does exist, the String is retrieved normally. Else, a null value is
returned. The method signature is changed to allow null return values.

* *Dao.kt: change some usages of getString()

Before this change, the getString() method in DatabaseUtils.kt was changed
to allow returning a null value upon method failure. All usages of getString()
were not changed.

This change updates all usages of getString() which require non null return
values. If null is returned, an empty string is used instead.

---------

Co-authored-by: Nicolas Raoul <nicolas.raoul@gmail.com>
2025-10-11 14:12:19 +09:00
Amir E. Aharoni
e78db7fa08
Remove the unused message "statistics" (#6478)
Its usage was removed from the file
app/src/main/res/layout/fragment_achievements.xml in a8387f0,
but the message remained in the strings file.

Resolves #6456.
2025-10-11 13:58:19 +09:00
8 changed files with 55 additions and 23 deletions

View file

@ -144,8 +144,18 @@ class BookmarkItemsDao @Inject constructor(
*/
@SuppressLint("Range")
fun fromCursor(cursor: Cursor) = with(cursor) {
var name = getString(COLUMN_NAME)
if (name == null) {
name = ""
}
var id = getString(COLUMN_ID)
if (id == null) {
id = ""
}
DepictedItem(
getString(COLUMN_NAME),
name,
getString(COLUMN_DESCRIPTION),
getString(COLUMN_IMAGE),
getStringArray(COLUMN_INSTANCE_LIST),
@ -155,7 +165,7 @@ class BookmarkItemsDao @Inject constructor(
getStringArray(COLUMN_CATEGORIES_THUMBNAIL_LIST)
),
getString(COLUMN_IS_SELECTED).toBoolean(),
getString(COLUMN_ID)
id
)
}

View file

@ -128,7 +128,10 @@ class BookmarkPicturesDao @Inject constructor(
}
fun fromCursor(cursor: Cursor): Bookmark {
val fileName = cursor.getString(COLUMN_MEDIA_NAME)
var fileName = cursor.getString(COLUMN_MEDIA_NAME)
if (fileName == null) {
fileName = ""
}
return Bookmark(
fileName, cursor.getString(COLUMN_CREATOR), uriForName(fileName)
)

View file

@ -963,13 +963,17 @@ class ExploreMapFragment : CommonsDaggerSupportFragment(), ExploreMapContract.Vi
if (geoPoint != null) {
binding!!.mapView.controller.setCenter(geoPoint)
val overlays = binding!!.mapView.overlays
// collects the indices of items to remove
val indicesToRemove = mutableListOf<Int>()
for (i in overlays.indices) {
if (overlays[i] is Marker) {
binding!!.mapView.overlays.removeAt(i)
} else if (overlays[i] is ScaleDiskOverlay) {
binding!!.mapView.overlays.removeAt(i)
if (overlays[i] is Marker || overlays[i] is ScaleDiskOverlay) {
indicesToRemove.add(i)
}
}
// removes the items in reverse order to avoid index shifting
indicesToRemove.sortedDescending().forEach { index ->
binding!!.mapView.overlays.removeAt(index)
}
val diskOverlay = ScaleDiskOverlay(
requireContext(),
geoPoint, 2000, GeoConstants.UnitOfMeasure.foot
@ -979,7 +983,6 @@ class ExploreMapFragment : CommonsDaggerSupportFragment(), ExploreMapContract.Vi
this.style = Paint.Style.STROKE
this.strokeWidth = 2f
})
setCirclePaint1(Paint().apply {
setColor(Color.argb(40, 128, 128, 128))
this.style = Paint.Style.FILL_AND_STROKE
@ -988,7 +991,6 @@ class ExploreMapFragment : CommonsDaggerSupportFragment(), ExploreMapContract.Vi
setDisplaySizeMax(1700)
}
binding!!.mapView.overlays.add(diskOverlay)
val startMarker = Marker(
binding!!.mapView
).apply {

View file

@ -163,11 +163,19 @@ class RecentSearchesDao @Inject constructor(
* @param cursor
* @return RecentSearch object
*/
fun fromCursor(cursor: Cursor): RecentSearch = RecentSearch(
uriForId(cursor.getInt(COLUMN_ID)),
cursor.getString(COLUMN_NAME),
Date(cursor.getLong(COLUMN_LAST_USED))
)
fun fromCursor(cursor: Cursor): RecentSearch {
var query = cursor.getString(COLUMN_NAME)
if (query == null) {
query = ""
}
return RecentSearch(
uriForId(cursor.getInt(COLUMN_ID)),
query,
Date(cursor.getLong(COLUMN_LAST_USED))
)
}
/**
* This class contains the database table architechture for recent searches,

View file

@ -1027,12 +1027,12 @@ class MediaDetailFragment : CommonsDaggerSupportFragment(), CategoryEditHelper.C
val message: String = if (result) {
context.getString(
R.string.send_thank_success_message,
media!!.displayTitle
media!!.user
)
} else {
context.getString(
R.string.send_thank_failure_message,
media!!.displayTitle
media!!.user
)
}

View file

@ -6,9 +6,20 @@ import android.database.Cursor
fun Cursor.getStringArray(name: String): List<String> =
stringToArray(getString(name))
/**
* Gets the String at the current row and specified column.
*
* @param name The name of the column to get the String from.
* @return The String if the column exists. Else, null is returned.
*/
@SuppressLint("Range")
fun Cursor.getString(name: String): String =
getString(getColumnIndex(name))
fun Cursor.getString(name: String): String? {
val index = getColumnIndex(name)
if (index == -1) {
return null
}
return getString(index)
}
@SuppressLint("Range")
fun Cursor.getInt(name: String): Int =

View file

@ -374,7 +374,6 @@
<string name="Achievements">Menu item.</string>
<string name="Profile">Menu item.</string>
<string name="badges">Title on Profile page.</string>
<string name="statistics">Seems to be unused.</string>
<string name="statistics_thanks">Title on Profile page.</string>
<string name="statistics_featured">To see the correct translation for your language, please go to https://commons.wikimedia.org/wiki/Commons:Featured_pictures and select your language in \"This project page in other languages\".</string>
<string name="statistics_wikidata_edits">Item in statistics.</string>

View file

@ -384,7 +384,6 @@
<string name="Achievements">Achievements</string>
<string name="Profile">Profile</string>
<string name="badges">Badges</string>
<string name="statistics">Statistics</string>
<string name="statistics_thanks">Thanks Received</string>
<string name="statistics_featured">Featured Images</string>
<string name="statistics_wikidata_edits">Images via \"Nearby Places\"</string>
@ -494,8 +493,8 @@ Upload your first media by tapping on the add button.</string>
<string name="check_category_toast">Requesting category check for %1$s</string>
<string name="nominate_for_deletion_done">Done</string>
<string name="send_thank_success_title">Sending Thanks: Success</string>
<string name="send_thank_success_message">Successfully sent thanks to %1$s</string>
<string name="send_thank_failure_message">Failed to send thanks %1$s</string>
<string name="send_thank_success_message">Sent thanks to %1$s</string>
<string name="send_thank_failure_message">Failed to send thanks to %1$s</string>
<string name="send_thank_failure_title">Sending Thanks: Failure</string>
<string name="send_thank_toast">Sending Thanks for %1$s</string>
@ -533,7 +532,7 @@ Upload your first media by tapping on the add button.</string>
<string name="images_featured_explanation">Featured pictures are images from highly skilled photographers and illustrators that the Wikimedia Commons community has chosen as some of the highest quality on the site.</string>
<string name="images_via_nearby_explanation">Images Uploaded via Nearby places are the images which are uploaded by discovering places on the map.</string>
<string name="thanks_received_explanation">This feature allows editors to send a Thank you notification to users who make useful edits by using a small thank link on the history page or diff page.</string>
<string name="copy_image_caption_description">Copy to subsequent media</string>
<string name="copy_image_caption_description">Copy to the next items</string>
<string name="copied_successfully">Copied</string>
<string name="welcome_do_upload_content_description">Examples of good images to upload to Commons</string>
<string name="welcome_dont_upload_content_description">Examples of images not to upload</string>