Skip to content

Commit b2159ed

Browse files
feat: Long-pressing a row in "Uploads" copies the caption to clipboard, and displays a snack saying "Caption copied to clipboard" (commons-app#6105)
* feat: Long-pressing a row in "Uploads" copies the caption to clipboard, and displays a snack saying "Caption copied to clipboard * refactor: using string resources for the text instead of hard coded values
1 parent ecb19d6 commit b2159ed

File tree

3 files changed

+44
-0
lines changed

3 files changed

+44
-0
lines changed

app/src/main/java/fr/free/nrw/commons/upload/FailedUploadsAdapter.kt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package fr.free.nrw.commons.upload
22

3+
import android.content.ClipData
4+
import android.content.ClipboardManager
5+
import android.content.Context.CLIPBOARD_SERVICE
36
import android.net.Uri
47
import android.text.TextUtils
58
import android.view.LayoutInflater
@@ -13,6 +16,7 @@ import androidx.paging.PagedListAdapter
1316
import androidx.recyclerview.widget.DiffUtil
1417
import androidx.recyclerview.widget.RecyclerView
1518
import com.facebook.imagepipeline.request.ImageRequest
19+
import com.google.android.material.snackbar.Snackbar
1620
import fr.free.nrw.commons.R
1721
import fr.free.nrw.commons.contributions.Contribution
1822
import java.io.File
@@ -51,6 +55,24 @@ class FailedUploadsAdapter(
5155
position: Int,
5256
) {
5357
val item: Contribution? = getItem(position)
58+
val itemView = holder.itemView
59+
val clipboardManager =
60+
itemView.context.getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
61+
62+
itemView.setOnLongClickListener {
63+
val clip = ClipData.newPlainText(
64+
itemView.context.getString(R.string.caption),
65+
item?.media?.displayTitle
66+
)
67+
clipboardManager.setPrimaryClip(clip)
68+
Snackbar.make(
69+
itemView,
70+
itemView.context.getString(R.string.caption_copied_to_clipboard),
71+
Snackbar.LENGTH_SHORT
72+
).show()
73+
true
74+
}
75+
5476
if (item != null) {
5577
holder.titleTextView.setText(item.media.displayTitle)
5678
}

app/src/main/java/fr/free/nrw/commons/upload/PendingUploadsAdapter.kt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package fr.free.nrw.commons.upload
22

3+
import android.content.ClipData
4+
import android.content.ClipboardManager
5+
import android.content.Context.CLIPBOARD_SERVICE
36
import android.net.Uri
47
import android.text.TextUtils
58
import android.view.LayoutInflater
@@ -13,6 +16,7 @@ import androidx.paging.PagedListAdapter
1316
import androidx.recyclerview.widget.DiffUtil
1417
import androidx.recyclerview.widget.RecyclerView
1518
import com.facebook.imagepipeline.request.ImageRequest
19+
import com.google.android.material.snackbar.Snackbar
1620
import fr.free.nrw.commons.R
1721
import fr.free.nrw.commons.contributions.Contribution
1822
import java.io.File
@@ -99,6 +103,22 @@ class PendingUploadsAdapter(
99103

100104
fun bind(contribution: Contribution) {
101105
titleTextView.text = contribution.media.displayTitle
106+
val clipboardManager =
107+
itemView.context.getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
108+
109+
itemView.setOnLongClickListener {
110+
val clip = ClipData.newPlainText(
111+
itemView.context.getString(R.string.caption),
112+
titleTextView.text
113+
)
114+
clipboardManager.setPrimaryClip(clip)
115+
Snackbar.make(
116+
itemView,
117+
itemView.context.getString(R.string.caption_copied_to_clipboard),
118+
Snackbar.LENGTH_SHORT
119+
).show()
120+
true
121+
}
102122

103123
val imageSource: String = contribution.localUri.toString()
104124
var imageRequest: ImageRequest? = null

app/src/main/res/values/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -860,5 +860,7 @@ Upload your first media by tapping on the add button.</string>
860860
<string name="usages_on_other_wikis_heading">Other wikis</string>
861861
<string name="bullet_point">•</string>
862862
<string name="file_usages_container_heading">File usages</string>
863+
<string name="caption">Caption</string>
864+
<string name="caption_copied_to_clipboard">Caption copied to clipboard</string>
863865

864866
</resources>

0 commit comments

Comments
 (0)