feat: M6.10–M6.19 批量收编 + M6.19 推卡验收
- M7 launcher 重写 5 期(虚拟化宫格/meow_theme 单一权威/横幅动画/自定义 PIN 键盘) - OOM 通用化(cachegov 上收 SDK)、自动切歌根治、meowpanel jv_free 泄漏修复、Hello 滚动卡顿修复 - ncm 歌词 UI / 媒体通知封面 / 封面分辨率 640 - 5 bug 修复:ncm 后台化 UI 叠层+点击穿透、再进 ncm 桌面叠层、播放页新旧 UI 叠层抢刷脏区(meow_ui_gfx 恢复边沿整帧重画)、PIN 亮屏亮度跳(keys.c meow_panel_on 按 settings_brightness_clamped 恢复)、通知中心封面显歌单封面(cover.c save_cover_raw 加 is_song + 命中块守卫) - 四 App 统一重链新 meow_ui.a 51caee4a;M6.19=0.8.19 固件 2d2331f2 推卡自刷验收全绿
This commit is contained in:
1 parent
c2ee7626a4
commit
3d70a3dd2c
176 files changed
+15507
-597
No files matched your search
@@ -21,6 +21,7 @@
|
||||
static pthread_t g_thr;
|
||||
static int g_thr_on;
|
||||
static int g_quit;
|
||||
static volatile int g_req_focus_player = 0; /* 任务3:launcher 请求「回到播放页」(UI 线程消费) */
|
||||
|
||||
static const char *sock_path(void)
|
||||
{
|
||||
@@ -151,6 +152,11 @@ static void apply_playctl(const m_playctl_t *c)
|
||||
* (停止/缓冲)时 pause() 内部按态过滤,天然 no-op 安全。 */
|
||||
player_manager_pause(player_manager_state() == NCM_PC_PAUSED ? 0 : 1);
|
||||
break;
|
||||
case NCM_CTL_FOCUS:
|
||||
/* 任务3:通知中心媒体卡片点「卡片体」→ launcher 发本 cmd(需要 launcher 接线,见任务书):
|
||||
* 请求 App 回到播放页。只置标志(跨线程),UI 线程 app_on_tick 消费后导航(page nav 非线程安全)。 */
|
||||
g_req_focus_player = 1;
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
@@ -201,6 +207,78 @@ static void *ipc_thread(void *arg)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* 任务2:home 根页左滑「回桌面后台」——不再进程退出,改发 MSG_NAV{EXIT} 给 launcher。
|
||||
* launcher M4 据 app.json background_audio + 媒体会话 PLAYING(meow_media_app_playing)判
|
||||
* 保活(进程+音频流保留转后台,UI 走 §10.5 SDK present 自抑,非 SIGSTOP);否则才真终止。
|
||||
* 本函数**不**置 g_app_quit、**不**停线程——进程保留,媒体会话继续上报 PLAYING(任务2 ③)。
|
||||
* 独立连接发一帧(launcher ipc_dispatch MSG_NAV{EXIT} → meow_nav_request_exit,app_launcher.c:571)。
|
||||
* 返回 0=发出 / -1=无 socket 或写失败。 */
|
||||
int ipc_media_nav_exit(void)
|
||||
{
|
||||
int fd = connect_path(sock_path());
|
||||
if (fd < 0) {
|
||||
meow_log(MEOW_LOG_WARN, "ipc: nav_exit no launcher socket");
|
||||
return -1;
|
||||
}
|
||||
m_nav_t n;
|
||||
memset(&n, 0, sizeof n);
|
||||
ncm_strlcpy(n.app_id, "dev.player.ncm", sizeof n.app_id);
|
||||
n.nav_type = MEOW_NAV_EXIT;
|
||||
n.depth = 0;
|
||||
int rc = send_frame(fd, MSG_NAV, 9, &n, sizeof n);
|
||||
close(fd);
|
||||
meow_log(MEOW_LOG_INFO, "ipc: nav_exit sent rc=%d (request launcher background)", rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* 任务4 keep_awake:ACT_* 值 → launcher app.json awake/route 键用的活动名。
|
||||
* 命中的只有这些(ncm_app_internal.h ACT_* 枚举);未知/空栈(0) 返回 NULL(不起作用)。 */
|
||||
static const char *ncm_act_name(int act)
|
||||
{
|
||||
switch (act) {
|
||||
case ACT_LOGIN: return "login";
|
||||
case ACT_HOME: return "home";
|
||||
case ACT_PLAYLIST: return "playlist";
|
||||
case ACT_PLAYER: return "player";
|
||||
case ACT_SETTINGS: return "settings";
|
||||
case ACT_SEARCH: return "search";
|
||||
default: return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/* 任务4 keep_awake:把当前顶层 activity 上报 launcher(MSG_ACT_FOCUS,独立连接发一帧,无需 HELLO)。
|
||||
* launcher util.c ipc_dispatch MSG_ACT_FOCUS → meow_fg_act_set(app,act);fg_keep_awake() 依
|
||||
* app.json awake.<act>=1 判定该 activity 是否常亮(超时不自动息屏)。无 socket/launcher 不跑 → 优雅跳过。
|
||||
* 返回 0=发出 / -1=无 socket 或写失败。 */
|
||||
int ipc_act_report(int act)
|
||||
{
|
||||
const char *name = ncm_act_name(act);
|
||||
if (!name) return -1;
|
||||
int fd = connect_path(sock_path());
|
||||
if (fd < 0) {
|
||||
meow_log(MEOW_LOG_WARN, "ipc: act_focus(%s) no launcher socket", name);
|
||||
return -1;
|
||||
}
|
||||
m_act_focus_t f;
|
||||
memset(&f, 0, sizeof f);
|
||||
ncm_strlcpy(f.app_id, "dev.player.ncm", sizeof f.app_id);
|
||||
ncm_strlcpy(f.activity, name, sizeof f.activity);
|
||||
int rc = send_frame(fd, MSG_ACT_FOCUS, 10, &f, sizeof f);
|
||||
close(fd);
|
||||
meow_log(MEOW_LOG_INFO, "ipc: act_focus act=%s rc=%d", name, rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* 任务3:UI 线程消费「回到播放页」标志。返回 1=有未消费的聚焦请求(消费一次)。 */
|
||||
int ipc_media_focus_consume(void)
|
||||
{
|
||||
if (g_req_focus_player) {
|
||||
g_req_focus_player = 0;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ipc_media_start(void)
|
||||
{
|
||||
if (g_thr_on) return 0;
|
||||
|
||||
Reference in new issue
Block a user