启动器SDK改造 阶段一: 状态栏收敛单一SDK全局(agent-136)

- launcher meow_ui_set_statusbar(1) 启用SDK全局状态栏; 旧自绘(draw_statusbar/sb_redraw等)#if0退役(保留回退)
- 新增 SDK meow_ui_sys_feed(): launcher 喂 batt/charging/wifi/bt/vol/brightness 进SDK快照+置force+标脏顶条(0,0,xres,28)→present只重画顶条
- meow_ui_theme_reload(): SDK状态栏跟手launcher换肤; meow_sys_state 增 brightness
- 主界面/设置页/电源菜单/通知中心 顶部28px 由SDK全局状态栏统一绘制; 与App同实现/同主题/同日·夜
- ⚠️ 状态栏由MD3图标式→SDK文本式(HH:MM:SS …81% WIFI 蓝牙 VOL 亮度) — 用户拍板"用SDK的"既定结果; 图标MD3化属后续
- meow_ui.a=110c820a(仅新增符号,向后兼容) launcher=d4f108dd hello=12f48840(重编确认App不破坏); 0warning
- devdocs/plan/LAUNCHER_SDK_REWRITE.md 方案先行
This commit is contained in:
MeowOS committed 2026-08-30 18:42:59 +08:00
1 parent 815cc8cd19
commit a31a004afe
7 files changed
+151 -24

No files matched your search

+42 -2
View File
@@ -91,11 +91,26 @@ static int settings_vol(void)
return meow_ui_vol_clamp(vol, vol_max);
}
/* 亮度:读 settings.conf 的 display.brightness(launcher 同源),并 clamp 到
* [display.brightness_min, 100](与 launcher clamp_brightness 同口径,下限默认 1=极暗非全黑)。
* Stage-One 状态栏收敛(launcher 退役自绘状态栏)后,launcher 侧用 meow_ui_sys_feed() 喂
* 即时值(写入方=launcher);此处兜底让 App(meow_ui_run 的 1s 轻刷)也读到并显示亮度,
* 保证「launcher / App 同一实现、同日/夜」。 */
static int settings_bright(void)
{
int v = meow_ui_vol_read(MEOW_SETTINGS_FILE, "display.brightness", 101);
int mn = meow_ui_vol_read(MEOW_SETTINGS_FILE, "display.brightness_min", 1);
if (v < mn) v = mn;
if (v > 100) v = 100;
return v;
}
int meow_ui_sys_init(void)
{
memset(&g_sys, 0, sizeof g_sys);
g_sys.batt = -1;
g_sys.vol = settings_vol();
g_sys.brightness = settings_bright();
g_statusbar_on = 1;
g_fullscreen = 0;
g_statusbar_force = 1;
@@ -117,6 +132,7 @@ void meow_ui_sys_refresh(void)
g_sys.wifi_on = !strcmp(op, "up") ? 1 : 0;
g_sys.vol = settings_vol();
g_sys.brightness = settings_bright(); /* 兜底读 settings;launcher 喂入会覆盖(更即时) */
/* 蓝牙:hci0 存在性检查便宜;上电状态贵(hciconfig spawn),30s 缓存。 */
static uint64_t last_bt_ms = 0;
@@ -136,6 +152,25 @@ void meow_ui_sys_refresh(void)
const meow_sys_state *meow_ui_sys_get(void) { return &g_sys; }
/* ---- 系统进程(launcher)喂入权威快照(Stage-One 状态栏收敛)----
* launcher 不跑 SDK 事件循环,其 g_sys(meow_sys_refresh/light + 事件路径维护)是权威数据源
* (尤其亮度/音量,写入方=launcher)。此处把它覆盖进 SDK 快照并置 force,驱动下一次
* present() 重画顶条。不喂的字段保持 SDK 现有值(由 meow_ui_sys_refresh 同源兜底)。 */
void meow_ui_sys_feed(const meow_ui_feed *f)
{
if (!f) return;
g_sys.batt = f->batt;
g_sys.charging = f->charging;
g_sys.wifi_on = f->wifi_on;
g_sys.bt_seen = f->bt_seen;
g_sys.bt_on = f->bt_on;
g_sys.vol = f->vol;
if (f->brightness <= 0) g_sys.brightness = 0; /* 未知/屏关:不入顶条(>0 才显示) */
else if (f->brightness > 100) g_sys.brightness = 100;
else g_sys.brightness = f->brightness;
g_statusbar_force = 1; /* 数据已变 → 顶条必重画 */
}
/* ---- 公共 API ---- */
void meow_ui_set_statusbar(int visible)
{
@@ -190,20 +225,25 @@ int meow_ui_sys_statusbar_force(void)
return f;
}
/* 状态栏右侧信息串:batt% WIFI 蓝牙/蓝牙 VOL nn%(同 launcher statusbar_right_str) */
/* 状态栏右侧信息串:batt% WIFI 蓝牙 VOL nn% 亮度nn%(同 launcher 状态栏右侧语义,文本式)。
* mfont 就绪用 CJK「蓝牙/亮度」,否则回退 ASCII "BT/BRI"(28px 栏紧凑,避免超宽叠到时钟)。
* 顺序与 launcher 右侧簇一致:电量 → WiFi → 蓝牙 → 音量 → 亮度。*/
static void statusbar_right_str(char *out, size_t n)
{
char batt[16] = "", wifi[16] = "", vol[20] = "", bt[16] = "";
char batt[16] = "", wifi[16] = "", vol[20] = "", bt[16] = "", bri[20] = "";
if (g_sys.batt >= 0) snprintf(batt, sizeof batt, "%d%%", g_sys.batt);
if (g_sys.wifi_on) snprintf(wifi, sizeof wifi, "WIFI");
snprintf(vol, sizeof vol, "VOL %d%%", g_sys.vol);
if (g_sys.bt_seen && g_sys.bt_on)
snprintf(bt, sizeof bt, meow_gfx_mfont_ready() ? "蓝牙" : "BT");
if (g_sys.brightness > 0) /* >0 才显示(屏常亮态);0=屏关/未知不入 */
snprintf(bri, sizeof bri, meow_gfx_mfont_ready() ? "亮度%d%%" : "BRI %d%%", g_sys.brightness);
out[0] = 0;
if (batt[0]) strcat(out, batt);
if (wifi[0]) { if (out[0]) strcat(out, " "); strcat(out, wifi); }
if (bt[0]) { if (out[0]) strcat(out, " "); strcat(out, bt); }
if (vol[0]) { if (out[0]) strcat(out, " "); strcat(out, vol); }
if (bri[0]) { if (out[0]) strcat(out, " "); strcat(out, bri); }
}
void meow_ui_sys_statusbar_render(void)