From 9bdde24518184e6ce5d9b9e29ec3402ebd88acf1 Mon Sep 17 00:00:00 2001 From: hotchemi Date: Wed, 17 Feb 2021 01:41:41 +0900 Subject: [PATCH 1/3] fix: convert clip data into plain text before pasting to omnibar. By overriding onTextContextMenuItem in EditText. --- .../browser/omnibar/KeyboardAwareEditText.kt | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/app/src/main/java/com/duckduckgo/app/browser/omnibar/KeyboardAwareEditText.kt b/app/src/main/java/com/duckduckgo/app/browser/omnibar/KeyboardAwareEditText.kt index 64312e207a69..521b11177851 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/omnibar/KeyboardAwareEditText.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/omnibar/KeyboardAwareEditText.kt @@ -16,8 +16,11 @@ package com.duckduckgo.app.browser.omnibar +import android.content.ClipData +import android.content.ClipboardManager import android.content.Context import android.graphics.Rect +import android.os.Build import android.text.Editable import android.util.AttributeSet import android.util.Patterns @@ -74,6 +77,28 @@ class KeyboardAwareEditText : AppCompatEditText { } } + /** + * Overrides to paste clip data without rich text formatting. + */ + override fun onTextContextMenuItem(id: Int): Boolean = when (id) { + android.R.id.paste -> if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + super.onTextContextMenuItem(android.R.id.pasteAsPlainText) + } else { + val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager + clipboard.convertClipToPlainText() + super.onTextContextMenuItem(id) + } + else -> super.onTextContextMenuItem(id) + } + + private fun ClipboardManager.convertClipToPlainText() { + val clip = primaryClip ?: return + for (i in 0 until clip.itemCount) { + val text = clip.getItemAt(i).coerceToText(context) + setPrimaryClip(ClipData.newPlainText(null, text)) + } + } + interface OnBackKeyListener { fun onBackKey(): Boolean From e97b3cc8ce406f55f11ec45b4efd5a97098d244e Mon Sep 17 00:00:00 2001 From: hotchemi Date: Wed, 17 Feb 2021 09:58:35 +0900 Subject: [PATCH 2/3] fix: apply style guide --- .../app/browser/omnibar/KeyboardAwareEditText.kt | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/duckduckgo/app/browser/omnibar/KeyboardAwareEditText.kt b/app/src/main/java/com/duckduckgo/app/browser/omnibar/KeyboardAwareEditText.kt index 521b11177851..f222fbd65858 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/omnibar/KeyboardAwareEditText.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/omnibar/KeyboardAwareEditText.kt @@ -81,13 +81,14 @@ class KeyboardAwareEditText : AppCompatEditText { * Overrides to paste clip data without rich text formatting. */ override fun onTextContextMenuItem(id: Int): Boolean = when (id) { - android.R.id.paste -> if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - super.onTextContextMenuItem(android.R.id.pasteAsPlainText) - } else { - val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager - clipboard.convertClipToPlainText() - super.onTextContextMenuItem(id) - } + android.R.id.paste -> + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + super.onTextContextMenuItem(android.R.id.pasteAsPlainText) + } else { + val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager + clipboard.convertClipToPlainText() + super.onTextContextMenuItem(id) + } else -> super.onTextContextMenuItem(id) } From 2f8642343fa3c7fd11c478968d7c23c19a7170c2 Mon Sep 17 00:00:00 2001 From: hotchemi Date: Sun, 21 Feb 2021 04:11:32 +0900 Subject: [PATCH 3/3] refactoring: encapsulate obtaining ClipboardManager from context --- .../duckduckgo/app/browser/omnibar/KeyboardAwareEditText.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/duckduckgo/app/browser/omnibar/KeyboardAwareEditText.kt b/app/src/main/java/com/duckduckgo/app/browser/omnibar/KeyboardAwareEditText.kt index f222fbd65858..83f152fb47f8 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/omnibar/KeyboardAwareEditText.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/omnibar/KeyboardAwareEditText.kt @@ -85,13 +85,15 @@ class KeyboardAwareEditText : AppCompatEditText { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { super.onTextContextMenuItem(android.R.id.pasteAsPlainText) } else { - val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager - clipboard.convertClipToPlainText() + context.getClipboardManager().convertClipToPlainText() super.onTextContextMenuItem(id) } else -> super.onTextContextMenuItem(id) } + private fun Context.getClipboardManager(): ClipboardManager = + getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager + private fun ClipboardManager.convertClipToPlainText() { val clip = primaryClip ?: return for (i in 0 until clip.itemCount) {