diff --git a/app_pojavlauncher/build.gradle b/app_pojavlauncher/build.gradle index 72d020a56..1bd61db56 100644 --- a/app_pojavlauncher/build.gradle +++ b/app_pojavlauncher/build.gradle @@ -187,7 +187,7 @@ dependencies { implementation 'com.github.PojavLauncherTeam:portrait-ssp:6c02fd739b' implementation 'com.github.Mathias-Boulay:ExtendedView:1.0.0' implementation 'com.github.Mathias-Boulay:android_gamepad_remapper:eb92e3a5bb' - implementation 'com.github.Mathias-Boulay:virtual-joystick-android:231334e191' + implementation 'com.github.Mathias-Boulay:virtual-joystick-android:cb7bf45ba5' // implementation 'com.intuit.sdp:sdp-android:1.0.5' diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/CustomControlsActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/CustomControlsActivity.java index 690199e5b..c913162ef 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/CustomControlsActivity.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/CustomControlsActivity.java @@ -12,6 +12,7 @@ import androidx.drawerlayout.widget.DrawerLayout; import net.kdt.pojavlaunch.customcontrols.ControlData; import net.kdt.pojavlaunch.customcontrols.ControlDrawerData; +import net.kdt.pojavlaunch.customcontrols.ControlJoystickData; import net.kdt.pojavlaunch.customcontrols.ControlLayout; import net.kdt.pojavlaunch.customcontrols.EditorExitable; import net.kdt.pojavlaunch.prefs.LauncherPreferences; @@ -43,7 +44,7 @@ public class CustomControlsActivity extends BaseActivity implements EditorExitab switch(position) { case 0: mControlLayout.addControlButton(new ControlData("New")); break; case 1: mControlLayout.addDrawer(new ControlDrawerData()); break; - case 2: mControlLayout.addJoystickButton(new ControlData()); break; + case 2: mControlLayout.addJoystickButton(new ControlJoystickData()); break; case 3: mControlLayout.openLoadDialog(); break; case 4: mControlLayout.openSaveDialog(this); break; case 5: mControlLayout.openSetDefaultDialog(); break; 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 new file mode 100644 index 000000000..994489594 --- /dev/null +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/ControlJoystickData.java @@ -0,0 +1,15 @@ +package net.kdt.pojavlaunch.customcontrols; + +public class ControlJoystickData extends ControlData { + + /* Whether the joystick can stay forward */ + public boolean forwardLock = false; + + public ControlJoystickData(){ + super(); + } + + public ControlJoystickData(ControlData properties) { + super(properties); + } +} diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/ControlLayout.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/ControlLayout.java index c04ffb175..a9095e78f 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/ControlLayout.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/ControlLayout.java @@ -110,7 +110,7 @@ public class ControlLayout extends FrameLayout { } // Joystick(s) - for(ControlData joystick : mLayout.mJoystickDataList){ + for(ControlJoystickData joystick : mLayout.mJoystickDataList){ addJoystickView(joystick); } @@ -196,12 +196,12 @@ public class ControlLayout extends FrameLayout { } // JOYSTICK BUTTON - public void addJoystickButton(ControlData data){ + public void addJoystickButton(ControlJoystickData data){ mLayout.mJoystickDataList.add(data); addJoystickView(data); } - private void addJoystickView(ControlData data){ + private void addJoystickView(ControlJoystickData data){ addView(new ControlJoystick(this, data)); } diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/CustomControls.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/CustomControls.java index 11cf5983a..ffff12d1c 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/CustomControls.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/CustomControls.java @@ -13,14 +13,14 @@ public class CustomControls { public float scaledAt; public List mControlDataList; public List mDrawerDataList; - public List mJoystickDataList; + public List mJoystickDataList; public CustomControls() { this(new ArrayList<>(), new ArrayList<>(), new ArrayList<>()); } - public CustomControls(List mControlDataList, List mDrawerDataList, List mJoystickDataList) { + public CustomControls(List mControlDataList, List mDrawerDataList, List mJoystickDataList) { this.mControlDataList = mControlDataList; this.mDrawerDataList = mDrawerDataList; this.mJoystickDataList = mJoystickDataList; 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 f0a3a1261..57bc1931b 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 @@ -16,6 +16,7 @@ import android.view.View; import net.kdt.pojavlaunch.LwjglGlfwKeycode; import net.kdt.pojavlaunch.Tools; import net.kdt.pojavlaunch.customcontrols.ControlData; +import net.kdt.pojavlaunch.customcontrols.ControlJoystickData; import net.kdt.pojavlaunch.customcontrols.ControlLayout; import net.kdt.pojavlaunch.customcontrols.gamepad.GamepadJoystick; import net.kdt.pojavlaunch.customcontrols.handleview.EditControlPopup; @@ -33,10 +34,10 @@ public class ControlJoystick extends JoystickView implements ControlInterface { private final int[] mDirectionRight = new int[]{LwjglGlfwKeycode.GLFW_KEY_D}; private final int[] mDirectionBackward = new int[]{LwjglGlfwKeycode.GLFW_KEY_S}; private final int[] mDirectionLeft = new int[]{LwjglGlfwKeycode.GLFW_KEY_A}; - private ControlData mControlData; + private ControlJoystickData mControlData; private int mLastDirectionInt = GamepadJoystick.DIRECTION_NONE; private int mCurrentDirectionInt = GamepadJoystick.DIRECTION_NONE; - public ControlJoystick(ControlLayout parent, ControlData data) { + public ControlJoystick(ControlLayout parent, ControlJoystickData data) { super(parent.getContext()); init(data, parent); } @@ -47,13 +48,12 @@ public class ControlJoystick extends JoystickView implements ControlInterface { } } - private void init(ControlData data, ControlLayout layout) { + private void init(ControlJoystickData data, ControlLayout layout) { mControlData = data; setProperties(preProcessProperties(data, layout)); setDeadzone(35); setFixedCenter(false); setAutoReCenterButton(true); - postDelayed(() -> setForwardLockDistance((int) Tools.dpToPx(35)), 10); injectBehaviors(); @@ -88,8 +88,9 @@ public class ControlJoystick extends JoystickView implements ControlInterface { @Override public void setProperties(ControlData properties, boolean changePos) { - mControlData = properties; + mControlData = (ControlJoystickData) properties; ControlInterface.super.setProperties(properties, changePos); + postDelayed(() -> setForwardLockDistance(mControlData.forwardLock ? (int) Tools.dpToPx(60) : 0), 10); } @Override @@ -100,8 +101,8 @@ public class ControlJoystick extends JoystickView implements ControlInterface { @Override public void cloneButton() { - ControlData data = new ControlData(getProperties()); - getControlLayoutParent().addJoystickButton(data); + ControlData data = new ControlJoystickData(getProperties()); + getControlLayoutParent().addJoystickButton((ControlJoystickData) data); } @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 81bf284fe..9e427f1bc 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,6 +20,7 @@ import android.view.animation.Interpolator; 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; @@ -35,6 +36,7 @@ import net.kdt.pojavlaunch.R; import net.kdt.pojavlaunch.colorselector.ColorSelector; import net.kdt.pojavlaunch.customcontrols.ControlData; import net.kdt.pojavlaunch.customcontrols.ControlDrawerData; +import net.kdt.pojavlaunch.customcontrols.ControlJoystickData; import net.kdt.pojavlaunch.customcontrols.buttons.ControlDrawer; import net.kdt.pojavlaunch.customcontrols.buttons.ControlInterface; @@ -73,7 +75,7 @@ public class EditControlPopup { }; protected EditText mNameEditText, mWidthEditText, mHeightEditText; @SuppressLint("UseSwitchCompatOrMaterialCode") - protected Switch mToggleSwitch, mPassthroughSwitch, mSwipeableSwitch; + protected Switch mToggleSwitch, mPassthroughSwitch, mSwipeableSwitch, mForwardLockSwitch; protected Spinner mOrientationSpinner; protected TextView[] mKeycodeTextviews = new TextView[4]; protected SeekBar mStrokeWidthSeekbar, mCornerRadiusSeekbar, mAlphaSeekbar; @@ -266,6 +268,7 @@ public class EditControlPopup { setDefaultVisibilitySetting(); mOrientationTextView.setVisibility(GONE); mOrientationSpinner.setVisibility(GONE); + mForwardLockSwitch.setVisibility(GONE); mNameEditText.setText(data.name); mWidthEditText.setText(String.valueOf(data.getWidth())); @@ -321,7 +324,7 @@ public class EditControlPopup { /** * Load values for the joystick */ - public void loadJoystickValues(ControlData data) { + public void loadJoystickValues(ControlJoystickData data) { loadValues(data); mMappingTextView.setVisibility(GONE); @@ -340,6 +343,9 @@ public class EditControlPopup { mSwipeableSwitch.setVisibility(View.GONE); mPassthroughSwitch.setVisibility(View.GONE); mToggleSwitch.setVisibility(View.GONE); + + mForwardLockSwitch.setVisibility(VISIBLE); + mForwardLockSwitch.setChecked(data.forwardLock); } /** @@ -369,6 +375,7 @@ public class EditControlPopup { mToggleSwitch = mScrollView.findViewById(R.id.checkboxToggle); mPassthroughSwitch = mScrollView.findViewById(R.id.checkboxPassThrough); mSwipeableSwitch = mScrollView.findViewById(R.id.checkboxSwipeable); + mForwardLockSwitch = mScrollView.findViewById(R.id.checkboxForwardLock); 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); @@ -478,6 +485,12 @@ public class EditControlPopup { if (internalChanges) return; mCurrentlyEditedButton.getProperties().passThruEnabled = isChecked; }); + mForwardLockSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> { + if (internalChanges) return; + if(mCurrentlyEditedButton.getProperties() instanceof ControlJoystickData){ + ((ControlJoystickData) mCurrentlyEditedButton.getProperties()).forwardLock = 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 ef904a431..497b9e887 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 @@ -317,6 +317,17 @@ app:layout_constraintTop_toBottomOf="@id/checkboxPassThrough" tools:ignore="UseSwitchCompatOrMaterialXml" /> + + + + app:layout_constraintTop_toBottomOf="@id/checkboxForwardLock" /> diff --git a/app_pojavlauncher/src/main/res/values/strings.xml b/app_pojavlauncher/src/main/res/values/strings.xml index 35b546bd9..4238f0a4d 100644 --- a/app_pojavlauncher/src/main/res/values/strings.xml +++ b/app_pojavlauncher/src/main/res/values/strings.xml @@ -239,6 +239,7 @@ Changes the speed of the software mouse Mouse pass-thru Swipeable + Forward lock Rounded 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