From 10d199f9d5bf85136211c0811e29679787343375 Mon Sep 17 00:00:00 2001 From: Dana Conrad Date: Sun, 14 Mar 2021 14:03:00 -0500 Subject: [PATCH] Allow Softlock to happen in most contexts All this tested on erosq, I'm not sure if this will break on other targets or if there is a reason this shouldn't be done. apps/menu.c: Added CONTEXT_MAINMENU|ALLOW_SOFTLOCK in do_menu(), this allows the user to lock the keys in most places within the main menu tree. apps/tree.c: Added CONTEXT_TREE|ALLOW_SOFTLOCK in dirbrowse(), this allows locking the keys in most other contexts not covered by the above. Notable exceptions I've found that still cannot be locked: View Playlist, any settings change screen (ex. Shuffle No/Yes, Volume Select dB) Adding fix for Advanced Key Lock feature brought to light by this change in apps/action.c. Expected behavior for Advanced keylock is now (according to my testing here): Volume: Can be exempted from keylock anywhere Skip/Scrollwheel: Can only be exempted in WPS Seek: Can only be exempted in WPS Play: Can only be exempted in WPS Backlight exemption is same except the Volume exemption doesn't work outside the WPS, but I don't believe that is due to this change. Change-Id: Ifa3d1a03cf4884520a37dd91ed53a825cdb66778 --- apps/action.c | 12 ++++++++---- apps/menu.c | 2 +- apps/tree.c | 2 +- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/apps/action.c b/apps/action.c index 74f0a3d7df..07032f7ae7 100644 --- a/apps/action.c +++ b/apps/action.c @@ -128,21 +128,25 @@ static bool is_action_filtered(int action, unsigned int mask, int context) case ACTION_FM_PLAY: match = has_flag(mask, SEL_ACTION_PLAY); break; - case ACTION_STD_PREVREPEAT: - case ACTION_STD_NEXTREPEAT: + //case ACTION_STD_PREVREPEAT: // seek not exempted outside of WPS + //case ACTION_STD_NEXTREPEAT: case ACTION_WPS_SEEKBACK: case ACTION_WPS_SEEKFWD: case ACTION_WPS_STOPSEEK: match = has_flag(mask, SEL_ACTION_SEEK); break; - case ACTION_STD_PREV: - case ACTION_STD_NEXT: + //case ACTION_STD_PREV: // skip/scrollwheel not exempted outside of WPS + //case ACTION_STD_NEXT: case ACTION_WPS_SKIPNEXT: case ACTION_WPS_SKIPPREV: case ACTION_FM_NEXT_PRESET: case ACTION_FM_PREV_PRESET: match = has_flag(mask, SEL_ACTION_SKIP); break; +#ifdef HAVE_VOLUME_IN_LIST + case ACTION_LIST_VOLUP: // volume exempted outside of WPS if the device supports it + case ACTION_LIST_VOLDOWN: +#endif case ACTION_WPS_VOLUP: case ACTION_WPS_VOLDOWN: match = has_flag(mask, SEL_ACTION_VOL); diff --git a/apps/menu.c b/apps/menu.c index b25aa46a2c..6279ec10a6 100644 --- a/apps/menu.c +++ b/apps/menu.c @@ -394,7 +394,7 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected, int new_audio_status; redraw_lists = false; keyclick_set_callback(gui_synclist_keyclick_callback, &lists); - action = get_action(CONTEXT_MAINMENU, + action = get_action(CONTEXT_MAINMENU|ALLOW_SOFTLOCK, list_do_action_timeout(&lists, HZ)); /* query audio status to see if it changed */ diff --git a/apps/tree.c b/apps/tree.c index 9e4aafccfe..88ccff5e37 100644 --- a/apps/tree.c +++ b/apps/tree.c @@ -646,7 +646,7 @@ static int dirbrowse(void) tc.dirlevel = 0; /* shouldnt be needed.. this code needs work! */ keyclick_set_callback(gui_synclist_keyclick_callback, &tree_lists); - button = get_action(CONTEXT_TREE, + button = get_action(CONTEXT_TREE|ALLOW_SOFTLOCK, list_do_action_timeout(&tree_lists, HZ/2)); oldbutton = button; gui_synclist_do_button(&tree_lists, &button,LIST_WRAP_UNLESS_HELD);