Merge BadKB config menus + lock bt options on usb

This commit is contained in:
Willy-JL
2023-03-20 22:09:15 +00:00
parent 79976f460c
commit 28ca6553ea
8 changed files with 122 additions and 187 deletions
+5 -12
View File
@@ -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);
+2 -4
View File
@@ -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;
+1 -2
View File
@@ -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);
}
@@ -0,0 +1,112 @@
#include "../bad_kb_app_i.h"
#include "furi_hal_power.h"
#include "furi_hal_usb.h"
#include <xtreme/settings.h>
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);
}
@@ -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)
@@ -1,97 +0,0 @@
#include "../bad_kb_app_i.h"
#include "furi_hal_power.h"
#include "furi_hal_usb.h"
#include <xtreme/settings.h>
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);
}
@@ -1,65 +0,0 @@
#include "../bad_kb_app_i.h"
#include "furi_hal_power.h"
#include "furi_hal_usb.h"
#include <xtreme/settings.h>
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);
}
@@ -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) {