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