xref: /MusicFree/src/native/lyricUtil/index.ts (revision 6613e77203923e5b1742a49281bfa5de03fc1440)
1import Config from '@/core/config';
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.set('setting.lyric.showStatusBarLyric', false);
61    }
62};
63
64LyricUtil.showStatusBarLyric = showStatusBarLyric;
65
66export default LyricUtil;
67