From 696858e2bc345ed55d4d717cfade33123d774477 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 5 Apr 2018 20:10:07 +0200 Subject: [PATCH] fix #136, make sure swiftkey arrows work well --- .../notes/fragments/NoteFragment.kt | 8 +-- .../notes/helpers/MyMovementMethod.kt | 54 +++++++++++++++++++ 2 files changed, 56 insertions(+), 6 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/notes/helpers/MyMovementMethod.kt diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/fragments/NoteFragment.kt b/app/src/main/kotlin/com/simplemobiletools/notes/fragments/NoteFragment.kt index 59c54faa..925d5f83 100644 --- a/app/src/main/kotlin/com/simplemobiletools/notes/fragments/NoteFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/notes/fragments/NoteFragment.kt @@ -5,7 +5,6 @@ import android.os.Bundle import android.support.v4.app.Fragment import android.text.Editable import android.text.TextWatcher -import android.text.method.LinkMovementMethod import android.text.util.Linkify import android.util.TypedValue import android.view.Gravity @@ -18,10 +17,7 @@ import com.simplemobiletools.commons.extensions.onGlobalLayout import com.simplemobiletools.notes.R import com.simplemobiletools.notes.activities.MainActivity import com.simplemobiletools.notes.extensions.* -import com.simplemobiletools.notes.helpers.DBHelper -import com.simplemobiletools.notes.helpers.GRAVITY_CENTER -import com.simplemobiletools.notes.helpers.GRAVITY_RIGHT -import com.simplemobiletools.notes.helpers.NOTE_ID +import com.simplemobiletools.notes.helpers.* import com.simplemobiletools.notes.models.Note import kotlinx.android.synthetic.main.fragment_note.* import kotlinx.android.synthetic.main.fragment_note.view.* @@ -47,7 +43,7 @@ class NoteFragment : Fragment() { view.notes_view.apply { linksClickable = true autoLinkMask = Linkify.WEB_URLS or Linkify.EMAIL_ADDRESSES - movementMethod = LinkMovementMethod.getInstance() + movementMethod = MyMovementMethod.getInstance() } } diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/helpers/MyMovementMethod.kt b/app/src/main/kotlin/com/simplemobiletools/notes/helpers/MyMovementMethod.kt new file mode 100644 index 00000000..4e76d179 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/notes/helpers/MyMovementMethod.kt @@ -0,0 +1,54 @@ +package com.simplemobiletools.notes.helpers + +import android.text.Selection +import android.text.Spannable +import android.text.method.ArrowKeyMovementMethod +import android.text.style.ClickableSpan +import android.view.MotionEvent +import android.widget.TextView + +class MyMovementMethod : ArrowKeyMovementMethod() { + companion object { + private var sInstance: MyMovementMethod? = null + + fun getInstance(): MyMovementMethod { + if (sInstance == null) { + sInstance = MyMovementMethod() + } + return sInstance!! + } + } + + override fun onTouchEvent(widget: TextView, buffer: Spannable, event: MotionEvent): Boolean { + val action = event.action + + if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_DOWN) { + var x = event.x.toInt() + var y = event.y.toInt() + + x -= widget.totalPaddingLeft + y -= widget.totalPaddingTop + + x += widget.scrollX + y += widget.scrollY + + val layout = widget.layout + val line = layout.getLineForVertical(y) + val off = layout.getOffsetForHorizontal(line, x.toFloat()) + + val links = buffer.getSpans(off, off, ClickableSpan::class.java) + if (links.isNotEmpty()) { + if (action == MotionEvent.ACTION_UP) { + links[0].onClick(widget) + } else if (action == MotionEvent.ACTION_DOWN) { + Selection.setSelection(buffer, + buffer.getSpanStart(links[0]), + buffer.getSpanEnd(links[0])) + } + return true + } + } + + return super.onTouchEvent(widget, buffer, event) + } +}