diff --git a/applications/main/bad_kb/bad_kb_app.c b/applications/main/bad_kb/bad_kb_app.c index 5c095c2f0..9dc057032 100644 --- a/applications/main/bad_kb/bad_kb_app.c +++ b/applications/main/bad_kb/bad_kb_app.c @@ -125,16 +125,11 @@ BadKbApp* bad_kb_app_alloc(char* arg) { view_dispatcher_add_view( app->view_dispatcher, BadKbAppViewError, widget_get_view(app->widget)); - app->var_item_list_bt = variable_item_list_alloc(); + app->var_item_list = variable_item_list_alloc(); view_dispatcher_add_view( app->view_dispatcher, - BadKbAppViewConfigBt, - variable_item_list_get_view(app->var_item_list_bt)); - app->var_item_list_usb = variable_item_list_alloc(); - view_dispatcher_add_view( - app->view_dispatcher, - BadKbAppViewConfigUsb, - variable_item_list_get_view(app->var_item_list_usb)); + BadKbAppViewConfig, + variable_item_list_get_view(app->var_item_list)); app->bad_kb_view = bad_kb_alloc(); view_dispatcher_add_view( @@ -188,10 +183,8 @@ void bad_kb_app_free(BadKbApp* app) { widget_free(app->widget); // Variable item list - view_dispatcher_remove_view(app->view_dispatcher, BadKbAppViewConfigBt); - variable_item_list_free(app->var_item_list_bt); - view_dispatcher_remove_view(app->view_dispatcher, BadKbAppViewConfigUsb); - variable_item_list_free(app->var_item_list_usb); + view_dispatcher_remove_view(app->view_dispatcher, BadKbAppViewConfig); + variable_item_list_free(app->var_item_list); // Text Input view_dispatcher_remove_view(app->view_dispatcher, BadKbAppViewConfigName); diff --git a/applications/main/bad_kb/bad_kb_app_i.h b/applications/main/bad_kb/bad_kb_app_i.h index 8a8a166d5..da0f5c665 100644 --- a/applications/main/bad_kb/bad_kb_app_i.h +++ b/applications/main/bad_kb/bad_kb_app_i.h @@ -53,8 +53,7 @@ struct BadKbApp { NotificationApp* notifications; DialogsApp* dialogs; Widget* widget; - VariableItemList* var_item_list_bt; - VariableItemList* var_item_list_usb; + VariableItemList* var_item_list; Bt* bt; TextInput* text_input; @@ -81,8 +80,7 @@ struct BadKbApp { typedef enum { BadKbAppViewError, BadKbAppViewWork, - BadKbAppViewConfigBt, - BadKbAppViewConfigUsb, + BadKbAppViewConfig, BadKbAppViewConfigMac, BadKbAppViewConfigName } BadKbAppView; diff --git a/applications/main/bad_kb/bad_kb_script.c b/applications/main/bad_kb/bad_kb_script.c index 17c833381..2edae9a84 100644 --- a/applications/main/bad_kb/bad_kb_script.c +++ b/applications/main/bad_kb/bad_kb_script.c @@ -442,11 +442,10 @@ void bad_kb_config_switch_mode(BadKbApp* app) { scene_manager_previous_scene(app->scene_manager); if(app->is_bt) { furi_hal_bt_start_advertising(); - scene_manager_next_scene(app->scene_manager, BadKbSceneConfigBt); } else { furi_hal_bt_stop_advertising(); - scene_manager_next_scene(app->scene_manager, BadKbSceneConfigUsb); } + scene_manager_next_scene(app->scene_manager, BadKbSceneConfig); bad_kb_reload_worker(app); } diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_config.c b/applications/main/bad_kb/scenes/bad_kb_scene_config.c new file mode 100644 index 000000000..1d67e0abb --- /dev/null +++ b/applications/main/bad_kb/scenes/bad_kb_scene_config.c @@ -0,0 +1,112 @@ +#include "../bad_kb_app_i.h" +#include "furi_hal_power.h" +#include "furi_hal_usb.h" +#include + +enum VarItemListIndex { + VarItemListIndexKeyboardLayout, + VarItemListIndexConnection, + VarItemListIndexBtRemember, + VarItemListIndexBtDeviceName, + VarItemListIndexBtMacAddress, +}; + +void bad_kb_scene_config_connection_callback(VariableItem* item) { + BadKbApp* bad_kb = variable_item_get_context(item); + bad_kb->is_bt = variable_item_get_current_value_index(item); + XTREME_SETTINGS()->bad_bt = bad_kb->is_bt; + XTREME_SETTINGS_SAVE(); + variable_item_set_current_value_text(item, bad_kb->is_bt ? "BT" : "USB"); + view_dispatcher_send_custom_event(bad_kb->view_dispatcher, VarItemListIndexConnection); +} + +void bad_kb_scene_config_bt_remember_callback(VariableItem* item) { + BadKbApp* bad_kb = variable_item_get_context(item); + bad_kb->bt_remember = variable_item_get_current_value_index(item); + XTREME_SETTINGS()->bad_bt_remember = bad_kb->bt_remember; + XTREME_SETTINGS_SAVE(); + variable_item_set_current_value_text(item, bad_kb->bt_remember ? "ON" : "OFF"); + view_dispatcher_send_custom_event(bad_kb->view_dispatcher, VarItemListIndexRemember); +} + +void bad_kb_scene_config_var_item_list_callback(void* context, uint32_t index) { + BadKbApp* bad_kb = context; + view_dispatcher_send_custom_event(bad_kb->view_dispatcher, index); +} + +void bad_kb_scene_config_on_enter(void* context) { + BadKbApp* bad_kb = context; + VariableItemList* var_item_list = bad_kb->var_item_list; + VariableItem* item; + + item = variable_item_list_add(var_item_list, "Keyboard layout", 0, NULL, bad_kb); + + item = variable_item_list_add( + var_item_list, "Connection", 2, bad_kb_scene_config_connection_callback, bad_kb); + variable_item_set_current_value_index(item, bad_kb->is_bt); + variable_item_set_current_value_text(item, bad_kb->is_bt ? "BT" : "USB"); + + item = variable_item_list_add( + var_item_list, "BT Remember", 2, bad_kb_scene_config_bt_remember_callback, bad_kb); + variable_item_set_current_value_index(item, bad_kb->bt_remember); + variable_item_set_current_value_text(item, bad_kb->bt_remember ? "ON" : "OFF"); + variable_item_set_locked(item, !bad_kb->is_bt, "Only in\nBT mode!"); + + item = variable_item_list_add(var_item_list, "BT device name", 0, NULL, bad_kb); + variable_item_set_locked(item, !bad_kb->is_bt, "Only in\nBT mode!"); + + item = variable_item_list_add(var_item_list, "BT MAC address", 0, NULL, bad_kb); + if(!bad_kb->is_bt) { + variable_item_set_locked(item, true, "Only in\nBT mode!"); + } else if(bad_kb->bt_remember) { + variable_item_set_locked(item, true, "Remember\nmust be Off!"); + } + + variable_item_list_set_enter_callback( + var_item_list, bad_kb_scene_config_var_item_list_callback, bad_kb); + + variable_item_list_set_selected_item( + var_item_list, scene_manager_get_scene_state(bad_kb->scene_manager, BadKbSceneConfig)); + + view_dispatcher_switch_to_view(bad_kb->view_dispatcher, BadKbAppViewConfig); +} + +bool bad_kb_scene_config_on_event(void* context, SceneManagerEvent event) { + BadKbApp* bad_kb = context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + scene_manager_set_scene_state(bad_kb->scene_manager, BadKbSceneConfig, event.event); + consumed = true; + switch(event.event) { + case VarItemListIndexKeyboardLayout: + scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigLayout); + break; + case VarItemListIndexConnection: + bad_kb_config_switch_mode(bad_kb); + break; + case VarItemListIndexBtRemember: + bad_kb_config_switch_remember_mode(bad_kb); + scene_manager_previous_scene(bad_kb->scene_manager); + scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfig); + break; + case VarItemListIndexBtDeviceName: + scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigName); + break; + case VarItemListIndexBtMacAddress: + scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigMac); + break; + default: + break; + } + } + + return consumed; +} + +void bad_kb_scene_config_on_exit(void* context) { + BadKbApp* bad_kb = context; + VariableItemList* var_item_list = bad_kb->var_item_list; + + variable_item_list_reset(var_item_list); +} diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_config.h b/applications/main/bad_kb/scenes/bad_kb_scene_config.h index 794468eba..ac445c673 100644 --- a/applications/main/bad_kb/scenes/bad_kb_scene_config.h +++ b/applications/main/bad_kb/scenes/bad_kb_scene_config.h @@ -1,8 +1,7 @@ ADD_SCENE(bad_kb, file_select, FileSelect) ADD_SCENE(bad_kb, work, Work) ADD_SCENE(bad_kb, error, Error) -ADD_SCENE(bad_kb, config_bt, ConfigBt) -ADD_SCENE(bad_kb, config_usb, ConfigUsb) +ADD_SCENE(bad_kb, config, Config) ADD_SCENE(bad_kb, config_layout, ConfigLayout) ADD_SCENE(bad_kb, config_name, ConfigName) ADD_SCENE(bad_kb, config_mac, ConfigMac) diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_config_bt.c b/applications/main/bad_kb/scenes/bad_kb_scene_config_bt.c deleted file mode 100644 index 70dde9e16..000000000 --- a/applications/main/bad_kb/scenes/bad_kb_scene_config_bt.c +++ /dev/null @@ -1,97 +0,0 @@ -#include "../bad_kb_app_i.h" -#include "furi_hal_power.h" -#include "furi_hal_usb.h" -#include - -enum VarItemListIndex { - VarItemListIndexConnection, - VarItemListIndexRemember, - VarItemListIndexKeyboardLayout, - VarItemListIndexAdvertisementName, - VarItemListIndexMacAddress, -}; - -void bad_kb_scene_config_bt_connection_callback(VariableItem* item) { - BadKbApp* bad_kb = variable_item_get_context(item); - bad_kb->is_bt = variable_item_get_current_value_index(item); - XTREME_SETTINGS()->bad_bt = bad_kb->is_bt; - XTREME_SETTINGS_SAVE(); - variable_item_set_current_value_text(item, bad_kb->is_bt ? "BT" : "USB"); - view_dispatcher_send_custom_event(bad_kb->view_dispatcher, VarItemListIndexConnection); -} - -void bad_kb_scene_config_bt_bounding_callback(VariableItem* item) { - BadKbApp* bad_kb = variable_item_get_context(item); - bad_kb->bt_remember = variable_item_get_current_value_index(item); - XTREME_SETTINGS()->bad_bt_remember = bad_kb->bt_remember; - XTREME_SETTINGS_SAVE(); - variable_item_set_current_value_text(item, bad_kb->bt_remember ? "ON" : "OFF"); - view_dispatcher_send_custom_event(bad_kb->view_dispatcher, VarItemListIndexRemember); -} - -void bad_kb_scene_config_bt_var_item_list_callback(void* context, uint32_t index) { - BadKbApp* bad_kb = context; - view_dispatcher_send_custom_event(bad_kb->view_dispatcher, index); -} - -void bad_kb_scene_config_bt_on_enter(void* context) { - BadKbApp* bad_kb = context; - VariableItemList* var_item_list = bad_kb->var_item_list_bt; - VariableItem* item; - - item = variable_item_list_add( - var_item_list, "Connection", 2, bad_kb_scene_config_bt_connection_callback, bad_kb); - variable_item_set_current_value_index(item, bad_kb->is_bt); - variable_item_set_current_value_text(item, bad_kb->is_bt ? "BT" : "USB"); - - item = variable_item_list_add( - var_item_list, "Remember", 2, bad_kb_scene_config_bt_bounding_callback, bad_kb); - variable_item_set_current_value_index(item, bad_kb->bt_remember); - variable_item_set_current_value_text(item, bad_kb->bt_remember ? "ON" : "OFF"); - - item = variable_item_list_add(var_item_list, "Keyboard layout", 0, NULL, bad_kb); - - item = variable_item_list_add(var_item_list, "BT device name", 0, NULL, bad_kb); - - // this doesn't update instantly when toggling between Bounding modes - if(!bad_kb->bt_remember) { - item = variable_item_list_add(var_item_list, "BT MAC address", 0, NULL, bad_kb); - } - - variable_item_list_set_enter_callback( - var_item_list, bad_kb_scene_config_bt_var_item_list_callback, bad_kb); - - view_dispatcher_switch_to_view(bad_kb->view_dispatcher, BadKbAppViewConfigBt); -} - -bool bad_kb_scene_config_bt_on_event(void* context, SceneManagerEvent event) { - BadKbApp* bad_kb = context; - bool consumed = false; - - if(event.type == SceneManagerEventTypeCustom) { - scene_manager_set_scene_state(bad_kb->scene_manager, BadKbSceneConfigBt, event.event); - consumed = true; - if(event.event == VarItemListIndexKeyboardLayout) { - scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigLayout); - } else if(event.event == VarItemListIndexConnection) { - bad_kb_config_switch_mode(bad_kb); - } else if(event.event == VarItemListIndexRemember) { - bad_kb_config_switch_remember_mode(bad_kb); - scene_manager_previous_scene(bad_kb->scene_manager); - scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigBt); - } else if(event.event == VarItemListIndexAdvertisementName) { - scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigName); - } else if(event.event == VarItemListIndexMacAddress) { - scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigMac); - } - } - - return consumed; -} - -void bad_kb_scene_config_bt_on_exit(void* context) { - BadKbApp* bad_kb = context; - VariableItemList* var_item_list = bad_kb->var_item_list_bt; - - variable_item_list_reset(var_item_list); -} diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_config_usb.c b/applications/main/bad_kb/scenes/bad_kb_scene_config_usb.c deleted file mode 100644 index d3ff35fc8..000000000 --- a/applications/main/bad_kb/scenes/bad_kb_scene_config_usb.c +++ /dev/null @@ -1,65 +0,0 @@ -#include "../bad_kb_app_i.h" -#include "furi_hal_power.h" -#include "furi_hal_usb.h" -#include - -enum VarItemListIndex { - VarItemListIndexConnection, - VarItemListIndexKeyboardLayout, -}; - -void bad_kb_scene_config_usb_connection_callback(VariableItem* item) { - BadKbApp* bad_kb = variable_item_get_context(item); - bad_kb->is_bt = variable_item_get_current_value_index(item); - XTREME_SETTINGS()->bad_bt = bad_kb->is_bt; - XTREME_SETTINGS_SAVE(); - variable_item_set_current_value_text(item, bad_kb->is_bt ? "BT" : "USB"); - view_dispatcher_send_custom_event(bad_kb->view_dispatcher, VarItemListIndexConnection); -} - -void bad_kb_scene_config_usb_var_item_list_callback(void* context, uint32_t index) { - BadKbApp* bad_kb = context; - view_dispatcher_send_custom_event(bad_kb->view_dispatcher, index); -} - -void bad_kb_scene_config_usb_on_enter(void* context) { - BadKbApp* bad_kb = context; - VariableItemList* var_item_list = bad_kb->var_item_list_usb; - VariableItem* item; - - item = variable_item_list_add( - var_item_list, "Connection", 2, bad_kb_scene_config_usb_connection_callback, bad_kb); - variable_item_set_current_value_index(item, bad_kb->is_bt); - variable_item_set_current_value_text(item, bad_kb->is_bt ? "BT" : "USB"); - - item = variable_item_list_add(var_item_list, "Keyboard layout", 0, NULL, bad_kb); - - variable_item_list_set_enter_callback( - var_item_list, bad_kb_scene_config_usb_var_item_list_callback, bad_kb); - - view_dispatcher_switch_to_view(bad_kb->view_dispatcher, BadKbAppViewConfigUsb); -} - -bool bad_kb_scene_config_usb_on_event(void* context, SceneManagerEvent event) { - BadKbApp* bad_kb = context; - bool consumed = false; - - if(event.type == SceneManagerEventTypeCustom) { - scene_manager_set_scene_state(bad_kb->scene_manager, BadKbSceneConfigUsb, event.event); - consumed = true; - if(event.event == VarItemListIndexKeyboardLayout) { - scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigLayout); - } else if(event.event == VarItemListIndexConnection) { - bad_kb_config_switch_mode(bad_kb); - } - } - - return consumed; -} - -void bad_kb_scene_config_usb_on_exit(void* context) { - BadKbApp* bad_kb = context; - VariableItemList* var_item_list = bad_kb->var_item_list_usb; - - variable_item_list_reset(var_item_list); -} diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_work.c b/applications/main/bad_kb/scenes/bad_kb_scene_work.c index e962f9132..160487548 100644 --- a/applications/main/bad_kb/scenes/bad_kb_scene_work.c +++ b/applications/main/bad_kb/scenes/bad_kb_scene_work.c @@ -17,11 +17,7 @@ bool bad_kb_scene_work_on_event(void* context, SceneManagerEvent event) { if(event.type == SceneManagerEventTypeCustom) { if(event.event == InputKeyLeft) { if(bad_kb_is_idle_state(app->bad_kb_view)) { - if(app->is_bt) { - scene_manager_next_scene(app->scene_manager, BadKbSceneConfigBt); - } else { - scene_manager_next_scene(app->scene_manager, BadKbSceneConfigUsb); - } + scene_manager_next_scene(app->scene_manager, BadKbSceneConfig); } consumed = true; } else if(event.event == InputKeyOk) {