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