mirror of
				https://github.com/SimpleMobileTools/Simple-Launcher.git
				synced 2025-06-05 21:59:15 +02:00 
			
		
		
		
	recognize dragging of sides at widget resizing
This commit is contained in:
		| @@ -20,3 +20,4 @@ const val ITEM_TYPE_SHORTCUT = 2 | |||||||
|  |  | ||||||
| const val WIDGET_HOST_ID = 12345 | const val WIDGET_HOST_ID = 12345 | ||||||
| const val MAX_ALLOWED_MOVE_PX = 10 | 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.view.MotionEvent | ||||||
| import android.widget.RelativeLayout | import android.widget.RelativeLayout | ||||||
| import com.simplemobiletools.launcher.R | import com.simplemobiletools.launcher.R | ||||||
| import com.simplemobiletools.launcher.helpers.MAX_ALLOWED_MOVE_PX | import com.simplemobiletools.launcher.helpers.MAX_CLICK_DURATION | ||||||
|  |  | ||||||
| @SuppressLint("ViewConstructor") | @SuppressLint("ViewConstructor") | ||||||
| class MyAppWidgetResizeFrame(context: Context, attrs: AttributeSet, defStyle: Int) : RelativeLayout(context, attrs, defStyle) { | 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 resizeWidgetLineDotPaint: Paint | ||||||
|     private var actionDownCoords = PointF() |     private var actionDownCoords = PointF() | ||||||
|     private var actionDownMS = 0L |     private var actionDownMS = 0L | ||||||
|     private var MAX_CLICK_DURATION = 150 |  | ||||||
|     private val lineDotRadius = context.resources.getDimension(R.dimen.resize_frame_dot_radius) |     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 |     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 { |     init { | ||||||
|         background = ColorDrawable(Color.TRANSPARENT) |         background = ColorDrawable(Color.TRANSPARENT) | ||||||
|  |  | ||||||
| @@ -54,13 +61,22 @@ class MyAppWidgetResizeFrame(context: Context, attrs: AttributeSet, defStyle: In | |||||||
|                 actionDownCoords.x = event.rawX |                 actionDownCoords.x = event.rawX | ||||||
|                 actionDownCoords.y = event.rawY |                 actionDownCoords.y = event.rawY | ||||||
|                 actionDownMS = System.currentTimeMillis() |                 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 -> { |             MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> { | ||||||
|                 if (System.currentTimeMillis() - actionDownMS < MAX_CLICK_DURATION && |                 if (dragDirection == DRAGGING_NONE) { | ||||||
|                     Math.abs(actionDownCoords.x - event.rawX) < MAX_ALLOWED_MOVE_PX && |  | ||||||
|                     Math.abs(actionDownCoords.y - event.rawY) < MAX_ALLOWED_MOVE_PX |  | ||||||
|                 ) { |  | ||||||
|                     onClickListener?.invoke() |                     onClickListener?.invoke() | ||||||
|  |                 } else if (System.currentTimeMillis() - actionDownMS < MAX_CLICK_DURATION) { | ||||||
|  |                     onClickListener?.invoke() | ||||||
|  |                     dragDirection = DRAGGING_NONE | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user