diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java index f8cfe970f3..f0dc2de748 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java @@ -32,6 +32,7 @@ import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; +import android.view.WindowManager; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; @@ -110,6 +111,13 @@ public class MainActivity extends BaseActivity implements ControlButtonMenuListe @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + if (LauncherPreferences.PREF_KEYBOARD_PANNING) { + getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); + } else { + getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING); + } + if (LauncherPreferences.PREF_GAMEPAD_SDL_PASSTHRU) { // TODO: Use lower level HID capture that needs a dialogue box from the user for the // app to fully take focus of the input devices. Might cause issues with older android @@ -509,6 +517,15 @@ public void onResolutionChanged() { mHotbarView.onResolutionChanged(); } + @Override + public void onKeyboardPanningChanged() { + if (LauncherPreferences.PREF_KEYBOARD_PANNING) { + getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); + } else { + getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING); + } + } + @Override public void onGyroStateChanged() { mGyroControl.updateOrientation(); diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/mouse/Touchpad.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/mouse/Touchpad.java index 78ca9e7109..f9d48fd2c4 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/mouse/Touchpad.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/mouse/Touchpad.java @@ -123,9 +123,11 @@ public boolean getDisplayState() { @Override public void applyMotionVector(float x, float y) { - mMouseX = Math.max(0, Math.min(currentDisplayMetrics.widthPixels, mMouseX + x * LauncherPreferences.PREF_MOUSESPEED)); - mMouseY = Math.max(0, Math.min(currentDisplayMetrics.heightPixels, mMouseY + y * LauncherPreferences.PREF_MOUSESPEED)); - updateMousePosition(); + if (mDisplayState) { // Make sure no motion leaks through when disabling a moving cursor + mMouseX = Math.max(0, Math.min(currentDisplayMetrics.widthPixels, mMouseX + x * LauncherPreferences.PREF_MOUSESPEED)); + mMouseY = Math.max(0, Math.min(currentDisplayMetrics.heightPixels, mMouseY + y * LauncherPreferences.PREF_MOUSESPEED)); + updateMousePosition(); + } } @Override 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 543a23695e..057af91334 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 @@ -75,6 +75,7 @@ public class LauncherPreferences { public static int PREF_TOUCHCONTROLLER_VIBRATE_LENGTH = 100; public static boolean PREF_MOUSE_GRAB_FORCE = false; + public static boolean PREF_KEYBOARD_PANNING = true; public static void loadPreferences(Context ctx) { @@ -121,6 +122,7 @@ public static void loadPreferences(Context ctx) { PREF_FORCE_ENABLE_TOUCHCONTROLLER = DEFAULT_PREF.getBoolean("forceEnableTouchController", false); PREF_TOUCHCONTROLLER_VIBRATE_LENGTH = DEFAULT_PREF.getInt("touchControllerVibrateLength", 100); PREF_MOUSE_GRAB_FORCE = DEFAULT_PREF.getBoolean("always_grab_mouse", false); + PREF_KEYBOARD_PANNING = DEFAULT_PREF.getBoolean("keyboardPanning", true); String argLwjglLibname = "-Dorg.lwjgl.opengl.libname="; for (String arg : JREUtils.parseJavaArguments(PREF_CUSTOM_JAVA_ARGS)) { diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/QuickSettingSideDialog.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/QuickSettingSideDialog.java index 0689a7ce1d..e80011bf20 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/QuickSettingSideDialog.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/QuickSettingSideDialog.java @@ -5,6 +5,7 @@ import static net.kdt.pojavlaunch.prefs.LauncherPreferences.PREF_GYRO_INVERT_X; import static net.kdt.pojavlaunch.prefs.LauncherPreferences.PREF_GYRO_INVERT_Y; import static net.kdt.pojavlaunch.prefs.LauncherPreferences.PREF_GYRO_SENSITIVITY; +import static net.kdt.pojavlaunch.prefs.LauncherPreferences.PREF_KEYBOARD_PANNING; import static net.kdt.pojavlaunch.prefs.LauncherPreferences.PREF_LONGPRESS_TRIGGER; import static net.kdt.pojavlaunch.prefs.LauncherPreferences.PREF_MOUSESPEED; import static net.kdt.pojavlaunch.prefs.LauncherPreferences.PREF_MOUSE_GRAB_FORCE; @@ -32,11 +33,11 @@ public abstract class QuickSettingSideDialog extends com.kdt.SideDialogView { private SharedPreferences.Editor mEditor; @SuppressLint("UseSwitchCompatOrMaterialCode") - private Switch mGyroSwitch, mGyroXSwitch, mGyroYSwitch, mGestureSwitch, mMouseGrabSwitch; + private Switch mGyroSwitch, mGyroXSwitch, mGyroYSwitch, mGestureSwitch, mMouseGrabSwitch, mKeyboardPanningSwitch; private CustomSeekbar mGyroSensitivityBar, mMouseSpeedBar, mGestureDelayBar, mResolutionBar; private TextView mGyroSensitivityText, mGyroSensitivityDisplayText, mMouseSpeedText, mGestureDelayText, mGestureDelayDisplayText, mResolutionText; - private boolean mOriginalGyroEnabled, mOriginalGyroXEnabled, mOriginalGyroYEnabled, mOriginalGestureDisabled, mOriginalMouseGrab; + private boolean mOriginalGyroEnabled, mOriginalGyroXEnabled, mOriginalGyroYEnabled, mOriginalGestureDisabled, mOriginalMouseGrab, mOriginalKeyboardPanning; private float mOriginalGyroSensitivity, mOriginalMouseSpeed, mOriginalResolution; private int mOriginalGestureDelay; @@ -67,6 +68,7 @@ private void bindLayout() { mGyroYSwitch = mDialogContent.findViewById(R.id.checkboxGyroY); mGestureSwitch = mDialogContent.findViewById(R.id.checkboxGesture); mMouseGrabSwitch = mDialogContent.findViewById(R.id.always_grab_mouse_side_dialog); + mKeyboardPanningSwitch = mDialogContent.findViewById(R.id.checkboxKeyboardPanning); mGyroSensitivityBar = mDialogContent.findViewById(R.id.editGyro_seekbar); mMouseSpeedBar = mDialogContent.findViewById(R.id.editMouseSpeed_seekbar); @@ -89,6 +91,7 @@ private void setupListeners() { mOriginalGyroYEnabled = PREF_GYRO_INVERT_Y; mOriginalGestureDisabled = PREF_DISABLE_GESTURES; mOriginalMouseGrab = PREF_MOUSE_GRAB_FORCE; + mOriginalKeyboardPanning = PREF_KEYBOARD_PANNING; mOriginalGyroSensitivity = PREF_GYRO_SENSITIVITY; mOriginalMouseSpeed = PREF_MOUSESPEED; @@ -100,6 +103,7 @@ private void setupListeners() { mGyroYSwitch.setChecked(mOriginalGyroYEnabled); mGestureSwitch.setChecked(mOriginalGestureDisabled); mMouseGrabSwitch.setChecked(mOriginalMouseGrab); + mKeyboardPanningSwitch.setChecked(mOriginalKeyboardPanning); mGyroSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> { PREF_ENABLE_GYRO = isChecked; @@ -131,6 +135,12 @@ private void setupListeners() { mEditor.putBoolean("always_grab_mouse", isChecked); }); + mKeyboardPanningSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> { + PREF_KEYBOARD_PANNING = isChecked; + onKeyboardPanningChanged(); + mEditor.putBoolean("keyboardPanning", isChecked); + }); + mGyroSensitivityBar.setOnSeekBarChangeListener((SimpleSeekBarListener) (seekBar, progress, fromUser) -> { PREF_GYRO_SENSITIVITY = progress / 100f; mEditor.putInt("gyroSensitivity", progress); @@ -217,6 +227,7 @@ private void removeListeners() { mGyroYSwitch.setOnCheckedChangeListener(null); mGestureSwitch.setOnCheckedChangeListener(null); mMouseGrabSwitch.setOnCheckedChangeListener(null); + mKeyboardPanningSwitch.setOnCheckedChangeListener(null); mGyroSensitivityBar.setOnSeekBarChangeListener(null); mMouseSpeedBar.setOnSeekBarChangeListener(null); @@ -241,6 +252,7 @@ public void cancel() { PREF_GYRO_INVERT_Y = mOriginalGyroYEnabled; PREF_DISABLE_GESTURES = mOriginalGestureDisabled; PREF_MOUSE_GRAB_FORCE = mOriginalMouseGrab; + PREF_KEYBOARD_PANNING = mOriginalKeyboardPanning; PREF_GYRO_SENSITIVITY = mOriginalGyroSensitivity; PREF_MOUSESPEED = mOriginalMouseSpeed; @@ -249,6 +261,7 @@ public void cancel() { onGyroStateChanged(); onResolutionChanged(); + onKeyboardPanningChanged(); } disappear(true); @@ -257,6 +270,9 @@ public void cancel() { /** Called when the resolution is changed. Use {@link LauncherPreferences#PREF_SCALE_FACTOR} */ public abstract void onResolutionChanged(); + /** Called when the keyboard panning state is changed. Use {@link LauncherPreferences#PREF_KEYBOARD_PANNING} */ + public abstract void onKeyboardPanningChanged(); + /** Called when the gyro state is changed. * Use {@link LauncherPreferences#PREF_ENABLE_GYRO} * Use {@link LauncherPreferences#PREF_GYRO_INVERT_X} diff --git a/app_pojavlauncher/src/main/res/layout/activity_basemain.xml b/app_pojavlauncher/src/main/res/layout/activity_basemain.xml index ac34158ccc..b258b96200 100644 --- a/app_pojavlauncher/src/main/res/layout/activity_basemain.xml +++ b/app_pojavlauncher/src/main/res/layout/activity_basemain.xml @@ -38,11 +38,24 @@ android:translationZ="1dp" android:visibility="gone"/> + + + android:layout_height="1dp" + android:layout_gravity="bottom" /> + + \ No newline at end of file diff --git a/app_pojavlauncher/src/main/res/values/strings.xml b/app_pojavlauncher/src/main/res/values/strings.xml index 6f695e916d..ce70ec7288 100644 --- a/app_pojavlauncher/src/main/res/values/strings.xml +++ b/app_pojavlauncher/src/main/res/values/strings.xml @@ -176,6 +176,8 @@ Changes the speed of the virtual mouse. Use virtual cursor Ensures the cursor stays inside the game. Prevents mouse from clicking touch control layout. + Keyboard panning + Shift the screen upwards when the keyboard is open. Mouse pass-thru Swipeable Forward lock diff --git a/app_pojavlauncher/src/main/res/xml/pref_control.xml b/app_pojavlauncher/src/main/res/xml/pref_control.xml index 7747d0c7a4..5dc60d68a8 100644 --- a/app_pojavlauncher/src/main/res/xml/pref_control.xml +++ b/app_pojavlauncher/src/main/res/xml/pref_control.xml @@ -62,6 +62,11 @@ android:title="@string/mcl_setting_title_buttonallcaps" android:summary="@string/mcl_setting_subtitle_buttonallcaps" /> +