[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
This commit is contained in:
@@ -168,10 +168,24 @@ static void power_check_low_battery(Power* power) {
|
||||
}
|
||||
// If battery low, update view and switch off power after timeout
|
||||
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);
|
||||
} 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
56
applications/power/power_service/views/power_off.c
Executable file → Normal file
56
applications/power/power_service/views/power_off.c
Executable file → Normal file
@@ -7,6 +7,7 @@ struct PowerOff {
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
PowerOffResponse response;
|
||||
uint32_t time_left_sec;
|
||||
} 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, 16, 25, &I_FaceNopower_29x14);
|
||||
elements_bubble(canvas, 54, 17, 70, 30);
|
||||
|
||||
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 = malloc(sizeof(PowerOff));
|
||||
|
||||
power_off->view = view_alloc();
|
||||
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_input_callback(power_off->view, power_off_input_callback);
|
||||
|
||||
return power_off;
|
||||
}
|
||||
|
||||
@@ -55,3 +92,14 @@ void power_off_set_time_left(PowerOff* power_off, uint8_t time_left) {
|
||||
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;
|
||||
}
|
||||
|
@@ -2,6 +2,13 @@
|
||||
|
||||
typedef struct PowerOff PowerOff;
|
||||
|
||||
typedef enum {
|
||||
PowerOffResponseDefault,
|
||||
PowerOffResponseOk,
|
||||
PowerOffResponseCancel,
|
||||
PowerOffResponseHide,
|
||||
} PowerOffResponse;
|
||||
|
||||
#include <gui/view.h>
|
||||
|
||||
PowerOff* power_off_alloc();
|
||||
@@ -11,3 +18,5 @@ void power_off_free(PowerOff* power_off);
|
||||
View* power_off_get_view(PowerOff* power_off);
|
||||
|
||||
void power_off_set_time_left(PowerOff* power_off, uint8_t time_left);
|
||||
|
||||
PowerOffResponse power_off_get_response(PowerOff* power_off);
|
||||
|
Reference in New Issue
Block a user