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