mirror of
https://github.com/vicliu624/trail-mate.git
synced 2026-08-27 21:19:46 +00:00
Refine Reticulum payload memory and chat status UI
This commit is contained in:
@@ -478,6 +478,10 @@ bool ui_present_interruption_app(AppScreen* app, lv_obj_t* parent)
|
||||
s_interruption_app = app;
|
||||
ui_set_overlay_active(true);
|
||||
ui::menu_layout::setMenuVisible(false);
|
||||
if (main_screen != nullptr)
|
||||
{
|
||||
lv_tileview_set_tile_by_index(main_screen, 0, 1, LV_ANIM_OFF);
|
||||
}
|
||||
ui_switch_to_app(app, parent);
|
||||
return s_active_app == app;
|
||||
}
|
||||
|
||||
@@ -274,6 +274,82 @@ bool model_fits_location_overlay(lv_obj_t* viewport_root,
|
||||
return ::ui::chat::MessageDeliveryState::Unknown;
|
||||
}
|
||||
|
||||
const char* delivery_status_text_key(::ui::chat::MessageDeliveryState delivery)
|
||||
{
|
||||
switch (delivery)
|
||||
{
|
||||
case ::ui::chat::MessageDeliveryState::Queued:
|
||||
return "Queued";
|
||||
case ::ui::chat::MessageDeliveryState::Sending:
|
||||
case ::ui::chat::MessageDeliveryState::Sent:
|
||||
return "Sending...";
|
||||
case ::ui::chat::MessageDeliveryState::Delivered:
|
||||
return "Delivered";
|
||||
case ::ui::chat::MessageDeliveryState::Failed:
|
||||
return "Failed";
|
||||
case ::ui::chat::MessageDeliveryState::Draft:
|
||||
case ::ui::chat::MessageDeliveryState::Received:
|
||||
case ::ui::chat::MessageDeliveryState::Unknown:
|
||||
return nullptr;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
lv_color_t delivery_status_chip_color(::ui::chat::MessageDeliveryState delivery)
|
||||
{
|
||||
switch (delivery)
|
||||
{
|
||||
case ::ui::chat::MessageDeliveryState::Queued:
|
||||
return lv_color_hex(0xF4E2B0);
|
||||
case ::ui::chat::MessageDeliveryState::Sending:
|
||||
case ::ui::chat::MessageDeliveryState::Sent:
|
||||
return lv_color_hex(0xCFE4FF);
|
||||
case ::ui::chat::MessageDeliveryState::Delivered:
|
||||
return lv_color_hex(0xD4F0D2);
|
||||
case ::ui::chat::MessageDeliveryState::Failed:
|
||||
return lv_color_hex(0xF1B8AA);
|
||||
case ::ui::chat::MessageDeliveryState::Draft:
|
||||
case ::ui::chat::MessageDeliveryState::Received:
|
||||
case ::ui::chat::MessageDeliveryState::Unknown:
|
||||
break;
|
||||
}
|
||||
return lv_color_hex(0xE8E0D8);
|
||||
}
|
||||
|
||||
void update_delivery_status_chip(lv_obj_t* status_label,
|
||||
::ui::chat::MessageDeliveryState delivery)
|
||||
{
|
||||
if (!status_label)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
lv_obj_t* chip = lv_obj_get_parent(status_label);
|
||||
const char* text_key = delivery_status_text_key(delivery);
|
||||
if (!text_key || text_key[0] == '\0')
|
||||
{
|
||||
lv_label_set_text(status_label, "");
|
||||
if (chip)
|
||||
{
|
||||
lv_obj_add_flag(chip, LV_OBJ_FLAG_HIDDEN);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (chip)
|
||||
{
|
||||
lv_obj_set_style_bg_color(chip,
|
||||
delivery_status_chip_color(delivery),
|
||||
LV_PART_MAIN);
|
||||
lv_obj_clear_flag(chip, LV_OBJ_FLAG_HIDDEN);
|
||||
}
|
||||
::ui::i18n::set_label_text(status_label, text_key);
|
||||
::ui::fonts::apply_localized_font(
|
||||
status_label,
|
||||
lv_label_get_text(status_label),
|
||||
::ui::page_profile::resolve_caption_font());
|
||||
}
|
||||
|
||||
bool message_ref_matches_id(const ::ui::chat::MessageRef& ref,
|
||||
chat::MessageId msg_id)
|
||||
{
|
||||
@@ -683,20 +759,13 @@ bool ChatConversationScreen::updateMessageStatus(const chat::MessageId msg_id,
|
||||
return true;
|
||||
}
|
||||
|
||||
update_delivery_status_chip(item.status_label, item.delivery);
|
||||
if (status == MessageStatus::Failed)
|
||||
{
|
||||
::ui::i18n::set_label_text(item.status_label, "Failed");
|
||||
::ui::fonts::apply_localized_font(
|
||||
item.status_label, lv_label_get_text(item.status_label), ::ui::fonts::ui_chrome_font());
|
||||
lv_obj_clear_flag(item.status_label, LV_OBJ_FLAG_HIDDEN);
|
||||
enableRetryAction(item);
|
||||
}
|
||||
else
|
||||
{
|
||||
lv_label_set_text(item.status_label, "");
|
||||
::ui::fonts::apply_localized_font(
|
||||
item.status_label, lv_label_get_text(item.status_label), ::ui::fonts::ui_chrome_font());
|
||||
lv_obj_add_flag(item.status_label, LV_OBJ_FLAG_HIDDEN);
|
||||
disableRetryAction(item);
|
||||
}
|
||||
return true;
|
||||
@@ -1283,6 +1352,14 @@ void ChatConversationScreen::createMessageItem(const ::ui::chat::MessageRow& row
|
||||
}
|
||||
item.time_label =
|
||||
create_meta_chip(item.meta_row, time_buf, lv_color_hex(0xD4F0D2), max_meta_w);
|
||||
if (is_self)
|
||||
{
|
||||
item.status_label = create_meta_chip(item.meta_row,
|
||||
"Sending...",
|
||||
delivery_status_chip_color(row.delivery),
|
||||
max_meta_w);
|
||||
update_delivery_status_chip(item.status_label, row.delivery);
|
||||
}
|
||||
|
||||
item.text_label = chat::ui::layout::create_bubble_text(bubble);
|
||||
chat::ui::conversation::styles::apply_bubble_text(item.text_label);
|
||||
@@ -1331,23 +1408,10 @@ void ChatConversationScreen::createMessageItem(const ::ui::chat::MessageRow& row
|
||||
lv_obj_set_width(item.text_label, LV_SIZE_CONTENT);
|
||||
}
|
||||
|
||||
item.status_label = chat::ui::layout::create_bubble_status(bubble);
|
||||
chat::ui::conversation::styles::apply_bubble_status(item.status_label);
|
||||
if (row.delivery == ::ui::chat::MessageDeliveryState::Failed)
|
||||
{
|
||||
::ui::i18n::set_label_text(item.status_label, "Failed");
|
||||
::ui::fonts::apply_localized_font(
|
||||
item.status_label, lv_label_get_text(item.status_label), ::ui::fonts::ui_chrome_font());
|
||||
lv_obj_clear_flag(item.status_label, LV_OBJ_FLAG_HIDDEN);
|
||||
enableRetryAction(item);
|
||||
}
|
||||
else
|
||||
{
|
||||
lv_label_set_text(item.status_label, "");
|
||||
::ui::fonts::apply_localized_font(
|
||||
item.status_label, lv_label_get_text(item.status_label), ::ui::fonts::ui_chrome_font());
|
||||
lv_obj_add_flag(item.status_label, LV_OBJ_FLAG_HIDDEN);
|
||||
}
|
||||
|
||||
// Align row based on sender (same behavior)
|
||||
chat::ui::layout::align_message_row(item.container, is_self);
|
||||
|
||||
@@ -206,13 +206,6 @@ lv_obj_t* create_bubble_time(lv_obj_t* bubble_parent)
|
||||
return label;
|
||||
}
|
||||
|
||||
lv_obj_t* create_bubble_status(lv_obj_t* bubble_parent)
|
||||
{
|
||||
lv_obj_t* label = lv_label_create(bubble_parent);
|
||||
lv_obj_set_width(label, LV_SIZE_CONTENT);
|
||||
return label;
|
||||
}
|
||||
|
||||
void align_message_row(lv_obj_t* row, bool is_self)
|
||||
{
|
||||
// Match original behavior:
|
||||
|
||||
@@ -24,7 +24,6 @@ static lv_style_t s_bubble_other;
|
||||
static lv_style_t s_bubble_unverified;
|
||||
static lv_style_t s_bubble_text;
|
||||
static lv_style_t s_bubble_time;
|
||||
static lv_style_t s_bubble_status;
|
||||
|
||||
static constexpr lv_coord_t kPadX = 8;
|
||||
static constexpr lv_coord_t kPadY = 6;
|
||||
@@ -138,11 +137,6 @@ void init_once()
|
||||
lv_style_set_text_color(&s_bubble_time, lv_color_hex(0x6A5646));
|
||||
lv_style_set_text_align(&s_bubble_time, LV_TEXT_ALIGN_LEFT);
|
||||
lv_style_set_text_font(&s_bubble_time, meta_font);
|
||||
|
||||
lv_style_init(&s_bubble_status);
|
||||
lv_style_set_text_color(&s_bubble_status, lv_color_hex(0xCC0000));
|
||||
lv_style_set_text_align(&s_bubble_status, LV_TEXT_ALIGN_LEFT);
|
||||
lv_style_set_text_font(&s_bubble_status, meta_font);
|
||||
}
|
||||
|
||||
void apply_root(lv_obj_t* root)
|
||||
@@ -204,12 +198,6 @@ void apply_bubble_time(lv_obj_t* label)
|
||||
lv_obj_add_style(label, &s_bubble_time, 0);
|
||||
}
|
||||
|
||||
void apply_bubble_status(lv_obj_t* label)
|
||||
{
|
||||
init_once();
|
||||
lv_obj_add_style(label, &s_bubble_status, 0);
|
||||
}
|
||||
|
||||
} // namespace chat::ui::conversation::styles
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user