add some distance checking at long pressing widgets

This commit is contained in:
tibbi 2022-10-01 23:24:36 +02:00
parent db02a2ce40
commit f4ea085118

View File

@ -9,8 +9,10 @@ import android.view.ViewConfiguration
import com.simplemobiletools.commons.extensions.performHapticFeedback import com.simplemobiletools.commons.extensions.performHapticFeedback
class MyAppWidgetHostView(context: Context) : AppWidgetHostView(context) { class MyAppWidgetHostView(context: Context) : AppWidgetHostView(context) {
private var MAX_ALLOWED_MOVE = 10
private var longPressHandler = Handler() private var longPressHandler = Handler()
private var actionDownCoords = PointF() private var actionDownCoords = PointF()
private var currentCoords = PointF()
var hasLongPressed = false var hasLongPressed = false
var longPressListener: ((x: Float, y: Float) -> Unit)? = null var longPressListener: ((x: Float, y: Float) -> Unit)? = null
@ -25,6 +27,12 @@ class MyAppWidgetHostView(context: Context) : AppWidgetHostView(context) {
longPressHandler.postDelayed(longPressRunnable, ViewConfiguration.getLongPressTimeout().toLong()) longPressHandler.postDelayed(longPressRunnable, ViewConfiguration.getLongPressTimeout().toLong())
actionDownCoords.x = event.rawX actionDownCoords.x = event.rawX
actionDownCoords.y = event.rawY actionDownCoords.y = event.rawY
currentCoords.x = event.rawX
currentCoords.y = event.rawY
}
MotionEvent.ACTION_MOVE -> {
currentCoords.x = event.rawX
currentCoords.y = event.rawY
} }
MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> longPressHandler.removeCallbacksAndMessages(null) MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> longPressHandler.removeCallbacksAndMessages(null)
} }
@ -33,9 +41,11 @@ class MyAppWidgetHostView(context: Context) : AppWidgetHostView(context) {
} }
private val longPressRunnable = Runnable { private val longPressRunnable = Runnable {
longPressHandler.removeCallbacksAndMessages(null) if (Math.abs(actionDownCoords.x - currentCoords.x) < MAX_ALLOWED_MOVE && Math.abs(actionDownCoords.y - currentCoords.y) < MAX_ALLOWED_MOVE) {
hasLongPressed = true longPressHandler.removeCallbacksAndMessages(null)
longPressListener?.invoke(actionDownCoords.x, actionDownCoords.y) hasLongPressed = true
performHapticFeedback() longPressListener?.invoke(actionDownCoords.x, actionDownCoords.y)
performHapticFeedback()
}
} }
} }