From f4e606fb15dd60d64e224006148fbda17e7e17ae Mon Sep 17 00:00:00 2001 From: The412Banner Date: Fri, 25 Sep 2026 22:49:10 -0400 Subject: [PATCH] Components: the pad's LB / RB step through FEX, DXVK and VKD3D-Proton (wrapping), with LB / RB badges beside the tabs --- .../java/com/droiddeck/launcher/MainActivity.kt | 14 ++++++++++++++ .../com/droiddeck/launcher/ui/ComponentsPage.kt | 17 ++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/droiddeck/launcher/MainActivity.kt b/app/src/main/java/com/droiddeck/launcher/MainActivity.kt index a2a1accd3..7ca19493c 100644 --- a/app/src/main/java/com/droiddeck/launcher/MainActivity.kt +++ b/app/src/main/java/com/droiddeck/launcher/MainActivity.kt @@ -12,6 +12,7 @@ import android.os.Handler import android.os.Looper import android.util.Log import android.view.Display +import android.view.KeyEvent import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.result.contract.ActivityResultContracts @@ -434,6 +435,19 @@ class MainActivity : ComponentActivity() { }, "finish-abandoned").start() } + /** On the Components page the pad's LB / RB step through FEX, DXVK and VKD3D-Proton, wrapping around. */ + override fun dispatchKeyEvent(event: KeyEvent): Boolean { + if (showComponents && (event.keyCode == KeyEvent.KEYCODE_BUTTON_L1 || event.keyCode == KeyEvent.KEYCODE_BUTTON_R1)) { + if (event.action == KeyEvent.ACTION_DOWN && event.repeatCount == 0) { + val all = ComponentsManager.COMPONENTS + val step = if (event.keyCode == KeyEvent.KEYCODE_BUTTON_R1) 1 else all.size - 1 + compComp = all[(all.indexOf(compComp).coerceAtLeast(0) + step) % all.size] + } + return true + } + return super.dispatchKeyEvent(event) + } + override fun onResume() { super.onResume() // Swaps queued while a game ran on that Proton go in once nothing uses it (usually the diff --git a/app/src/main/java/com/droiddeck/launcher/ui/ComponentsPage.kt b/app/src/main/java/com/droiddeck/launcher/ui/ComponentsPage.kt index 1bfc747e3..6640c7c96 100644 --- a/app/src/main/java/com/droiddeck/launcher/ui/ComponentsPage.kt +++ b/app/src/main/java/com/droiddeck/launcher/ui/ComponentsPage.kt @@ -138,7 +138,11 @@ fun ComponentsPage( } } } - Segmented(ComponentsManager.COMPONENTS.map { it to ComponentsManager.LABEL.getValue(it) }, comp, onComp) + Row(verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(6.dp)) { + BumperHint("LB") + Segmented(ComponentsManager.COMPONENTS.map { it to ComponentsManager.LABEL.getValue(it) }, comp, onComp) + BumperHint("RB") + } val st = view.components.getValue(comp) Row(verticalAlignment = Alignment.CenterVertically, modifier = Modifier.weight(1f)) { Box(Modifier.size(8.dp).background(if (st.queued != null) Color(0xFFFFB86B) else pal.good, CircleShape)) @@ -265,6 +269,17 @@ fun ComponentsPage( } } +/** The pad's bumper that turns the component tabs, as a small badge beside them. */ +@Composable +private fun BumperHint(text: String) { + val colors = MaterialTheme.colorScheme + val pal = LocalPalette.current + Text( + text, fontSize = 10.sp, fontWeight = FontWeight.Bold, letterSpacing = 0.5.sp, color = colors.onSurfaceVariant, maxLines = 1, + modifier = Modifier.clip(RoundedCornerShape(5.dp)).border(1.dp, pal.line2, RoundedCornerShape(5.dp)).padding(horizontal = 5.dp, vertical = 2.dp), + ) +} + @Composable private fun SectionLabel(text: String) { val colors = MaterialTheme.colorScheme