From 8da6924006ee983491defad810eff7974030c798 Mon Sep 17 00:00:00 2001 From: artdeell Date: Sun, 10 Dec 2023 17:03:37 +0300 Subject: [PATCH] Feat[joystick]: add setting for absolute finger tracking --- .../customcontrols/ControlJoystickData.java | 6 ++++++ .../customcontrols/buttons/ControlJoystick.java | 7 +++++-- .../handleview/EditControlPopup.java | 14 ++++++++++++-- .../res/layout/dialog_control_button_setting.xml | 11 ++++++++++- app_pojavlauncher/src/main/res/values/strings.xml | 1 + 5 files changed, 34 insertions(+), 5 deletions(-) diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/ControlJoystickData.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/ControlJoystickData.java index 4ef42908a9..e2d3dc11bf 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/ControlJoystickData.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/ControlJoystickData.java @@ -4,6 +4,11 @@ public class ControlJoystickData extends ControlData { /* Whether the joystick can stay forward */ public boolean forwardLock = false; + /* + * Whether the finger tracking is absolute (joystick jumps to where you touched) + * or relative (joystick stays in the center) + */ + public boolean absolute = false; public ControlJoystickData(){ super(); @@ -12,5 +17,6 @@ public ControlJoystickData(){ public ControlJoystickData(ControlJoystickData properties) { super(properties); forwardLock = properties.forwardLock; + absolute = properties.absolute; } } diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/buttons/ControlJoystick.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/buttons/ControlJoystick.java index 76fb85dc55..e261d0873f 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/buttons/ControlJoystick.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/buttons/ControlJoystick.java @@ -52,7 +52,7 @@ private void init(ControlJoystickData data, ControlLayout layout) { mControlData = data; setProperties(preProcessProperties(data, layout)); setDeadzone(35); - setFixedCenter(false); + setFixedCenter(data.absolute); setAutoReCenterButton(true); injectBehaviors(); @@ -91,7 +91,10 @@ public void setProperties(ControlData properties, boolean changePos) { mControlData = (ControlJoystickData) properties; mControlData.isHideable = true; ControlInterface.super.setProperties(properties, changePos); - postDelayed(() -> setForwardLockDistance(mControlData.forwardLock ? (int) Tools.dpToPx(60) : 0), 10); + postDelayed(() -> { + setForwardLockDistance(mControlData.forwardLock ? (int) Tools.dpToPx(60) : 0); + setFixedCenter(mControlData.absolute); + }, 10); } @Override diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/EditControlPopup.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/EditControlPopup.java index 3d799ecbc4..1e215484e3 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/EditControlPopup.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/handleview/EditControlPopup.java @@ -20,7 +20,6 @@ import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.CheckBox; -import android.widget.CompoundButton; import android.widget.EditText; import android.widget.SeekBar; import android.widget.Spinner; @@ -75,7 +74,7 @@ public void onLayoutChange(View v, int left, int top, int right, int bottom, int }; protected EditText mNameEditText, mWidthEditText, mHeightEditText; @SuppressLint("UseSwitchCompatOrMaterialCode") - protected Switch mToggleSwitch, mPassthroughSwitch, mSwipeableSwitch, mForwardLockSwitch; + protected Switch mToggleSwitch, mPassthroughSwitch, mSwipeableSwitch, mForwardLockSwitch, mAbsoluteTrackingSwitch; protected Spinner mOrientationSpinner; protected TextView[] mKeycodeTextviews = new TextView[4]; protected SeekBar mStrokeWidthSeekbar, mCornerRadiusSeekbar, mAlphaSeekbar; @@ -274,6 +273,7 @@ public void loadValues(ControlData data) { mOrientationTextView.setVisibility(GONE); mOrientationSpinner.setVisibility(GONE); mForwardLockSwitch.setVisibility(GONE); + mAbsoluteTrackingSwitch.setVisibility(GONE); mNameEditText.setText(data.name); mWidthEditText.setText(String.valueOf(data.getWidth())); @@ -351,6 +351,9 @@ public void loadJoystickValues(ControlJoystickData data) { mForwardLockSwitch.setVisibility(VISIBLE); mForwardLockSwitch.setChecked(data.forwardLock); + + mAbsoluteTrackingSwitch.setVisibility(VISIBLE); + mAbsoluteTrackingSwitch.setChecked(data.absolute); } /** @@ -383,6 +386,7 @@ private void bindLayout() { mPassthroughSwitch = mScrollView.findViewById(R.id.checkboxPassThrough); mSwipeableSwitch = mScrollView.findViewById(R.id.checkboxSwipeable); mForwardLockSwitch = mScrollView.findViewById(R.id.checkboxForwardLock); + mAbsoluteTrackingSwitch = mScrollView.findViewById(R.id.checkboxAbsoluteFingerTracking); mKeycodeSpinners[0] = mScrollView.findViewById(R.id.editMapping_spinner_1); mKeycodeSpinners[1] = mScrollView.findViewById(R.id.editMapping_spinner_2); mKeycodeSpinners[2] = mScrollView.findViewById(R.id.editMapping_spinner_3); @@ -498,6 +502,12 @@ public void afterTextChanged(Editable s) { ((ControlJoystickData) mCurrentlyEditedButton.getProperties()).forwardLock = isChecked; } }); + mAbsoluteTrackingSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> { + if (internalChanges) return; + if(mCurrentlyEditedButton.getProperties() instanceof ControlJoystickData){ + ((ControlJoystickData) mCurrentlyEditedButton.getProperties()).absolute = isChecked; + } + }); mAlphaSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override diff --git a/app_pojavlauncher/src/main/res/layout/dialog_control_button_setting.xml b/app_pojavlauncher/src/main/res/layout/dialog_control_button_setting.xml index be125fb779..a3185552dd 100644 --- a/app_pojavlauncher/src/main/res/layout/dialog_control_button_setting.xml +++ b/app_pojavlauncher/src/main/res/layout/dialog_control_button_setting.xml @@ -330,6 +330,15 @@ app:layout_constraintTop_toBottomOf="@id/checkboxSwipeable" tools:ignore="UseSwitchCompatOrMaterialXml" /> + + + app:layout_constraintTop_toBottomOf="@id/checkboxAbsoluteFingerTracking" /> diff --git a/app_pojavlauncher/src/main/res/values/strings.xml b/app_pojavlauncher/src/main/res/values/strings.xml index df01b31098..bc02be55fd 100644 --- a/app_pojavlauncher/src/main/res/values/strings.xml +++ b/app_pojavlauncher/src/main/res/values/strings.xml @@ -170,6 +170,7 @@ Mouse pass-thru Swipeable Forward lock + Absolute finger tracking The current amount of free RAM (%d) is lower than allocated RAM (%d), which may lead to crashes. Change the allocation if the game crashes. Memory allocation Controls how much memory is given to Minecraft.