feat(launcher): 蓝牙/WiFi 独立子页面(安卓风)— 新增 subpage.c 统一脚手架(顶栏+分组列表+跟手滚动+左缘返回) + wifi_page.c(开关/当前连接详情/已保存/附近,BSSID去重+中文SSID) + bt_page.c(开关/已连接/已配对/附近扫描配对);SMENU 网络组收敛为 2 入口行 (agent-178)

launcher bd37c8b0→d10c0e8a; 改动文件 -Wall -Wextra 0 warning; 真机待验证: 蓝牙 pair/connect、开关联动、触摸几何
出入: 中文SSID/BSSID去重复用 net.c 既有实现; 模态复用 s_dd_modal(SDK 模态层未上收, 未改 SDK); s_net_open 旧分支留作死代码未删
This commit is contained in:
MeowOS committed 2026-08-31 03:41:51 +08:00
1 parent 366bf6bb5d
commit f2786552d5
10 files changed
+1122 -86

No files matched your search

@@ -175,6 +175,8 @@ extern "C" {
#define NET_LIST_BT_NEARBY 4 /* 蓝牙附近设备(已配对 + 扫描发现;下拉,只读展示) */
#define NET_LIST_BT_MODE 5 /* 蓝牙当前连接模式(只读信息;对应"蓝牙模式"行,s_net_get 显示) */
#define NET_LIST_ABOUT 6 /* 系统设置「关于本机」:只读设备信息弹窗(复用 s_dd_modal) */
#define NET_LIST_WIFI_PAGE 7 /* M2.76:WiFi 独立子页面入口(tap → run_wifi_page) */
#define NET_LIST_BT_PAGE 8 /* M2.76:蓝牙独立子页面入口(tap → run_bt_page) */
#define S_NET_MAX 8 /* 网络下拉一次最多展示项(屏幕高度限制) */
#define BG_PRESETS_N 3
#define HK_PRESETS_N 2
@@ -414,8 +416,46 @@ typedef struct {
} srow_t;
/* 已保存网络 / 扫描结果 / 蓝牙设备名称列表(用于下拉展示与连接动作) */
typedef struct { int id; char name[48]; } meow_net_t;
/* 已保存网络 / 扫描结果 / 蓝牙设备名称列表(用于下拉展示与连接动作)。
* M2.76:追加 mac[24](AP BSSID / 蓝牙设备 MAC),供连接/配对/详情展示;无则空串。 */
typedef struct { int id; char name[48]; char mac[24]; } meow_net_t;
/* ================================================================== */
/* M2.76:WiFi/蓝牙独立子页面脚手架(安卓风:顶栏+返回+分组列表+滚动) */
/* 实现:subpage.c(统一循环) + wifi_page.c / bt_page.c(数据/动作)。 */
/* 与设置页同主题(s_ui_theme,MD3 语义色,明暗自动);滑动方向沿用 */
/* 设置页语义(含 input.swipe_invert);局部刷新不整屏重绘;模态弹窗 */
/* 复用 launcher 既有 s_dd_modal(点外关闭不穿透,见 settings_page.c)。*/
/* ================================================================== */
#define SUB_ROWS_MAX 44 /* 子页一次最多行数(分组标题+各行,防爆) */
/* 子页一行:kind 决定渲染(组标题 / 普通行 / 开关行 / 动作行<右chevron>) */
typedef enum { SUB_HDR, SUB_ROW, SUB_SW, SUB_ACT } sub_kind_t;
typedef struct {
sub_kind_t kind;
const char *label; /* 主文本 */
const char *sub; /* 副文本/摘要(右侧 dim 文字),可空 */
int on; /* SUB_SW:开关态 */
int act; /* 动作码(回传给 act 回调定位具体行) */
} sub_row_t;
/* 子页描述(页面提供回调,脚手架负责绘制/滚动/触摸/按键/自动息屏) */
typedef struct sub_page {
const char *title; /* 顶栏标题 */
int (*top_sw)(void *ctx, int *on); /* 顶栏开关:返回 1=显示开关并写 *on;0=无开关 */
void (*top_sw_set)(void *ctx, int on);/* 顶栏开关切换(写+生效+触发重扫) */
int (*rows)(void *ctx, sub_row_t *rbuf, int max); /* 填行,返回行数 */
int (*act)(void *ctx, int idx, int act); /* 点动作行/开关行;返回 1=重绘+重填行 */
int (*detail)(void *ctx, int idx, int act);/* 点 SUB_ROW 行(如连接/设备详情);返回 1=重绘 */
int live; /* 1=驻留时周期性(约2s)重扫行(蓝牙/附近扫描刷新用) */
void *ctx; /* 页面私有上下文 */
} sub_page_t;
/* 运行子页(阻塞到返回;返回 0)。由 wifi_page.c / bt_page.c 各自实现。 */
int meow_subpage_run(sub_page_t *p);
int run_wifi_page(void);
int run_bt_page(void);
/* chip 索引(⑥:第 5 个 = 电源菜单,点击唤起既有系统电源菜单 show_power_menu) */
@@ -586,6 +626,17 @@ void meow_sys_light(void);
void meow_sys_refresh(void);
void meow_toggle_panel(void);
void net_wifi_ssid(char *buf, int len);
/* M2.76:网络/蓝牙列表现拆分给 WiFi/蓝牙独立子页面用(原 static,改为跨模块暴露) */
void net_wifi_scan_trigger(void);
void net_bt_scan_trigger(void);
int net_wifi_info(char (*info)[48], int max);
int net_wifi_saved(meow_net_t *out, int max);
int net_wifi_scan(meow_net_t *out, int max);
int net_bt_paired(meow_net_t *out, int max);
int net_bt_scan(meow_net_t *out, int max);
int net_bt_connected(meow_net_t *out, int max);
int bt_role(char *desc, int len);
void net_bt_mode_str(char *buf, int len);
unsigned long long now_ms(void);
void paint_sb_clock(void);
void paint_sb_right(void);