import React, {memo, useEffect, useState} from 'react'; import {Keyboard, Pressable, StyleSheet, Text, View} from 'react-native'; import rpx from '@/utils/rpx'; import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; import MusicQueue from '@/core/musicQueue'; import {CircularProgressBase} from 'react-native-circular-progress-indicator'; import {ROUTE_PATH, useNavigate} from '@/entry/router'; import musicIsPaused from '@/utils/musicIsPaused'; import Color from 'color'; import ThemeText from '../base/themeText'; import {ImgAsset} from '@/constants/assetsConst'; import {useSafeAreaInsets} from 'react-native-safe-area-context'; import {showPanel} from '../panels/usePanel'; import FastImage from '../base/fastImage'; import useColors from '@/hooks/useColors'; import IconButton from '../base/iconButton'; function CircularPlayBtn() { const progress = MusicQueue.useProgress(); const musicState = MusicQueue.usePlaybackState(); const colors = useColors(); const isPaused = musicIsPaused(musicState); return ( { if (isPaused) { await MusicQueue.play(); } else { await MusicQueue.pause(); } }} /> ); } function MusicBar() { const musicItem = MusicQueue.useCurrentMusicItem(); const [showKeyboard, setKeyboardStatus] = useState(false); const navigate = useNavigate(); const colors = useColors(); const safeAreaInsets = useSafeAreaInsets(); useEffect(() => { const showSubscription = Keyboard.addListener('keyboardDidShow', () => { setKeyboardStatus(true); }); const hideSubscription = Keyboard.addListener('keyboardDidHide', () => { setKeyboardStatus(false); }); return () => { showSubscription.remove(); hideSubscription.remove(); }; }, []); return ( <> {musicItem && !showKeyboard && ( { navigate(ROUTE_PATH.MUSIC_DETAIL); }}> {musicItem?.title} {musicItem?.artist && ( {' '} -{musicItem.artist} )} { showPanel('PlayList'); }} style={[ style.actionIcon, {color: colors.musicBarText}, ]} /> )} ); } export default memo(MusicBar, () => true); const style = StyleSheet.create({ wrapper: { width: '100%', height: rpx(132), flexDirection: 'row', alignItems: 'center', paddingHorizontal: rpx(24), }, artworkWrapper: { height: rpx(120), width: rpx(120), justifyContent: 'center', }, textWrapper: { flexGrow: 1, flexShrink: 1, }, actionGroup: { width: rpx(200), justifyContent: 'flex-end', flexDirection: 'row', alignItems: 'center', }, actionIcon: { marginLeft: rpx(36), }, artworkImg: { width: rpx(96), height: rpx(96), borderRadius: rpx(48), }, });