diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/buttons/ControlButton.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/buttons/ControlButton.java index 22c25e977..92ec54d92 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/buttons/ControlButton.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/buttons/ControlButton.java @@ -23,6 +23,10 @@ import org.lwjgl.glfw.*; import static net.kdt.pojavlaunch.BaseMainActivity.sendMouseButton; import static net.kdt.pojavlaunch.LWJGLGLFWKeycode.GLFW_KEY_UNKNOWN; import static net.kdt.pojavlaunch.prefs.LauncherPreferences.PREF_BUTTONSIZE; +import static net.kdt.pojavlaunch.prefs.LauncherPreferences.PREF_CONTROL_BOTTOM_OFFSET; +import static net.kdt.pojavlaunch.prefs.LauncherPreferences.PREF_CONTROL_LEFT_OFFSET; +import static net.kdt.pojavlaunch.prefs.LauncherPreferences.PREF_CONTROL_RIGHT_OFFSET; +import static net.kdt.pojavlaunch.prefs.LauncherPreferences.PREF_CONTROL_TOP_OFFSET; @SuppressLint("ViewConstructor") public class ControlButton extends androidx.appcompat.widget.AppCompatButton implements OnLongClickListener @@ -152,16 +156,57 @@ public class ControlButton extends androidx.appcompat.widget.AppCompatButton imp @Override public void setX(float x) { + // We have to account for control offset preference + if(x + (mProperties.getWidth()/2f) > CallbackBridge.physicalWidth/2f){ + x -= PREF_CONTROL_RIGHT_OFFSET; + }else{ + x += PREF_CONTROL_LEFT_OFFSET; + } + super.setX(x); setModified(true); } @Override public void setY(float y) { + // We have to account for control offset preference + if(y - PREF_CONTROL_TOP_OFFSET + (mProperties.getHeight()/2f) > CallbackBridge.physicalHeight/2f){ + y -= PREF_CONTROL_BOTTOM_OFFSET; + }else{ + y += PREF_CONTROL_TOP_OFFSET; + } + super.setY(y); setModified(true); } + @Override + public float getX() { + float x = super.getX(); + // We have to account for control offset preference + if(x + (mProperties.getWidth()/2f) > (CallbackBridge.physicalWidth)/2f){ + x += PREF_CONTROL_RIGHT_OFFSET; + }else{ + x -= PREF_CONTROL_LEFT_OFFSET; + } + + return x; + } + + @Override + public float getY(){ + // We have to account for control offset preference + float y = super.getY(); + if(y + (mProperties.getHeight()/2f) > CallbackBridge.physicalHeight/2f){ + y += PREF_CONTROL_BOTTOM_OFFSET; + }else{ + y -= PREF_CONTROL_TOP_OFFSET; + } + + + return y; + } + /** * Apply the dynamic equation on the x axis. * @param dynamicX The equation to compute the position from diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/ControlOffsetPreference.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/ControlOffsetPreference.java new file mode 100644 index 000000000..3624d4c0f --- /dev/null +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/ControlOffsetPreference.java @@ -0,0 +1,122 @@ +package net.kdt.pojavlaunch.prefs; + +import static net.kdt.pojavlaunch.prefs.LauncherPreferences.DEFAULT_PREF; +import static net.kdt.pojavlaunch.prefs.LauncherPreferences.PREF_CONTROL_BOTTOM_OFFSET; +import static net.kdt.pojavlaunch.prefs.LauncherPreferences.PREF_CONTROL_LEFT_OFFSET; +import static net.kdt.pojavlaunch.prefs.LauncherPreferences.PREF_CONTROL_RIGHT_OFFSET; +import static net.kdt.pojavlaunch.prefs.LauncherPreferences.PREF_CONTROL_TOP_OFFSET; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.util.AttributeSet; +import android.widget.SeekBar; +import android.widget.TextView; + +import androidx.preference.Preference; + +import net.kdt.pojavlaunch.R; + +/** Custom preference class displaying a dialog */ +public class ControlOffsetPreference extends Preference { + + private AlertDialog preferenceDialog; + + + + public ControlOffsetPreference(Context context, AttributeSet attrs) { + super(context, attrs); + init(); + } + + public ControlOffsetPreference(Context context) { + super(context); + init(); + } + + + private void init(){ + // Setup visual values + if(getTitle() == null){ + setTitle("Control side offsets"); + } + if(getIcon() == null){ + setIcon(android.R.drawable.radiobutton_off_background); + } + + // Prepare Alert dialog + AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getContext()); + dialogBuilder.setView(R.layout.control_offset_preference_dialog); + dialogBuilder.setTitle("Control offset"); + + dialogBuilder.setPositiveButton(android.R.string.ok, null); + dialogBuilder.setNegativeButton(android.R.string.cancel, null); + + preferenceDialog = dialogBuilder.create(); + + + } + + @Override + protected void onClick() { + preferenceDialog.show(); + + SeekBar topOffsetSeekbar = preferenceDialog.findViewById(R.id.control_offset_top_seekbar); + SeekBar rightOffsetSeekbar = preferenceDialog.findViewById(R.id.control_offset_right_seekbar); + SeekBar bottomOffsetSeekbar = preferenceDialog.findViewById(R.id.control_offset_bottom_seekbar); + SeekBar leftOffsetSeekbar = preferenceDialog.findViewById(R.id.control_offset_left_seekbar); + + TextView topOffsetTextView = preferenceDialog.findViewById(R.id.control_offset_top_textview); + TextView rightOffsetTextView = preferenceDialog.findViewById(R.id.control_offset_right_textview); + TextView bottomOffsetTextView = preferenceDialog.findViewById(R.id.control_offset_bottom_textview); + TextView leftOffsetTextView = preferenceDialog.findViewById(R.id.control_offset_left_textview); + + SeekBar.OnSeekBarChangeListener seekBarChangeListener = new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int i, boolean b) { + if(seekBar == topOffsetSeekbar){ + topOffsetTextView.setText("Top offset: " + i); + return; + } + if(seekBar == rightOffsetSeekbar){ + rightOffsetTextView.setText("Right offset: " + i); + return; + } + if(seekBar == bottomOffsetSeekbar){ + bottomOffsetTextView.setText("Bottom offset: " + i); + return; + } + if(seekBar == leftOffsetSeekbar){ + leftOffsetTextView.setText("Left offset: " + i); + return; + } + } + @Override + public void onStartTrackingTouch(SeekBar seekBar) {} + @Override + public void onStopTrackingTouch(SeekBar seekBar) {} + }; + + topOffsetSeekbar.setOnSeekBarChangeListener(seekBarChangeListener); + rightOffsetSeekbar.setOnSeekBarChangeListener(seekBarChangeListener); + bottomOffsetSeekbar.setOnSeekBarChangeListener(seekBarChangeListener); + leftOffsetSeekbar.setOnSeekBarChangeListener(seekBarChangeListener); + + topOffsetSeekbar.setProgress(PREF_CONTROL_TOP_OFFSET); + rightOffsetSeekbar.setProgress(PREF_CONTROL_RIGHT_OFFSET); + bottomOffsetSeekbar.setProgress(PREF_CONTROL_BOTTOM_OFFSET); + leftOffsetSeekbar.setProgress(PREF_CONTROL_LEFT_OFFSET); + + // Custom writing to preferences + preferenceDialog.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener(view -> { + DEFAULT_PREF.edit().putInt("controlTopOffset", topOffsetSeekbar.getProgress()).apply(); + DEFAULT_PREF.edit().putInt("controlRightOffset", rightOffsetSeekbar.getProgress()).apply(); + DEFAULT_PREF.edit().putInt("controlBottomOffset", bottomOffsetSeekbar.getProgress()).apply(); + DEFAULT_PREF.edit().putInt("controlLeftOffset", leftOffsetSeekbar.getProgress()).apply(); + + + preferenceDialog.dismiss(); + }); + } + +} diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/LauncherPreferences.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/LauncherPreferences.java index ee8261885..501edadb2 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/LauncherPreferences.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/LauncherPreferences.java @@ -29,6 +29,12 @@ public class LauncherPreferences public static float PREF_MOUSESPEED = 1f; public static int PREF_RAM_ALLOCATION; public static String PREF_DEFAULT_RUNTIME; + public static int PREF_CONTROL_TOP_OFFSET = 0; + public static int PREF_CONTROL_RIGHT_OFFSET = 0; + public static int PREF_CONTROL_BOTTOM_OFFSET = 0; + public static int PREF_CONTROL_LEFT_OFFSET = 0; + + public static void loadPreferences(Context ctx) { //Required for the data folder. Tools.initContextConstants(ctx); @@ -51,6 +57,11 @@ public class LauncherPreferences PREF_DISABLE_GESTURES = DEFAULT_PREF.getBoolean("disableGestures",false); PREF_RAM_ALLOCATION = DEFAULT_PREF.getInt("allocation", findBestRAMAllocation(ctx)); PREF_CUSTOM_JAVA_ARGS = DEFAULT_PREF.getString("javaArgs", ""); + PREF_CONTROL_TOP_OFFSET = DEFAULT_PREF.getInt("controlTopOffset", 0); + PREF_CONTROL_RIGHT_OFFSET = DEFAULT_PREF.getInt("controlRightOffset", 0); + PREF_CONTROL_BOTTOM_OFFSET = DEFAULT_PREF.getInt("controlBottomOffset", 0); + PREF_CONTROL_LEFT_OFFSET = DEFAULT_PREF.getInt("controlTopOffset", 0); + /* if (PREF_CUSTOM_JAVA_ARGS.isEmpty()) { String DEFAULT_JAVA_ARGS = ""; diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/screens/LauncherPreferenceControlFragment.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/screens/LauncherPreferenceControlFragment.java index 05e9305d7..7c3920a26 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/screens/LauncherPreferenceControlFragment.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/screens/LauncherPreferenceControlFragment.java @@ -1,5 +1,6 @@ package net.kdt.pojavlaunch.prefs.screens; +import android.content.SharedPreferences; import android.os.Bundle; import net.kdt.pojavlaunch.R; @@ -39,5 +40,19 @@ public class LauncherPreferenceControlFragment extends LauncherPreferenceFragmen seek6.setValue((int)(mouseSpeed *100f)); seek6.setSuffix(" %"); + + computeVisibility(); } + + @Override + public void onSharedPreferenceChanged(SharedPreferences p, String s) { + super.onSharedPreferenceChanged(p, s); + computeVisibility(); + } + + private void computeVisibility(){ + CustomSeekBarPreference seek2 = findPreference("timeLongPressTrigger"); + seek2.setVisible(!LauncherPreferences.PREF_DISABLE_GESTURES); + } + } diff --git a/app_pojavlauncher/src/main/res/layout/control_offset_preference_dialog.xml b/app_pojavlauncher/src/main/res/layout/control_offset_preference_dialog.xml new file mode 100644 index 000000000..09010a0af --- /dev/null +++ b/app_pojavlauncher/src/main/res/layout/control_offset_preference_dialog.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_pojavlauncher/src/main/res/xml/pref_control.xml b/app_pojavlauncher/src/main/res/xml/pref_control.xml index c6eff6e0b..720e1992e 100644 --- a/app_pojavlauncher/src/main/res/xml/pref_control.xml +++ b/app_pojavlauncher/src/main/res/xml/pref_control.xml @@ -20,10 +20,26 @@ android:title="@string/mcl_setting_title_longpresstrigger" app2:showSeekBarValue="true" app2:selectable="false" + app2:seekBarIncrement="10" app2:icon="@drawable/tap_len" /> + + + + + + + + @@ -43,18 +59,7 @@ app2:showSeekBarValue="true" /> - - - - \ No newline at end of file