xref: /MusicFree/src/native/lyricUtil/index.ts (revision 268ffae051f9727ffd7aa44d5171e698a9dc4fd2)
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
42const LyricUtil: ILyricUtil = NativeModules.LyricUtil;
43
44const originalShowStatusBarLyric = LyricUtil.showStatusBarLyric;
45
46const showStatusBarLyric: ILyricUtil['showStatusBarLyric'] = async (
47    initLyric,
48    config,
49) => {
50    try {
51        await originalShowStatusBarLyric(initLyric, config);
52    } catch (e) {
53        Toast.warn('状态栏歌词开启失败,请到手机系统设置打开悬浮窗权限');
54        Config.set('setting.lyric.showStatusBarLyric', false);
55    }
56};
57
58LyricUtil.showStatusBarLyric = showStatusBarLyric;
59
60export default LyricUtil;
61