Files
SmartSeniorHMOS/entry/src/main/ets/utils/FontScale.ts
T
CAPTAIN1275 baf307e9d5 chore(hmos): 导入生产环境鸿蒙工程
- 以 D:\SmartSenior 生产工程为源,纳入 AppScope、entry、cjagent、hvigor 及根配置
- 移除 build-profile.json5 的 signingConfigs(p12/p7b/cer 路径与加密口令)及 products.signingConfig 引用
- 不纳入本地与开发产物:local.properties、.idea、.hvigor、.codegenie、demo、backup_a2a_native、SESSION_LOG.md、build_err.txt、build/、oh_modules
- .gitignore 追加 .codegenie 与密钥文件通配(*.p12/*.p7b/*.cer/*.jks/*.keystore/*.pem)
2026-09-29 18:44:37 +08:00

90 lines
2.9 KiB
TypeScript

// 全局字体缩放工具(ArkTS 严格类型,无 any)
// 用于老人端大字显示:存 preferences + AppStorage
import { preferences } from '@kit.ArkData';
import { common } from '@kit.AbilityKit';
import { accessibility } from '@kit.AccessibilityKit';
const FONT_PREFS = 'FontPrefs';
const FONT_KEY = 'fontScale';
export type FontScaleLevel = 'system' | 'small' | 'normal' | 'large' | 'xlarge';
// 字体缩放选项
export interface FontScaleOption {
level: FontScaleLevel;
label: string;
}
// 各档位缩放倍数(system 表示跟随系统,用 fp 单位不额外缩放)
export const FONT_SCALE_MAP: Record<FontScaleLevel, number> = {
system: 1.0,
small: 1.0,
normal: 1.15,
large: 1.5,
xlarge: 1.9,
};
// 档位中文名
export const FONT_SCALE_LABELS: Array<FontScaleOption> = [
{ level: 'system', label: '跟随系统' },
{ level: 'small', label: '小' },
{ level: 'normal', label: '标准' },
{ level: 'large', label: '大' },
{ level: 'xlarge', label: '特大' },
];
// 读取当前缩放档位(默认跟随系统)
export async function loadFontScale(context: common.UIAbilityContext): Promise<FontScaleLevel> {
try {
const prefs = await preferences.getPreferences(context, FONT_PREFS);
const value = await prefs.get(FONT_KEY, 'system');
const level = typeof value === 'string' ? value as FontScaleLevel : 'system';
AppStorage.setOrCreate<FontScaleLevel>('fontScale', level);
return level;
} catch (err) {
return 'system';
}
}
// 设置缩放档位并持久化
export async function setFontScale(context: common.UIAbilityContext, level: FontScaleLevel): Promise<void> {
try {
const prefs = await preferences.getPreferences(context, FONT_PREFS);
await prefs.put(FONT_KEY, level);
await prefs.flush();
} catch (err) {
// ignore
}
AppStorage.setOrCreate<FontScaleLevel>('fontScale', level);
}
// 获取当前缩放倍数(同步,供页面文字应用)
export function getFontScale(): number {
const level = AppStorage.get<FontScaleLevel>('fontScale');
if (level && FONT_SCALE_MAP[level]) {
return FONT_SCALE_MAP[level];
}
return 1.0;
}
// 退出登录时恢复运行时字体为跟随系统(不清除持久化设置,老人重新登录后自动恢复)
export function resetFontScaleRuntime(): void {
AppStorage.setOrCreate<FontScaleLevel>('fontScale', 'system');
}
// 关怀模式:系统无障碍(读屏/TalkBack 类)开启时自动生效
// 初始化在 EntryAbility.onCreate 调用;组件用 @StorageProp('careMode') 响应
export function refreshCareMode(): boolean {
let care = false;
try {
care = accessibility.isOpenAccessibilitySync();
} catch (err) {
care = false;
}
AppStorage.setOrCreate<boolean>('careMode', care);
return care;
}
// 关怀模式额外字号加成倍数(在 FONT_SCALE_MAP 之上再乘)
export const CARE_MODE_EXTRA_SCALE = 1.2;