import android.os.Build
import android.view.ActionMode
import android.view.Menu
import android.view.MenuItem
import android.widget.EditText
import android.widget.TextView
@SuppressLint("ClickableViewAccessibility")
fun EditText.disableCopyAndPaste() {
val callback = object : ActionMode.Callback {
override fun onCreateActionMode(mode: ActionMode?, menu: Menu?): Boolean {
return false
}
override fun onPrepareActionMode(mode: ActionMode?, menu: Menu?): Boolean {
return false
}
override fun onActionItemClicked(mode: ActionMode?, item: MenuItem?): Boolean {
return true
}
override fun onDestroyActionMode(mode: ActionMode?) {
}
}
this.customSelectionActionModeCallback = callback
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
this.customInsertionActionModeCallback = callback
} else {
disableCopyAndPasteByReflect()
}
}
private fun EditText.disableCopyAndPasteByReflect() {
try {
val editorField = TextView::class.java.getDeclaredField("mEditor")
editorField.isAccessible = true
val editorInstance = editorField.get(this)
val editorClass = Class.forName("android.widget.Editor")
val selectField = editorClass.getDeclaredField("mSelectionControllerEnabled")
selectField.isAccessible = true
selectField.set(editorInstance, false)
val insertField = editorClass.getDeclaredField("mInsertionControllerEnabled")
insertField.isAccessible = true
insertField.set(editorInstance, false)
} catch (e: Exception) {
e.printStackTrace()
}
}