recognize dragging of sides at widget resizing
This commit is contained in:
parent
30c5dec1be
commit
b9f96e0703
|
@ -20,3 +20,4 @@ const val ITEM_TYPE_SHORTCUT = 2
|
|||
|
||||
const val WIDGET_HOST_ID = 12345
|
||||
const val MAX_ALLOWED_MOVE_PX = 10
|
||||
const val MAX_CLICK_DURATION = 150
|
||||
|
|
|
@ -8,7 +8,7 @@ import android.util.AttributeSet
|
|||
import android.view.MotionEvent
|
||||
import android.widget.RelativeLayout
|
||||
import com.simplemobiletools.launcher.R
|
||||
import com.simplemobiletools.launcher.helpers.MAX_ALLOWED_MOVE_PX
|
||||
import com.simplemobiletools.launcher.helpers.MAX_CLICK_DURATION
|
||||
|
||||
@SuppressLint("ViewConstructor")
|
||||
class MyAppWidgetResizeFrame(context: Context, attrs: AttributeSet, defStyle: Int) : RelativeLayout(context, attrs, defStyle) {
|
||||
|
@ -18,10 +18,17 @@ class MyAppWidgetResizeFrame(context: Context, attrs: AttributeSet, defStyle: In
|
|||
private var resizeWidgetLineDotPaint: Paint
|
||||
private var actionDownCoords = PointF()
|
||||
private var actionDownMS = 0L
|
||||
private var MAX_CLICK_DURATION = 150
|
||||
private val lineDotRadius = context.resources.getDimension(R.dimen.resize_frame_dot_radius)
|
||||
private val MAX_TOUCH_LINE_DISTANCE = lineDotRadius * 5 // how close we have to be to the widgets side to drag it
|
||||
var onClickListener: (() -> Unit)? = null
|
||||
|
||||
private val DRAGGING_NONE = 0
|
||||
private val DRAGGING_LEFT = 1
|
||||
private val DRAGGING_TOP = 2
|
||||
private val DRAGGING_RIGHT = 3
|
||||
private val DRAGGING_BOTTOM = 4
|
||||
private var dragDirection = DRAGGING_NONE
|
||||
|
||||
init {
|
||||
background = ColorDrawable(Color.TRANSPARENT)
|
||||
|
||||
|
@ -54,13 +61,22 @@ class MyAppWidgetResizeFrame(context: Context, attrs: AttributeSet, defStyle: In
|
|||
actionDownCoords.x = event.rawX
|
||||
actionDownCoords.y = event.rawY
|
||||
actionDownMS = System.currentTimeMillis()
|
||||
if (event.x < MAX_TOUCH_LINE_DISTANCE) {
|
||||
dragDirection = DRAGGING_LEFT
|
||||
} else if (event.y < MAX_TOUCH_LINE_DISTANCE) {
|
||||
dragDirection = DRAGGING_TOP
|
||||
} else if (event.x > width - MAX_TOUCH_LINE_DISTANCE) {
|
||||
dragDirection = DRAGGING_RIGHT
|
||||
} else if (event.y > height - MAX_TOUCH_LINE_DISTANCE) {
|
||||
dragDirection = DRAGGING_BOTTOM
|
||||
}
|
||||
}
|
||||
MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> {
|
||||
if (System.currentTimeMillis() - actionDownMS < MAX_CLICK_DURATION &&
|
||||
Math.abs(actionDownCoords.x - event.rawX) < MAX_ALLOWED_MOVE_PX &&
|
||||
Math.abs(actionDownCoords.y - event.rawY) < MAX_ALLOWED_MOVE_PX
|
||||
) {
|
||||
if (dragDirection == DRAGGING_NONE) {
|
||||
onClickListener?.invoke()
|
||||
} else if (System.currentTimeMillis() - actionDownMS < MAX_CLICK_DURATION) {
|
||||
onClickListener?.invoke()
|
||||
dragDirection = DRAGGING_NONE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue