From 85ed72802fcc81243a81a47f65641df2c4bf6436 Mon Sep 17 00:00:00 2001 From: Matheus Vargem Date: Sat, 27 Jul 2024 17:21:17 -0400 Subject: [PATCH] feat: Add `Guide menu` to on-screen virtual controller (#1265) * Add `Guide Button` to OSC controller In order to allow the `Guide Button` to be pressed without a physical gamepad, add the button to the On-screen virtual controller Co-authored-by: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> --- .../VirtualControllerConfigurationLoader.java | 14 ++++++++++++++ .../VirtualControllerElement.java | 1 + .../preferences/PreferenceConfiguration.java | 4 ++++ app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/xml/preferences.xml | 8 ++++++++ 5 files changed, 29 insertions(+) diff --git a/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualControllerConfigurationLoader.java b/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualControllerConfigurationLoader.java index 55e438f7..d66ca836 100644 --- a/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualControllerConfigurationLoader.java +++ b/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualControllerConfigurationLoader.java @@ -185,6 +185,10 @@ public class VirtualControllerConfigurationLoader { private static final int START_BACK_WIDTH = 12; private static final int START_BACK_HEIGHT = 7; + // Make the Guide Menu be in the center of START and BACK menu + private static final int GUIDE_X = START_X-BACK_X; + private static final int GUIDE_Y = START_BACK_Y; + public static void createDefaultLayout(final VirtualController controller, final Context context) { DisplayMetrics screen = context.getResources().getDisplayMetrics(); @@ -333,6 +337,16 @@ public class VirtualControllerConfigurationLoader { ); } + if(config.showGuideButton){ + controller.addElement(createDigitalButton(VirtualControllerElement.EID_GDB, + ControllerPacket.SPECIAL_BUTTON_FLAG, 0, 1, "GUIDE", -1, controller, context), + screenScale(GUIDE_X, height)+ rightDisplacement, + screenScale(GUIDE_Y, height), + screenScale(START_BACK_WIDTH, height), + screenScale(START_BACK_HEIGHT, height) + ); + } + controller.setOpacity(config.oscOpacity); } diff --git a/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualControllerElement.java b/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualControllerElement.java index cb906dec..e45e9ddc 100644 --- a/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualControllerElement.java +++ b/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualControllerElement.java @@ -35,6 +35,7 @@ public abstract class VirtualControllerElement extends View { public static final int EID_RS = 13; public static final int EID_LSB = 14; public static final int EID_RSB = 15; + public static final int EID_GDB = 16; protected VirtualController virtualController; protected final int elementId; diff --git a/app/src/main/java/com/limelight/preferences/PreferenceConfiguration.java b/app/src/main/java/com/limelight/preferences/PreferenceConfiguration.java index e0ba76e5..8ed01e36 100644 --- a/app/src/main/java/com/limelight/preferences/PreferenceConfiguration.java +++ b/app/src/main/java/com/limelight/preferences/PreferenceConfiguration.java @@ -44,6 +44,7 @@ public class PreferenceConfiguration { private static final String VIDEO_FORMAT_PREF_STRING = "video_format"; private static final String ONSCREEN_CONTROLLER_PREF_STRING = "checkbox_show_onscreen_controls"; private static final String ONLY_L3_R3_PREF_STRING = "checkbox_only_show_L3R3"; + private static final String SHOW_GUIDE_BUTTON_PREF_STRING = "checkbox_show_guide_button"; private static final String LEGACY_DISABLE_FRAME_DROP_PREF_STRING = "checkbox_disable_frame_drop"; private static final String ENABLE_HDR_PREF_STRING = "checkbox_enable_hdr"; private static final String ENABLE_PIP_PREF_STRING = "checkbox_enable_pip"; @@ -83,6 +84,7 @@ public class PreferenceConfiguration { private static final boolean ONSCREEN_CONTROLLER_DEFAULT = false; private static final boolean ONLY_L3_R3_DEFAULT = false; + private static final boolean SHOW_GUIDE_BUTTON_DEFAULT = true; private static final boolean DEFAULT_ENABLE_HDR = false; private static final boolean DEFAULT_ENABLE_PIP = false; private static final boolean DEFAULT_ENABLE_PERF_OVERLAY = false; @@ -130,6 +132,7 @@ public class PreferenceConfiguration { public boolean smallIconMode, multiController, usbDriver, flipFaceButtons; public boolean onscreenController; public boolean onlyL3R3; + public boolean showGuideButton; public boolean enableHdr; public boolean enablePip; public boolean enablePerfOverlay; @@ -577,6 +580,7 @@ public class PreferenceConfiguration { config.usbDriver = prefs.getBoolean(USB_DRIVER_PREF_SRING, DEFAULT_USB_DRIVER); config.onscreenController = prefs.getBoolean(ONSCREEN_CONTROLLER_PREF_STRING, ONSCREEN_CONTROLLER_DEFAULT); config.onlyL3R3 = prefs.getBoolean(ONLY_L3_R3_PREF_STRING, ONLY_L3_R3_DEFAULT); + config.showGuideButton = prefs.getBoolean(SHOW_GUIDE_BUTTON_PREF_STRING, SHOW_GUIDE_BUTTON_DEFAULT); config.enableHdr = prefs.getBoolean(ENABLE_HDR_PREF_STRING, DEFAULT_ENABLE_HDR) && !isShieldAtvFirmwareWithBrokenHdr(); config.enablePip = prefs.getBoolean(ENABLE_PIP_PREF_STRING, DEFAULT_ENABLE_PIP); config.enablePerfOverlay = prefs.getBoolean(ENABLE_PERF_OVERLAY_STRING, DEFAULT_ENABLE_PERF_OVERLAY); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 82cf3222..9cc2215a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -209,6 +209,8 @@ Vibrates your device to emulate rumble for the on-screen controls Only show L3 and R3 Hide all virtual buttons except L3 and R3 + Show Guide Button + Show the guide button on screen Clear saved on-screen controls layout Resets all on-screen controls to their default size and position Reset Layout diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index d68c8c57..5b09082b 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -164,6 +164,14 @@ android:key="checkbox_only_show_L3R3" android:summary="@string/summary_only_l3r3" android:title="@string/title_only_l3r3" /> +