Просмотр исходного кода

[FL-2537, FL-2539, FL-2534, FL-2534, FL-2525]: UI and UX improvements (#1246)

* FL-2537: ON/OFF buttons
* FL-2539: cancelable lowbatt shutdown
* FL-2534: update storage format results screen, cleanup dialog_ex usage.
* FL-2534: storage setting UX rework
* FL-2525: unify arrows icons
* Remove unused icons
* UI: Rename Ok to OK
あく 3 лет назад
Родитель
Сommit
9c3f465afd
31 измененных файлов с 122 добавлено и 113 удалено
  1. 1 1
      applications/bt/bt_service/bt.c
  2. 3 1
      applications/desktop/views/desktop_view_locked.c
  3. 2 2
      applications/gpio/scenes/gpio_scene_start.c
  4. 1 5
      applications/ibutton/scenes/ibutton_scene_read_crc_error.c
  5. 1 5
      applications/ibutton/scenes/ibutton_scene_read_not_key_error.c
  6. 1 6
      applications/ibutton/scenes/ibutton_scene_read_success.c
  7. 1 1
      applications/infrared/view/infrared_progress_view.c
  8. 17 3
      applications/power/power_service/power.c
  9. 52 4
      applications/power/power_service/views/power_off.c
  10. 9 0
      applications/power/power_service/views/power_off.h
  11. 1 7
      applications/storage_settings/scenes/storage_settings_scene_benchmark.c
  12. 5 8
      applications/storage_settings/scenes/storage_settings_scene_factory_reset.c
  13. 1 7
      applications/storage_settings/scenes/storage_settings_scene_format_confirm.c
  14. 8 16
      applications/storage_settings/scenes/storage_settings_scene_formatting.c
  15. 1 8
      applications/storage_settings/scenes/storage_settings_scene_internal_info.c
  16. 1 8
      applications/storage_settings/scenes/storage_settings_scene_sd_info.c
  17. 9 8
      applications/storage_settings/scenes/storage_settings_scene_unmount_confirm.c
  18. 4 11
      applications/storage_settings/scenes/storage_settings_scene_unmounted.c
  19. 1 1
      applications/subghz/scenes/subghz_scene_show_error.c
  20. 2 2
      applications/system/system_settings.c
  21. 0 0
      assets/compiled/assets_icons.c
  22. 0 8
      assets/compiled/assets_icons.h
  23. BIN
      assets/icons/Dolphin/Flipper_young_80x60.png
  24. BIN
      assets/icons/Infrared/Back_15x10.png
  25. BIN
      assets/icons/Infrared/Fill-marker_7x7.png
  26. BIN
      assets/icons/Interface/Back3_45x8.png
  27. BIN
      assets/icons/SDCard/SDError_43x35.png
  28. BIN
      assets/icons/StatusBar/USBConnected_15x8.png
  29. BIN
      assets/icons/iButton/DolphinExcited_64x63.png
  30. BIN
      assets/icons/iButton/iButtonDolphinSuccess_109x60.png
  31. 1 1
      firmware/targets/f7/furi_hal/furi_hal_resources.c

+ 1 - 1
applications/bt/bt_service/bt.c

@@ -80,7 +80,7 @@ static bool bt_pin_code_verify_event_handler(Bt* bt, uint32_t pin) {
     string_init_printf(pin_str, "Verify code\n%06d", pin);
     string_init_printf(pin_str, "Verify code\n%06d", pin);
     dialog_message_set_text(
     dialog_message_set_text(
         bt->dialog_message, string_get_cstr(pin_str), 64, 4, AlignCenter, AlignTop);
         bt->dialog_message, string_get_cstr(pin_str), 64, 4, AlignCenter, AlignTop);
-    dialog_message_set_buttons(bt->dialog_message, "Cancel", "Ok", NULL);
+    dialog_message_set_buttons(bt->dialog_message, "Cancel", "OK", NULL);
     DialogMessageButton button = dialog_message_show(bt->dialogs, bt->dialog_message);
     DialogMessageButton button = dialog_message_show(bt->dialogs, bt->dialog_message);
     string_clear(pin_str);
     string_clear(pin_str);
     return button == DialogMessageButtonCenter;
     return button == DialogMessageButtonCenter;

+ 3 - 1
applications/desktop/views/desktop_view_locked.c

@@ -125,7 +125,9 @@ static void desktop_view_locked_draw(Canvas* canvas, void* model) {
         canvas_set_font(canvas, FontSecondary);
         canvas_set_font(canvas, FontSecondary);
         elements_bold_rounded_frame(canvas, 14, 2 + STATUS_BAR_Y_SHIFT, 99, 48);
         elements_bold_rounded_frame(canvas, 14, 2 + STATUS_BAR_Y_SHIFT, 99, 48);
         elements_multiline_text(canvas, 65, 20 + STATUS_BAR_Y_SHIFT, "To unlock\npress:");
         elements_multiline_text(canvas, 65, 20 + STATUS_BAR_Y_SHIFT, "To unlock\npress:");
-        canvas_draw_icon(canvas, 65, 36 + STATUS_BAR_Y_SHIFT, &I_Back3_45x8);
+        canvas_draw_icon(canvas, 65, 36 + STATUS_BAR_Y_SHIFT, &I_Pin_back_arrow_10x8);
+        canvas_draw_icon(canvas, 80, 36 + STATUS_BAR_Y_SHIFT, &I_Pin_back_arrow_10x8);
+        canvas_draw_icon(canvas, 95, 36 + STATUS_BAR_Y_SHIFT, &I_Pin_back_arrow_10x8);
         canvas_draw_icon(canvas, 16, 7 + STATUS_BAR_Y_SHIFT, &I_WarningDolphin_45x42);
         canvas_draw_icon(canvas, 16, 7 + STATUS_BAR_Y_SHIFT, &I_WarningDolphin_45x42);
         canvas_draw_dot(canvas, 17, 61);
         canvas_draw_dot(canvas, 17, 61);
     } else if(view_state == DesktopViewLockedStateUnlockedHintShown) {
     } else if(view_state == DesktopViewLockedStateUnlockedHintShown) {

+ 2 - 2
applications/gpio/scenes/gpio_scene_start.c

@@ -15,8 +15,8 @@ enum GpioOtg {
 };
 };
 
 
 const char* const gpio_otg_text[GpioOtgSettingsNum] = {
 const char* const gpio_otg_text[GpioOtgSettingsNum] = {
-    "Off",
-    "On",
+    "OFF",
+    "ON",
 };
 };
 
 
 static void gpio_scene_start_var_list_enter_callback(void* context, uint32_t index) {
 static void gpio_scene_start_var_list_enter_callback(void* context, uint32_t index) {

+ 1 - 5
applications/ibutton/scenes/ibutton_scene_read_crc_error.c

@@ -61,11 +61,7 @@ void ibutton_scene_read_crc_error_on_exit(void* context) {
 
 
     ibutton_text_store_clear(ibutton);
     ibutton_text_store_clear(ibutton);
 
 
-    dialog_ex_set_header(dialog_ex, NULL, 0, 0, AlignCenter, AlignCenter);
-    dialog_ex_set_text(dialog_ex, NULL, 0, 0, AlignCenter, AlignTop);
-    dialog_ex_set_left_button_text(dialog_ex, NULL);
-    dialog_ex_set_result_callback(dialog_ex, NULL);
-    dialog_ex_set_context(dialog_ex, NULL);
+    dialog_ex_reset(dialog_ex);
 
 
     ibutton_notification_message(ibutton, iButtonNotificationMessageRedOff);
     ibutton_notification_message(ibutton, iButtonNotificationMessageRedOff);
 }
 }

+ 1 - 5
applications/ibutton/scenes/ibutton_scene_read_not_key_error.c

@@ -62,11 +62,7 @@ void ibutton_scene_read_not_key_error_on_exit(void* context) {
 
 
     ibutton_text_store_clear(ibutton);
     ibutton_text_store_clear(ibutton);
 
 
-    dialog_ex_set_header(dialog_ex, NULL, 0, 0, AlignCenter, AlignCenter);
-    dialog_ex_set_text(dialog_ex, NULL, 0, 0, AlignCenter, AlignTop);
-    dialog_ex_set_left_button_text(dialog_ex, NULL);
-    dialog_ex_set_result_callback(dialog_ex, NULL);
-    dialog_ex_set_context(dialog_ex, NULL);
+    dialog_ex_reset(dialog_ex);
 
 
     ibutton_notification_message(ibutton, iButtonNotificationMessageRedOff);
     ibutton_notification_message(ibutton, iButtonNotificationMessageRedOff);
 }
 }

+ 1 - 6
applications/ibutton/scenes/ibutton_scene_read_success.c

@@ -76,12 +76,7 @@ void ibutton_scene_read_success_on_exit(void* context) {
 
 
     ibutton_text_store_clear(ibutton);
     ibutton_text_store_clear(ibutton);
 
 
-    dialog_ex_set_text(dialog_ex, NULL, 0, 0, AlignCenter, AlignTop);
-    dialog_ex_set_left_button_text(dialog_ex, NULL);
-    dialog_ex_set_right_button_text(dialog_ex, NULL);
-    dialog_ex_set_result_callback(dialog_ex, NULL);
-    dialog_ex_set_context(dialog_ex, NULL);
-    dialog_ex_set_icon(dialog_ex, 0, 0, NULL);
+    dialog_ex_reset(dialog_ex);
 
 
     ibutton_notification_message(ibutton, iButtonNotificationMessageGreenOff);
     ibutton_notification_message(ibutton, iButtonNotificationMessageGreenOff);
 }
 }

+ 1 - 1
applications/infrared/view/infrared_progress_view.c

@@ -59,7 +59,7 @@ static void infrared_progress_view_draw_callback(Canvas* canvas, void* _model) {
     elements_multiline_text_aligned(
     elements_multiline_text_aligned(
         canvas, x + 33, y + 37, AlignCenter, AlignCenter, percents_string);
         canvas, x + 33, y + 37, AlignCenter, AlignCenter, percents_string);
 
 
-    canvas_draw_icon(canvas, x + 11, y + height - 15, &I_Back_15x10);
+    canvas_draw_icon(canvas, x + 14, y + height - 14, &I_Pin_back_arrow_10x8);
     canvas_draw_str(canvas, x + 30, y + height - 6, "= stop");
     canvas_draw_str(canvas, x + 30, y + height - 6, "= stop");
 }
 }
 
 

+ 17 - 3
applications/power/power_service/power.c

@@ -168,10 +168,24 @@ static void power_check_low_battery(Power* power) {
     }
     }
     // If battery low, update view and switch off power after timeout
     // If battery low, update view and switch off power after timeout
     if(power->battery_low) {
     if(power->battery_low) {
-        if(power->power_off_timeout) {
-            power_off_set_time_left(power->power_off, power->power_off_timeout--);
-        } else {
+        PowerOffResponse response = power_off_get_response(power->power_off);
+        if(response == PowerOffResponseDefault) {
+            if(power->power_off_timeout) {
+                power_off_set_time_left(power->power_off, power->power_off_timeout--);
+            } else {
+                power_off(power);
+            }
+        } else if(response == PowerOffResponseOk) {
             power_off(power);
             power_off(power);
+        } else if(response == PowerOffResponseHide) {
+            view_dispatcher_switch_to_view(power->view_dispatcher, VIEW_NONE);
+            if(power->power_off_timeout) {
+                power_off_set_time_left(power->power_off, power->power_off_timeout--);
+            } else {
+                power_off(power);
+            }
+        } else if(response == PowerOffResponseCancel) {
+            view_dispatcher_switch_to_view(power->view_dispatcher, VIEW_NONE);
         }
         }
     }
     }
 }
 }

+ 52 - 4
applications/power/power_service/views/power_off.c

@@ -7,6 +7,7 @@ struct PowerOff {
 };
 };
 
 
 typedef struct {
 typedef struct {
+    PowerOffResponse response;
     uint32_t time_left_sec;
     uint32_t time_left_sec;
 } PowerOffModel;
 } PowerOffModel;
 
 
@@ -21,18 +22,54 @@ static void power_off_draw_callback(Canvas* canvas, void* _model) {
     canvas_draw_icon(canvas, 0, 18, &I_BatteryBody_52x28);
     canvas_draw_icon(canvas, 0, 18, &I_BatteryBody_52x28);
     canvas_draw_icon(canvas, 16, 25, &I_FaceNopower_29x14);
     canvas_draw_icon(canvas, 16, 25, &I_FaceNopower_29x14);
     elements_bubble(canvas, 54, 17, 70, 30);
     elements_bubble(canvas, 54, 17, 70, 30);
+
     canvas_set_font(canvas, FontSecondary);
     canvas_set_font(canvas, FontSecondary);
-    elements_multiline_text_aligned(
-        canvas, 70, 23, AlignLeft, AlignTop, "Connect me\n to charger.");
-    snprintf(buff, sizeof(buff), "Poweroff in %lds.", model->time_left_sec);
-    canvas_draw_str_aligned(canvas, 64, 60, AlignCenter, AlignBottom, buff);
+    if(model->response == PowerOffResponseDefault) {
+        snprintf(buff, sizeof(buff), "Charge me!\nOff in %lds!", model->time_left_sec);
+        elements_multiline_text_aligned(canvas, 70, 23, AlignLeft, AlignTop, buff);
+
+        elements_button_left(canvas, "Cancel");
+        elements_button_center(canvas, "OK");
+        elements_button_right(canvas, "Hide");
+    } else {
+        snprintf(buff, sizeof(buff), "Charge me!\nDont't forget!");
+        elements_multiline_text_aligned(canvas, 70, 23, AlignLeft, AlignTop, buff);
+
+        canvas_draw_str_aligned(canvas, 64, 60, AlignCenter, AlignBottom, "Hold a second...");
+    }
+}
+
+static bool power_off_input_callback(InputEvent* event, void* context) {
+    PowerOff* power_off = context;
+
+    bool consumed = false;
+    PowerOffModel* model = view_get_model(power_off->view);
+    if(model->response == PowerOffResponseDefault && event->type == InputTypeShort) {
+        if(event->key == InputKeyOk) {
+            model->response = PowerOffResponseOk;
+            consumed = true;
+        } else if(event->key == InputKeyLeft) {
+            model->response = PowerOffResponseCancel;
+            consumed = true;
+        } else if(event->key == InputKeyRight) {
+            model->response = PowerOffResponseHide;
+            consumed = true;
+        }
+    }
+    view_commit_model(power_off->view, consumed);
+
+    return true;
 }
 }
 
 
 PowerOff* power_off_alloc() {
 PowerOff* power_off_alloc() {
     PowerOff* power_off = malloc(sizeof(PowerOff));
     PowerOff* power_off = malloc(sizeof(PowerOff));
+
     power_off->view = view_alloc();
     power_off->view = view_alloc();
     view_allocate_model(power_off->view, ViewModelTypeLocking, sizeof(PowerOffModel));
     view_allocate_model(power_off->view, ViewModelTypeLocking, sizeof(PowerOffModel));
+    view_set_context(power_off->view, power_off);
     view_set_draw_callback(power_off->view, power_off_draw_callback);
     view_set_draw_callback(power_off->view, power_off_draw_callback);
+    view_set_input_callback(power_off->view, power_off_input_callback);
+
     return power_off;
     return power_off;
 }
 }
 
 
@@ -55,3 +92,14 @@ void power_off_set_time_left(PowerOff* power_off, uint8_t time_left) {
             return true;
             return true;
         });
         });
 }
 }
+
+PowerOffResponse power_off_get_response(PowerOff* power_off) {
+    furi_assert(power_off);
+    PowerOffResponse response;
+    with_view_model(
+        power_off->view, (PowerOffModel * model) {
+            response = model->response;
+            return false;
+        });
+    return response;
+}

+ 9 - 0
applications/power/power_service/views/power_off.h

@@ -2,6 +2,13 @@
 
 
 typedef struct PowerOff PowerOff;
 typedef struct PowerOff PowerOff;
 
 
+typedef enum {
+    PowerOffResponseDefault,
+    PowerOffResponseOk,
+    PowerOffResponseCancel,
+    PowerOffResponseHide,
+} PowerOffResponse;
+
 #include <gui/view.h>
 #include <gui/view.h>
 
 
 PowerOff* power_off_alloc();
 PowerOff* power_off_alloc();
@@ -11,3 +18,5 @@ void power_off_free(PowerOff* power_off);
 View* power_off_get_view(PowerOff* power_off);
 View* power_off_get_view(PowerOff* power_off);
 
 
 void power_off_set_time_left(PowerOff* power_off, uint8_t time_left);
 void power_off_set_time_left(PowerOff* power_off, uint8_t time_left);
+
+PowerOffResponse power_off_get_response(PowerOff* power_off);

+ 1 - 7
applications/storage_settings/scenes/storage_settings_scene_benchmark.c

@@ -151,13 +151,7 @@ void storage_settings_scene_benchmark_on_exit(void* context) {
     StorageSettings* app = context;
     StorageSettings* app = context;
     DialogEx* dialog_ex = app->dialog_ex;
     DialogEx* dialog_ex = app->dialog_ex;
 
 
-    dialog_ex_set_header(dialog_ex, NULL, 0, 0, AlignCenter, AlignCenter);
-    dialog_ex_set_text(dialog_ex, NULL, 0, 0, AlignCenter, AlignTop);
-    dialog_ex_set_icon(dialog_ex, 0, 0, NULL);
-    dialog_ex_set_left_button_text(dialog_ex, NULL);
-    dialog_ex_set_right_button_text(dialog_ex, NULL);
-    dialog_ex_set_result_callback(dialog_ex, NULL);
-    dialog_ex_set_context(dialog_ex, NULL);
+    dialog_ex_reset(dialog_ex);
 
 
     string_reset(app->text_string);
     string_reset(app->text_string);
 }
 }

+ 5 - 8
applications/storage_settings/scenes/storage_settings_scene_factory_reset.c

@@ -18,7 +18,7 @@ void storage_settings_scene_factory_reset_on_enter(void* context) {
     dialog_ex_set_context(dialog_ex, app);
     dialog_ex_set_context(dialog_ex, app);
     dialog_ex_set_result_callback(dialog_ex, storage_settings_scene_factory_reset_dialog_callback);
     dialog_ex_set_result_callback(dialog_ex, storage_settings_scene_factory_reset_dialog_callback);
 
 
-    dialog_ex_set_left_button_text(dialog_ex, "Back");
+    dialog_ex_set_left_button_text(dialog_ex, "Cancel");
     dialog_ex_set_right_button_text(dialog_ex, "Erase");
     dialog_ex_set_right_button_text(dialog_ex, "Erase");
 
 
     dialog_ex_set_header(dialog_ex, "Confirm Factory Reset", 64, 10, AlignCenter, AlignCenter);
     dialog_ex_set_header(dialog_ex, "Confirm Factory Reset", 64, 10, AlignCenter, AlignCenter);
@@ -70,7 +70,10 @@ bool storage_settings_scene_factory_reset_on_event(void* context, SceneManagerEv
             consumed = true;
             consumed = true;
             break;
             break;
         }
         }
+    } else if(event.type == SceneManagerEventTypeBack) {
+        consumed = true;
     }
     }
+
     return consumed;
     return consumed;
 }
 }
 
 
@@ -78,13 +81,7 @@ void storage_settings_scene_factory_reset_on_exit(void* context) {
     StorageSettings* app = context;
     StorageSettings* app = context;
     DialogEx* dialog_ex = app->dialog_ex;
     DialogEx* dialog_ex = app->dialog_ex;
 
 
-    dialog_ex_set_header(dialog_ex, NULL, 0, 0, AlignCenter, AlignCenter);
-    dialog_ex_set_text(dialog_ex, NULL, 0, 0, AlignCenter, AlignTop);
-    dialog_ex_set_icon(dialog_ex, 0, 0, NULL);
-    dialog_ex_set_left_button_text(dialog_ex, NULL);
-    dialog_ex_set_right_button_text(dialog_ex, NULL);
-    dialog_ex_set_result_callback(dialog_ex, NULL);
-    dialog_ex_set_context(dialog_ex, NULL);
+    dialog_ex_reset(dialog_ex);
 
 
     string_reset(app->text_string);
     string_reset(app->text_string);
 }
 }

+ 1 - 7
applications/storage_settings/scenes/storage_settings_scene_format_confirm.c

@@ -57,11 +57,5 @@ void storage_settings_scene_format_confirm_on_exit(void* context) {
     StorageSettings* app = context;
     StorageSettings* app = context;
     DialogEx* dialog_ex = app->dialog_ex;
     DialogEx* dialog_ex = app->dialog_ex;
 
 
-    dialog_ex_set_header(dialog_ex, NULL, 0, 0, AlignCenter, AlignCenter);
-    dialog_ex_set_text(dialog_ex, NULL, 0, 0, AlignCenter, AlignTop);
-    dialog_ex_set_icon(dialog_ex, 0, 0, NULL);
-    dialog_ex_set_left_button_text(dialog_ex, NULL);
-    dialog_ex_set_right_button_text(dialog_ex, NULL);
-    dialog_ex_set_result_callback(dialog_ex, NULL);
-    dialog_ex_set_context(dialog_ex, NULL);
+    dialog_ex_reset(dialog_ex);
 }
 }

+ 8 - 16
applications/storage_settings/scenes/storage_settings_scene_formatting.c

@@ -39,18 +39,17 @@ void storage_settings_scene_formatting_on_enter(void* context) {
     notification_message(app->notification, &sequence_reset_formatting_leds);
     notification_message(app->notification, &sequence_reset_formatting_leds);
     notification_message(app->notification, &sequence_blink_green_100);
     notification_message(app->notification, &sequence_blink_green_100);
 
 
+    dialog_ex_set_context(dialog_ex, app);
+    dialog_ex_set_result_callback(dialog_ex, storage_settings_scene_formatting_dialog_callback);
+
     if(error != FSE_OK) {
     if(error != FSE_OK) {
         dialog_ex_set_header(dialog_ex, "Cannot format SD Card", 64, 10, AlignCenter, AlignCenter);
         dialog_ex_set_header(dialog_ex, "Cannot format SD Card", 64, 10, AlignCenter, AlignCenter);
         dialog_ex_set_text(
         dialog_ex_set_text(
             dialog_ex, storage_error_get_desc(error), 64, 32, AlignCenter, AlignCenter);
             dialog_ex, storage_error_get_desc(error), 64, 32, AlignCenter, AlignCenter);
     } else {
     } else {
-        dialog_ex_set_header(dialog_ex, "SD card formatted", 64, 10, AlignCenter, AlignCenter);
-        dialog_ex_set_text(dialog_ex, "Press back to return", 64, 32, AlignCenter, AlignCenter);
+        dialog_ex_set_header(dialog_ex, "Format complete!", 64, 32, AlignCenter, AlignCenter);
     }
     }
-
-    dialog_ex_set_context(dialog_ex, app);
-    dialog_ex_set_result_callback(dialog_ex, storage_settings_scene_formatting_dialog_callback);
-    dialog_ex_set_left_button_text(dialog_ex, "Back");
+    dialog_ex_set_center_button_text(dialog_ex, "OK");
 }
 }
 
 
 bool storage_settings_scene_formatting_on_event(void* context, SceneManagerEvent event) {
 bool storage_settings_scene_formatting_on_event(void* context, SceneManagerEvent event) {
@@ -59,14 +58,13 @@ bool storage_settings_scene_formatting_on_event(void* context, SceneManagerEvent
 
 
     if(event.type == SceneManagerEventTypeCustom) {
     if(event.type == SceneManagerEventTypeCustom) {
         switch(event.event) {
         switch(event.event) {
-        case DialogExResultLeft:
+        case DialogExResultCenter:
             consumed = scene_manager_search_and_switch_to_previous_scene(
             consumed = scene_manager_search_and_switch_to_previous_scene(
                 app->scene_manager, StorageSettingsStart);
                 app->scene_manager, StorageSettingsStart);
             break;
             break;
         }
         }
     } else if(event.type == SceneManagerEventTypeBack) {
     } else if(event.type == SceneManagerEventTypeBack) {
-        consumed = scene_manager_search_and_switch_to_previous_scene(
-            app->scene_manager, StorageSettingsStart);
+        consumed = true;
     }
     }
 
 
     return consumed;
     return consumed;
@@ -76,11 +74,5 @@ void storage_settings_scene_formatting_on_exit(void* context) {
     StorageSettings* app = context;
     StorageSettings* app = context;
     DialogEx* dialog_ex = app->dialog_ex;
     DialogEx* dialog_ex = app->dialog_ex;
 
 
-    dialog_ex_set_header(dialog_ex, NULL, 0, 0, AlignCenter, AlignCenter);
-    dialog_ex_set_text(dialog_ex, NULL, 0, 0, AlignCenter, AlignTop);
-    dialog_ex_set_icon(dialog_ex, 0, 0, NULL);
-    dialog_ex_set_left_button_text(dialog_ex, NULL);
-    dialog_ex_set_right_button_text(dialog_ex, NULL);
-    dialog_ex_set_result_callback(dialog_ex, NULL);
-    dialog_ex_set_context(dialog_ex, NULL);
+    dialog_ex_reset(dialog_ex);
 }
 }

+ 1 - 8
applications/storage_settings/scenes/storage_settings_scene_internal_info.c

@@ -18,7 +18,6 @@ void storage_settings_scene_internal_info_on_enter(void* context) {
     dialog_ex_set_context(dialog_ex, app);
     dialog_ex_set_context(dialog_ex, app);
     dialog_ex_set_result_callback(dialog_ex, storage_settings_scene_internal_info_dialog_callback);
     dialog_ex_set_result_callback(dialog_ex, storage_settings_scene_internal_info_dialog_callback);
 
 
-    dialog_ex_set_left_button_text(dialog_ex, "Back");
     if(error != FSE_OK) {
     if(error != FSE_OK) {
         dialog_ex_set_header(
         dialog_ex_set_header(
             dialog_ex, "Internal storage error", 64, 10, AlignCenter, AlignCenter);
             dialog_ex, "Internal storage error", 64, 10, AlignCenter, AlignCenter);
@@ -56,13 +55,7 @@ void storage_settings_scene_internal_info_on_exit(void* context) {
     StorageSettings* app = context;
     StorageSettings* app = context;
     DialogEx* dialog_ex = app->dialog_ex;
     DialogEx* dialog_ex = app->dialog_ex;
 
 
-    dialog_ex_set_header(dialog_ex, NULL, 0, 0, AlignCenter, AlignCenter);
-    dialog_ex_set_text(dialog_ex, NULL, 0, 0, AlignCenter, AlignTop);
-    dialog_ex_set_icon(dialog_ex, 0, 0, NULL);
-    dialog_ex_set_left_button_text(dialog_ex, NULL);
-    dialog_ex_set_right_button_text(dialog_ex, NULL);
-    dialog_ex_set_result_callback(dialog_ex, NULL);
-    dialog_ex_set_context(dialog_ex, NULL);
+    dialog_ex_reset(dialog_ex);
 
 
     string_reset(app->text_string);
     string_reset(app->text_string);
 }
 }

+ 1 - 8
applications/storage_settings/scenes/storage_settings_scene_sd_info.c

@@ -15,7 +15,6 @@ void storage_settings_scene_sd_info_on_enter(void* context) {
     dialog_ex_set_context(dialog_ex, app);
     dialog_ex_set_context(dialog_ex, app);
     dialog_ex_set_result_callback(dialog_ex, storage_settings_scene_sd_info_dialog_callback);
     dialog_ex_set_result_callback(dialog_ex, storage_settings_scene_sd_info_dialog_callback);
 
 
-    dialog_ex_set_left_button_text(dialog_ex, "Back");
     if(sd_status != FSE_OK) {
     if(sd_status != FSE_OK) {
         dialog_ex_set_header(dialog_ex, "SD card not mounted", 64, 10, AlignCenter, AlignCenter);
         dialog_ex_set_header(dialog_ex, "SD card not mounted", 64, 10, AlignCenter, AlignCenter);
         dialog_ex_set_text(
         dialog_ex_set_text(
@@ -62,13 +61,7 @@ void storage_settings_scene_sd_info_on_exit(void* context) {
     StorageSettings* app = context;
     StorageSettings* app = context;
     DialogEx* dialog_ex = app->dialog_ex;
     DialogEx* dialog_ex = app->dialog_ex;
 
 
-    dialog_ex_set_header(dialog_ex, NULL, 0, 0, AlignCenter, AlignCenter);
-    dialog_ex_set_text(dialog_ex, NULL, 0, 0, AlignCenter, AlignTop);
-    dialog_ex_set_icon(dialog_ex, 0, 0, NULL);
-    dialog_ex_set_left_button_text(dialog_ex, NULL);
-    dialog_ex_set_right_button_text(dialog_ex, NULL);
-    dialog_ex_set_result_callback(dialog_ex, NULL);
-    dialog_ex_set_context(dialog_ex, NULL);
+    dialog_ex_reset(dialog_ex);
 
 
     string_reset(app->text_string);
     string_reset(app->text_string);
 }
 }

+ 9 - 8
applications/storage_settings/scenes/storage_settings_scene_eject_confirm.c → applications/storage_settings/scenes/storage_settings_scene_unmount_confirm.c

@@ -11,9 +11,9 @@ void storage_settings_scene_unmount_confirm_on_enter(void* context) {
     StorageSettings* app = context;
     StorageSettings* app = context;
     FS_Error sd_status = storage_sd_status(app->fs_api);
     FS_Error sd_status = storage_sd_status(app->fs_api);
     DialogEx* dialog_ex = app->dialog_ex;
     DialogEx* dialog_ex = app->dialog_ex;
-    dialog_ex_set_left_button_text(dialog_ex, "Back");
 
 
     if(sd_status == FSE_NOT_READY) {
     if(sd_status == FSE_NOT_READY) {
+        dialog_ex_set_center_button_text(dialog_ex, "OK");
         dialog_ex_set_header(dialog_ex, "SD card not mounted", 64, 10, AlignCenter, AlignCenter);
         dialog_ex_set_header(dialog_ex, "SD card not mounted", 64, 10, AlignCenter, AlignCenter);
         dialog_ex_set_text(
         dialog_ex_set_text(
             dialog_ex,
             dialog_ex,
@@ -23,6 +23,7 @@ void storage_settings_scene_unmount_confirm_on_enter(void* context) {
             AlignCenter,
             AlignCenter,
             AlignCenter);
             AlignCenter);
     } else {
     } else {
+        dialog_ex_set_left_button_text(dialog_ex, "Cancel");
         dialog_ex_set_right_button_text(dialog_ex, "Unmount");
         dialog_ex_set_right_button_text(dialog_ex, "Unmount");
         dialog_ex_set_header(dialog_ex, "Unmount SD card?", 64, 10, AlignCenter, AlignCenter);
         dialog_ex_set_header(dialog_ex, "Unmount SD card?", 64, 10, AlignCenter, AlignCenter);
         dialog_ex_set_text(
         dialog_ex_set_text(
@@ -42,6 +43,9 @@ bool storage_settings_scene_unmount_confirm_on_event(void* context, SceneManager
 
 
     if(event.type == SceneManagerEventTypeCustom) {
     if(event.type == SceneManagerEventTypeCustom) {
         switch(event.event) {
         switch(event.event) {
+        case DialogExResultCenter:
+            consumed = scene_manager_previous_scene(app->scene_manager);
+            break;
         case DialogExResultLeft:
         case DialogExResultLeft:
             consumed = scene_manager_previous_scene(app->scene_manager);
             consumed = scene_manager_previous_scene(app->scene_manager);
             break;
             break;
@@ -50,7 +54,10 @@ bool storage_settings_scene_unmount_confirm_on_event(void* context, SceneManager
             consumed = true;
             consumed = true;
             break;
             break;
         }
         }
+    } else if(event.type == SceneManagerEventTypeBack) {
+        consumed = true;
     }
     }
+
     return consumed;
     return consumed;
 }
 }
 
 
@@ -58,11 +65,5 @@ void storage_settings_scene_unmount_confirm_on_exit(void* context) {
     StorageSettings* app = context;
     StorageSettings* app = context;
     DialogEx* dialog_ex = app->dialog_ex;
     DialogEx* dialog_ex = app->dialog_ex;
 
 
-    dialog_ex_set_header(dialog_ex, NULL, 0, 0, AlignCenter, AlignCenter);
-    dialog_ex_set_text(dialog_ex, NULL, 0, 0, AlignCenter, AlignTop);
-    dialog_ex_set_icon(dialog_ex, 0, 0, NULL);
-    dialog_ex_set_left_button_text(dialog_ex, NULL);
-    dialog_ex_set_right_button_text(dialog_ex, NULL);
-    dialog_ex_set_result_callback(dialog_ex, NULL);
-    dialog_ex_set_context(dialog_ex, NULL);
+    dialog_ex_reset(dialog_ex);
 }
 }

+ 4 - 11
applications/storage_settings/scenes/storage_settings_scene_ejected.c → applications/storage_settings/scenes/storage_settings_scene_unmounted.c

@@ -12,7 +12,7 @@ void storage_settings_scene_unmounted_on_enter(void* context) {
     FS_Error error = storage_sd_unmount(app->fs_api);
     FS_Error error = storage_sd_unmount(app->fs_api);
     DialogEx* dialog_ex = app->dialog_ex;
     DialogEx* dialog_ex = app->dialog_ex;
 
 
-    dialog_ex_set_left_button_text(dialog_ex, "Back");
+    dialog_ex_set_center_button_text(dialog_ex, "OK");
 
 
     if(error == FSE_OK) {
     if(error == FSE_OK) {
         dialog_ex_set_header(dialog_ex, "SD card unmounted", 64, 10, AlignCenter, AlignCenter);
         dialog_ex_set_header(dialog_ex, "SD card unmounted", 64, 10, AlignCenter, AlignCenter);
@@ -39,14 +39,13 @@ bool storage_settings_scene_unmounted_on_event(void* context, SceneManagerEvent
 
 
     if(event.type == SceneManagerEventTypeCustom) {
     if(event.type == SceneManagerEventTypeCustom) {
         switch(event.event) {
         switch(event.event) {
-        case DialogExResultLeft:
+        case DialogExResultCenter:
             consumed = scene_manager_search_and_switch_to_previous_scene(
             consumed = scene_manager_search_and_switch_to_previous_scene(
                 app->scene_manager, StorageSettingsStart);
                 app->scene_manager, StorageSettingsStart);
             break;
             break;
         }
         }
     } else if(event.type == SceneManagerEventTypeBack) {
     } else if(event.type == SceneManagerEventTypeBack) {
-        consumed = scene_manager_search_and_switch_to_previous_scene(
-            app->scene_manager, StorageSettingsStart);
+        consumed = true;
     }
     }
 
 
     return consumed;
     return consumed;
@@ -56,11 +55,5 @@ void storage_settings_scene_unmounted_on_exit(void* context) {
     StorageSettings* app = context;
     StorageSettings* app = context;
     DialogEx* dialog_ex = app->dialog_ex;
     DialogEx* dialog_ex = app->dialog_ex;
 
 
-    dialog_ex_set_header(dialog_ex, NULL, 0, 0, AlignCenter, AlignCenter);
-    dialog_ex_set_text(dialog_ex, NULL, 0, 0, AlignCenter, AlignTop);
-    dialog_ex_set_icon(dialog_ex, 0, 0, NULL);
-    dialog_ex_set_left_button_text(dialog_ex, NULL);
-    dialog_ex_set_right_button_text(dialog_ex, NULL);
-    dialog_ex_set_result_callback(dialog_ex, NULL);
-    dialog_ex_set_context(dialog_ex, NULL);
+    dialog_ex_reset(dialog_ex);
 }
 }

+ 1 - 1
applications/subghz/scenes/subghz_scene_show_error.c

@@ -37,7 +37,7 @@ void subghz_scene_show_error_on_enter(void* context) {
     if(scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneShowError) ==
     if(scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneShowError) ==
        SubGhzCustomEventManagerSet) {
        SubGhzCustomEventManagerSet) {
         widget_add_button_element(
         widget_add_button_element(
-            subghz->widget, GuiButtonTypeRight, "Ok", subghz_scene_show_error_callback, subghz);
+            subghz->widget, GuiButtonTypeRight, "OK", subghz_scene_show_error_callback, subghz);
     } else {
     } else {
         notification_message(subghz->notifications, &subghs_sequence_sd_error);
         notification_message(subghz->notifications, &subghs_sequence_sd_error);
     }
     }

+ 2 - 2
applications/system/system_settings.c

@@ -30,8 +30,8 @@ static void log_level_changed(VariableItem* item) {
 }
 }
 
 
 const char* const debug_text[] = {
 const char* const debug_text[] = {
-    "Disable",
-    "Enable",
+    "OFF",
+    "ON",
 };
 };
 
 
 static void debug_changed(VariableItem* item) {
 static void debug_changed(VariableItem* item) {

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
assets/compiled/assets_icons.c


+ 0 - 8
assets/compiled/assets_icons.h

@@ -55,16 +55,13 @@ extern const Icon I_DolphinFirstStart6_58x54;
 extern const Icon I_DolphinFirstStart7_61x51;
 extern const Icon I_DolphinFirstStart7_61x51;
 extern const Icon I_DolphinFirstStart8_56x51;
 extern const Icon I_DolphinFirstStart8_56x51;
 extern const Icon I_DolphinOkay_41x43;
 extern const Icon I_DolphinOkay_41x43;
-extern const Icon I_Flipper_young_80x60;
 extern const Icon I_ArrowDownEmpty_14x15;
 extern const Icon I_ArrowDownEmpty_14x15;
 extern const Icon I_ArrowDownFilled_14x15;
 extern const Icon I_ArrowDownFilled_14x15;
 extern const Icon I_ArrowUpEmpty_14x15;
 extern const Icon I_ArrowUpEmpty_14x15;
 extern const Icon I_ArrowUpFilled_14x15;
 extern const Icon I_ArrowUpFilled_14x15;
-extern const Icon I_Back_15x10;
 extern const Icon I_DolphinReadingSuccess_59x63;
 extern const Icon I_DolphinReadingSuccess_59x63;
 extern const Icon I_Down_25x27;
 extern const Icon I_Down_25x27;
 extern const Icon I_Down_hvr_25x27;
 extern const Icon I_Down_hvr_25x27;
-extern const Icon I_Fill_marker_7x7;
 extern const Icon I_InfraredArrowDown_4x8;
 extern const Icon I_InfraredArrowDown_4x8;
 extern const Icon I_InfraredArrowUp_4x8;
 extern const Icon I_InfraredArrowUp_4x8;
 extern const Icon I_InfraredLearnShort_128x31;
 extern const Icon I_InfraredLearnShort_128x31;
@@ -81,7 +78,6 @@ extern const Icon I_Vol_down_25x27;
 extern const Icon I_Vol_down_hvr_25x27;
 extern const Icon I_Vol_down_hvr_25x27;
 extern const Icon I_Vol_up_25x27;
 extern const Icon I_Vol_up_25x27;
 extern const Icon I_Vol_up_hvr_25x27;
 extern const Icon I_Vol_up_hvr_25x27;
-extern const Icon I_Back3_45x8;
 extern const Icon I_DoorLeft_70x55;
 extern const Icon I_DoorLeft_70x55;
 extern const Icon I_DoorLocked_10x56;
 extern const Icon I_DoorLocked_10x56;
 extern const Icon I_DoorRight_70x55;
 extern const Icon I_DoorRight_70x55;
@@ -145,7 +141,6 @@ extern const Icon I_RFIDBigChip_37x36;
 extern const Icon I_RFIDDolphinReceive_97x61;
 extern const Icon I_RFIDDolphinReceive_97x61;
 extern const Icon I_RFIDDolphinSend_97x61;
 extern const Icon I_RFIDDolphinSend_97x61;
 extern const Icon I_RFIDDolphinSuccess_108x57;
 extern const Icon I_RFIDDolphinSuccess_108x57;
-extern const Icon I_SDError_43x35;
 extern const Icon I_SDQuestion_35x43;
 extern const Icon I_SDQuestion_35x43;
 extern const Icon I_Cry_dolph_55x52;
 extern const Icon I_Cry_dolph_55x52;
 extern const Icon I_Attention_5x8;
 extern const Icon I_Attention_5x8;
@@ -162,7 +157,6 @@ extern const Icon I_PlaceholderL_11x13;
 extern const Icon I_PlaceholderR_30x13;
 extern const Icon I_PlaceholderR_30x13;
 extern const Icon I_SDcardFail_11x8;
 extern const Icon I_SDcardFail_11x8;
 extern const Icon I_SDcardMounted_11x8;
 extern const Icon I_SDcardMounted_11x8;
-extern const Icon I_USBConnected_15x8;
 extern const Icon I_Lock_7x8;
 extern const Icon I_Lock_7x8;
 extern const Icon I_MHz_25x11;
 extern const Icon I_MHz_25x11;
 extern const Icon I_Quest_7x8;
 extern const Icon I_Quest_7x8;
@@ -174,10 +168,8 @@ extern const Icon I_Connected_62x31;
 extern const Icon I_Drive_112x35;
 extern const Icon I_Drive_112x35;
 extern const Icon I_Error_62x31;
 extern const Icon I_Error_62x31;
 extern const Icon I_Updating_32x40;
 extern const Icon I_Updating_32x40;
-extern const Icon I_DolphinExcited_64x63;
 extern const Icon I_DolphinMafia_115x62;
 extern const Icon I_DolphinMafia_115x62;
 extern const Icon I_DolphinNice_96x59;
 extern const Icon I_DolphinNice_96x59;
 extern const Icon I_DolphinWait_61x59;
 extern const Icon I_DolphinWait_61x59;
-extern const Icon I_iButtonDolphinSuccess_109x60;
 extern const Icon I_iButtonDolphinVerySuccess_108x52;
 extern const Icon I_iButtonDolphinVerySuccess_108x52;
 extern const Icon I_iButtonKey_49x44;
 extern const Icon I_iButtonKey_49x44;

BIN
assets/icons/Dolphin/Flipper_young_80x60.png


BIN
assets/icons/Infrared/Back_15x10.png


BIN
assets/icons/Infrared/Fill-marker_7x7.png


BIN
assets/icons/Interface/Back3_45x8.png


BIN
assets/icons/SDCard/SDError_43x35.png


BIN
assets/icons/StatusBar/USBConnected_15x8.png


BIN
assets/icons/iButton/DolphinExcited_64x63.png


BIN
assets/icons/iButton/iButtonDolphinSuccess_109x60.png


+ 1 - 1
firmware/targets/f7/furi_hal/furi_hal_resources.c

@@ -68,7 +68,7 @@ const InputPin input_pins[] = {
     {.gpio = &gpio_button_down, .key = InputKeyDown, .inverted = true, .name = "Down"},
     {.gpio = &gpio_button_down, .key = InputKeyDown, .inverted = true, .name = "Down"},
     {.gpio = &gpio_button_right, .key = InputKeyRight, .inverted = true, .name = "Right"},
     {.gpio = &gpio_button_right, .key = InputKeyRight, .inverted = true, .name = "Right"},
     {.gpio = &gpio_button_left, .key = InputKeyLeft, .inverted = true, .name = "Left"},
     {.gpio = &gpio_button_left, .key = InputKeyLeft, .inverted = true, .name = "Left"},
-    {.gpio = &gpio_button_ok, .key = InputKeyOk, .inverted = false, .name = "Ok"},
+    {.gpio = &gpio_button_ok, .key = InputKeyOk, .inverted = false, .name = "OK"},
     {.gpio = &gpio_button_back, .key = InputKeyBack, .inverted = true, .name = "Back"},
     {.gpio = &gpio_button_back, .key = InputKeyBack, .inverted = true, .name = "Back"},
 };
 };
 
 

Некоторые файлы не были показаны из-за большого количества измененных файлов