From 16bdc35739f14688e11aa6ab7f7d69972ecd342f Mon Sep 17 00:00:00 2001 From: SerpentSpirale Date: Sat, 26 Feb 2022 18:30:42 +0100 Subject: [PATCH] Refactor HandleView related files --- .../customcontrols/handleview/HandleView.java | 212 +++++++++--------- .../handleview/SelectionEndHandleView.java | 3 +- .../handleview/ViewPositionListener.java | 2 +- 3 files changed, 109 insertions(+), 108 deletions(-) diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/HandleView.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/HandleView.java index 1378be5db..075274dc8 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/HandleView.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/HandleView.java @@ -29,8 +29,7 @@ import net.kdt.pojavlaunch.*; import net.kdt.pojavlaunch.customcontrols.buttons.ControlButton; -public abstract class HandleView extends View implements ViewPositionListener, View.OnLongClickListener - { +public abstract class HandleView extends View implements ViewPositionListener, View.OnLongClickListener { protected Drawable mDrawable; protected Drawable mDrawableLtr; protected Drawable mDrawableRtl; @@ -65,12 +64,19 @@ public abstract class HandleView extends View implements ViewPositionListener, V // int mWindowPosX, mWindowPosY; private PositionListener mPositionListener; - public PositionListener getPositionListener() { - if (mPositionListener == null) { - mPositionListener = new PositionListener(mView); - } - return mPositionListener; - } + + // Touch-up filter: number of previous positions remembered + private static final int HISTORY_SIZE = 5; + private static final int TOUCH_UP_FILTER_DELAY_AFTER = 150; + private static final int TOUCH_UP_FILTER_DELAY_BEFORE = 350; + private final long[] mPreviousOffsetsTimes = new long[HISTORY_SIZE]; + private final int[] mPreviousOffsets = new int[HISTORY_SIZE]; + private int mPreviousOffsetIndex = 0; + private int mNumberPreviousOffsets = 0; + + // Addition + private float mDownX, mDownY; + public HandleView(ControlButton view) { super(view.getContext()); @@ -99,6 +105,98 @@ public abstract class HandleView extends View implements ViewPositionListener, V mIdealVerticalOffset = 0.7f * handleHeight; } + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + setMeasuredDimension(getPreferredWidth(), getPreferredHeight()); + } + + @Override + protected void onDraw(Canvas c) { + final int drawWidth = mDrawable.getIntrinsicWidth(); + final int left = getHorizontalOffset(); + + mDrawable.setBounds(left, 0, left + drawWidth, mDrawable.getIntrinsicHeight()); + mDrawable.draw(c); + } + + @Override + public boolean onTouchEvent(MotionEvent ev) { + ViewGroup.LayoutParams params = mView.getLayoutParams(); + + switch (ev.getActionMasked()) { + case MotionEvent.ACTION_DOWN: { + startTouchUpFilter(getCurrentCursorOffset()); + mTouchToWindowOffsetX = ev.getRawX() - mPositionX; + mTouchToWindowOffsetY = ev.getRawY() - mPositionY; + + final PositionListener positionListener = getPositionListener(); + mLastParentX = positionListener.getPositionX(); + mLastParentY = positionListener.getPositionY(); + mIsDragging = true; + + // MOD: Addition + mDownX = ev.getRawX(); + mDownY = ev.getRawY(); + mDownWidth = params.width; + mDownHeight = params.height; + + break; + } + + case MotionEvent.ACTION_MOVE: { + final float rawX = ev.getRawX(); + final float rawY = ev.getRawY(); + + // Vertical hysteresis: vertical down movement tends to snap to ideal offset + final float previousVerticalOffset = mTouchToWindowOffsetY - mLastParentY; + final float currentVerticalOffset = rawY - mPositionY - mLastParentY; + float newVerticalOffset; + if (previousVerticalOffset < mIdealVerticalOffset) { + newVerticalOffset = Math.min(currentVerticalOffset, mIdealVerticalOffset); + newVerticalOffset = Math.max(newVerticalOffset, previousVerticalOffset); + } else { + newVerticalOffset = Math.max(currentVerticalOffset, mIdealVerticalOffset); + newVerticalOffset = Math.min(newVerticalOffset, previousVerticalOffset); + } + mTouchToWindowOffsetY = newVerticalOffset + mLastParentY; + + final float newPosX = rawX - mTouchToWindowOffsetX + mHotspotX; + final float newPosY = rawY - mTouchToWindowOffsetY + mTouchOffsetY; + + int newWidth = (int) (mDownWidth + (rawX - mDownX)); + int newHeight = (int) (mDownHeight + (rawY - mDownY)); + + // mDownX = rawX; + // mDownY = rawY; + + params.width = Math.max(50, newWidth); + params.height = Math.max(50, newHeight); + + mView.setLayoutParams(params); + + updatePosition(newPosX, newPosY); + // break; + return true; + } + + case MotionEvent.ACTION_UP: + filterOnTouchUp(); + mIsDragging = false; + break; + + case MotionEvent.ACTION_CANCEL: + mIsDragging = false; + break; + } + return true; + } + + public PositionListener getPositionListener() { + if (mPositionListener == null) { + mPositionListener = new PositionListener(mView); + } + return mPositionListener; + } protected void updateDrawable() { // final int offset = getCurrentCursorOffset(); @@ -111,14 +209,7 @@ public abstract class HandleView extends View implements ViewPositionListener, V protected abstract int getHotspotX(Drawable drawable, boolean isRtlRun); protected abstract int getHorizontalGravity(boolean isRtlRun); - // Touch-up filter: number of previous positions remembered - private static final int HISTORY_SIZE = 5; - private static final int TOUCH_UP_FILTER_DELAY_AFTER = 150; - private static final int TOUCH_UP_FILTER_DELAY_BEFORE = 350; - private final long[] mPreviousOffsetsTimes = new long[HISTORY_SIZE]; - private final int[] mPreviousOffsets = new int[HISTORY_SIZE]; - private int mPreviousOffsetIndex = 0; - private int mNumberPreviousOffsets = 0; + private void startTouchUpFilter(int offset) { mNumberPreviousOffsets = 0; @@ -152,11 +243,6 @@ public abstract class HandleView extends View implements ViewPositionListener, V return mNumberPreviousOffsets > 1; } - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - setMeasuredDimension(getPreferredWidth(), getPreferredHeight()); - } - private int getPreferredWidth() { return Math.max(mDrawable.getIntrinsicWidth(), mMinSize); } @@ -283,15 +369,6 @@ public abstract class HandleView extends View implements ViewPositionListener, V } } - @Override - protected void onDraw(Canvas c) { - final int drawWidth = mDrawable.getIntrinsicWidth(); - final int left = getHorizontalOffset(); - - mDrawable.setBounds(left, 0, left + drawWidth, mDrawable.getIntrinsicHeight()); - mDrawable.draw(c); - } - private int getHorizontalOffset() { final int width = getPreferredWidth(); final int drawWidth = mDrawable.getIntrinsicWidth(); @@ -315,81 +392,6 @@ public abstract class HandleView extends View implements ViewPositionListener, V return 0; } - // Addition - private float mDownX, mDownY; - - @Override - public boolean onTouchEvent(MotionEvent ev) { - ViewGroup.LayoutParams params = mView.getLayoutParams(); - - switch (ev.getActionMasked()) { - case MotionEvent.ACTION_DOWN: { - startTouchUpFilter(getCurrentCursorOffset()); - mTouchToWindowOffsetX = ev.getRawX() - mPositionX; - mTouchToWindowOffsetY = ev.getRawY() - mPositionY; - - final PositionListener positionListener = getPositionListener(); - mLastParentX = positionListener.getPositionX(); - mLastParentY = positionListener.getPositionY(); - mIsDragging = true; - - // MOD: Addition - mDownX = ev.getRawX(); - mDownY = ev.getRawY(); - mDownWidth = params.width; - mDownHeight = params.height; - - break; - } - - case MotionEvent.ACTION_MOVE: { - final float rawX = ev.getRawX(); - final float rawY = ev.getRawY(); - - // Vertical hysteresis: vertical down movement tends to snap to ideal offset - final float previousVerticalOffset = mTouchToWindowOffsetY - mLastParentY; - final float currentVerticalOffset = rawY - mPositionY - mLastParentY; - float newVerticalOffset; - if (previousVerticalOffset < mIdealVerticalOffset) { - newVerticalOffset = Math.min(currentVerticalOffset, mIdealVerticalOffset); - newVerticalOffset = Math.max(newVerticalOffset, previousVerticalOffset); - } else { - newVerticalOffset = Math.max(currentVerticalOffset, mIdealVerticalOffset); - newVerticalOffset = Math.min(newVerticalOffset, previousVerticalOffset); - } - mTouchToWindowOffsetY = newVerticalOffset + mLastParentY; - - final float newPosX = rawX - mTouchToWindowOffsetX + mHotspotX; - final float newPosY = rawY - mTouchToWindowOffsetY + mTouchOffsetY; - - int newWidth = (int) (mDownWidth + (rawX - mDownX)); - int newHeight = (int) (mDownHeight + (rawY - mDownY)); - - // mDownX = rawX; - // mDownY = rawY; - - params.width = Math.max(50, newWidth); - params.height = Math.max(50, newHeight); - - mView.setLayoutParams(params); - - updatePosition(newPosX, newPosY); - // break; - return true; - } - - case MotionEvent.ACTION_UP: - filterOnTouchUp(); - mIsDragging = false; - break; - - case MotionEvent.ACTION_CANCEL: - mIsDragging = false; - break; - } - return true; - } - public boolean isDragging() { return mIsDragging; } diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/SelectionEndHandleView.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/SelectionEndHandleView.java index 489c91bec..ebbb5e64c 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/SelectionEndHandleView.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/SelectionEndHandleView.java @@ -25,8 +25,7 @@ import android.view.*; import net.kdt.pojavlaunch.customcontrols.buttons.ControlButton; -public class SelectionEndHandleView extends HandleView -{ +public class SelectionEndHandleView extends HandleView { public SelectionEndHandleView(ControlButton view) { super(view); } diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/ViewPositionListener.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/ViewPositionListener.java index 0dd53f6c2..cf0dda3a2 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/ViewPositionListener.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/ViewPositionListener.java @@ -20,5 +20,5 @@ package net.kdt.pojavlaunch.customcontrols.handleview; public interface ViewPositionListener { - public void updatePosition(int parentPositionX, int parentPositionY, boolean parentPositionChanged, boolean parentScrolled); + void updatePosition(int parentPositionX, int parentPositionY, boolean parentPositionChanged, boolean parentScrolled); }