Обработка вставки картинки в EditText
Есть следующий кастомный EditText
Он отлавливает событие, когда пытаешься вставить картинку из буфера обмена.
На некоторых устройствах, если есть картинка в буфере обмена, но при открытии клавиатуры вверху появляется подсказка с превью картинку. По клику срабатывает событие.
Проблема в том, что на 1ом устройстве, если сделать скриншот, это подсказка появляется (превью в подсказке верное), но вставляется другая картинка (последняя картинка, которая была именно скопирована в буфер).
Проблема ТОЛЬКО со скриншотом.
class EditTextWithImageClipBoard @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null
) : androidx.appcompat.widget.AppCompatEditText(context, attrs) {
private val mimeTypesArray = arrayOf("image/*")
var onClipBoardPaste: (ClipData.Item) -> Unit = {}
override fun onCreateInputConnection(outAttrs: EditorInfo): InputConnection? {
var ic = super.onCreateInputConnection(outAttrs) ?: return null
EditorInfoCompat.setContentMimeTypes(outAttrs, mimeTypesArray)
val mimeTypes = ViewCompat.getOnReceiveContentMimeTypes(this)
if (mimeTypes != null) {
EditorInfoCompat.setContentMimeTypes(outAttrs, mimeTypes)
ic = InputConnectionCompat.createWrapper(this, ic, outAttrs)
}
return ic
}
init {
ViewCompat.setOnReceiveContentListener(
this,
mimeTypesArray,
object : OnReceiveContentListener {
override fun onReceiveContent(
view: View,
payload: ContentInfoCompat
): ContentInfoCompat? {
runCatching { payload.clip.getItemAt(CLIPBOARD_PRIMARY_INDEX) }.getOrNull()
?.let {
onClipBoardPaste(it)
}
return null
}
})
}
companion object {
private const val CLIPBOARD_PRIMARY_INDEX = 0
}
}