feat(sdk+launcher): SDK nav/media封装 + §10.5 App前台唤起通知中心 (agent-206) — meow_ui_nav.c(env栈初始化+report/request_exit) + meow_ui_media.c(懒连断线重连, meta上报+playctl接收) + MSG_NOTIF_OPEN=0x28/CLOSE=0x29(0x25/26已被占); SDK顶部下滑手势→IPC; launcher App前台会话叠加通知中心(SIGSTOP→读帧→接管输入→恢复SIGCONT, 面板内App崩溃即关); hello接线验证

meow_ui.a→9a8eb7ef; hello→fc299577; launcher→b33da20a; 宿主5套件+新test_notif_open+qemu分发 全过
出入: SDK符号用meow_ui_前缀防与launcher内同名冲突; 叠加会话真机待验; §10.5文档旧号段已过时
This commit is contained in:
MeowOS committed 2026-08-31 07:53:57 +08:00
1 parent 21519ce2e4
commit 9b4195724c
37 files changed
+1042 -21

No files matched your search

+21
View File
@@ -14,12 +14,14 @@
* UI→业务只经 logic_* / notify_*。页面进入/离开经 meow_view_page_push/pop 驱动。
*/
#include "hello_internal.h"
#include "meow_ui_media.h" /* ② demo 页按钮上报媒体 META + 收 PLAYCTL */
#include <stdio.h>
#include <string.h>
#include <stdint.h>
/* 供 demo_content_tap / touch 回调用的前向声明 */
static void demo_slider_drag(int x);
static void demo_media_send(void);
static demo_ctrl g_demo_ctrl;
@@ -86,6 +88,8 @@ static meow_widget *g_dbadge; /* Badge */
static meow_widget *g_dtab; static rect_t r_tab; /* TabBar */
static meow_widget *g_dbtn_dlg; static rect_t r_dlg; /* 打开 Dialog 的按钮 */
static meow_widget *g_dbtn_sheet; static rect_t r_sheet;/* 打开 BottomSheet 的按钮 */
/* ② 媒体会话上报按钮(demo 页演示):点按 → meow_ui_media_meta 上报一条播放中元数据。 */
static meow_widget *g_dbtn_media; static rect_t r_media;
/* LazyColumn:g_dlc/r_list 已迁 list.c(列表区 CONTAINER 子视图),此处仅 extern 引用。 */
/* ---- demo 分区标题/slider 值文本:注册为 CUSTOM 绘制物(§6.2 区域重画会重画它们)----
@@ -235,6 +239,10 @@ static void demo_build_at(int scroll)
r_sheet = RX(DCR_X, SY(yb), DCW, DBH); g_dbtn_sheet = meow_btn_create_variant(r_sheet.x, r_sheet.y, r_sheet.w, r_sheet.h, "SHEET", MEOW_BTN_OUTLINED); SLOT(g_dbtn_sheet, r_sheet.x, r_sheet.y, r_sheet.w, r_sheet.h);
yb += DCH;
/* ---- Media Session(② demo 按钮上报媒体 META,验证 SDK 封装) ---- */
d_title(DCL_X, SY(yb), "MEDIA SESSION (meta)"); yb += 26;
r_media = RX(DCL_X, SY(yb), DCW, DBH); g_dbtn_media = meow_btn_create_variant(r_media.x, r_media.y, r_media.w, r_media.h, "SEND META", MEOW_BTN_FILLED); SLOT(g_dbtn_media, r_media.x, r_media.y, r_media.w, r_media.h); yb += DCH;
/* ---- LazyColumn(100 项列表滚动) ----
* 本区块标题改由列表区 CONTAINER 子视图(ui/demo/list/list.c)的 on_draw 绘制(注册表→
* invalidate 链路);列表滚动/选中由 list_view_bind 从子视图持有态恢复(不再经 g_ds)。 */
@@ -310,9 +318,21 @@ static int demo_content_tap(int x, int y)
}
if (meow_widget_hit(g_dbtn_dlg, x, y)) { meow_dialog_show(g_dlg); meow_log(MEOW_LOG_INFO, "dialog result=%d", meow_dialog_result(g_dlg)); meow_ui_invalidate(r_dlg.x, r_dlg.y, r_dlg.w, r_dlg.h); return 1; }
if (meow_widget_hit(g_dbtn_sheet, x, y)) { int r = meow_sheet_open(g_sheet); meow_log(MEOW_LOG_INFO, "sheet result=%d", r); meow_ui_invalidate(r_sheet.x, r_sheet.y, r_sheet.w, r_sheet.h); return 1; }
if (meow_widget_hit(g_dbtn_media, x, y)) { demo_media_send(); meow_ui_invalidate(r_media.x, r_media.y, r_media.w, r_media.h); return 1; }
return 0; /* 列表区分发已由顶部 list_view_hit 处理(子>父) */
}
/* ② 经 SDK 媒体会话封装上报一条「播放中」元数据(best-effort:无 launcher 静默降级)。
* 上报后 launcher(通知中心媒体卡片/主界面 Now Playing 页)可显示;demo 在 on_playctl 回调
* 打日志验证 receive 侧。 */
static void demo_media_send(void)
{
meow_ui_media_meta(1 /* playing */, 0, 180000,
"MeowOS Demo Track", "SDK", "meow_ui_media",
NULL, NULL);
meow_log(MEOW_LOG_INFO, "demo: media meta sent (playing, 0/180000)");
}
/* demo 页 on_tap 分发(chrome → 内容) */
void demo_on_tap(int x, int y)
{
@@ -408,6 +428,7 @@ static void demo_page_enter(meow_view *v, void *ctx)
((demo_ctrl *)ctx)->active = 1;
g_demo = 1;
g_demo_focus = 0;
hello_nav_report(); /* ① 上报 demo 栈深/顶层 */
/* 列表区 CONTAINER 子视图随本页进入由 SDK view_enter 递归驱动(其 on_draw 在 demo_rebuild_to
* →demo_paint 中经注册表绘制;meow_draw_view_entered 含祖先已进入判定,首批可见)。 */
demo_rebuild_to(0);
+1
View File
@@ -27,6 +27,7 @@ static void full_page_enter(meow_view *v, void *ctx)
g_full = 1;
meow_ui_set_fullscreen(1);
meow_ui_statusbar_set_collapsed(1);
hello_nav_report(); /* ① 上报 full 栈深/顶层 */
full_draw();
meow_log(MEOW_LOG_INFO, "fullscreen ON (collapsed), activity->%d", meow_ui_activity_active());
}
+1
View File
@@ -86,6 +86,7 @@ static void home_page_enter(meow_view *v, void *ctx)
{
(void)v;
((home_ctrl *)ctx)->active = 1;
hello_nav_report(); /* ① 上报 home 栈深/顶层(pop 回 home / 首次进入) */
home_redraw();
}