diff --git a/APPS.md b/APPS.md index a2c0eda..78d7c59 100644 --- a/APPS.md +++ b/APPS.md @@ -288,7 +288,7 @@ meow_launcherd --sim-exit N # 菜单打开 N 毫秒后模拟退出 - **纯黑背景为默认**(`menu_bg = 0x000000`) - **可配置**:TF 卡 `MeowAPPs/meow.conf` 支持 `bg_color=RRGGBB`(如 `bg_color=10284f`),菜单打开时重新加载 - **40px 状态栏**(v6.8 由 20px 翻倍;v6.9 时钟加秒):第 1 行 = 左侧时钟(**HH:MM:SS,每秒刷新**,v6.9;用 `draw_clock()` 只刷时钟数字,不弹 amixer、不碰应用列表——见 §4.3 重绘纪律)、右侧 `电量% WIFI BT`(电量读 `/sys/class/power_supply/battery/capacity`、WIFI 读 `/sys/class/net/wlan0/operstate`、蓝牙读 `/sys/class/bluetooth/hci0` 存在性);第 2 行 = 左侧 `VOL nn%`(音量读 CS43198 / amixer numid=1,值 0-255);下方 1px 分隔线(移至 y=40)。⚠️ 音量 amixer control 实测为**死镜像**(§18.13:播放器走 sa_hgl_dma 硬件直通,ALSA control 读回恒 0),故展示值可能恒为 0%,为已知设备限制。 -- **开发版本号**(v6.9):右下角绘制 `MeowOS v dev`(字体无小写,实际渲染为大写 `MEOWOS V0.6.9 DEV`)。单一来源 = `meow_launcherd.c` 的 `MEOWOS_VERSION` 宏;`build_fw_apps.sh` 打包时用 `sed` 从该宏抓取写入 rootfs 的 `etc/meowos_version`,屏显与固件文件**同源,不会两处不一致**(版本号改一处即可)。 +- **开发版本号**(v6.9 起,现行来自 `/etc/meowos_version`):右下角绘制 `MeowOS v dev`(字体无小写,实际渲染为大写 `MEOWOS V DEV`)。版本号**单点 = 板上 `/etc/meowos_version`**(M2.47 起;launcher/bootmenu 运行时 `load_meowos_version` 读;`MEOWOS_VERSION` 宏仅作文件缺失时 dev 占位兜底,不再当实际版本),屏显与固件文件同源,不会两处不一致。 - 示例应用 hello 同样黑底 + 40px 状态栏(应用内左上角 48×48 返回键由 watchdog 绘制,允许盖住状态栏左侧) ### 4.7 应用退出后的菜单触摸守卫 + 启动失败检测(v6.8,Bug 2/3/4) diff --git a/README.md b/README.md index 26246a7..9d33ee8 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,8 @@ > 把 HiBy R3 Pro II 便携播放器(君正 X1600,MIPS32r2 / mipsel / musl 静态软浮点,480×720,无 GPU 软渲染)变成一个可扩展的「第二系统 + 应用框架」。 > MeowOS 与官方 HibyOS 共存于同一台设备:开机由引导选单二选一;启动后 MeowOS 作为主控层,提供自己的桌面 UI、应用框架、服务管理与系统组件。 > +> 版本:**M2.65(0.7.60)**(版本号单点 = 板上 `/etc/meowos_version`,见「构建」)。 +> > 许可证:Apache-2.0(见 [`LICENSE`](LICENSE))。本仓库为非官方第三方项目。 --- @@ -63,7 +65,7 @@ init (rcS) `/usr/bin/meow_launcherd`(源码 `patch_v2/meow_launcherd/`)是 MeowOS 的核心进程,负责渲染**系统级 UI**: - 状态栏(28px:时钟 / 电量 / WiFi / 蓝牙 / 音量); -- 通知中心(顶部下滑打开); +- 通知中心(顶部下滑展开,launcher 渲染,功能见 §2.6); - 电源菜单、全局左缘返回手势、全屏提示线; - 主界面(应用列表)、设置页。 @@ -108,7 +110,8 @@ init (rcS) - **来源**:MeowAPP(原生 IPC `MSG_NOTIFY`)+ 系统事件(抽象为 `app_id=system`,走同一配额)+ 外部桌面 App(D-Bus 桥 `meow_notify_dbus`,规划)。 - **配额**:每 App 最多 **4 个**通知类型(category);每类型活跃 **≤4**;媒体通知单例(每 App 仅 1 条,可多 App)。系统事件同配额。 - **TTL / 转储**:通知创建 **10s** 后追加写入 TF `MeowOS/notifications/`(CSV 行,滚动保留**最新 10MB**,不被电源事件清);正常关机先转储再清板载;开机清板载残留 + 清内存表;**无 TF 卡可运行**(仅内存态)。`urgency`(0-3)、`icon`、`progress`(实时进度仅改内存活跃槽,里程碑落盘,不每帧写卡)。 -- 通知数据模型补全(SDK→IPC→存储→dump 全链路):`meow_notify_send` 返回 id、`meow_notify_update_progress`、`urgency`/`icon` 字段。通知中心 UI 由系统进程(launcher)渲染,数据经 IPC 从存储读取(该部分/阶段 B/D,部分为规划)。 +- 通知数据模型补全(SDK→IPC→存储→dump 全链路):`meow_notify_send` 返回 id、`meow_notify_update_progress`、`urgency`/`icon` 字段。通知中心 UI 由系统进程(launcher)渲染,数据经 IPC 从存储读取。 +- **通知中心 UI(系统进程 launcher 渲染,M2.65 已实现)**:顶部下滑展开。含**快捷行 5 chip**〔WiFi / 蓝牙 / 主题 / 亮度 / **电源菜单**——电源菜单 chip 点击唤起**真电源菜单**〕、**勿扰开关**(面板内小 toggle,开=只显示高优先级 `urgency>=2`,设置键 `notify.dnd`)、**通知列表滚动**、**单条通知左滑删除**(跟手、半程可回、过阈值滑出删除)、**一键清除**(与勿扰对称的清除按钮,仅清**非活动**通知,先转储留档再清显示;ongoing / 媒体 / 进度条进行中一律保留)、**面板跟手下拉 / 半程可回**(1:1 跟手、松手 40% 锚定,与行左滑 / 列表滚动 / 左缘返回互斥)、面板/开关带**滑条平移动画**(复用设置页方案)。交互细节见 `NOTIFICATION_SYSTEM.md §9`。 ### 2.7 字体系统 diff --git a/docs/MEOWOS_SPEC_REF.md b/docs/MEOWOS_SPEC_REF.md index 5e3e72f..5afd37f 100644 --- a/docs/MEOWOS_SPEC_REF.md +++ b/docs/MEOWOS_SPEC_REF.md @@ -184,6 +184,10 @@ - **里程碑落盘**:TF 快照只在**创建时 + 结束(100% 或 dismiss)** 触发(沿用 `meow_notif_dump_tf`,progress 写当时值);实时进度**不每帧落盘**。 - **CSV 列**(`meow_notif_dump_tf`/`tf_line`):`timestamp,id,app_id,app_icon,category,urgency,progress,title,body,target_activity,ongoing,media,dismissed`。 - 说明:旧调用(无 urgency/progress/icon)兼容——urgency 缺省 NORMAL、progress=-1、icon=NULL→app 图标。`[源:用户 2026-08-30]` +- **⑥ 通知中心快捷 chip + 勿扰面板内开关(launcher 侧,M2.64)**:快捷行 **5 chip**(WiFi/蓝牙/主题/亮度/**电源菜单**——第 5 个 chip 点击唤起既有系统电源菜单 `show_power_menu`,真弹对话框);**勿扰不做 chip**,改**面板内开关**(列表上方小 toggle),开=只显示 `urgency>=2`(HIGH/CRITICAL),键 `notify.dnd`(SYSTEM_SETTINGS §1),面板内读写 `meow_settings_*` 零旁路。`[NOTIFICATION_SYSTEM §9]` +- **⑦ 单条通知左滑删除(launcher 侧,M2.64)**:通知行**从右往左横向滑动删除**,跟手;未过阈值/反向滑回 → **回弹复原(半程可回)**;松手过阈值 → `meow_notif_dismiss` + 行移除/重排。竖向=列表滚动(方向随 `input.swipe_invert`)、`meow_edge_back`(左缘)优先不变。`[NOTIFICATION_SYSTEM §9]` +- **⑧ 一键清除通知(launcher 侧,M2.65)**:勿扰开关**对称处(右半段)**加「一键清除」按钮;点击先**转储留档**(走既有 dump 链 `meow_notif_dismiss → meow_notif_dump_tf`,一行 CSV 追加 `MeowOS/notifications/notifications.log` + 10MB 滚动),再**清空显示**。**红线:绝不清「活动」通知**——① ongoing 常驻、② 媒体通知(媒体会话单例)、③ 带进度条进行中(`progress>=0`)一律保留;只清「非 ongoing / 非 media / 无进行中进度(`progress<0`)」的普通通知。`[NOTIFICATION_SYSTEM §9]` +- **⑨ 面板「跟手下拉、半程可回」(launcher 侧,M2.65)**:面板打开/关闭由触发式 180ms 过渡升级为**手指拖动实时跟手**——顶部热区下拉 `progress = 手指位移映射`(复用 `mnp_anim_off`,∈[0,1024],1:1 跟手);松手 `progress≥40%×1024≈410` → 时间轴补到 1024(展开);`<阈值 或 反向拖回` → 回弹到 0 收回(半程取消);关闭同理可跟手。与行左滑(⑦ 横向主导)/列表滚动(竖向溢出)/`meow_edge_back`(左缘)互斥分流。`[NOTIFICATION_SYSTEM §9]` ### 5.4 配置版本单点 / 刷新率 / 息屏 - /etc/meowos_version 版本单点(见 §1.1)`[DEV_NOTES #4]` @@ -340,7 +344,7 @@ - **A-7 app 日志路径**:APP_LOG_MANAGER §4 写 `apps/.log`(单文件);meow_ui.h §9 / DEV_NOTES #9 为 **`apps/<包名>/logs/<启动时间>_.log`**(每次启动新文件)——用户已纠正,勿用单文件。→ 以 meow_ui.h/DEV_NOTES(M2.51)为准,APP_LOG_MANAGER 目录小节过时。 - **A-8 状态栏高**:MEOW_APP_SDK §3.1「slim ~20-40px」;实际定案 **40px**([D6] MIGRATION_AC §11.1),后被用户改为 **28px**(MUI_SBAR_H=28,字号 20,图标 ink 16/中线 14,见 M2.x 状态栏压缩)。→ 现取 28。 - **A-9 SDK 通知转储**:NOTIFICATION_SYSTEM §8「创建 10s 后自动转储到 TF」;meow_ui.h 现仅「活动表+meow_log 打日志,真实投递 UI/D-Bus 为后续」。→ **10s 转储/TF 已实现(M2.5x,#6)**:launcher 侧带 TTL 10s 转储钩子,dump 到 `MeowOS/notifications/notifications.log`(appended CSV + 10MB 滚动 + 开机清板载/内存表);meow_ui.h 注释「真实投递 UI/D-Bus 为后续」仍指**通知中心 UI / D-Bus 桥**未做。 -- **A-10 版本来源细解**:DEV_NOTES #4「/etc/meowos_version 唯一来源;MEOWOS_VERSION 宏仅 dev 占位永不动」;APPS.md §4.6「MEOWOS_VERSION 宏=单一来源,build 时 sed 写入 etc/meowos_version」。→ 两者都强调"写入同源",但"谁是源头"措辞矛盾;实践上 build 脚本 echo 生成 /etc/meowos_version,宏作屏显 dev 占位。 +- **A-10 版本来源细解**:DEV_NOTES #4「/etc/meowos_version 唯一来源;MEOWOS_VERSION 宏仅 dev 占位永不动」;APPS.md §4.6「MEOWOS_VERSION 宏=单一来源,build 时 sed 写入 etc/meowos_version」。→ 两者都强调"写入同源",但"谁是源头"措辞矛盾;实践上 build 脚本 echo 生成 /etc/meowos_version,宏作屏显 dev 占位。→ **M2.64:APPS.md §4.6 已修正为「`/etc/meowos_version` 单点、`MEOWOS_VERSION` 宏仅 dev 占位」,方使矛盾消除**。 - **A-11 `MeowOS/opt/` vs `MeowOpt/`(已归并)**:曾有顶层 `MeowOpt/`(板载外部工具/二进制,如 mdnsd)与 `MeowOS/opt/{bin,nyai,sources.list},lib/,tools/`(nyai 包管 + 工具)并存、命名仅大小写之差。→ **已归并**:`MeowOpt` 废弃并入 `MeowOS/opt/`;mDNS 由完整 mdnsd(TF MeowOS/opt/mdnsd)改为**自研 `meow_mdns`(固件 `/usr/bin`,IPv4-only)**,不再放卡。全仓库统一用 `MeowOS/opt/`。 - **A-12 `fullscreen` 字段(已定 → 已实现,M2.5x)**:§5.5 与 MEOW_APP_SDK §9 将 `fullscreen` 列为 app.json 字段,但 `meow_parse_app_json()` **此前并未读取该键**(实现只解析 name/exec/icon/package/framework/immersive/route./awake./service.),属"已定未做"。→ **已实现**:launcher 启动 app/切 activity 据 `app.json fullscreen`/`route..fullscreen` 预设 SDK 全屏(env `MEOW_FULLSCREEN`),见 §5.1/§3.1。全屏语义由「隐藏状态栏+隐藏返回键」细化为「状态栏收合至提示线 + 保留左缘返回+顶部提示线+下滑通知中心(热区缩小)」(见 A-13)。 - **A-13 全屏语义细化(状态栏「隐藏」→「收合至提示线」)**:既有 §3.1/§5.1 描述全屏=隐藏状态栏(`meow_ui_statusbar_height()`=0、隐藏返回键=沉浸);本次定案细化为**进入/退出全屏:状态栏向上收出屏顶、只留一条提示线高度**,**全屏下保留**左缘返回手势 + 顶部动态伸缩提示线,且**顶部下滑仍可开通知中心(顶部热区缩小)**。→ **已实现(M2.5x)**:SDK 端明确「收合(collapsed)=状态栏缩为提示线(4px)」vs「隐藏=高度0」;全屏下保留左缘返回+顶部伸缩滑条+顶部下滑通知中心(热区缩小)。⚠️ **全屏顶部动态伸缩滑条仍有已知问题在跟进(agent-112)**。