Add popup before asset swap reboot

This commit is contained in:
Willy-JL
2023-01-20 20:14:51 +00:00
parent 6696315d10
commit e16d7beb99
3 changed files with 42 additions and 19 deletions
@@ -3,15 +3,13 @@
#include <power/power_service/power.h>
#include <lib/flipper_format/flipper_format.h>
bool settings_changed;
bool assets_changed;
static void xtreme_settings_scene_start_base_graphics_changed(VariableItem* item) {
XtremeSettingsApp* app = variable_item_get_context(item);
bool value = variable_item_get_current_value_index(item);
variable_item_set_current_value_text(item, value ? "SFW" : "NSFW");
XTREME_SETTINGS()->sfw_mode = value;
settings_changed = true;
assets_changed = true;
app->settings_changed = true;
app->assets_changed = true;
}
static void xtreme_settings_scene_start_asset_pack_changed(VariableItem* item) {
@@ -19,8 +17,8 @@ static void xtreme_settings_scene_start_asset_pack_changed(VariableItem* item) {
uint8_t index = variable_item_get_current_value_index(item);
variable_item_set_current_value_text(item, index == 0 ? "OFF" : *asset_packs_get(app->asset_packs, index - 1));
strlcpy(XTREME_SETTINGS()->asset_pack, index == 0 ? "" : *asset_packs_get(app->asset_packs, index - 1), MAX_PACK_NAME_LEN);
settings_changed = true;
assets_changed = true;
app->settings_changed = true;
app->assets_changed = true;
}
#define CYCLE_ANIMS_COUNT 13
@@ -42,17 +40,19 @@ const char* const cycle_anims_names[CYCLE_ANIMS_COUNT] = {
const int32_t cycle_anims_values[CYCLE_ANIMS_COUNT] =
{-1, 0, 30, 60, 300, 600, 900, 1800, 3600, 7200, 21600, 43200, 86400};
static void xtreme_settings_scene_start_cycle_anims_changed(VariableItem* item) {
XtremeSettingsApp* app = variable_item_get_context(item);
uint8_t index = variable_item_get_current_value_index(item);
variable_item_set_current_value_text(item, cycle_anims_names[index]);
XTREME_SETTINGS()->cycle_anims = cycle_anims_values[index];
settings_changed = true;
app->settings_changed = true;
}
static void xtreme_settings_scene_start_unlock_anims_changed(VariableItem* item) {
XtremeSettingsApp* app = variable_item_get_context(item);
bool value = variable_item_get_current_value_index(item);
variable_item_set_current_value_text(item, value ? "ON" : "OFF");
XTREME_SETTINGS()->unlock_anims = value;
settings_changed = true;
app->settings_changed = true;
}
#define BATTERY_STYLE_COUNT 7
@@ -68,10 +68,11 @@ const uint32_t battery_style_values[BATTERY_STYLE_COUNT] = {
BatteryStyleBarPercent
};
static void xtreme_settings_scene_start_battery_style_changed(VariableItem* item) {
XtremeSettingsApp* app = variable_item_get_context(item);
uint8_t index = variable_item_get_current_value_index(item);
variable_item_set_current_value_text(item, battery_style_names[index]);
XTREME_SETTINGS()->battery_style = battery_style_values[index];
settings_changed = true;
app->settings_changed = true;
}
static void xtreme_settings_scene_start_xp_level_changed(VariableItem* item) {
@@ -112,8 +113,6 @@ static void xtreme_settings_scene_start_subghz_bypass_changed(VariableItem* item
void xtreme_settings_scene_start_on_enter(void* context) {
XtremeSettingsApp* app = context;
settings_changed = false;
assets_changed = false;
XtremeSettings* xtreme_settings = XTREME_SETTINGS();
VariableItemList* var_item_list = app->var_item_list;
VariableItem* item;
@@ -246,13 +245,6 @@ bool xtreme_settings_scene_start_on_event(void* context, SceneManagerEvent event
void xtreme_settings_scene_start_on_exit(void* context) {
XtremeSettingsApp* app = context;
if (settings_changed) {
XTREME_SETTINGS_SAVE();
if (assets_changed) {
power_reboot(PowerBootModeNormal);
}
}
Dolphin* dolphin = furi_record_open(RECORD_DOLPHIN);
DolphinStats stats = dolphin_stats(dolphin);
if (app->dolphin_level != stats.level) {
@@ -6,9 +6,27 @@ static bool xtreme_settings_custom_event_callback(void* context, uint32_t event)
return scene_manager_handle_custom_event(app->scene_manager, event);
}
void xtreme_settings_reboot(void* context) {
UNUSED(context);
power_reboot(PowerBootModeNormal);
}
static bool xtreme_settings_back_event_callback(void* context) {
furi_assert(context);
XtremeSettingsApp* app = context;
if (app->settings_changed) {
XTREME_SETTINGS_SAVE();
if (app->assets_changed) {
popup_set_header(app->popup, "Rebooting...", 64, 24, AlignCenter, AlignCenter);
popup_set_text(app->popup, "Swapping assets...", 64, 42, AlignCenter, AlignCenter);
popup_set_callback(app->popup, xtreme_settings_reboot);
popup_set_context(app->popup, app);
popup_set_timeout(app->popup, 1000);
popup_enable_timeout(app->popup);
view_dispatcher_switch_to_view(app->view_dispatcher, XtremeSettingsAppViewPopup);
return true;
}
}
return scene_manager_handle_back_event(app->scene_manager);
}
@@ -36,6 +54,12 @@ XtremeSettingsApp* xtreme_settings_app_alloc() {
XtremeSettingsAppViewVarItemList,
variable_item_list_get_view(app->var_item_list));
app->popup = popup_alloc();
view_dispatcher_add_view(
app->view_dispatcher,
XtremeSettingsAppViewPopup,
popup_get_view(app->popup));
// Set first scene
scene_manager_next_scene(app->scene_manager, XtremeSettingsAppSceneStart);
return app;
@@ -47,6 +71,8 @@ void xtreme_settings_app_free(XtremeSettingsApp* app) {
// Gui modules
view_dispatcher_remove_view(app->view_dispatcher, XtremeSettingsAppViewVarItemList);
variable_item_list_free(app->var_item_list);
view_dispatcher_remove_view(app->view_dispatcher, XtremeSettingsAppViewPopup);
popup_free(app->popup);
// View Dispatcher and Scene Manager
view_dispatcher_free(app->view_dispatcher);
@@ -7,6 +7,7 @@
#include <gui/scene_manager.h>
#include <assets_icons.h>
#include <gui/modules/variable_item_list.h>
#include <gui/modules/popup.h>
#include "xtreme_settings.h"
#include "xtreme_assets.h"
#include "scenes/xtreme_settings_scene.h"
@@ -22,10 +23,14 @@ typedef struct {
SceneManager* scene_manager;
ViewDispatcher* view_dispatcher;
VariableItemList* var_item_list;
Popup* popup;
int dolphin_level;
bool settings_changed;
bool assets_changed;
asset_packs_t asset_packs;
} XtremeSettingsApp;
typedef enum {
XtremeSettingsAppViewVarItemList,
XtremeSettingsAppViewPopup,
} XtremeSettingsAppView;