- 根因: launcher/App 双进程各持SDK态, hello运行时全屏(set_fullscreen+set_collapsed)只改App进程, launcher仍expanded→画28px+时序闪 - SDK render_off(yoff): 顶条内容整体上移+裁顶, 收合 statusbar_collapsed_render 只画4px提示线(无时钟/图标/值) - 热区保留: meow_ui_statusbar_hotzone() 收合时返回28(渲染与热区事件分离)→收合仍可下滑 - 左缘指示条: meow_ui_swipe_hint y=statusbar_height()=4 平移屏顶 - 模式感知: /tmp/meowapp_sbar(App进程SDK写0展开/1收合/2隐藏, launcher读); launch_app循环新变立即叠(消半秒闪)+过渡期~20ms高频刷(动画平滑) - meow_ui.a=ed0267a9 launcher=7ea80408 hello=1a3ff13e 0warning; 宿主 test_sb_collapse/test_sb_statusbar ALL PASS - 遗留: 全屏上收观感/收合下App前台打开通知中心归④M3(meow_ui_sys_notif_pull桩)
89 lines
5.0 KiB
C
89 lines
5.0 KiB
C
/*
|
||
* meow_ui_sys.h — SDK 内置系统状态读取器 + 全局状态栏(A-0 核心)。
|
||
*
|
||
* 供 meow_ui 内部各 TU 协作(绘制后端 present() 前置覆盖 + 输入层事件循环 1s 轻刷)。
|
||
* 不随 meow_ui.h 发布给应用。应用侧只通过公共 API 控制显隐/全屏:
|
||
* meow_ui_set_statusbar() / meow_ui_statusbar_visible() /
|
||
* meow_ui_set_fullscreen() / meow_ui_statusbar_height()。
|
||
*
|
||
* 数据源与 launcher 的 meow_sys 同源单点一致:
|
||
* - 电量 /sys/class/power_supply/battery/{capacity,status}
|
||
* - WiFi /sys/class/net/wlan0/operstate
|
||
* - 蓝牙 实际 powered(hciconfig -a hci0 的 UP;spawn 贵 → 缓存 30s 刷一次)
|
||
* - 音量 /usr/data/meow/settings.conf 的 audio.volume(launcher 同文件;
|
||
* 0-100 并 clamp 到 audio.volume_max 上限,与 launcher vol_clamp 口径一致)
|
||
* - 时钟 localtime_r(每秒在绘制时现取)
|
||
*/
|
||
#ifndef MEOW_UI_SYS_H
|
||
#define MEOW_UI_SYS_H
|
||
|
||
#include "meow_ui.h"
|
||
|
||
/* 系统快照(状态栏数据源)。时钟不走这里——绘制时现取 localtime。 */
|
||
typedef struct meow_sys_state {
|
||
int batt; /* 电量 %;-1=未知 */
|
||
int charging; /* 1=充电/满 */
|
||
int wifi_on; /* 网卡 up(射频开;launcher 喂入按 g_sys.wifi_on) */
|
||
int wifi_connected;/* 已关联 AP(operstate up);launcher 喂入(g_sys.wifi_connected)。WiFi 分档用 */
|
||
int wifi_level; /* 信号 dBm(-1000=未知);launcher 喂入(-60 强 / -75 中 / 更弱弱)。 */
|
||
int bt_seen; /* hci0 节点存在 */
|
||
int bt_on; /* 实际上电(hciconfig UP) */
|
||
int vol; /* 音量 0-100 */
|
||
int brightness; /* 背光/亮度 1-100;只有 >0 才显示(屏常亮态)。由 launcher 喂入
|
||
* (launcher 是背光写入/clamp 方),SDK 自己亦用 settings 兜底读。 */
|
||
} meow_sys_state;
|
||
|
||
/* 顶部状态栏几何(与 launcher SB_BAR_H=28 / SB_FONT=20 对齐,视觉统一)。
|
||
* 高度 40→28(用户定),字号 28→20(28px 栏放不下 28 号;20 号按 (高-行高)/2 垂直居中)。 */
|
||
#define MUI_SBAR_H 28
|
||
#define MUI_SBAR_FONT 20
|
||
|
||
/* 收合(collapsed)状态下状态栏的有效加载高度(inset)= 顶部提示线高度(px)。
|
||
* 收合=状态栏内容上移出屏、只留一条提示线:app 内容据此上移(非满 28),
|
||
* 形成「不完全沉浸(留提示线)」;与 fullscreen(整条隐藏、inset0)区别。
|
||
* 取值沿用公共宏 MEOW_SBAR_HOTZONE_FS(=4,全屏时顶部热区/提示线的缩后高度),
|
||
* 具体绘制高度(gfx.c 的 MUI_SBAR_HINT_H=6)在渲染端,这里按提示线高度口径即可。 */
|
||
#define MUI_SBAR_COLLAPSE_H MEOW_SBAR_HOTZONE_FS
|
||
|
||
/* 首次全量读取;失败仍返回 0(字段置 -1/0)。 */
|
||
int meow_ui_sys_init(void);
|
||
|
||
/* 1s 轻刷:电量/WiFi/音量(便宜);蓝牙 30s 缓存刷新。 */
|
||
void meow_ui_sys_refresh(void);
|
||
|
||
/* 当前快照(内部只读)。 */
|
||
const meow_sys_state *meow_ui_sys_get(void);
|
||
|
||
/* 状态栏是否应绘制(= set_statusbar(1) 且 非 fullscreen),收合(collapsed)兼容:
|
||
* collapsed 视为状态栏仍在(只留提示线),故 collapsed 时即使 fullscreen 也返回 1,
|
||
* 让渲染端/输入层继续驱动上收动画与提示线;fullscreen 且不 collapsed → 0(整条隐藏,
|
||
* 沉浸,保持既有语义)。 */
|
||
int meow_ui_sys_statusbar_active(void);
|
||
|
||
/* 状态栏有效高度(px,供 inset/提示条定位):active 时 28;collapsed 时=提示线高度
|
||
* MUI_SBAR_COLLAPSE_H(非满 28,app 内容可上移);否则 0(供 meow_ui_statusbar_height 用)。 */
|
||
int meow_ui_sys_statusbar_height(void);
|
||
|
||
/* 系统级「下拉展开通知中心」手势挂钩(M2.5x 接线):输入层识别出「起始于顶部热区的
|
||
* SWIPE_DOWN」后路由到这里。通知中心 UI 为后续里程碑,此入口作记录/占位;届时由对应
|
||
* 代理在此挂真实展开逻辑(IPC SHOW_ACTIVITY / 覆盖层渲染)。 */
|
||
void meow_ui_sys_notif_pull(void);
|
||
|
||
/* 自上次渲染后状态栏数据是否已变(1s 轻刷/显隐切换置位);读取即清除。
|
||
* 渲染后端 present() 用它决定是否重画顶部条(配合脏区/整帧判断)。 */
|
||
int meow_ui_sys_statusbar_force(void);
|
||
|
||
/* 把状态栏画进 back_buf(顶部 MUI_SBAR_H 行)+ 标脏。调用方负责随后上屏。 */
|
||
void meow_ui_sys_statusbar_render(void);
|
||
|
||
/* 收合「上移出屏」过渡渲染(仅系统进程/launcher,见 meow_ui_sys_statusbar_render):内容整体上移
|
||
* yoff 像素并裁顶;只画可见条高 [0, MUI_SBAR_H-yoff) 行,其余行保留(App 内容由 launcher 标脏切齐)。
|
||
* yoff=0 等价 meow_ui_sys_statusbar_render()。实现见 meow_ui_sys.c。 */
|
||
void meow_ui_sys_statusbar_render_off(int yoff);
|
||
|
||
/* 把当前顶条模式写到 /tmp/meowapp_sbar(仅 App 进程 !g_sys_render 才写;launcher 读)。
|
||
* meow_ui_statusbar_set_collapsed(gfx.c)也调用它,故在头文件声明。 */
|
||
void meow_ui_sbar_write_mode(void);
|
||
|
||
#endif /* MEOW_UI_SYS_H */
|