From a92c1f5b26066b1680788d48a7c7330aa79e2bde Mon Sep 17 00:00:00 2001 From: Younus Date: Fri, 17 Oct 2025 13:55:18 +0530 Subject: [PATCH 1/3] feat: Add show/hide button for on-screen controls --- .../virtual_controller/VirtualController.java | 42 ++++++++++++++++++ .../preferences/PreferenceConfiguration.java | 4 ++ app/src/main/res/drawable/ic_dash.png | Bin 0 -> 416 bytes app/src/main/res/values/strings.xml | 2 + app/src/main/res/xml/preferences.xml | 8 ++++ 5 files changed, 56 insertions(+) create mode 100644 app/src/main/res/drawable/ic_dash.png diff --git a/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualController.java b/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualController.java index ce9f4014e8..57c94afb40 100644 --- a/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualController.java +++ b/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualController.java @@ -8,6 +8,7 @@ import android.os.Handler; import android.os.Looper; import android.util.DisplayMetrics; +import android.view.Gravity; import android.view.View; import android.widget.Button; import android.widget.FrameLayout; @@ -16,6 +17,7 @@ import com.limelight.LimeLog; import com.limelight.R; import com.limelight.binding.input.ControllerHandler; +import com.limelight.preferences.PreferenceConfiguration; import java.util.ArrayList; import java.util.List; @@ -57,6 +59,8 @@ public void run() { private Button buttonConfigure = null; + private Button buttonShowHide = null; + private List elements = new ArrayList<>(); public VirtualController(final ControllerHandler controllerHandler, FrameLayout layout, final Context context) { @@ -64,6 +68,7 @@ public VirtualController(final ControllerHandler controllerHandler, FrameLayout this.frame_layout = layout; this.context = context; this.handler = new Handler(Looper.getMainLooper()); + PreferenceConfiguration prefConfig = PreferenceConfiguration.readPreferences(context); buttonConfigure = new Button(context); buttonConfigure.setAlpha(0.25f); @@ -96,12 +101,38 @@ public void onClick(View v) { } }); + if(prefConfig.showToggleControllerButton) { + buttonShowHide = new Button(context); + buttonShowHide.setAlpha(0.25f); + buttonShowHide.setFocusable(false); + buttonShowHide.setBackgroundResource(R.drawable.ic_dash); + buttonShowHide.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if (currentMode == ControllerMode.Active) { + if (isControllerVisible()) { + hide(); + } else { + show(); + } + } + else { + String message = "Exit configuration mode to toggle!"; + Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); + } + } + }); + } } Handler getHandler() { return handler; } + private boolean isControllerVisible() { + return buttonConfigure.getVisibility() == View.VISIBLE; + } + public void hide() { for (VirtualControllerElement element : elements) { element.setVisibility(View.INVISIBLE); @@ -125,6 +156,9 @@ public void removeElements() { elements.clear(); frame_layout.removeView(buttonConfigure); + if (buttonShowHide != null) { + frame_layout.removeView(buttonShowHide); + } } public void setOpacity(int opacity) { @@ -163,6 +197,14 @@ public void refreshLayout() { params.topMargin = 15; frame_layout.addView(buttonConfigure, params); + if (buttonShowHide != null) { + FrameLayout.LayoutParams buttonShowHideParams = new FrameLayout.LayoutParams(buttonSize, buttonSize); + buttonShowHideParams.gravity = Gravity.BOTTOM; + buttonShowHideParams.leftMargin = 15; + buttonShowHideParams.bottomMargin = 15; + frame_layout.addView(buttonShowHide, buttonShowHideParams); + } + // Start with the default layout VirtualControllerConfigurationLoader.createDefaultLayout(this, context); diff --git a/app/src/main/java/com/limelight/preferences/PreferenceConfiguration.java b/app/src/main/java/com/limelight/preferences/PreferenceConfiguration.java index 8ed01e3610..f6f1c59225 100644 --- a/app/src/main/java/com/limelight/preferences/PreferenceConfiguration.java +++ b/app/src/main/java/com/limelight/preferences/PreferenceConfiguration.java @@ -45,6 +45,7 @@ public enum AnalogStickForScrolling { 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 SHOW_TOGGLE_CONTROLLER_BUTTON_PREF_STRING = "checkbox_show_toggle_controller_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"; @@ -85,6 +86,7 @@ public enum AnalogStickForScrolling { 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 SHOW_TOGGLE_CONTROLLER_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; @@ -133,6 +135,7 @@ public enum AnalogStickForScrolling { public boolean onscreenController; public boolean onlyL3R3; public boolean showGuideButton; + public boolean showToggleControllerButton; public boolean enableHdr; public boolean enablePip; public boolean enablePerfOverlay; @@ -581,6 +584,7 @@ else if (audioConfig.equals("51")) { 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.showToggleControllerButton = prefs.getBoolean(SHOW_TOGGLE_CONTROLLER_BUTTON_PREF_STRING, SHOW_TOGGLE_CONTROLLER_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/drawable/ic_dash.png b/app/src/main/res/drawable/ic_dash.png new file mode 100644 index 0000000000000000000000000000000000000000..1d856fe15d3d4089c4eeac2d0e762fe202acca7f GIT binary patch literal 416 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGooCO|{#S9F5he4R}c>anMprB-l zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&3=E9Ao-U3d6?5L+IoR18AmR`x z%yvZX&7rxfw>nj|JeD;Tnm%zTI{z(KE~aAj`FfqxpQH}id}X@7jv<0^15*O)0j>s7 z25p8ghBc%Mym_8y(f4@ww;vJ53-6rEXMXeB?#$;u>$z)Zm&Ue#w)sD&yom%WcGrq- z%)M>kdwF-+Pmk-RchAZHos(TkiV1|h@tgHfo8SbidW)&R&}Hy+^>bP0l+XkK*~f`r literal 0 HcmV?d00001 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9cc2215aaa..f4ac3930e4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -211,6 +211,8 @@ Hide all virtual buttons except L3 and R3 Show Guide Button Show the guide button on screen + Show Toggle Button + Show the toggle button for the on-screen controls 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 5b09082b35..8d5b5b15cf 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -172,6 +172,14 @@ android:key="checkbox_show_guide_button" android:summary="@string/summary_show_guide_button" android:title="@string/title_show_guide_button" /> + Date: Fri, 17 Oct 2025 15:21:29 +0530 Subject: [PATCH 2/3] changeg the icon image --- .../binding/input/virtual_controller/VirtualController.java | 2 +- app/src/main/res/drawable/ic_toggle.xml | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 app/src/main/res/drawable/ic_toggle.xml diff --git a/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualController.java b/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualController.java index 57c94afb40..9bbd5ddb4f 100644 --- a/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualController.java +++ b/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualController.java @@ -105,7 +105,7 @@ public void onClick(View v) { buttonShowHide = new Button(context); buttonShowHide.setAlpha(0.25f); buttonShowHide.setFocusable(false); - buttonShowHide.setBackgroundResource(R.drawable.ic_dash); + buttonShowHide.setBackgroundResource(R.drawable.ic_toggle); buttonShowHide.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { diff --git a/app/src/main/res/drawable/ic_toggle.xml b/app/src/main/res/drawable/ic_toggle.xml new file mode 100644 index 0000000000..f865c287bf --- /dev/null +++ b/app/src/main/res/drawable/ic_toggle.xml @@ -0,0 +1,5 @@ + + + + + From ccbe8c0a12492bc141af1f3b1df4330da13cc039 Mon Sep 17 00:00:00 2001 From: Younus Date: Fri, 17 Oct 2025 15:31:15 +0530 Subject: [PATCH 3/3] removed the old icon --- app/src/main/res/drawable/ic_dash.png | Bin 416 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 app/src/main/res/drawable/ic_dash.png diff --git a/app/src/main/res/drawable/ic_dash.png b/app/src/main/res/drawable/ic_dash.png deleted file mode 100644 index 1d856fe15d3d4089c4eeac2d0e762fe202acca7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 416 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGooCO|{#S9F5he4R}c>anMprB-l zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&3=E9Ao-U3d6?5L+IoR18AmR`x z%yvZX&7rxfw>nj|JeD;Tnm%zTI{z(KE~aAj`FfqxpQH}id}X@7jv<0^15*O)0j>s7 z25p8ghBc%Mym_8y(f4@ww;vJ53-6rEXMXeB?#$;u>$z)Zm&Ue#w)sD&yom%WcGrq- z%)M>kdwF-+Pmk-RchAZHos(TkiV1|h@tgHfo8SbidW)&R&}Hy+^>bP0l+XkK*~f`r