aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/ui/src/main/java/com/wireguard/android/util/ClipboardUtils.kt
diff options
context:
space:
mode:
Diffstat (limited to 'ui/src/main/java/com/wireguard/android/util/ClipboardUtils.kt')
-rw-r--r--ui/src/main/java/com/wireguard/android/util/ClipboardUtils.kt37
1 files changed, 37 insertions, 0 deletions
diff --git a/ui/src/main/java/com/wireguard/android/util/ClipboardUtils.kt b/ui/src/main/java/com/wireguard/android/util/ClipboardUtils.kt
new file mode 100644
index 00000000..8968979f
--- /dev/null
+++ b/ui/src/main/java/com/wireguard/android/util/ClipboardUtils.kt
@@ -0,0 +1,37 @@
+/*
+ * Copyright © 2017-2025 WireGuard LLC. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+package com.wireguard.android.util
+
+import android.content.ClipData
+import android.content.ClipboardManager
+import android.os.Build
+import android.view.View
+import android.widget.TextView
+import androidx.core.content.getSystemService
+import com.google.android.material.snackbar.Snackbar
+import com.google.android.material.textfield.TextInputEditText
+import com.wireguard.android.R
+
+/**
+ * Standalone utilities for interacting with the system clipboard.
+ */
+object ClipboardUtils {
+ @JvmStatic
+ fun copyTextView(view: View) {
+ val data = when (view) {
+ is TextInputEditText -> Pair(view.editableText, view.hint)
+ is TextView -> Pair(view.text, view.contentDescription)
+ else -> return
+ }
+ if (data.first == null || data.first.isEmpty()) {
+ return
+ }
+ val service = view.context.getSystemService<ClipboardManager>() ?: return
+ service.setPrimaryClip(ClipData.newPlainText(data.second, data.first))
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
+ Snackbar.make(view, view.context.getString(R.string.copied_to_clipboard, data.second), Snackbar.LENGTH_LONG).show()
+ }
+ }
+}