From ad1af280d91b3603a424c87999ea3ac48a808924 Mon Sep 17 00:00:00 2001 From: sds100 Date: Thu, 14 Nov 2024 21:46:27 +0100 Subject: [PATCH] #1274 fix: only show button for long press if all the keys are key code triggers --- .../keymaps/trigger/BaseConfigTriggerViewModel.kt | 10 ++++++++++ app/src/main/res/layout/fragment_trigger.xml | 3 ++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/io/github/sds100/keymapper/mappings/keymaps/trigger/BaseConfigTriggerViewModel.kt b/app/src/main/java/io/github/sds100/keymapper/mappings/keymaps/trigger/BaseConfigTriggerViewModel.kt index 4027bbfc25..e9e6f11bcf 100644 --- a/app/src/main/java/io/github/sds100/keymapper/mappings/keymaps/trigger/BaseConfigTriggerViewModel.kt +++ b/app/src/main/java/io/github/sds100/keymapper/mappings/keymaps/trigger/BaseConfigTriggerViewModel.kt @@ -146,6 +146,16 @@ abstract class BaseConfigTriggerViewModel( } }.flowOn(Dispatchers.Default).stateIn(coroutineScope, SharingStarted.Eagerly, false) + /** + * Long press is only allowed for triggers that only use key code trigger keys. + */ + val longPressButtonVisible: StateFlow = config.mapping.map { state -> + when (state) { + is State.Data -> state.data.trigger.keys.all { it is KeyCodeTriggerKey } + State.Loading -> false + } + }.flowOn(Dispatchers.Default).stateIn(coroutineScope, SharingStarted.Eagerly, false) + /** * Only show the buttons for the trigger mode if keys have been added. The buttons * shouldn't be shown when no trigger is selected because they aren't relevant diff --git a/app/src/main/res/layout/fragment_trigger.xml b/app/src/main/res/layout/fragment_trigger.xml index a1c2a74a2b..9b12c7e24d 100644 --- a/app/src/main/res/layout/fragment_trigger.xml +++ b/app/src/main/res/layout/fragment_trigger.xml @@ -102,7 +102,8 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" - android:text="@string/radio_button_long_press" /> + android:text="@string/radio_button_long_press" + android:visibility="@{viewModel.longPressButtonVisible ? View.VISIBLE : View.GONE}" />