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
@@ -0,0 +1,82 @@
|
||||
/*
|
||||
* meow_cachegov.h — 磁盘缓存 page-cache 治理 SDK 库(A 的主导/治本侧)。
|
||||
*
|
||||
* 归属(devdocs/plan/ARCHITECTURE_PRINCIPLES.md ③混合,2026-09-02 用户定案):
|
||||
* - A(DONTNEED 热路径,需要 read_pos) → 随 SDK 库(本文件,进程内直读 read_pos,无 IPC)。
|
||||
* - C(设备级 /proc/meminfo Cached 监控降载)→ 归系统服务 meow_svc_perf;本模块只读其共享状态
|
||||
* 文件(MEOW_CACHEGOV_C_FILE)作为「降载」信号,供 App 查询。
|
||||
* - App(如 ncm)侧只调本库接口:登记文件 + read_pos 回调 + tick + drop_finished + 查询降载,
|
||||
* 不写自己的治理算法。
|
||||
*
|
||||
* 权威方案:devdocs/plan/OOM_PAGECACHE_GOVERNANCE.md。红线:**L2(丢 read_pos 前方)禁止**,
|
||||
* 本库绝不 drop `[read_pos, ...)` 任何未解码区。
|
||||
*
|
||||
* 分级(§2.2):
|
||||
* L0(默认,安全): 曲终/commit 后对整文件 posix_fadvise(DONTNEED)——播放器已退出解码循环。
|
||||
* L1(可选,主杠杆): 播放中丢已读前缀 `[0, read_pos-keep_hot)`,保 keep_hot 窗口供倒带;
|
||||
* 仅 drop_mode>=1 且 A 未回退到 ≥2 时执行。
|
||||
* L2(禁止,红线): 绝不丢 read_pos 前方/当前未解码页。
|
||||
*
|
||||
* underrun 回退(§2.3,SDK 内置):App 在 pread 慢(数据在盘上但 >threshold ms)处上报
|
||||
* meow_cachegov_note_refault();本库滚窗 10s,超门限逐级回退(放大 keep_hot → 降 L0 → 关 A)。
|
||||
*
|
||||
* 接口按 OOM 文档 §4.2 + §4.4;值语义与 mem_watch 的「滞回三档」风格对齐(自含:pthread + meow_log)。
|
||||
*/
|
||||
#ifndef MEOW_CACHEGOV_H
|
||||
#define MEOW_CACHEGOV_H
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct meow_cachegov_cfg {
|
||||
int enabled; /* 总开关:0=A 完全不丢页(register/tick/drop_finished 全部 no-op) */
|
||||
int cached_threshold_kb; /* 保留:C 侧阈值归 svc_perf(本库恒 0,只读不控,防误用) */
|
||||
int dirty_warn_kb; /* 保留:同上(svc_perf 用;本库只透传日志) */
|
||||
size_t keep_hot_bytes; /* L1 保留窗口:read_pos 之后保多少不丢(回退时自动放大) */
|
||||
size_t min_hot_ahead; /* L2 红线:read_pos 前方至少保多少——仅防御注释,**绝不参与 drop** */
|
||||
int drop_mode; /* 0=仅曲终(L0);1=曲终+播放中丢已读前缀(L0+L1,配 seek 回退) */
|
||||
int refault_backoff; /* 10s 窗口内 refault 触发回退的门限(次数) */
|
||||
} meow_cachegov_cfg_t;
|
||||
|
||||
/* 登记本次治理的缓存文件(正式缓存文件路径 + 大小 + read_pos 回调 + 回调 ctx)。
|
||||
* 返回 0=ok / 负=错。重复 path 幂等(替换条目)。 */
|
||||
int meow_cachegov_register(const char *path, uint64_t size,
|
||||
uint64_t (*read_pos_fn)(void *ctx), void *ctx);
|
||||
|
||||
/* 注销该 path 的治理条目(曲终/切歌后清理)。返回 0=找到并删 / 负=不在册。 */
|
||||
int meow_cachegov_unregister(const char *path);
|
||||
|
||||
/* 周期调用(播放循环节拍 / 监控线程均可):
|
||||
* ① 按回退档执行 L1 丢弃(丢已读前缀 [0, read_pos-keep_hot));
|
||||
* ② 评估 refault 滚窗做逐级回退。 */
|
||||
int meow_cachegov_tick(void);
|
||||
|
||||
/* 曲终/commit 后:对刚播完文件做整文件 L0 DONTNEED + 注销该条目。
|
||||
* 回退档>=3(A 整体关闭)时不丢页(L0 也被关,见 §2.3 步骤 3)。 */
|
||||
int meow_cachegov_drop_finished(const char *path);
|
||||
|
||||
/* 下载/预取方查询(1=应暂停)。数据源 = A 侧回退硬暂停 OR svc_perf C(Cached 超阈值)降载。 */
|
||||
int meow_cachegov_download_paused(void);
|
||||
int meow_cachegov_prefetch_paused(void);
|
||||
|
||||
/* 设置/读取治理配置(运行时覆盖编译期默认)。 */
|
||||
int meow_cachegov_set_cfg(const meow_cachegov_cfg_t *cfg);
|
||||
int meow_cachegov_get_cfg(meow_cachegov_cfg_t *cfg);
|
||||
|
||||
/* ---- refault 上报 + A 回退状态(underrun 检测,§2.3)---- */
|
||||
/* App 在 pread 慢(数据已在盘上、读出 >threshold ms)处上报一次 refault。线程安全。 */
|
||||
void meow_cachegov_note_refault(void);
|
||||
/* A 当前回退档:0=正常 1=keep_hot 放大 2=降 L0(L1 关) 3=A 关。 */
|
||||
int meow_cachegov_backoff_level(void);
|
||||
|
||||
/* ---- 宿主测试桩(设备永不调用;-1=真实时钟,>=0 时用注入值替代 monotonic 时钟)---- */
|
||||
void meow_cachegov_test_set_time_ms(int64_t t);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* MEOW_CACHEGOV_H */
|
||||
@@ -0,0 +1,106 @@
|
||||
/*
|
||||
* meow_lazygrid.h — SDK 2 维虚拟化宫格(§12.4:meow_lazygrid,M7.4 主界面前置)。
|
||||
*
|
||||
* 定位:给「卡片/图标宫格」提供**二维虚拟化**——应用入口宫格、图标墙、设置快捷卡等。
|
||||
* 只实例化**可见行**(视口内),行高/列几何 + gap;滚动复用 §12.3 meow_scroll(fling/snap),
|
||||
* 与 meow_listview 同款惯性;命中 meow_lazygrid_hit/tap_at 把滚动+网格坐标映射回 item idx。
|
||||
*
|
||||
* 设计(仿 meow_listview 的 vsource 思想 + meow_scroll 滚动 + meow_box 列几何):
|
||||
* - 数据源:count_fn() 返回总项数(任意长),bind_fn(index, item) 仅当 item「进入视口」
|
||||
* (绑定到固定池槽)时调一次;回滚命中同槽不重绑(同 listview 池语义)。
|
||||
* - 固定 item 池:池容量 = 视口行数 + 2(× cols),静态有界(≤MEOW_LAZYGRID_POOL_MAX)。
|
||||
* - 列几何:cols + cell_w + cell_h + gap;行高 row_h = cell_h + gap;按 scroll offset 推可见行。
|
||||
* - 渲染:默认 renderer 画「圆角卡片(icon+名+状态)」;App 也可经 set_item_draw 完全自绘
|
||||
* (主界面卡片宫格用:icon+名+后台标注)。支持选中高亮/禁用变淡/空态占位。
|
||||
* - 滚动:接 meow_scroll(meow_lazygrid_scroll 返回会话;track/fling/snap 与 listview 同款)。
|
||||
*
|
||||
* 内存纪律(M7 §5.2):静态有界 item 池(冷路径 create/set_vsource 分配,热路径 draw/hit/scroll
|
||||
* 零 malloc),与 listview 池同源;不常驻 count 个 item 对象。
|
||||
*
|
||||
* 非 meow_widget:lazygrid 是**自包含控件**(不注册进 z 序/绘制注册表),由宿主(launcher session)
|
||||
* 在 draw 阶段调 meow_lazygrid_draw、命中阶段调 meow_lazygrid_hit/tap_at、滚动喂 meow_scroll——
|
||||
* 与 meow_scroll/meow_box 同为「正交模块」,不侵入 struct meow_widget(全追加式)。
|
||||
*/
|
||||
#ifndef MEOW_UI_LAZYGRID_H
|
||||
#define MEOW_UI_LAZYGRID_H
|
||||
|
||||
#include "meow_ui_types.h" /* meow_img 前向 + 基础类型(子头不引伞头,避免相对路径依赖) */
|
||||
#include "meow_ui_theme.h" /* meow_theme(draw 取语义色) */
|
||||
#include "meow_ui_scroll.h" /* meow_scroll(滚动集成;子头引依赖子头,同 widgets.h→theme.h) */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct meow_lazygrid meow_lazygrid;
|
||||
|
||||
/* ---- cell / item ---- */
|
||||
/* 单格数据(bind 回调填充;SDK 固定池持有;App 跨 bind 用 user 存业务态/图/index)。 */
|
||||
typedef struct meow_lazygrid_item {
|
||||
const char *title; /* 主文本(名;必填,NULL 视为空格) */
|
||||
const char *subtitle; /* 副文本(状态/后台标注),可空 */
|
||||
const meow_img *icon; /* 可选:格内图标(NULL=无) */
|
||||
int enabled; /* 1=可交互;0=变淡不响应 */
|
||||
void *user; /* App 私有(跨 bind 保存业务态;SDK 不碰) */
|
||||
} meow_lazygrid_item;
|
||||
|
||||
/* 数据源:count 返回总项数(>=0,任意长);bind 在 item 进入视口时调一次填充 item。
|
||||
* 二者均不常驻 item 对象;count 每帧实时查(支持动态长度/搜索过滤)。 */
|
||||
typedef int (*meow_lazygrid_count_fn)(void *ctx);
|
||||
typedef void (*meow_lazygrid_bind_fn)(int index, meow_lazygrid_item *item, void *ctx);
|
||||
|
||||
/* 完全自绘回调(覆盖默认 renderer):index=项号;x,y,w,h=格矩形(已裁剪到宫格视口);
|
||||
* state=MEOW_LAZYGRID_ST_* 状态位(选中/禁用组合)。App 用 §3 绘制 API 自绘整格。 */
|
||||
typedef void (*meow_lazygrid_draw_fn)(int index, int x, int y, int w, int h,
|
||||
int state, void *ctx);
|
||||
/* state 位(draw 回调收到)。 */
|
||||
#define MEOW_LAZYGRID_ST_SELECTED (1u<<0)
|
||||
#define MEOW_LAZYGRID_ST_DISABLED (1u<<1)
|
||||
|
||||
/* 命中/点击回调(idx=项号;App 在 tap_at 命中后触发动作)。 */
|
||||
typedef void (*meow_lazygrid_tap_fn)(int idx, void *ctx);
|
||||
|
||||
#define MEOW_LAZYGRID_POOL_MAX 96 /* 池容量上限(固定;保证静态有界) */
|
||||
|
||||
/* ---- 生命周期(冷路径 create/free;热路径 draw/hit/scroll 零 malloc)----
|
||||
* cols=列数(>=1,越界 clamp);cell_w/cell_h=格宽高;gap=格间距(水平与垂直同用)。 */
|
||||
meow_lazygrid *meow_lazygrid_create(int x, int y, int w, int h, int cols,
|
||||
int cell_w, int cell_h, int gap);
|
||||
void meow_lazygrid_free(meow_lazygrid *g);
|
||||
|
||||
/* ---- 几何配置 ---- */
|
||||
void meow_lazygrid_set_rect(meow_lazygrid *g, int x, int y, int w, int h); /* 视口矩形(绝对坐标) */
|
||||
void meow_lazygrid_set_cols(meow_lazygrid *g, int cols);
|
||||
void meow_lazygrid_set_cell(meow_lazygrid *g, int cell_w, int cell_h, int gap);
|
||||
|
||||
/* ---- 数据源 + 渲染 ---- */
|
||||
int meow_lazygrid_set_vsource(meow_lazygrid *g, meow_lazygrid_count_fn count,
|
||||
meow_lazygrid_bind_fn bind, void *ctx);
|
||||
int meow_lazygrid_set_item_draw(meow_lazygrid *g, meow_lazygrid_draw_fn draw,
|
||||
void *ctx); /* NULL=用默认卡片 renderer */
|
||||
int meow_lazygrid_set_empty_text(meow_lazygrid *g, const char *text);
|
||||
|
||||
/* ---- 滚动(像素级;可视行数按 offset 实时推) ---- */
|
||||
void meow_lazygrid_set_scroll(meow_lazygrid *g, int off);
|
||||
void meow_lazygrid_scroll_by(meow_lazygrid *g, int dy);
|
||||
int meow_lazygrid_scroll(meow_lazygrid *g);
|
||||
int meow_lazygrid_max_scroll(meow_lazygrid *g); /* max(0, 内容高 - 视口高) */
|
||||
int meow_lazygrid_row_h(const meow_lazygrid *g); /* 行高(=cell_h+gap) */
|
||||
/* 便捷:包一个 meow_scroll 会话(set/max/get/redraw 指回本宫格;redraw 只刷视口区)。
|
||||
* App 在 on_touch_move 喂 meow_scroll_track、松手 meow_scroll_fling。返回 NULL=池满。 */
|
||||
meow_scroll *meow_lazygrid_scroll_attach(meow_lazygrid *g);
|
||||
|
||||
/* ---- 选中 / 命中 ---- */
|
||||
void meow_lazygrid_set_on_tap(meow_lazygrid *g, meow_lazygrid_tap_fn cb, void *ctx);
|
||||
void meow_lazygrid_set_sel(meow_lazygrid *g, int idx); /* 越界 clamp;<0 清除;标脏 */
|
||||
int meow_lazygrid_sel(const meow_lazygrid *g);
|
||||
int meow_lazygrid_hit(meow_lazygrid *g, int x, int y); /* 命中项 idx(滚动+网格坐标映射);-1=未命中/禁用 */
|
||||
int meow_lazygrid_tap_at(meow_lazygrid *g, int x, int y); /* 命中:置选中 + 回调 + 返回 idx/-1 */
|
||||
|
||||
/* ---- 绘制 ---- */
|
||||
void meow_lazygrid_draw(meow_lazygrid *g, const meow_theme *th);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* MEOW_UI_LAZYGRID_H */
|
||||
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* meow_select.h — SDK 枚举/预设选择器(§5.8.6 模态组件,M7.2 设置页缺口 #4)。
|
||||
*
|
||||
* 定位:给「枚举 / 预设选择器」一个开箱即用的**下拉模态**——设置页采样率/码率/主题/语言等
|
||||
* 枚举、均衡器预设等。封装 = BottomSheet(标题 + 选项列表)+ meow_listview(SINGLE) 单选列表:
|
||||
* 选项数组 + 当前选中(高亮)+ 点选项 = 选中 + 关闭 + on_change 回调;点面板外/左缘返回 = 取消。
|
||||
*
|
||||
* 设计(§3 缺口 #4):选项用 meow_listview(SINGLE) 渲染(单选高亮、可惯性滚动、虚拟化长列表),
|
||||
* 外层是模态 BottomSheet(复用 meow_dialog 的遮罩/快照恢复,scrim 只叠一层/关闭无残影)。
|
||||
* 阻塞式(内层 meow_input_pop 轮询,与 meow_dialog 同构);打开前排空残留触摸。
|
||||
*
|
||||
* 内存纪律:选项数组定长(≤MEOW_SELECT_MAX_ITEMS,栈/数组持有,非 malloc 长列表);
|
||||
* 列表在 open 时创建(冷路径)、close 时释放;open 循环零 malloc。
|
||||
*/
|
||||
#ifndef MEOW_UI_SELECT_H
|
||||
#define MEOW_UI_SELECT_H
|
||||
|
||||
#include "meow_ui_types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct meow_select meow_select;
|
||||
|
||||
/* 选中回调(on_change):idx=被选中的选项下标(0..n-1)。 */
|
||||
typedef void (*meow_select_fn)(int idx, void *ctx);
|
||||
|
||||
#define MEOW_SELECT_MAX_ITEMS 32 /* 选项上限(静态数组;越界 add 忽略并返回 -1) */
|
||||
|
||||
/* ---- 组件式(可复用 + on_change 回调)---- */
|
||||
meow_select *meow_select_create(const char *title, int cur); /* cur=初始选中项;越界 clamp */
|
||||
int meow_select_add_item(meow_select *s, const char *label); /* 返回项下标;满/无效= -1 */
|
||||
void meow_select_set_on_change(meow_select *s, meow_select_fn cb, void *ctx);
|
||||
/* 打开模态(阻塞到确认/取消):选中 → 置 result=idx + 调 on_change(idx)+ 返回 idx;
|
||||
* 取消/点面板外/左缘返回 → 返回 -1(不调 on_change)。 */
|
||||
int meow_select_open(meow_select *s);
|
||||
void meow_select_free(meow_select *s);
|
||||
|
||||
/* ---- 一次性(无回调,返回值即选择)----
|
||||
* opts=选项数组(const char* 数组);n=个数;cur=初始选中。返回选中下标/-1=取消。 */
|
||||
int meow_select_show(const char *title, const char *const *opts, int n, int cur);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* MEOW_UI_SELECT_H */
|
||||
@@ -386,6 +386,25 @@ int meow_listview_set_item_draw(meow_widget *lv, meow_listview_draw_fn draw,
|
||||
/* 空态占位:count==0 时视口内居中画 empty_text(NULL 不画)。返回 0=成功。 */
|
||||
int meow_listview_set_empty_text(meow_widget *lv, const char *text);
|
||||
|
||||
/* ============================================================ */
|
||||
/* §5.5 左滑删除(M7.3 通知中心缺口 #9):列表行横向手势 + 删除/回弹动画 */
|
||||
/* ------------------------------------------------------------
|
||||
* 行自绘 set_item_draw 配合(SDK 在自绘行前把该行横向偏移 swipe_dx 传给 x,并画右露删除区)。
|
||||
* 手势由 App 在 on_touch_move 喂三级:begin(touch-down)/ move(touch-move)/ end(release)。
|
||||
* 判定:横向小位移|dx|>|dy| 且超容差=swipe(move 返回 1=本列表消费,App 勿滚动);纵向
|
||||
* |dy|>|dx| 且超容差=滚动手势优先(返回 0 并取消本行 swipe,App 照常 scroll_by);点按
|
||||
* 无位移(end 时未 started)=行点击(返回 0,App 照常 tap_at)。不修改 tap_at/滚动语义。
|
||||
* 动画:超阈值 → 删除动画(行滑出 meow_anim,结束后回调 on_delete(idx));未超 → 回弹。
|
||||
* 颜色:删除区用主题 error/onError;不与行点击/滚动冲突(见判定表)。 */
|
||||
typedef void (*meow_listview_swipe_fn)(int idx, void *ctx);
|
||||
void meow_listview_set_swipe_delete(meow_widget *lv, int enabled,
|
||||
meow_listview_swipe_fn on_delete, void *ctx);
|
||||
int meow_listview_swipe_begin(meow_widget *lv, int x, int y); /* touch-down:1=命中可滑行(喂后续 move) */
|
||||
int meow_listview_swipe_move(meow_widget *lv, int x, int y); /* touch-move:1=消费(横向);0=让位(取消/纵向) */
|
||||
int meow_listview_swipe_end(meow_widget *lv, int x, int y); /* release:1=消费(删/回弹动画);0=未滑动(tap) */
|
||||
int meow_listview_swipe_active(meow_widget *lv); /* 1=有行处于滑动/动画中 */
|
||||
int meow_listview_swipe_offset(meow_widget *lv); /* 当前滑动行的 dx(<0=左移;自绘行画用) */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in new issue
Block a user