diff --git a/patch_v2/meow_launcherd/notif_center.c b/patch_v2/meow_launcherd/notif_center.c index bcbf635..e3c57be 100644 --- a/patch_v2/meow_launcherd/notif_center.c +++ b/patch_v2/meow_launcherd/notif_center.c @@ -946,7 +946,8 @@ static void ncp_draw_media_card(const meow_ui_theme_t *th) } } -/* 卡片命中:按钮/进度(含 seek)。返回 1=已处理(内部已下发 PLAYCTL);0=未命中。 */ +/* 卡片命中:按钮/进度(含 seek)/卡片体。返回 2=卡片体命中已发 FOCUS(7)(调用方收起面板露出 + * 播放页);1=按钮/进度已处理(内部已下发 PLAYCTL,面板保持开启);0=未命中。 */ static int ncp_media_card_tap(int tx, int ty) { const meow_media_session_t *s = meow_media_current(); @@ -972,7 +973,14 @@ static int ncp_media_card_tap(int tx, int ty) cmd = 5; } } - if (!cmd) return 0; + if (!cmd) { + /* 卡片体命中(非按钮/进度):向活动媒体源下发 FOCUS(7)(=NCM_CTL_FOCUS,见 ncm + * ipc_media.c case 7 → g_req_focus_player=1 → UI 线程 push ACT_PLAYER),请求打开 + * App 播放页,并消费该次点击——返回 2 让调用方收起面板露出播放页。 */ + meow_media_playctl(7, 0); + logmsg("notif-card: media tap card body -> FOCUS(7) open player"); + return 2; + } int rc = meow_media_playctl(cmd, seek); logmsg("notif-card: media tap cmd=%u seek=%lld rc=%d", cmd, (long long)seek, rc); return 1; @@ -1596,11 +1604,21 @@ void run_notif_center(struct app *apps, int napps, notif_click_t *click, ncp_list_view()); hit = 1; need_paint = 1; } - /* 阶段D附录B:顶部媒体卡片按钮/进度(含 seek)→ 下发 PLAYCTL。 + /* 阶段D附录B:顶部媒体卡片按钮/进度(含 seek)→ 下发 PLAYCTL; + * 卡片体 → 下发 FOCUS(7) 请求打开 App 播放页 + 收起面板(返回 2)。 * 卡片命中固定于列表上方,先于列表行命中处理。 */ - if (!hit && meow_media_has_source() && ncp_media_card_tap(tx, ty)) { - hit = 1; need_paint = 1; - } else if (!hit && ty >= ncp_list_top() && ty < NCP_LIST_BOT) { + if (!hit && meow_media_has_source()) { + int mh = ncp_media_card_tap(tx, ty); + if (mh) { + hit = 1; + if (mh == 2) { /* 卡片体 FOCUS → 收起面板露出播放页 */ + if (anim_ok) anim_target = 0; else closed = 1; + break; + } + need_paint = 1; /* 按钮/进度:仅重绘卡片(面板保持开启) */ + } + } + if (!hit && ty >= ncp_list_top() && ty < NCP_LIST_BOT) { if (ncp_row_tap(tx, ty, list_scroll, click)) { hit = 1; if (anim_ok) anim_target = 0; /* 点击通知:dismiss + 记录启动 → 滑出收回 */ diff --git a/patch_v2/meow_launcherd/now_playing.c b/patch_v2/meow_launcherd/now_playing.c index 3716d3d..fa2249a 100644 --- a/patch_v2/meow_launcherd/now_playing.c +++ b/patch_v2/meow_launcherd/now_playing.c @@ -299,6 +299,10 @@ void run_now_playing(struct app *apps, int napps) uint32_t last_state = 0xFFFFFFFFu; char last_app[MEOW_APP_ID_MAX] = ""; + meow_ui_activity_push(NP_SENTINEL_ACT); /* M7.0b:进入 push 哨兵(与函数尾 449 行 pop 配对)。 + * 控件 owner 一直钉哨兵,命中要走 meow_widget_hit 的 + * owner==active 闸门——漏 push 则 active()!=0x51, + * 三钮 meow_widget_hit 恒 false(「播放页三键无效」根因)。 */ np_draw_page(1); meow_dirty_full(); meow_ui_flush(); diff --git a/scripts/build/fw_content.conf b/scripts/build/fw_content.conf index edd7417..d404d9e 100644 --- a/scripts/build/fw_content.conf +++ b/scripts/build/fw_content.conf @@ -28,7 +28,7 @@ # ---- 用户态/服务守护二进制(usr/bin,全部 chmod 755 静态 MIPS)---- patch_v2/bootmenu/meow_bootmenu|/usr/bin/meow_bootmenu|8de51144538d698c3ff82ee6651b8b1a|引导选单 M6.25(开机菜单/第二屏亮度按用户设置恢复:显示前读 settings.conf 写回,方案A) -patch_v2/meow_launcherd/meow_launcherd|/usr/bin/meow_launcherd|932bc985be34c89aadc6875e55cc9bae|M6.24 App内电源键锁屏时序(释放边沿误判唤醒) +patch_v2/meow_launcherd/meow_launcherd|/usr/bin/meow_launcherd|755286d44cf86ace5b48b80bb8927acb|M6.26 播放页三键命中(push哨兵)+媒体卡片体FOCUS(点击开播放页) patch_v2/meow_watchdog/meow_watchdog|/usr/bin/meow_watchdog|34ddbf0275526eaf9be988134845c3af|应用看门狗 M6.23(亮屏亮度按用户设置 display.brightness 恢复,修 panel ON 固定60跳变) patch_v2/meow_svcd/meow_svcd|/usr/bin/meow_svcd|605646c4cc93f2baf29071ea6bc870ea|服务管理器 M2.77(+崩溃上报 meow_crash agent-187) mips-repo/bins/meow_mdns/bin/meow_mdns|/usr/bin/meow_mdns|d6b0151bda26768f19952dae1342610d|mDNS 应答器 M2.78(启动竞态+换IP重检 agent-194)