From 5102669b064cc6d471171ab9d59d76494b47cf41 Mon Sep 17 00:00:00 2001 From: BryanHaley Date: Sun, 5 Nov 2017 13:57:02 -0800 Subject: [PATCH] Virtual L3 R3 Buttons (#453) * Added virtual L3 R3 options to better support gamepads missing these buttons. * Update preferences.xml --- .../VirtualControllerConfigurationLoader.java | 201 ++++++++++-------- .../preferences/PreferenceConfiguration.java | 4 + app/src/main/res/values-es/strings.xml | 2 + app/src/main/res/values-fr/strings.xml | 2 + app/src/main/res/values/strings.xml | 2 + app/src/main/res/xml/preferences.xml | 11 +- 6 files changed, 130 insertions(+), 92 deletions(-) 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 8aaeebac..1bd1041d 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 @@ -8,6 +8,7 @@ import android.content.Context; import android.util.DisplayMetrics; import com.limelight.nvstream.input.ControllerPacket; +import com.limelight.preferences.PreferenceConfiguration; public class VirtualControllerConfigurationLoader { private static final String PROFILE_PATH = "profiles"; @@ -146,110 +147,130 @@ public class VirtualControllerConfigurationLoader { public static void createDefaultLayout(final VirtualController controller, final Context context) { DisplayMetrics screen = context.getResources().getDisplayMetrics(); + PreferenceConfiguration config = PreferenceConfiguration.readPreferences(context); // NOTE: Some of these getPercent() expressions seem like they can be combined // into a single call. Due to floating point rounding, this isn't actually possible. - controller.addElement(createDigitalPad(controller, context), - getPercent(5, screen.widthPixels), - getPercent(BUTTON_BASE_Y, screen.heightPixels), - getPercent(30, screen.widthPixels), - getPercent(40, screen.heightPixels) - ); + if (!config.onlyL3R3) + { + controller.addElement(createDigitalPad(controller, context), + getPercent(5, screen.widthPixels), + getPercent(BUTTON_BASE_Y, screen.heightPixels), + getPercent(30, screen.widthPixels), + getPercent(40, screen.heightPixels) + ); + + controller.addElement(createDigitalButton( + ControllerPacket.A_FLAG, 0, 1, "A", -1, controller, context), + getPercent(BUTTON_BASE_X, screen.widthPixels) + getPercent(BUTTON_WIDTH, screen.widthPixels), + getPercent(BUTTON_BASE_Y, screen.heightPixels) + 2 * getPercent(BUTTON_HEIGHT, screen.heightPixels), + getPercent(BUTTON_WIDTH, screen.widthPixels), + getPercent(BUTTON_HEIGHT, screen.heightPixels) + ); + + controller.addElement(createDigitalButton( + ControllerPacket.B_FLAG, 0, 1, "B", -1, controller, context), + getPercent(BUTTON_BASE_X, screen.widthPixels) + 2 * getPercent(BUTTON_WIDTH, screen.widthPixels), + getPercent(BUTTON_BASE_Y, screen.heightPixels) + getPercent(BUTTON_HEIGHT, screen.heightPixels), + getPercent(BUTTON_WIDTH, screen.widthPixels), + getPercent(BUTTON_HEIGHT, screen.heightPixels) + ); + + controller.addElement(createDigitalButton( + ControllerPacket.X_FLAG, 0, 1, "X", -1, controller, context), + getPercent(BUTTON_BASE_X, screen.widthPixels), + getPercent(BUTTON_BASE_Y, screen.heightPixels) + getPercent(BUTTON_HEIGHT, screen.heightPixels), + getPercent(BUTTON_WIDTH, screen.widthPixels), + getPercent(BUTTON_HEIGHT, screen.heightPixels) + ); + + controller.addElement(createDigitalButton( + ControllerPacket.Y_FLAG, 0, 1, "Y", -1, controller, context), + getPercent(BUTTON_BASE_X, screen.widthPixels) + getPercent(BUTTON_WIDTH, screen.widthPixels), + getPercent(BUTTON_BASE_Y, screen.heightPixels), + getPercent(BUTTON_WIDTH, screen.widthPixels), + getPercent(BUTTON_HEIGHT, screen.heightPixels) + ); + + controller.addElement(createLeftTrigger( + 0, "LT", -1, controller, context), + getPercent(BUTTON_BASE_X, screen.widthPixels), + getPercent(BUTTON_BASE_Y, screen.heightPixels), + getPercent(BUTTON_WIDTH, screen.widthPixels), + getPercent(BUTTON_HEIGHT, screen.heightPixels) + ); + + controller.addElement(createRightTrigger( + 0, "RT", -1, controller, context), + getPercent(BUTTON_BASE_X, screen.widthPixels) + 2 * getPercent(BUTTON_WIDTH, screen.widthPixels), + getPercent(BUTTON_BASE_Y, screen.heightPixels), + getPercent(BUTTON_WIDTH, screen.widthPixels), + getPercent(BUTTON_HEIGHT, screen.heightPixels) + ); + + controller.addElement(createDigitalButton( + ControllerPacket.LB_FLAG, 0, 1, "LB", -1, controller, context), + getPercent(BUTTON_BASE_X, screen.widthPixels), + getPercent(BUTTON_BASE_Y, screen.heightPixels) + 2 * getPercent(BUTTON_HEIGHT, screen.heightPixels), + getPercent(BUTTON_WIDTH, screen.widthPixels), + getPercent(BUTTON_HEIGHT, screen.heightPixels) + ); + + controller.addElement(createDigitalButton( + ControllerPacket.RB_FLAG, 0, 1, "RB", -1, controller, context), + getPercent(BUTTON_BASE_X, screen.widthPixels) + 2 * getPercent(BUTTON_WIDTH, screen.widthPixels), + getPercent(BUTTON_BASE_Y, screen.heightPixels) + 2 * getPercent(BUTTON_HEIGHT, screen.heightPixels), + getPercent(BUTTON_WIDTH, screen.widthPixels), + getPercent(BUTTON_HEIGHT, screen.heightPixels) + ); + + controller.addElement(createLeftStick(controller, context), + getPercent(5, screen.widthPixels), + getPercent(50, screen.heightPixels), + getPercent(40, screen.widthPixels), + getPercent(50, screen.heightPixels) + ); + + controller.addElement(createRightStick(controller, context), + getPercent(55, screen.widthPixels), + getPercent(50, screen.heightPixels), + getPercent(40, screen.widthPixels), + getPercent(50, screen.heightPixels) + ); + + controller.addElement(createDigitalButton( + ControllerPacket.BACK_FLAG, 0, 2, "BACK", -1, controller, context), + getPercent(40, screen.widthPixels), + getPercent(90, screen.heightPixels), + getPercent(10, screen.widthPixels), + getPercent(10, screen.heightPixels) + ); + + controller.addElement(createDigitalButton( + ControllerPacket.PLAY_FLAG, 0, 3, "START", -1, controller, context), + getPercent(40, screen.widthPixels) + getPercent(10, screen.widthPixels), + getPercent(90, screen.heightPixels), + getPercent(10, screen.widthPixels), + getPercent(10, screen.heightPixels) + ); + } controller.addElement(createDigitalButton( - ControllerPacket.A_FLAG, 0, 1, "A", -1, controller, context), - getPercent(BUTTON_BASE_X, screen.widthPixels)+getPercent(BUTTON_WIDTH, screen.widthPixels), - getPercent(BUTTON_BASE_Y, screen.heightPixels)+2*getPercent(BUTTON_HEIGHT, screen.heightPixels), + ControllerPacket.LS_CLK_FLAG, 0, 1, "L3", -1, controller, context), + getPercent(2, screen.widthPixels), + getPercent(80, screen.heightPixels), getPercent(BUTTON_WIDTH, screen.widthPixels), getPercent(BUTTON_HEIGHT, screen.heightPixels) ); controller.addElement(createDigitalButton( - ControllerPacket.B_FLAG, 0, 1, "B", -1, controller, context), - getPercent(BUTTON_BASE_X, screen.widthPixels)+2*getPercent(BUTTON_WIDTH, screen.widthPixels), - getPercent(BUTTON_BASE_Y, screen.heightPixels)+getPercent(BUTTON_HEIGHT, screen.heightPixels), + ControllerPacket.RS_CLK_FLAG, 0, 1, "R3", -1, controller, context), + getPercent(89, screen.widthPixels), + getPercent(80, screen.heightPixels), getPercent(BUTTON_WIDTH, screen.widthPixels), getPercent(BUTTON_HEIGHT, screen.heightPixels) ); - - controller.addElement(createDigitalButton( - ControllerPacket.X_FLAG, 0, 1, "X", -1, controller, context), - getPercent(BUTTON_BASE_X, screen.widthPixels), - getPercent(BUTTON_BASE_Y, screen.heightPixels)+getPercent(BUTTON_HEIGHT, screen.heightPixels), - getPercent(BUTTON_WIDTH, screen.widthPixels), - getPercent(BUTTON_HEIGHT, screen.heightPixels) - ); - - controller.addElement(createDigitalButton( - ControllerPacket.Y_FLAG, 0, 1, "Y", -1, controller, context), - getPercent(BUTTON_BASE_X, screen.widthPixels)+getPercent(BUTTON_WIDTH, screen.widthPixels), - getPercent(BUTTON_BASE_Y, screen.heightPixels), - getPercent(BUTTON_WIDTH, screen.widthPixels), - getPercent(BUTTON_HEIGHT, screen.heightPixels) - ); - - controller.addElement(createLeftTrigger( - 0, "LT", -1, controller, context), - getPercent(BUTTON_BASE_X, screen.widthPixels), - getPercent(BUTTON_BASE_Y, screen.heightPixels), - getPercent(BUTTON_WIDTH, screen.widthPixels), - getPercent(BUTTON_HEIGHT, screen.heightPixels) - ); - - controller.addElement(createRightTrigger( - 0, "RT", -1, controller, context), - getPercent(BUTTON_BASE_X, screen.widthPixels)+2*getPercent(BUTTON_WIDTH, screen.widthPixels), - getPercent(BUTTON_BASE_Y, screen.heightPixels), - getPercent(BUTTON_WIDTH, screen.widthPixels), - getPercent(BUTTON_HEIGHT, screen.heightPixels) - ); - - controller.addElement(createDigitalButton( - ControllerPacket.LB_FLAG, 0, 1, "LB", -1, controller, context), - getPercent(BUTTON_BASE_X, screen.widthPixels), - getPercent(BUTTON_BASE_Y, screen.heightPixels)+2*getPercent(BUTTON_HEIGHT, screen.heightPixels), - getPercent(BUTTON_WIDTH, screen.widthPixels), - getPercent(BUTTON_HEIGHT, screen.heightPixels) - ); - - controller.addElement(createDigitalButton( - ControllerPacket.RB_FLAG, 0, 1, "RB", -1, controller, context), - getPercent(BUTTON_BASE_X, screen.widthPixels)+2*getPercent(BUTTON_WIDTH, screen.widthPixels), - getPercent(BUTTON_BASE_Y, screen.heightPixels)+2*getPercent(BUTTON_HEIGHT, screen.heightPixels), - getPercent(BUTTON_WIDTH, screen.widthPixels), - getPercent(BUTTON_HEIGHT, screen.heightPixels) - ); - - controller.addElement(createLeftStick(controller, context), - getPercent(5, screen.widthPixels), - getPercent(50, screen.heightPixels), - getPercent(40, screen.widthPixels), - getPercent(50, screen.heightPixels) - ); - - controller.addElement(createRightStick(controller, context), - getPercent(55, screen.widthPixels), - getPercent(50, screen.heightPixels), - getPercent(40, screen.widthPixels), - getPercent(50, screen.heightPixels) - ); - - controller.addElement(createDigitalButton( - ControllerPacket.BACK_FLAG, 0, 2, "BACK", -1, controller, context), - getPercent(40, screen.widthPixels), - getPercent(90, screen.heightPixels), - getPercent(10, screen.widthPixels), - getPercent(10, screen.heightPixels) - ); - - controller.addElement(createDigitalButton( - ControllerPacket.PLAY_FLAG, 0, 3, "START", -1, controller, context), - getPercent(40, screen.widthPixels)+getPercent(10, screen.widthPixels), - getPercent(90, screen.heightPixels), - getPercent(10, screen.widthPixels), - getPercent(10, screen.heightPixels) - ); } /* diff --git a/app/src/main/java/com/limelight/preferences/PreferenceConfiguration.java b/app/src/main/java/com/limelight/preferences/PreferenceConfiguration.java index ded3c95f..129d1572 100644 --- a/app/src/main/java/com/limelight/preferences/PreferenceConfiguration.java +++ b/app/src/main/java/com/limelight/preferences/PreferenceConfiguration.java @@ -22,6 +22,7 @@ public class PreferenceConfiguration { private static final String USB_DRIVER_PREF_SRING = "checkbox_usb_driver"; 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 BATTERY_SAVER_PREF_STRING = "checkbox_battery_saver"; private static final String DISABLE_FRAME_DROP_PREF_STRING = "checkbox_disable_frame_drop"; @@ -46,6 +47,7 @@ public class PreferenceConfiguration { private static final boolean DEFAULT_USB_DRIVER = true; private static final String DEFAULT_VIDEO_FORMAT = "auto"; private static final boolean ONSCREEN_CONTROLLER_DEFAULT = false; + private static final boolean ONLY_L3_R3_DEFAULT = false; private static final boolean DEFAULT_BATTERY_SAVER = false; private static final boolean DEFAULT_DISABLE_FRAME_DROP = false; @@ -61,6 +63,7 @@ public class PreferenceConfiguration { public String language; public boolean listMode, smallIconMode, multiController, enable51Surround, usbDriver; public boolean onscreenController; + public boolean onlyL3R3; public boolean batterySaver; public boolean disableFrameDrop; @@ -203,6 +206,7 @@ public class PreferenceConfiguration { config.enable51Surround = prefs.getBoolean(ENABLE_51_SURROUND_PREF_STRING, DEFAULT_ENABLE_51_SURROUND); 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.batterySaver = prefs.getBoolean(BATTERY_SAVER_PREF_STRING, DEFAULT_BATTERY_SAVER); config.disableFrameDrop = prefs.getBoolean(DISABLE_FRAME_DROP_PREF_STRING, DEFAULT_DISABLE_FRAME_DROP); diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index fb28f660..331cf491 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -109,6 +109,8 @@ Configuración de controles en pantalla Mostrar controles en pantalla Muestra controles virtuales superpuestos en la pantalla táctil + Solo muestra L3 y R3 + Ocultar todo excepto L3 y R3 Configuración de la interfaz Idioma diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 205edbf2..822e1df6 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -120,6 +120,8 @@ Paramètres des contrôles à l\'écran Afficher les commandes à l\'écran Afficher la superposition du contrôleur virtuel sur l\'écran tactile + Montre seulement L3 et R3 + Cacher tout sauf L3 et R3 Paramètres de l\'interface utilisateur Langue diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d77dfebd..3858241d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -126,6 +126,8 @@ On-screen Controls Settings Show on-screen controls Show virtual controller overlay on touchscreen + Only show L3 and R3 + Hide all virtual buttons except L3 and R3 UI Settings Language diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index aa23510a..6bb88c40 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -54,10 +54,17 @@ + android:title="@string/title_checkbox_show_onscreen_controls" /> +