mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-09-22 18:08:04 +00:00
原有 cmd/ohos/HomeAgent 是未入库的鸿蒙原生 ArkTS 工程,本次随改动一并入库, 保证他人 clone 后可直接编译(含 .gitignore 排除 build/oh_modules/签名材料, 提供 build-profile.json5.example 模板)。 本次功能改动(与 WebUI / GUI 三端对齐): - /chat/history 首屏只拉最新 CHAT_PAGE_SIZE(40) 条,1.26MB → 48.5KB - 抽出 parseHistoryPayload() 复用解析,记录 chatOffset/chatHasMore - 新增 loadOlderChat():向上滚动触顶(yOffset<60)懒加载更早页 - 工具调用 args/result 与 reasoning_content 完整还原,不做裁剪 构建验证:hvigorw assembleHap BUILD SUCCESSFUL(7.8s,ChatPage 零告警)
56 lines
1.4 KiB
Plaintext
56 lines
1.4 KiB
Plaintext
/**
|
||
* 导航栏显隐控制器(跨页面共享单例)。
|
||
* 规则:任何页面滚动中隐藏底部导航,滚动停止(松手/fling 结束)后重新显示。
|
||
*/
|
||
type NavListener = (visible: boolean) => void;
|
||
|
||
export class NavBarController {
|
||
private static instance: NavBarController | null = null;
|
||
private visible: boolean = true;
|
||
private listeners: NavListener[] = [];
|
||
|
||
static shared(): NavBarController {
|
||
if (NavBarController.instance === null) {
|
||
NavBarController.instance = new NavBarController();
|
||
}
|
||
return NavBarController.instance;
|
||
}
|
||
|
||
isVisible(): boolean {
|
||
return this.visible;
|
||
}
|
||
|
||
setVisible(v: boolean): void {
|
||
if (this.visible !== v) {
|
||
this.visible = v;
|
||
AppStorage.setOrCreate<boolean>('navVisible', v);
|
||
this.notify();
|
||
}
|
||
}
|
||
|
||
addListener(l: NavListener): void {
|
||
this.listeners.push(l);
|
||
}
|
||
|
||
private notify(): void {
|
||
for (let i = 0; i < this.listeners.length; i++) {
|
||
this.listeners[i](this.visible);
|
||
}
|
||
}
|
||
}
|
||
|
||
export const navBar: NavBarController = NavBarController.shared();
|
||
|
||
/**
|
||
* 页面 Scroll.onDidScroll 的统一处理:
|
||
* Scroll/Fling 状态(手指拖动或惯性滚动)隐藏导航栏,
|
||
* Idle(松手或惯性结束)重新显示。
|
||
*/
|
||
export function handleNavOnScroll(state: ScrollState): void {
|
||
if (state === ScrollState.Idle) {
|
||
navBar.setVisible(true);
|
||
} else {
|
||
navBar.setVisible(false);
|
||
}
|
||
}
|