xref: /MusicFree/src/native/lyricUtil/index.ts (revision 41ddce918e1138d8f16e522cc7c19ac86ceca698)
1import Config from "@/core/config.ts";
2import Toast from "@/utils/toast";
3import { NativeModule, NativeModules } from "react-native";
4import { errorLog } from "@/utils/log.ts";
5
6export enum NativeTextAlignment {
7    // 左对齐
8    LEFT = 3,
9    // 右对齐
10    RIGHT = 5,
11    // 居中
12    CENTER = 17,
13}
14
15// 状态栏歌词的工具
16interface ILyricUtil extends NativeModule {
17    /** 显示状态栏歌词 */
18    showStatusBarLyric: (
19        initLyric?: string,
20        config?: Record<string, any>,
21    ) => Promise<void>;
22    /** 隐藏状态栏歌词 */
23    hideStatusBarLyric: () => Promise<void>;
24    /** 设置歌词文本 */
25    setStatusBarLyricText: (lyric: string) => Promise<void>;
26    /** 设置距离顶部的距离 */
27    setStatusBarLyricTop: (percent: number) => Promise<void>;
28    /** 设置距离左部的距离 */
29    setStatusBarLyricLeft: (percent: number) => Promise<void>;
30    /** 设置宽度 */
31    setStatusBarLyricWidth: (percent: number) => Promise<void>;
32    /** 设置字体 */
33    setStatusBarLyricFontSize: (fontSize: number) => Promise<void>;
34    /** 设置对齐 */
35    setStatusBarLyricAlign: (alignment: NativeTextAlignment) => Promise<void>;
36    /** 设置颜色 */
37    setStatusBarColors: (
38        textColor: string | null,
39        backgroundColor: string | null,
40    ) => Promise<void>;
41    /** 检查权限 */
42    checkSystemAlertPermission: () => Promise<boolean>;
43    /** 请求悬浮窗 */
44    requestSystemAlertPermission: () => Promise<boolean>;
45}
46
47const LyricUtil: ILyricUtil = NativeModules.LyricUtil;
48
49const originalShowStatusBarLyric = LyricUtil.showStatusBarLyric;
50
51const showStatusBarLyric: ILyricUtil['showStatusBarLyric'] = async (
52    initLyric,
53    config,
54) => {
55    try {
56        await originalShowStatusBarLyric(initLyric, config);
57    } catch (e) {
58        errorLog('状态栏歌词开启失败', e);
59        Toast.warn('状态栏歌词开启失败,请到手机系统设置打开悬浮窗权限');
60        Config.setConfig('lyric.showStatusBarLyric', false);
61    }
62};
63
64LyricUtil.showStatusBarLyric = showStatusBarLyric;
65
66export default LyricUtil;
67