[FL-3743] SubGhz: UI update (#3352)

* [FL-3743]SubGhz: screen refactoring
* SubGhz: fix syntax
* SubGhz: gui
* SubGhz: add animation icon ant in read_info scene
* SubGhz: up speed animation icon

Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
Skorpionm
2024-01-14 08:58:29 +04:00
committed by GitHub
parent 0789cbdefa
commit 48e4de1213
28 changed files with 180 additions and 137 deletions

View File

@@ -251,9 +251,9 @@ void subghz_view_receiver_draw(Canvas* canvas, SubGhzViewReceiverModel* model) {
}
if(model->device_type == SubGhzRadioDeviceTypeInternal) {
canvas_draw_icon(canvas, 108, 0, &I_Internal_antenna_20x12);
canvas_draw_icon(canvas, 109, 0, &I_Internal_ant_1_9x11);
} else {
canvas_draw_icon(canvas, 108, 0, &I_External_antenna_20x12);
canvas_draw_icon(canvas, 109, 0, &I_External_ant_1_9x11);
}
subghz_view_rssi_draw(canvas, model);

View File

@@ -178,7 +178,7 @@ void subghz_frequency_analyzer_draw(Canvas* canvas, SubGhzFrequencyAnalyzerModel
subghz_frequency_analyzer_log_frequency_draw(canvas, model);
} else {
canvas_draw_str(canvas, 0, 8, "Frequency Analyzer");
canvas_draw_icon(canvas, 108, 0, &I_Internal_antenna_20x12);
canvas_draw_icon(canvas, 109, 0, &I_Internal_ant_1_9x11);
canvas_draw_str(canvas, 0, 64, "RSSI");
subghz_frequency_analyzer_draw_rssi(canvas, model->rssi, 20, 64);

View File

@@ -294,9 +294,9 @@ void subghz_read_raw_draw(Canvas* canvas, SubGhzReadRAWModel* model) {
canvas, 106, 2, AlignRight, AlignTop, furi_string_get_cstr(model->sample_write));
if(model->device_type == SubGhzRadioDeviceTypeInternal) {
canvas_draw_icon(canvas, 108, 0, &I_Internal_antenna_20x12);
canvas_draw_icon(canvas, 109, 0, &I_Internal_ant_1_9x11);
} else {
canvas_draw_icon(canvas, 108, 0, &I_External_antenna_20x12);
canvas_draw_icon(canvas, 109, 0, &I_External_ant_1_9x11);
}
canvas_draw_line(canvas, 0, 14, 115, 14);
canvas_draw_line(canvas, 0, 48, 115, 48);

View File

@@ -16,6 +16,9 @@ typedef struct {
FuriString* key_str;
bool show_button;
SubGhzRadioDeviceType device_type;
SubGhzViewTransmitterModelType model_type;
IconAnimation* icon_int_ant;
IconAnimation* icon_ext_ant;
} SubGhzViewTransmitterModel;
void subghz_view_transmitter_set_callback(
@@ -58,6 +61,17 @@ void subghz_view_transmitter_set_radio_device_type(
true);
}
void subghz_view_transmitter_set_model_type(
SubGhzViewTransmitter* subghz_transmitter,
SubGhzViewTransmitterModelType model_type) {
furi_assert(subghz_transmitter);
with_view_model(
subghz_transmitter->view,
SubGhzViewTransmitterModel * model,
{ model->model_type = model_type; },
true);
}
static void subghz_view_transmitter_button_right(Canvas* canvas, const char* str) {
const uint8_t button_height = 12;
const uint8_t vertical_offset = 3;
@@ -100,13 +114,21 @@ void subghz_view_transmitter_draw(Canvas* canvas, SubGhzViewTransmitterModel* mo
canvas, 0, 0, AlignLeft, AlignTop, furi_string_get_cstr(model->key_str));
canvas_draw_str(canvas, 78, 7, furi_string_get_cstr(model->frequency_str));
canvas_draw_str(canvas, 113, 7, furi_string_get_cstr(model->preset_str));
if(model->show_button) {
if(model->device_type == SubGhzRadioDeviceTypeInternal) {
canvas_draw_icon(canvas, 108, 39, &I_Internal_antenna_20x12);
if(model->model_type == SubGhzViewTransmitterModelTypeInfo) {
elements_button_center(canvas, "Send");
elements_button_right(canvas, "Save");
} else {
canvas_draw_icon(canvas, 108, 39, &I_External_antenna_20x12);
//default type SubGhzViewTransmitterModelTypeTx
subghz_view_transmitter_button_right(canvas, "Send");
}
if(model->device_type == SubGhzRadioDeviceTypeInternal) {
canvas_draw_icon_animation(canvas, 109, 40, model->icon_int_ant);
} else {
canvas_draw_icon_animation(canvas, 109, 40, model->icon_ext_ant);
}
subghz_view_transmitter_button_right(canvas, "Send");
}
}
@@ -140,13 +162,32 @@ bool subghz_view_transmitter_input(InputEvent* event, void* context) {
true);
if(can_be_sent && event->key == InputKeyOk && event->type == InputTypePress) {
with_view_model(
subghz_transmitter->view,
SubGhzViewTransmitterModel * model,
{
icon_animation_start(model->icon_int_ant);
icon_animation_start(model->icon_ext_ant);
},
false);
subghz_transmitter->callback(
SubGhzCustomEventViewTransmitterSendStart, subghz_transmitter->context);
return true;
} else if(can_be_sent && event->key == InputKeyOk && event->type == InputTypeRelease) {
with_view_model(
subghz_transmitter->view,
SubGhzViewTransmitterModel * model,
{
icon_animation_stop(model->icon_int_ant);
icon_animation_stop(model->icon_ext_ant);
},
false);
subghz_transmitter->callback(
SubGhzCustomEventViewTransmitterSendStop, subghz_transmitter->context);
return true;
} else if(can_be_sent && event->key == InputKeyRight && event->type == InputTypeShort) {
subghz_transmitter->callback(
SubGhzCustomEventViewTransmitterSendSave, subghz_transmitter->context);
}
return true;
@@ -181,6 +222,11 @@ SubGhzViewTransmitter* subghz_view_transmitter_alloc() {
model->frequency_str = furi_string_alloc();
model->preset_str = furi_string_alloc();
model->key_str = furi_string_alloc();
model->model_type = SubGhzViewTransmitterModelTypeTx;
model->icon_int_ant = icon_animation_alloc(&A_SubGhz_Internal_ant);
view_tie_icon_animation(subghz_transmitter->view, model->icon_int_ant);
model->icon_ext_ant = icon_animation_alloc(&A_SubGhz_External_ant);
view_tie_icon_animation(subghz_transmitter->view, model->icon_ext_ant);
},
true);
return subghz_transmitter;
@@ -196,6 +242,8 @@ void subghz_view_transmitter_free(SubGhzViewTransmitter* subghz_transmitter) {
furi_string_free(model->frequency_str);
furi_string_free(model->preset_str);
furi_string_free(model->key_str);
icon_animation_free(model->icon_int_ant);
icon_animation_free(model->icon_ext_ant);
},
true);
view_free(subghz_transmitter->view);

View File

@@ -6,6 +6,11 @@
typedef struct SubGhzViewTransmitter SubGhzViewTransmitter;
typedef enum {
SubGhzViewTransmitterModelTypeTx,
SubGhzViewTransmitterModelTypeInfo,
} SubGhzViewTransmitterModelType;
typedef void (*SubGhzViewTransmitterCallback)(SubGhzCustomEvent event, void* context);
void subghz_view_transmitter_set_callback(
@@ -17,6 +22,10 @@ void subghz_view_transmitter_set_radio_device_type(
SubGhzViewTransmitter* subghz_transmitter,
SubGhzRadioDeviceType device_type);
void subghz_view_transmitter_set_model_type(
SubGhzViewTransmitter* subghz_transmitter,
SubGhzViewTransmitterModelType model_type);
SubGhzViewTransmitter* subghz_view_transmitter_alloc();
void subghz_view_transmitter_free(SubGhzViewTransmitter* subghz_transmitter);