Unify copyToClipboard

This is motivated by not showing the toast on Android 13 and above.
See https://developer.android.com/develop/ui/views/touch-and-input/copy-paste#duplicate-notifications.
This commit is contained in:
Thore Goebel 2023-06-16 20:42:24 +02:00
parent c15efff72c
commit d1015cb50a
5 changed files with 17 additions and 54 deletions

View file

@ -460,12 +460,7 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback, NotificationFra
Log.d(TAG, "Copying topic URL $url to clipboard ")
runOnUiThread {
val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clip = ClipData.newPlainText("topic address", url)
clipboard.setPrimaryClip(clip)
Toast
.makeText(this, getString(R.string.detail_copied_to_clipboard_message), Toast.LENGTH_LONG)
.show()
copyToClipboard(this, "topic address", url)
}
}
@ -639,13 +634,9 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback, NotificationFra
}
}
} else {
copyToClipboard(notification)
}
}
private fun copyToClipboard(notification: Notification) {
runOnUiThread {
copyToClipboard(this, notification)
runOnUiThread {
copyToClipboard(this, "notification", decodeMessage(notification))
}
}
}
@ -702,12 +693,7 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback, NotificationFra
}.orEmpty()
}
runOnUiThread {
val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clip = ClipData.newPlainText("notifications", content)
clipboard.setPrimaryClip(clip)
Toast
.makeText(this@DetailActivity, getString(R.string.detail_copied_to_clipboard_message), Toast.LENGTH_LONG)
.show()
copyToClipboard(this@DetailActivity, "notifications", content)
finishActionMode()
}
}

View file

@ -281,12 +281,14 @@ class DetailAdapter(private val activity: Activity, private val lifecycleScope:
openItem.setOnMenuItemClickListener { openFile(context, attachment) }
saveFileItem.setOnMenuItemClickListener { saveFile(context, attachment) }
deleteItem.setOnMenuItemClickListener { deleteFile(context, notification, attachment) }
copyUrlItem.setOnMenuItemClickListener { copyUrl(context, attachment) }
copyUrlItem.setOnMenuItemClickListener { copyToClipboard(context, "attachment url", attachment.url); true }
downloadItem.setOnMenuItemClickListener { downloadFile(context, notification) }
cancelItem.setOnMenuItemClickListener { cancelDownload(context, notification) }
}
if (hasClickLink) {
copyContentsItem.setOnMenuItemClickListener { copyContents(context, notification) }
copyContentsItem.setOnMenuItemClickListener {
copyToClipboard(context, "notification", decodeMessage(notification)); true
}
}
openItem.isVisible = hasAttachment && attachmentExists
downloadItem.isVisible = hasAttachment && !attachmentExists && !expired && !inProgress
@ -480,21 +482,6 @@ class DetailAdapter(private val activity: Activity, private val lifecycleScope:
return true
}
private fun copyUrl(context: Context, attachment: Attachment): Boolean {
val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clip = ClipData.newPlainText("attachment url", attachment.url)
clipboard.setPrimaryClip(clip)
Toast
.makeText(context, context.getString(R.string.detail_item_menu_copy_url_copied), Toast.LENGTH_LONG)
.show()
return true
}
private fun copyContents(context: Context, notification: Notification): Boolean {
copyToClipboard(context, notification)
return true
}
private fun runAction(context: Context, notification: Notification, action: Action): Boolean {
when (action.action) {
ACTION_VIEW -> runViewAction(context, action)

View file

@ -412,12 +412,7 @@ class DetailSettingsActivity : AppCompatActivity() {
topicUrlPref?.summary = topicUrl
topicUrlPref?.onPreferenceClickListener = OnPreferenceClickListener {
val context = context ?: return@OnPreferenceClickListener false
val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clip = ClipData.newPlainText("topic url", topicUrl)
clipboard.setPrimaryClip(clip)
Toast
.makeText(context, getString(R.string.detail_settings_about_topic_url_copied_to_clipboard_message), Toast.LENGTH_LONG)
.show()
copyToClipboard(context, "topic url", topicUrl)
true
}
}

View file

@ -552,12 +552,7 @@ class SettingsActivity : AppCompatActivity(), PreferenceFragmentCompat.OnPrefere
versionPref?.summary = version
versionPref?.onPreferenceClickListener = OnPreferenceClickListener {
val context = context ?: return@OnPreferenceClickListener false
val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clip = ClipData.newPlainText("ntfy version", version)
clipboard.setPrimaryClip(clip)
Toast
.makeText(context, getString(R.string.settings_about_version_copied_to_clipboard_message), Toast.LENGTH_LONG)
.show()
copyToClipboard(context, "ntfy version", version)
true
}
}

View file

@ -481,14 +481,14 @@ fun ensureSafeNewFile(dir: File, name: String): File {
throw Exception("Cannot find safe file")
}
fun copyToClipboard(context: Context, notification: Notification) {
val message = decodeMessage(notification)
fun copyToClipboard(context: Context, label: String, message: String) {
val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clip = ClipData.newPlainText("notification message", message)
val clip = ClipData.newPlainText(label, message)
clipboard.setPrimaryClip(clip)
Toast
.makeText(context, context.getString(R.string.detail_copied_to_clipboard_message), Toast.LENGTH_LONG)
.show()
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.S_V2) {
val copied = context.getString(R.string.detail_copied_to_clipboard_message)
Toast.makeText(context, copied, Toast.LENGTH_LONG).show()
}
}
fun String.sha256(): String {