This commit is contained in:
Willy-JL
2023-03-20 21:26:20 +00:00
parent 7231ddf857
commit 89e98dea4e
18 changed files with 207 additions and 138 deletions

View File

@@ -55,12 +55,7 @@ MessageView* message_view_allocate(BarcodeApp* barcode_app) {
void message_view_free_model(MessageView* message_view_object) { void message_view_free_model(MessageView* message_view_object) {
with_view_model( with_view_model(
message_view_object->view, message_view_object->view, MessageViewModel * model, { UNUSED(model); }, true);
MessageViewModel * model,
{
UNUSED(model);
},
true);
} }
void message_view_free(MessageView* message_view_object) { void message_view_free(MessageView* message_view_object) {

View File

@@ -195,8 +195,7 @@ int32_t infrared_remote_app(void* p) {
FuriString* map_file = furi_string_alloc(); FuriString* map_file = furi_string_alloc();
furi_string_set(map_file, "/ext/infrared/remote"); furi_string_set(map_file, "/ext/infrared/remote");
if(!storage_file_exists(storage, ANY_PATH("infrared/remote"))) { if(!storage_file_exists(storage, ANY_PATH("infrared/remote"))) {
storage_common_mkdir( storage_common_mkdir(storage, ANY_PATH("infrared/remote")); //Make Folder If dir not exist
storage, ANY_PATH("infrared/remote")); //Make Folder If dir not exist
} }
bool res = dialog_file_browser_show(dialogs, map_file, map_file, &browser_options); bool res = dialog_file_browser_show(dialogs, map_file, map_file, &browser_options);

View File

@@ -12,5 +12,5 @@ App(
fap_category="Tools", fap_category="Tools",
fap_author="noproto", fap_author="noproto",
fap_icon_assets="images", fap_icon_assets="images",
fap_weburl="https://github.com/noproto/FlipperMfkey" fap_weburl="https://github.com/noproto/FlipperMfkey",
) )

View File

@@ -44,7 +44,11 @@ void xtreme_app_scene_interface_common_on_enter(void* context) {
VariableItem* item; VariableItem* item;
item = variable_item_list_add( item = variable_item_list_add(
var_item_list, "Sort Dirs First", 2, xtreme_app_scene_interface_common_sort_dirs_first_changed, app); var_item_list,
"Sort Dirs First",
2,
xtreme_app_scene_interface_common_sort_dirs_first_changed,
app);
variable_item_set_current_value_index(item, xtreme_settings->sort_dirs_first); variable_item_set_current_value_index(item, xtreme_settings->sort_dirs_first);
variable_item_set_current_value_text(item, xtreme_settings->sort_dirs_first ? "ON" : "OFF"); variable_item_set_current_value_text(item, xtreme_settings->sort_dirs_first ? "ON" : "OFF");
@@ -54,7 +58,11 @@ void xtreme_app_scene_interface_common_on_enter(void* context) {
variable_item_set_current_value_text(item, xtreme_settings->dark_mode ? "ON" : "OFF"); variable_item_set_current_value_text(item, xtreme_settings->dark_mode ? "ON" : "OFF");
item = variable_item_list_add( item = variable_item_list_add(
var_item_list, "Left Handed", 2, xtreme_app_scene_interface_common_left_handed_changed, app); var_item_list,
"Left Handed",
2,
xtreme_app_scene_interface_common_left_handed_changed,
app);
bool value = furi_hal_rtc_is_flag_set(FuriHalRtcFlagHandOrient); bool value = furi_hal_rtc_is_flag_set(FuriHalRtcFlagHandOrient);
variable_item_set_current_value_index(item, value); variable_item_set_current_value_index(item, value);
variable_item_set_current_value_text(item, value ? "ON" : "OFF"); variable_item_set_current_value_text(item, value ? "ON" : "OFF");
@@ -63,7 +71,8 @@ void xtreme_app_scene_interface_common_on_enter(void* context) {
var_item_list, xtreme_app_scene_interface_common_var_item_list_callback, app); var_item_list, xtreme_app_scene_interface_common_var_item_list_callback, app);
variable_item_list_set_selected_item( variable_item_list_set_selected_item(
var_item_list, scene_manager_get_scene_state(app->scene_manager, XtremeAppSceneInterfaceCommon)); var_item_list,
scene_manager_get_scene_state(app->scene_manager, XtremeAppSceneInterfaceCommon));
view_dispatcher_switch_to_view(app->view_dispatcher, XtremeAppViewVarItemList); view_dispatcher_switch_to_view(app->view_dispatcher, XtremeAppViewVarItemList);
} }
@@ -73,7 +82,8 @@ bool xtreme_app_scene_interface_common_on_event(void* context, SceneManagerEvent
bool consumed = false; bool consumed = false;
if(event.type == SceneManagerEventTypeCustom) { if(event.type == SceneManagerEventTypeCustom) {
scene_manager_set_scene_state(app->scene_manager, XtremeAppSceneInterfaceCommon, event.event); scene_manager_set_scene_state(
app->scene_manager, XtremeAppSceneInterfaceCommon, event.event);
consumed = true; consumed = true;
switch(event.event) { switch(event.event) {
default: default:

View File

@@ -86,7 +86,9 @@ void xtreme_app_scene_interface_graphics_on_enter(void* context) {
variable_item_set_current_value_index(item, app->asset_pack_index); variable_item_set_current_value_index(item, app->asset_pack_index);
variable_item_set_current_value_text( variable_item_set_current_value_text(
item, item,
app->asset_pack_index == 0 ? "SFW" : *CharList_get(app->asset_pack_names, app->asset_pack_index - 1)); app->asset_pack_index == 0 ?
"SFW" :
*CharList_get(app->asset_pack_names, app->asset_pack_index - 1));
item = variable_item_list_add( item = variable_item_list_add(
var_item_list, var_item_list,
@@ -111,7 +113,11 @@ void xtreme_app_scene_interface_graphics_on_enter(void* context) {
variable_item_set_current_value_text(item, cycle_anims_names[value_index]); variable_item_set_current_value_text(item, cycle_anims_names[value_index]);
item = variable_item_list_add( item = variable_item_list_add(
var_item_list, "Unlock Anims", 2, xtreme_app_scene_interface_graphics_unlock_anims_changed, app); var_item_list,
"Unlock Anims",
2,
xtreme_app_scene_interface_graphics_unlock_anims_changed,
app);
variable_item_set_current_value_index(item, xtreme_settings->unlock_anims); variable_item_set_current_value_index(item, xtreme_settings->unlock_anims);
variable_item_set_current_value_text(item, xtreme_settings->unlock_anims ? "ON" : "OFF"); variable_item_set_current_value_text(item, xtreme_settings->unlock_anims ? "ON" : "OFF");
@@ -119,7 +125,8 @@ void xtreme_app_scene_interface_graphics_on_enter(void* context) {
var_item_list, xtreme_app_scene_interface_graphics_var_item_list_callback, app); var_item_list, xtreme_app_scene_interface_graphics_var_item_list_callback, app);
variable_item_list_set_selected_item( variable_item_list_set_selected_item(
var_item_list, scene_manager_get_scene_state(app->scene_manager, XtremeAppSceneInterfaceGraphics)); var_item_list,
scene_manager_get_scene_state(app->scene_manager, XtremeAppSceneInterfaceGraphics));
view_dispatcher_switch_to_view(app->view_dispatcher, XtremeAppViewVarItemList); view_dispatcher_switch_to_view(app->view_dispatcher, XtremeAppViewVarItemList);
} }
@@ -129,7 +136,8 @@ bool xtreme_app_scene_interface_graphics_on_event(void* context, SceneManagerEve
bool consumed = false; bool consumed = false;
if(event.type == SceneManagerEventTypeCustom) { if(event.type == SceneManagerEventTypeCustom) {
scene_manager_set_scene_state(app->scene_manager, XtremeAppSceneInterfaceGraphics, event.event); scene_manager_set_scene_state(
app->scene_manager, XtremeAppSceneInterfaceGraphics, event.event);
consumed = true; consumed = true;
switch(event.event) { switch(event.event) {
default: default:

View File

@@ -49,22 +49,39 @@ void xtreme_app_scene_interface_lockscreen_on_enter(void* context) {
VariableItem* item; VariableItem* item;
item = variable_item_list_add( item = variable_item_list_add(
var_item_list, "Show Time", 2, xtreme_app_scene_interface_lockscreen_show_time_changed, app); var_item_list,
"Show Time",
2,
xtreme_app_scene_interface_lockscreen_show_time_changed,
app);
variable_item_set_current_value_index(item, xtreme_settings->lockscreen_time); variable_item_set_current_value_index(item, xtreme_settings->lockscreen_time);
variable_item_set_current_value_text(item, xtreme_settings->lockscreen_time ? "ON" : "OFF"); variable_item_set_current_value_text(item, xtreme_settings->lockscreen_time ? "ON" : "OFF");
item = variable_item_list_add( item = variable_item_list_add(
var_item_list, "Show Date", 2, xtreme_app_scene_interface_lockscreen_show_date_changed, app); var_item_list,
"Show Date",
2,
xtreme_app_scene_interface_lockscreen_show_date_changed,
app);
variable_item_set_current_value_index(item, xtreme_settings->lockscreen_date); variable_item_set_current_value_index(item, xtreme_settings->lockscreen_date);
variable_item_set_current_value_text(item, xtreme_settings->lockscreen_date ? "ON" : "OFF"); variable_item_set_current_value_text(item, xtreme_settings->lockscreen_date ? "ON" : "OFF");
item = variable_item_list_add( item = variable_item_list_add(
var_item_list, "Show Statusbar", 2, xtreme_app_scene_interface_lockscreen_show_statusbar_changed, app); var_item_list,
"Show Statusbar",
2,
xtreme_app_scene_interface_lockscreen_show_statusbar_changed,
app);
variable_item_set_current_value_index(item, xtreme_settings->lockscreen_statusbar); variable_item_set_current_value_index(item, xtreme_settings->lockscreen_statusbar);
variable_item_set_current_value_text(item, xtreme_settings->lockscreen_statusbar ? "ON" : "OFF"); variable_item_set_current_value_text(
item, xtreme_settings->lockscreen_statusbar ? "ON" : "OFF");
item = variable_item_list_add( item = variable_item_list_add(
var_item_list, "Unlock Prompt", 2, xtreme_app_scene_interface_lockscreen_unlock_prompt_changed, app); var_item_list,
"Unlock Prompt",
2,
xtreme_app_scene_interface_lockscreen_unlock_prompt_changed,
app);
variable_item_set_current_value_index(item, xtreme_settings->lockscreen_prompt); variable_item_set_current_value_index(item, xtreme_settings->lockscreen_prompt);
variable_item_set_current_value_text(item, xtreme_settings->lockscreen_prompt ? "ON" : "OFF"); variable_item_set_current_value_text(item, xtreme_settings->lockscreen_prompt ? "ON" : "OFF");
@@ -72,7 +89,8 @@ void xtreme_app_scene_interface_lockscreen_on_enter(void* context) {
var_item_list, xtreme_app_scene_interface_lockscreen_var_item_list_callback, app); var_item_list, xtreme_app_scene_interface_lockscreen_var_item_list_callback, app);
variable_item_list_set_selected_item( variable_item_list_set_selected_item(
var_item_list, scene_manager_get_scene_state(app->scene_manager, XtremeAppSceneInterfaceLockscreen)); var_item_list,
scene_manager_get_scene_state(app->scene_manager, XtremeAppSceneInterfaceLockscreen));
view_dispatcher_switch_to_view(app->view_dispatcher, XtremeAppViewVarItemList); view_dispatcher_switch_to_view(app->view_dispatcher, XtremeAppViewVarItemList);
} }
@@ -82,7 +100,8 @@ bool xtreme_app_scene_interface_lockscreen_on_event(void* context, SceneManagerE
bool consumed = false; bool consumed = false;
if(event.type == SceneManagerEventTypeCustom) { if(event.type == SceneManagerEventTypeCustom) {
scene_manager_set_scene_state(app->scene_manager, XtremeAppSceneInterfaceLockscreen, event.event); scene_manager_set_scene_state(
app->scene_manager, XtremeAppSceneInterfaceLockscreen, event.event);
consumed = true; consumed = true;
switch(event.event) { switch(event.event) {
default: default:

View File

@@ -7,9 +7,7 @@ enum VarItemListIndex {
VarItemListIndexAddApp, VarItemListIndexAddApp,
}; };
void xtreme_app_scene_interface_mainmenu_var_item_list_callback( void xtreme_app_scene_interface_mainmenu_var_item_list_callback(void* context, uint32_t index) {
void* context,
uint32_t index) {
XtremeApp* app = context; XtremeApp* app = context;
view_dispatcher_send_custom_event(app->view_dispatcher, index); view_dispatcher_send_custom_event(app->view_dispatcher, index);
} }
@@ -25,7 +23,8 @@ static void xtreme_app_scene_interface_mainmenu_wii_menu_changed(VariableItem* i
static void xtreme_app_scene_interface_mainmenu_app_changed(VariableItem* item) { static void xtreme_app_scene_interface_mainmenu_app_changed(VariableItem* item) {
XtremeApp* app = variable_item_get_context(item); XtremeApp* app = variable_item_get_context(item);
app->mainmenu_app_index = variable_item_get_current_value_index(item); app->mainmenu_app_index = variable_item_get_current_value_index(item);
variable_item_set_current_value_text(item, *CharList_get(app->mainmenu_app_names, app->mainmenu_app_index)); variable_item_set_current_value_text(
item, *CharList_get(app->mainmenu_app_names, app->mainmenu_app_index));
} }
void xtreme_app_scene_interface_mainmenu_on_enter(void* context) { void xtreme_app_scene_interface_mainmenu_on_enter(void* context) {
@@ -37,7 +36,8 @@ void xtreme_app_scene_interface_mainmenu_on_enter(void* context) {
item = variable_item_list_add( item = variable_item_list_add(
var_item_list, "Menu Style", 2, xtreme_app_scene_interface_mainmenu_wii_menu_changed, app); var_item_list, "Menu Style", 2, xtreme_app_scene_interface_mainmenu_wii_menu_changed, app);
variable_item_set_current_value_index(item, xtreme_settings->wii_menu); variable_item_set_current_value_index(item, xtreme_settings->wii_menu);
variable_item_set_current_value_text(item, xtreme_settings->wii_menu ? "Wii Grid" : "App List"); variable_item_set_current_value_text(
item, xtreme_settings->wii_menu ? "Wii Grid" : "App List");
item = variable_item_list_add( item = variable_item_list_add(
var_item_list, var_item_list,
@@ -48,7 +48,8 @@ void xtreme_app_scene_interface_mainmenu_on_enter(void* context) {
app->mainmenu_app_index = 0; app->mainmenu_app_index = 0;
variable_item_set_current_value_index(item, app->mainmenu_app_index); variable_item_set_current_value_index(item, app->mainmenu_app_index);
if(CharList_size(app->mainmenu_app_names)) { if(CharList_size(app->mainmenu_app_names)) {
variable_item_set_current_value_text(item, *CharList_get(app->mainmenu_app_names, app->mainmenu_app_index)); variable_item_set_current_value_text(
item, *CharList_get(app->mainmenu_app_names, app->mainmenu_app_index));
} else { } else {
variable_item_set_current_value_text(item, "None"); variable_item_set_current_value_text(item, "None");
} }
@@ -62,8 +63,7 @@ void xtreme_app_scene_interface_mainmenu_on_enter(void* context) {
variable_item_list_set_selected_item( variable_item_list_set_selected_item(
var_item_list, var_item_list,
scene_manager_get_scene_state( scene_manager_get_scene_state(app->scene_manager, XtremeAppSceneInterfaceMainmenu));
app->scene_manager, XtremeAppSceneInterfaceMainmenu));
view_dispatcher_switch_to_view(app->view_dispatcher, XtremeAppViewVarItemList); view_dispatcher_switch_to_view(app->view_dispatcher, XtremeAppViewVarItemList);
} }
@@ -80,8 +80,10 @@ bool xtreme_app_scene_interface_mainmenu_on_event(void* context, SceneManagerEve
case VarItemListIndexRemoveApp: case VarItemListIndexRemoveApp:
if(!CharList_size(app->mainmenu_app_names)) break; if(!CharList_size(app->mainmenu_app_names)) break;
if(!CharList_size(app->mainmenu_app_paths)) break; if(!CharList_size(app->mainmenu_app_paths)) break;
CharList_remove_v(app->mainmenu_app_names, app->mainmenu_app_index, app->mainmenu_app_index + 1); CharList_remove_v(
CharList_remove_v(app->mainmenu_app_paths, app->mainmenu_app_index, app->mainmenu_app_index + 1); app->mainmenu_app_names, app->mainmenu_app_index, app->mainmenu_app_index + 1);
CharList_remove_v(
app->mainmenu_app_paths, app->mainmenu_app_index, app->mainmenu_app_index + 1);
app->save_mainmenu_apps = true; app->save_mainmenu_apps = true;
app->require_reboot = true; app->require_reboot = true;
scene_manager_previous_scene(app->scene_manager); scene_manager_previous_scene(app->scene_manager);

View File

@@ -62,17 +62,29 @@ void xtreme_app_scene_interface_statusbar_on_enter(void* context) {
variable_item_set_current_value_text(item, battery_icon_names[xtreme_settings->battery_icon]); variable_item_set_current_value_text(item, battery_icon_names[xtreme_settings->battery_icon]);
item = variable_item_list_add( item = variable_item_list_add(
var_item_list, "Status Icons", 2, xtreme_app_scene_interface_statusbar_status_icons_changed, app); var_item_list,
"Status Icons",
2,
xtreme_app_scene_interface_statusbar_status_icons_changed,
app);
variable_item_set_current_value_index(item, xtreme_settings->status_icons); variable_item_set_current_value_index(item, xtreme_settings->status_icons);
variable_item_set_current_value_text(item, xtreme_settings->status_icons ? "ON" : "OFF"); variable_item_set_current_value_text(item, xtreme_settings->status_icons ? "ON" : "OFF");
item = variable_item_list_add( item = variable_item_list_add(
var_item_list, "Bar Borders", 2, xtreme_app_scene_interface_statusbar_bar_borders_changed, app); var_item_list,
"Bar Borders",
2,
xtreme_app_scene_interface_statusbar_bar_borders_changed,
app);
variable_item_set_current_value_index(item, xtreme_settings->bar_borders); variable_item_set_current_value_index(item, xtreme_settings->bar_borders);
variable_item_set_current_value_text(item, xtreme_settings->bar_borders ? "ON" : "OFF"); variable_item_set_current_value_text(item, xtreme_settings->bar_borders ? "ON" : "OFF");
item = variable_item_list_add( item = variable_item_list_add(
var_item_list, "Bar Background", 2, xtreme_app_scene_interface_statusbar_bar_background_changed, app); var_item_list,
"Bar Background",
2,
xtreme_app_scene_interface_statusbar_bar_background_changed,
app);
variable_item_set_current_value_index(item, xtreme_settings->bar_background); variable_item_set_current_value_index(item, xtreme_settings->bar_background);
variable_item_set_current_value_text(item, xtreme_settings->bar_background ? "ON" : "OFF"); variable_item_set_current_value_text(item, xtreme_settings->bar_background ? "ON" : "OFF");
@@ -80,7 +92,8 @@ void xtreme_app_scene_interface_statusbar_on_enter(void* context) {
var_item_list, xtreme_app_scene_interface_statusbar_var_item_list_callback, app); var_item_list, xtreme_app_scene_interface_statusbar_var_item_list_callback, app);
variable_item_list_set_selected_item( variable_item_list_set_selected_item(
var_item_list, scene_manager_get_scene_state(app->scene_manager, XtremeAppSceneInterfaceStatusbar)); var_item_list,
scene_manager_get_scene_state(app->scene_manager, XtremeAppSceneInterfaceStatusbar));
view_dispatcher_switch_to_view(app->view_dispatcher, XtremeAppViewVarItemList); view_dispatcher_switch_to_view(app->view_dispatcher, XtremeAppViewVarItemList);
} }
@@ -90,7 +103,8 @@ bool xtreme_app_scene_interface_statusbar_on_event(void* context, SceneManagerEv
bool consumed = false; bool consumed = false;
if(event.type == SceneManagerEventTypeCustom) { if(event.type == SceneManagerEventTypeCustom) {
scene_manager_set_scene_state(app->scene_manager, XtremeAppSceneInterfaceStatusbar, event.event); scene_manager_set_scene_state(
app->scene_manager, XtremeAppSceneInterfaceStatusbar, event.event);
consumed = true; consumed = true;
switch(event.event) { switch(event.event) {
default: default:

View File

@@ -36,8 +36,7 @@ void xtreme_app_scene_protocols_frequencies_hopper_on_enter(void* context) {
app->subghz_hopper_index = 0; app->subghz_hopper_index = 0;
variable_item_set_current_value_index(item, app->subghz_hopper_index); variable_item_set_current_value_index(item, app->subghz_hopper_index);
if(FrequencyList_size(app->subghz_hopper_freqs)) { if(FrequencyList_size(app->subghz_hopper_freqs)) {
uint32_t value = uint32_t value = *FrequencyList_get(app->subghz_hopper_freqs, app->subghz_hopper_index);
*FrequencyList_get(app->subghz_hopper_freqs, app->subghz_hopper_index);
char text[10] = {0}; char text[10] = {0};
snprintf(text, sizeof(text), "%lu.%02lu", value / 1000000, (value % 1000000) / 10000); snprintf(text, sizeof(text), "%lu.%02lu", value / 1000000, (value % 1000000) / 10000);
variable_item_set_current_value_text(item, text); variable_item_set_current_value_text(item, text);

View File

@@ -36,8 +36,7 @@ void xtreme_app_scene_protocols_frequencies_static_on_enter(void* context) {
app->subghz_static_index = 0; app->subghz_static_index = 0;
variable_item_set_current_value_index(item, app->subghz_static_index); variable_item_set_current_value_index(item, app->subghz_static_index);
if(FrequencyList_size(app->subghz_static_freqs)) { if(FrequencyList_size(app->subghz_static_freqs)) {
uint32_t value = uint32_t value = *FrequencyList_get(app->subghz_static_freqs, app->subghz_static_index);
*FrequencyList_get(app->subghz_static_freqs, app->subghz_static_index);
char text[10] = {0}; char text[10] = {0};
snprintf(text, sizeof(text), "%lu.%02lu", value / 1000000, (value % 1000000) / 10000); snprintf(text, sizeof(text), "%lu.%02lu", value / 1000000, (value % 1000000) / 10000);
variable_item_set_current_value_text(item, text); variable_item_set_current_value_text(item, text);

View File

@@ -20,7 +20,7 @@ static bool xtreme_app_back_event_callback(void* context) {
if(app->save_mainmenu_apps) { if(app->save_mainmenu_apps) {
Stream* stream = file_stream_alloc(storage); Stream* stream = file_stream_alloc(storage);
if(file_stream_open(stream, XTREME_APPS_PATH, FSAM_READ_WRITE, FSOM_CREATE_ALWAYS)){ if(file_stream_open(stream, XTREME_APPS_PATH, FSAM_READ_WRITE, FSOM_CREATE_ALWAYS)) {
CharList_it_t it; CharList_it_t it;
CharList_it(it, app->mainmenu_app_paths); CharList_it(it, app->mainmenu_app_paths);
for(uint i = 0; i < CharList_size(app->mainmenu_app_paths); i++) { for(uint i = 0; i < CharList_size(app->mainmenu_app_paths); i++) {
@@ -195,7 +195,8 @@ XtremeApp* xtreme_app_alloc() {
if(app->asset_pack_index != 0) { if(app->asset_pack_index != 0) {
if(idx < app->asset_pack_index) app->asset_pack_index++; if(idx < app->asset_pack_index) app->asset_pack_index++;
} else { } else {
if(strcmp(copy, xtreme_settings->asset_pack) == 0) app->asset_pack_index = idx + 1; if(strcmp(copy, xtreme_settings->asset_pack) == 0)
app->asset_pack_index = idx + 1;
} }
} }
} }

View File

@@ -89,7 +89,8 @@ bool desktop_scene_locked_on_event(void* context, SceneManagerEvent event) {
break; break;
case DesktopLockedEventUpdate: case DesktopLockedEventUpdate:
if(desktop_view_locked_is_locked_hint_visible(desktop->locked_view)) { if(desktop_view_locked_is_locked_hint_visible(desktop->locked_view)) {
notification_message(desktop->notification, &sequence_display_backlight_off_delay_1000); notification_message(
desktop->notification, &sequence_display_backlight_off_delay_1000);
} }
desktop_view_locked_update(desktop->locked_view); desktop_view_locked_update(desktop->locked_view);
consumed = true; consumed = true;

View File

@@ -79,7 +79,8 @@ void desktop_view_locked_draw_lockscreen(Canvas* canvas, void* m) {
} else { } else {
bool pm = datetime.hour > 12; bool pm = datetime.hour > 12;
bool pm12 = datetime.hour >= 12; bool pm12 = datetime.hour >= 12;
snprintf(time_str, 9, "%.2d:%.2d", pm ? datetime.hour - 12 : datetime.hour, datetime.minute); snprintf(
time_str, 9, "%.2d:%.2d", pm ? datetime.hour - 12 : datetime.hour, datetime.minute);
snprintf(meridian_str, 3, pm12 ? "PM" : "AM"); snprintf(meridian_str, 3, pm12 ? "PM" : "AM");
} }
@@ -106,13 +107,16 @@ void desktop_view_locked_draw_lockscreen(Canvas* canvas, void* m) {
canvas_set_font(canvas, FontSecondary); canvas_set_font(canvas, FontSecondary);
canvas_draw_str(canvas, 0, 48 + y + 16 * !xtreme_settings->lockscreen_time, date_str); canvas_draw_str(canvas, 0, 48 + y + 16 * !xtreme_settings->lockscreen_time, date_str);
} }
if(model->view_state == DesktopViewLockedStateLockedHintShown && xtreme_settings->lockscreen_prompt) { if(model->view_state == DesktopViewLockedStateLockedHintShown &&
xtreme_settings->lockscreen_prompt) {
canvas_set_font(canvas, FontSecondary); canvas_set_font(canvas, FontSecondary);
if(model->pin_locked) { if(model->pin_locked) {
elements_bubble_str(canvas, 12, 14 + y, " Press \nto unlock!", AlignRight, AlignBottom); elements_bubble_str(
canvas, 12, 14 + y, " Press \nto unlock!", AlignRight, AlignBottom);
canvas_draw_icon(canvas, 45, 16 + y, &I_Pin_arrow_up_7x9); canvas_draw_icon(canvas, 45, 16 + y, &I_Pin_arrow_up_7x9);
} else { } else {
elements_bubble_str(canvas, 2, 14 + y, "Press 3x \n to unlock!", AlignRight, AlignBottom); elements_bubble_str(
canvas, 2, 14 + y, "Press 3x \n to unlock!", AlignRight, AlignBottom);
canvas_draw_icon(canvas, 43, 17 + y, &I_Pin_back_arrow_10x8); canvas_draw_icon(canvas, 43, 17 + y, &I_Pin_back_arrow_10x8);
} }
} }
@@ -122,12 +126,14 @@ static bool desktop_view_locked_cover_move(DesktopViewLockedModel* model, bool d
bool stop = false; bool stop = false;
if(down) { if(down) {
if(model->cover_offset < COVER_OFFSET_END) { if(model->cover_offset < COVER_OFFSET_END) {
model->cover_offset = CLAMP(model->cover_offset + 8, COVER_OFFSET_END, COVER_OFFSET_START); model->cover_offset =
CLAMP(model->cover_offset + 8, COVER_OFFSET_END, COVER_OFFSET_START);
stop = true; stop = true;
} }
} else { } else {
if(model->cover_offset > COVER_OFFSET_START) { if(model->cover_offset > COVER_OFFSET_START) {
model->cover_offset = CLAMP(model->cover_offset - 8, COVER_OFFSET_END, COVER_OFFSET_START); model->cover_offset =
CLAMP(model->cover_offset - 8, COVER_OFFSET_END, COVER_OFFSET_START);
stop = true; stop = true;
} }
} }
@@ -152,10 +158,12 @@ void desktop_view_locked_update(DesktopViewLocked* locked_view) {
if(view_state == DesktopViewLockedStateCoverClosing && if(view_state == DesktopViewLockedStateCoverClosing &&
!desktop_view_locked_cover_move(model, true)) { !desktop_view_locked_cover_move(model, true)) {
model->view_state = DesktopViewLockedStateLocked; model->view_state = DesktopViewLockedStateLocked;
} else if(view_state == DesktopViewLockedStateCoverOpening && } else if(
view_state == DesktopViewLockedStateCoverOpening &&
!desktop_view_locked_cover_move(model, false)) { !desktop_view_locked_cover_move(model, false)) {
model->view_state = DesktopViewLockedStateUnlocked; model->view_state = DesktopViewLockedStateUnlocked;
xTimerChangePeriod(locked_view->timer, pdMS_TO_TICKS(UNLOCKED_HINT_TIMEOUT_MS), portMAX_DELAY); xTimerChangePeriod(
locked_view->timer, pdMS_TO_TICKS(UNLOCKED_HINT_TIMEOUT_MS), portMAX_DELAY);
} else if(view_state == DesktopViewLockedStateLockedHintShown) { } else if(view_state == DesktopViewLockedStateLockedHintShown) {
model->view_state = DesktopViewLockedStateLocked; model->view_state = DesktopViewLockedStateLocked;
} else if(view_state == DesktopViewLockedStateUnlockedHintShown) { } else if(view_state == DesktopViewLockedStateUnlockedHintShown) {
@@ -164,7 +172,8 @@ void desktop_view_locked_update(DesktopViewLocked* locked_view) {
view_commit_model(locked_view->view, true); view_commit_model(locked_view->view, true);
if(view_state != DesktopViewLockedStateCoverClosing && view_state != DesktopViewLockedStateCoverOpening) { if(view_state != DesktopViewLockedStateCoverClosing &&
view_state != DesktopViewLockedStateCoverOpening) {
xTimerStop(locked_view->timer, portMAX_DELAY); xTimerStop(locked_view->timer, portMAX_DELAY);
} }
} }

View File

@@ -622,8 +622,9 @@ void elements_scrollable_text_line(
} }
} }
if (centered) { if(centered) {
canvas_draw_str_aligned(canvas, x, y, AlignCenter, AlignBottom, furi_string_get_cstr(line)); canvas_draw_str_aligned(
canvas, x, y, AlignCenter, AlignBottom, furi_string_get_cstr(line));
} else { } else {
canvas_draw_str(canvas, x, y, furi_string_get_cstr(line)); canvas_draw_str(canvas, x, y, furi_string_get_cstr(line));
} }

View File

@@ -78,7 +78,11 @@ static void menu_draw_callback(Canvas* canvas, void* _model) {
} }
item = MenuItemArray_get(model->items, item_i); item = MenuItemArray_get(model->items, item_i);
if(item->icon) { if(item->icon) {
canvas_draw_icon_animation(canvas, (40 - item->icon->icon->width) / 2 + x_off, (20 - item->icon->icon->height) / 2 + y_off, item->icon); canvas_draw_icon_animation(
canvas,
(40 - item->icon->icon->width) / 2 + x_off,
(20 - item->icon->icon->height) / 2 + y_off,
item->icon);
} }
furi_string_set(name, item->label); furi_string_set(name, item->label);
if(furi_string_start_with_str(name, "[")) { if(furi_string_start_with_str(name, "[")) {
@@ -88,14 +92,7 @@ static void menu_draw_callback(Canvas* canvas, void* _model) {
} }
} }
elements_scrollable_text_line( elements_scrollable_text_line(
canvas, canvas, 20 + x_off, 26 + y_off, 36, name, scroll_counter, false, true);
20 + x_off,
26 + y_off,
36,
name,
scroll_counter,
false,
true);
if(item_i == position) { if(item_i == position) {
canvas_set_color(canvas, ColorBlack); canvas_set_color(canvas, ColorBlack);
} else { } else {
@@ -108,7 +105,11 @@ static void menu_draw_callback(Canvas* canvas, void* _model) {
shift_position = (0 + position + items_count - 1) % items_count; shift_position = (0 + position + items_count - 1) % items_count;
item = MenuItemArray_get(model->items, shift_position); item = MenuItemArray_get(model->items, shift_position);
if(item->icon) { if(item->icon) {
canvas_draw_icon_animation(canvas, 4 + (14 - item->icon->icon->width) / 2, 3 + (14 - item->icon->icon->height) / 2, item->icon); canvas_draw_icon_animation(
canvas,
4 + (14 - item->icon->icon->width) / 2,
3 + (14 - item->icon->icon->height) / 2,
item->icon);
} }
canvas_draw_str(canvas, 22, 14, item->label); canvas_draw_str(canvas, 22, 14, item->label);
// Second line main // Second line main
@@ -116,7 +117,11 @@ static void menu_draw_callback(Canvas* canvas, void* _model) {
shift_position = (1 + position + items_count - 1) % items_count; shift_position = (1 + position + items_count - 1) % items_count;
item = MenuItemArray_get(model->items, shift_position); item = MenuItemArray_get(model->items, shift_position);
if(item->icon) { if(item->icon) {
canvas_draw_icon_animation(canvas, 4 + (14 - item->icon->icon->width) / 2, 25 + (14 - item->icon->icon->height) / 2, item->icon); canvas_draw_icon_animation(
canvas,
4 + (14 - item->icon->icon->width) / 2,
25 + (14 - item->icon->icon->height) / 2,
item->icon);
} }
size_t scroll_counter = model->scroll_counter; size_t scroll_counter = model->scroll_counter;
if(scroll_counter < 1) { if(scroll_counter < 1) {
@@ -125,21 +130,17 @@ static void menu_draw_callback(Canvas* canvas, void* _model) {
scroll_counter -= 1; scroll_counter -= 1;
} }
furi_string_set(name, item->label); furi_string_set(name, item->label);
elements_scrollable_text_line( elements_scrollable_text_line(canvas, 22, 36, 98, name, scroll_counter, false, false);
canvas,
22,
36,
98,
name,
scroll_counter,
false,
false);
// Third line // Third line
canvas_set_font(canvas, FontSecondary); canvas_set_font(canvas, FontSecondary);
shift_position = (2 + position + items_count - 1) % items_count; shift_position = (2 + position + items_count - 1) % items_count;
item = MenuItemArray_get(model->items, shift_position); item = MenuItemArray_get(model->items, shift_position);
if(item->icon) { if(item->icon) {
canvas_draw_icon_animation(canvas, 4 + (14 - item->icon->icon->width) / 2, 47 + (14 - item->icon->icon->height) / 2, item->icon); canvas_draw_icon_animation(
canvas,
4 + (14 - item->icon->icon->width) / 2,
47 + (14 - item->icon->icon->height) / 2,
item->icon);
} }
canvas_draw_str(canvas, 22, 58, item->label); canvas_draw_str(canvas, 22, 58, item->label);
// Frame and scrollbar // Frame and scrollbar
@@ -255,8 +256,7 @@ Menu* menu_alloc() {
view_set_enter_callback(menu->view, menu_enter); view_set_enter_callback(menu->view, menu_enter);
view_set_exit_callback(menu->view, menu_exit); view_set_exit_callback(menu->view, menu_exit);
menu->scroll_timer = menu->scroll_timer = furi_timer_alloc(menu_scroll_timer_callback, FuriTimerTypePeriodic, menu);
furi_timer_alloc(menu_scroll_timer_callback, FuriTimerTypePeriodic, menu);
with_view_model( with_view_model(
menu->view, menu->view,
@@ -458,7 +458,7 @@ static void menu_process_right(Menu* menu) {
if(model->position == count - 1) { if(model->position == count - 1) {
model->position = 0; model->position = 0;
} else if(model->position == count - 2) { } else if(model->position == count - 2) {
model->position = count -1; model->position = count - 1;
} else { } else {
model->position += 2; model->position += 2;
} }

View File

@@ -177,7 +177,10 @@ static bool variable_item_list_input_callback(InputEvent* event, void* context)
if((!(event->type == InputTypePress) && !(event->type == InputTypeRelease)) && if((!(event->type == InputTypePress) && !(event->type == InputTypeRelease)) &&
locked_message_visible) { locked_message_visible) {
with_view_model( with_view_model(
variable_item_list->view, VariableItemListModel * model, { model->locked_message_visible = false; }, true); variable_item_list->view,
VariableItemListModel * model,
{ model->locked_message_visible = false; },
true);
consumed = true; consumed = true;
} else if(event->type == InputTypeShort) { } else if(event->type == InputTypeShort) {
switch(event->key) { switch(event->key) {
@@ -301,7 +304,8 @@ void variable_item_list_process_left(VariableItemList* variable_item_list) {
VariableItem* item = variable_item_list_get_selected_item(model); VariableItem* item = variable_item_list_get_selected_item(model);
if(item->locked) { if(item->locked) {
model->locked_message_visible = true; model->locked_message_visible = true;
furi_timer_start(variable_item_list->locked_timer, furi_kernel_get_tick_frequency() * 3); furi_timer_start(
variable_item_list->locked_timer, furi_kernel_get_tick_frequency() * 3);
} else if(item->current_value_index > 0) { } else if(item->current_value_index > 0) {
item->current_value_index--; item->current_value_index--;
model->scroll_counter = 0; model->scroll_counter = 0;
@@ -321,7 +325,8 @@ void variable_item_list_process_right(VariableItemList* variable_item_list) {
VariableItem* item = variable_item_list_get_selected_item(model); VariableItem* item = variable_item_list_get_selected_item(model);
if(item->locked) { if(item->locked) {
model->locked_message_visible = true; model->locked_message_visible = true;
furi_timer_start(variable_item_list->locked_timer, furi_kernel_get_tick_frequency() * 3); furi_timer_start(
variable_item_list->locked_timer, furi_kernel_get_tick_frequency() * 3);
} else if(item->current_value_index < (item->values_count - 1)) { } else if(item->current_value_index < (item->values_count - 1)) {
item->current_value_index++; item->current_value_index++;
model->scroll_counter = 0; model->scroll_counter = 0;
@@ -341,7 +346,8 @@ void variable_item_list_process_ok(VariableItemList* variable_item_list) {
VariableItem* item = variable_item_list_get_selected_item(model); VariableItem* item = variable_item_list_get_selected_item(model);
if(item->locked) { if(item->locked) {
model->locked_message_visible = true; model->locked_message_visible = true;
furi_timer_start(variable_item_list->locked_timer, furi_kernel_get_tick_frequency() * 3); furi_timer_start(
variable_item_list->locked_timer, furi_kernel_get_tick_frequency() * 3);
} else if(variable_item_list->callback) { } else if(variable_item_list->callback) {
variable_item_list->callback(variable_item_list->context, model->position); variable_item_list->callback(variable_item_list->context, model->position);
} }
@@ -352,7 +358,10 @@ void variable_item_list_process_ok(VariableItemList* variable_item_list) {
static void variable_item_list_scroll_timer_callback(void* context) { static void variable_item_list_scroll_timer_callback(void* context) {
VariableItemList* variable_item_list = context; VariableItemList* variable_item_list = context;
with_view_model( with_view_model(
variable_item_list->view, VariableItemListModel * model, { model->scroll_counter++; }, true); variable_item_list->view,
VariableItemListModel * model,
{ model->scroll_counter++; },
true);
} }
void variable_item_list_locked_timer_callback(void* context) { void variable_item_list_locked_timer_callback(void* context) {
@@ -360,7 +369,10 @@ void variable_item_list_locked_timer_callback(void* context) {
VariableItemList* variable_item_list = context; VariableItemList* variable_item_list = context;
with_view_model( with_view_model(
variable_item_list->view, VariableItemListModel * model, { model->locked_message_visible = false; }, true); variable_item_list->view,
VariableItemListModel * model,
{ model->locked_message_visible = false; },
true);
} }
VariableItemList* variable_item_list_alloc() { VariableItemList* variable_item_list_alloc() {
@@ -372,7 +384,8 @@ VariableItemList* variable_item_list_alloc() {
view_set_draw_callback(variable_item_list->view, variable_item_list_draw_callback); view_set_draw_callback(variable_item_list->view, variable_item_list_draw_callback);
view_set_input_callback(variable_item_list->view, variable_item_list_input_callback); view_set_input_callback(variable_item_list->view, variable_item_list_input_callback);
variable_item_list->locked_timer = furi_timer_alloc(variable_item_list_locked_timer_callback, FuriTimerTypeOnce, variable_item_list); variable_item_list->locked_timer = furi_timer_alloc(
variable_item_list_locked_timer_callback, FuriTimerTypeOnce, variable_item_list);
with_view_model( with_view_model(
variable_item_list->view, variable_item_list->view,
@@ -384,8 +397,8 @@ VariableItemList* variable_item_list_alloc() {
model->scroll_counter = 0; model->scroll_counter = 0;
}, },
true); true);
variable_item_list->scroll_timer = variable_item_list->scroll_timer = furi_timer_alloc(
furi_timer_alloc(variable_item_list_scroll_timer_callback, FuriTimerTypePeriodic, variable_item_list); variable_item_list_scroll_timer_callback, FuriTimerTypePeriodic, variable_item_list);
furi_timer_start(variable_item_list->scroll_timer, 333); furi_timer_start(variable_item_list->scroll_timer, 333);
return variable_item_list; return variable_item_list;

View File

@@ -47,7 +47,8 @@ void furi_hal_light_set(Light light, uint8_t value) {
if(XTREME_SETTINGS()->rgb_backlight) { if(XTREME_SETTINGS()->rgb_backlight) {
rgb_backlight_update(value); rgb_backlight_update(value);
} else { } else {
uint8_t prev = lp5562_get_channel_value(&furi_hal_i2c_handle_power, LP5562ChannelWhite); uint8_t prev =
lp5562_get_channel_value(&furi_hal_i2c_handle_power, LP5562ChannelWhite);
lp5562_execute_ramp( lp5562_execute_ramp(
&furi_hal_i2c_handle_power, LP5562Engine1, LP5562ChannelWhite, prev, value, 100); &furi_hal_i2c_handle_power, LP5562Engine1, LP5562ChannelWhite, prev, value, 100);
} }

View File

@@ -52,9 +52,7 @@ class Main(App):
if not self.args.launch_app: if not self.args.launch_app:
return 0 return 0
storage.send_and_wait_eol( storage.send_and_wait_eol(f'loader open "Apps" {fap_dst_path}\r')
f'loader open "Apps" {fap_dst_path}\r'
)
if len(result := storage.read.until(storage.CLI_EOL)): if len(result := storage.read.until(storage.CLI_EOL)):
self.logger.error(f"Unexpected response: {result.decode('ascii')}") self.logger.error(f"Unexpected response: {result.decode('ascii')}")