From ecd916d43f5ecc8041fb6fbfd1d39559602dffce Mon Sep 17 00:00:00 2001 From: MaxsTechReview Date: Sun, 8 Nov 2026 18:32:40 -0500 Subject: [PATCH] fix(input): show the panel tabs under the controls-below-the-game bar (#2302) * fix(input): show the panel tabs under the controls-below-the-game bar * fix(input): take the tab row out of the game, not the controls below it --- .../java/com/droiddeck/launcher/SessionActivity.kt | 13 ++++++++++--- .../droiddeck/launcher/session/SessionDisplay.kt | 4 ++-- .../launcher/session/SessionDisplayTest.kt | 7 +++++++ 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/droiddeck/launcher/SessionActivity.kt b/app/src/main/java/com/droiddeck/launcher/SessionActivity.kt index 86e57cd4f..45a831f95 100644 --- a/app/src/main/java/com/droiddeck/launcher/SessionActivity.kt +++ b/app/src/main/java/com/droiddeck/launcher/SessionActivity.kt @@ -3609,7 +3609,10 @@ class SessionActivity : ComponentActivity(), SurfaceHolder.Callback { val width = sessionRoot.width val height = sessionRoot.height val wanted = controlsBelowWanted() - val gameHeight = if (wanted) com.droiddeck.launcher.session.SessionDisplay.unfoldedGameHeight(width, height) + val tabRow = unfoldedColumn?.getChildAt(0)?.height?.let { + it - (com.droiddeck.launcher.ui.BAR_HEIGHT.value * resources.displayMetrics.density + 0.5f).toInt() + } ?: 0 + val gameHeight = if (wanted) com.droiddeck.launcher.session.SessionDisplay.unfoldedGameHeight(width, height, tabRow) else FrameLayout.LayoutParams.MATCH_PARENT val params = surfaceView.layoutParams as FrameLayout.LayoutParams if (params.height != gameHeight) { @@ -3635,8 +3638,12 @@ class SessionActivity : ComponentActivity(), SurfaceHolder.Callback { panel = OnScreenControls(this, padBridge, dock).also { it.updateLayout(primaryInputLayout) } val column = android.widget.LinearLayout(this).apply { orientation = android.widget.LinearLayout.VERTICAL - addView(unfoldedBar(), android.widget.LinearLayout.LayoutParams(android.widget.LinearLayout.LayoutParams.MATCH_PARENT, - (com.droiddeck.launcher.ui.BAR_HEIGHT.value * resources.displayMetrics.density + 0.5f).toInt())) + addView(unfoldedBar().apply { + addOnLayoutChangeListener { _, _, top, _, bottom, _, oldTop, _, oldBottom -> + if (bottom - top != oldBottom - oldTop) post { applyUnfoldedControls() } + } + }, android.widget.LinearLayout.LayoutParams(android.widget.LinearLayout.LayoutParams.MATCH_PARENT, + android.widget.LinearLayout.LayoutParams.WRAP_CONTENT)) addView(panel, android.widget.LinearLayout.LayoutParams(android.widget.LinearLayout.LayoutParams.MATCH_PARENT, 0, 1f)) } sessionRoot.addView(column, sessionRoot.indexOfChild(surfaceView) + 1) diff --git a/app/src/main/java/com/droiddeck/launcher/session/SessionDisplay.kt b/app/src/main/java/com/droiddeck/launcher/session/SessionDisplay.kt index 1cb526c90..9b253d88a 100644 --- a/app/src/main/java/com/droiddeck/launcher/session/SessionDisplay.kt +++ b/app/src/main/java/com/droiddeck/launcher/session/SessionDisplay.kt @@ -69,8 +69,8 @@ object SessionDisplay { const val UNFOLDED_MIN_DP = 600 - fun unfoldedGameHeight(width: Int, height: Int): Int = - minOf(width * 9 / 16, (height * UNFOLDED_MAX_GAME_SHARE).toInt()) and 1.inv() + fun unfoldedGameHeight(width: Int, height: Int, tabRow: Int = 0): Int = + (minOf(width * 9 / 16, (height * UNFOLDED_MAX_GAME_SHARE).toInt()) - tabRow.coerceAtLeast(0)).coerceAtLeast(0) and 1.inv() fun unfoldedControlsWanted( enabled: Boolean, diff --git a/app/src/test/java/com/droiddeck/launcher/session/SessionDisplayTest.kt b/app/src/test/java/com/droiddeck/launcher/session/SessionDisplayTest.kt index 82512c0b9..7f3eec409 100644 --- a/app/src/test/java/com/droiddeck/launcher/session/SessionDisplayTest.kt +++ b/app/src/test/java/com/droiddeck/launcher/session/SessionDisplayTest.kt @@ -60,6 +60,13 @@ class SessionDisplayTest { assertEquals(864, SessionDisplay.unfoldedGameHeight(1920, 1080)) } + @Test fun aTabRowUnderTheBarComesOutOfTheGameNotTheControls() { + assertEquals(1376, SessionDisplay.unfoldedGameHeight(2448, 1848, 0)) + assertEquals(1240, SessionDisplay.unfoldedGameHeight(2448, 1848, 136)) + assertEquals(1376, SessionDisplay.unfoldedGameHeight(2448, 1848, -20)) + assertEquals(0, SessionDisplay.unfoldedGameHeight(200, 100, 500)) + } + private fun unfoldedWanted( enabled: Boolean = true, controller: Boolean = false,