Files
MeowOS-SDK/meow_ui_sys.h
T
MeowOS 1880aba139 fix(statusbar): 全屏状态栏收合 — 上移出屏+停渲染+热区28保留+左缘指示条屏顶(agent-146)
- 根因: 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桩)
2026-08-30 20:18:13 +08:00

89 lines
5.0 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* 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 */