xref: /MusicFree/src/native/lyricUtil/index.ts (revision 15900d057ad4df766b2f9ea5b48f92a8ce2664db)
1ed3e0db2S猫头猫import Config from '@/core/config';
2ed3e0db2S猫头猫import Toast from '@/utils/toast';
3689db039S猫头猫import {NativeModule, NativeModules} from 'react-native';
4689db039S猫头猫
557277364S猫头猫export enum NativeTextAlignment {
657277364S猫头猫    // 左对齐
757277364S猫头猫    LEFT = 3,
857277364S猫头猫    // 右对齐
957277364S猫头猫    RIGHT = 5,
1057277364S猫头猫    // 居中
1157277364S猫头猫    CENTER = 17,
1257277364S猫头猫}
1357277364S猫头猫
14689db039S猫头猫// 状态栏歌词的工具
15689db039S猫头猫interface ILyricUtil extends NativeModule {
16689db039S猫头猫    /** 显示状态栏歌词 */
170be848bcS猫头猫    showStatusBarLyric: (
180be848bcS猫头猫        initLyric?: string,
190be848bcS猫头猫        config?: Record<string, any>,
200be848bcS猫头猫    ) => Promise<void>;
21689db039S猫头猫    /** 隐藏状态栏歌词 */
22689db039S猫头猫    hideStatusBarLyric: () => Promise<void>;
2357277364S猫头猫    /** 设置歌词文本 */
2457277364S猫头猫    setStatusBarLyricText: (lyric: string) => Promise<void>;
2557277364S猫头猫    /** 设置距离顶部的距离 */
2657277364S猫头猫    setStatusBarLyricTop: (percent: number) => Promise<void>;
2757277364S猫头猫    /** 设置距离左部的距离 */
2857277364S猫头猫    setStatusBarLyricLeft: (percent: number) => Promise<void>;
2957277364S猫头猫    /** 设置宽度 */
3057277364S猫头猫    setStatusBarLyricWidth: (percent: number) => Promise<void>;
3157277364S猫头猫    /** 设置字体 */
3257277364S猫头猫    setStatusBarLyricFontSize: (fontSize: number) => Promise<void>;
3357277364S猫头猫    /** 设置对齐 */
3457277364S猫头猫    setStatusBarLyricAlign: (alignment: NativeTextAlignment) => Promise<void>;
3557277364S猫头猫    /** 设置颜色 */
3657277364S猫头猫    setStatusBarColors: (
3757277364S猫头猫        textColor: string | null,
3857277364S猫头猫        backgroundColor: string | null,
3957277364S猫头猫    ) => Promise<void>;
40*15900d05S猫头猫    /** 检查权限 */
41*15900d05S猫头猫    checkSystemAlertPermission: () => Promise<boolean>;
42*15900d05S猫头猫    /** 请求悬浮窗 */
43*15900d05S猫头猫    requestSystemAlertPermission: () => Promise<boolean>;
44689db039S猫头猫}
45689db039S猫头猫
46689db039S猫头猫const LyricUtil: ILyricUtil = NativeModules.LyricUtil;
47689db039S猫头猫
48ed3e0db2S猫头猫const originalShowStatusBarLyric = LyricUtil.showStatusBarLyric;
49ed3e0db2S猫头猫
50ed3e0db2S猫头猫const showStatusBarLyric: ILyricUtil['showStatusBarLyric'] = async (
51ed3e0db2S猫头猫    initLyric,
52ed3e0db2S猫头猫    config,
53ed3e0db2S猫头猫) => {
54ed3e0db2S猫头猫    try {
55b3a3a048S猫头猫        await originalShowStatusBarLyric(initLyric, config);
56ed3e0db2S猫头猫    } catch (e) {
57ed3e0db2S猫头猫        Toast.warn('状态栏歌词开启失败,请到手机系统设置打开悬浮窗权限');
58ed3e0db2S猫头猫        Config.set('setting.lyric.showStatusBarLyric', false);
59ed3e0db2S猫头猫    }
60ed3e0db2S猫头猫};
61ed3e0db2S猫头猫
62ed3e0db2S猫头猫LyricUtil.showStatusBarLyric = showStatusBarLyric;
63ed3e0db2S猫头猫
64689db039S猫头猫export default LyricUtil;
65