Skip to content

Commit ef561c4

Browse files
authored
fix: convert clip data into plain text before pasting to omnibar (#1105)
* fix: convert clip data into plain text before pasting to omnibar. By overriding onTextContextMenuItem in EditText. * fix: apply style guide * refactoring: encapsulate obtaining ClipboardManager from context
1 parent cd2108e commit ef561c4

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

app/src/main/java/com/duckduckgo/app/browser/omnibar/KeyboardAwareEditText.kt

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,11 @@
1616

1717
package com.duckduckgo.app.browser.omnibar
1818

19+
import android.content.ClipData
20+
import android.content.ClipboardManager
1921
import android.content.Context
2022
import android.graphics.Rect
23+
import android.os.Build
2124
import android.text.Editable
2225
import android.text.Selection
2326
import android.util.AttributeSet
@@ -75,6 +78,31 @@ class KeyboardAwareEditText : AppCompatEditText {
7578
}
7679
}
7780

81+
/**
82+
* Overrides to paste clip data without rich text formatting.
83+
*/
84+
override fun onTextContextMenuItem(id: Int): Boolean = when (id) {
85+
android.R.id.paste ->
86+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
87+
super.onTextContextMenuItem(android.R.id.pasteAsPlainText)
88+
} else {
89+
context.getClipboardManager().convertClipToPlainText()
90+
super.onTextContextMenuItem(id)
91+
}
92+
else -> super.onTextContextMenuItem(id)
93+
}
94+
95+
private fun Context.getClipboardManager(): ClipboardManager =
96+
getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
97+
98+
private fun ClipboardManager.convertClipToPlainText() {
99+
val clip = primaryClip ?: return
100+
for (i in 0 until clip.itemCount) {
101+
val text = clip.getItemAt(i).coerceToText(context)
102+
setPrimaryClip(ClipData.newPlainText(null, text))
103+
}
104+
}
105+
78106
interface OnBackKeyListener {
79107

80108
fun onBackKey(): Boolean

0 commit comments

Comments
 (0)