1bf6e62f2S猫头猫import React, {Fragment, useEffect, useState} from 'react'; 200d0309bS猫头猫import { 300d0309bS猫头猫 Keyboard, 400d0309bS猫头猫 Pressable, 500d0309bS猫头猫 StyleSheet, 600d0309bS猫头猫 Text, 700d0309bS猫头猫 ToastAndroid, 800d0309bS猫头猫 View, 900d0309bS猫头猫} from 'react-native'; 10bf6e62f2S猫头猫import rpx from '@/utils/rpx'; 11bf6e62f2S猫头猫import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; 12bf6e62f2S猫头猫import useTextColor from '@/hooks/useTextColor'; 13*242960d3S猫头猫import MusicQueue from '@/core/musicQueue'; 14bf6e62f2S猫头猫import {Avatar, IconButton, Portal, useTheme} from 'react-native-paper'; 15bf6e62f2S猫头猫import {CircularProgressBase} from 'react-native-circular-progress-indicator'; 16bf6e62f2S猫头猫import {useNavigation} from '@react-navigation/native'; 17bf6e62f2S猫头猫import {ROUTE_PATH} from '@/entry/router'; 18bf6e62f2S猫头猫 19bf6e62f2S猫头猫import musicIsPaused from '@/utils/musicIsPaused'; 20378a6099S猫头猫import usePanel from '../panels/usePanel'; 21bf6e62f2S猫头猫import Color from 'color'; 2219dc08ecS猫头猫import ThemeText from '../base/themeText'; 231befdbcdS猫头猫import {ImgAsset} from '@/constants/assetsConst'; 24bf6e62f2S猫头猫 25bf6e62f2S猫头猫interface IProps {} 26bf6e62f2S猫头猫export default function (props: IProps) { 27bf6e62f2S猫头猫 // const currentMusicState = useAtomValue(loadableCurrentMusicStateAtom); 28bf6e62f2S猫头猫 const musicItem = MusicQueue.useCurrentMusicItem(); 29bf6e62f2S猫头猫 const musicState = MusicQueue.usePlaybackState(); 3000d0309bS猫头猫 const [showKeyboard, setKeyboardStatus] = useState(false); 3108a8e62cS猫头猫 const {showPanel} = usePanel(); 32bf6e62f2S猫头猫 const navigation = useNavigation<any>(); 33bf6e62f2S猫头猫 const progress = MusicQueue.useProgress(); 34bf6e62f2S猫头猫 const {colors} = useTheme(); 35bf6e62f2S猫头猫 3600d0309bS猫头猫 3700d0309bS猫头猫 useEffect(() => { 3800d0309bS猫头猫 const showSubscription = Keyboard.addListener('keyboardDidShow', () => { 3900d0309bS猫头猫 setKeyboardStatus(true); 4000d0309bS猫头猫 }); 4100d0309bS猫头猫 const hideSubscription = Keyboard.addListener('keyboardDidHide', () => { 4200d0309bS猫头猫 setKeyboardStatus(false); 4300d0309bS猫头猫 }); 4400d0309bS猫头猫 4500d0309bS猫头猫 return () => { 4600d0309bS猫头猫 showSubscription.remove(); 4700d0309bS猫头猫 hideSubscription.remove(); 4800d0309bS猫头猫 }; 4900d0309bS猫头猫 }, []); 5000d0309bS猫头猫 51bf6e62f2S猫头猫 return ( 52bf6e62f2S猫头猫 <Fragment> 5300d0309bS猫头猫 {musicItem && !showKeyboard && ( 54bf6e62f2S猫头猫 <Pressable 55bf6e62f2S猫头猫 style={[ 56bf6e62f2S猫头猫 style.wrapper, 5708a8e62cS猫头猫 {backgroundColor: Color(colors.primary).alpha(0.66).toString()}, 58bf6e62f2S猫头猫 ]} 59bf6e62f2S猫头猫 onPress={() => { 60bf6e62f2S猫头猫 navigation.navigate(ROUTE_PATH.MUSIC_DETAIL); 61bf6e62f2S猫头猫 }}> 62bf6e62f2S猫头猫 <View style={style.artworkWrapper}> 63bf6e62f2S猫头猫 <Avatar.Image 64bf6e62f2S猫头猫 size={rpx(96)} 651befdbcdS猫头猫 source={ 661befdbcdS猫头猫 musicItem.artwork 671befdbcdS猫头猫 ? { 68bf6e62f2S猫头猫 uri: musicItem.artwork, 691befdbcdS猫头猫 } 701befdbcdS猫头猫 : ImgAsset.albumDefault 711befdbcdS猫头猫 }></Avatar.Image> 72bf6e62f2S猫头猫 </View> 73bf6e62f2S猫头猫 <Text 74bf6e62f2S猫头猫 ellipsizeMode="tail" 75bf6e62f2S猫头猫 style={style.textWrapper} 76bf6e62f2S猫头猫 numberOfLines={1}> 771befdbcdS猫头猫 <ThemeText fontSize="content">{musicItem.title}</ThemeText> 78bf6e62f2S猫头猫 {musicItem?.artist && ( 791befdbcdS猫头猫 <ThemeText fontSize="description" fontColor="secondary"> 801befdbcdS猫头猫 {' '} 811befdbcdS猫头猫 -{musicItem.artist} 821befdbcdS猫头猫 </ThemeText> 83bf6e62f2S猫头猫 )} 84bf6e62f2S猫头猫 </Text> 85bf6e62f2S猫头猫 <View style={style.actionGroup}> 86bf6e62f2S猫头猫 <CircularProgressBase 87bf6e62f2S猫头猫 activeStrokeWidth={rpx(4)} 88bf6e62f2S猫头猫 inActiveStrokeWidth={rpx(2)} 89bf6e62f2S猫头猫 inActiveStrokeOpacity={0.2} 90bf6e62f2S猫头猫 value={ 91bf6e62f2S猫头猫 progress?.duration 92bf6e62f2S猫头猫 ? (100 * progress.position) / progress.duration 93bf6e62f2S猫头猫 : 0 94bf6e62f2S猫头猫 } 95bf6e62f2S猫头猫 duration={100} 96bf6e62f2S猫头猫 radius={rpx(36)} 97bf6e62f2S猫头猫 activeStrokeColor={colors.text} 98bf6e62f2S猫头猫 inActiveStrokeColor={Color(colors.text).alpha(0.5).toString()}> 99bf6e62f2S猫头猫 {musicIsPaused(musicState) ? ( 100bf6e62f2S猫头猫 <IconButton 101bf6e62f2S猫头猫 icon="play" 102bf6e62f2S猫头猫 size={rpx(48)} 103bf6e62f2S猫头猫 onPress={async () => { 104bf6e62f2S猫头猫 await MusicQueue.play(); 105bf6e62f2S猫头猫 }} 106bf6e62f2S猫头猫 /> 107bf6e62f2S猫头猫 ) : ( 108bf6e62f2S猫头猫 <IconButton 109bf6e62f2S猫头猫 icon="pause" 110bf6e62f2S猫头猫 size={rpx(48)} 111bf6e62f2S猫头猫 onPress={async () => { 112bf6e62f2S猫头猫 await MusicQueue.pause(); 113bf6e62f2S猫头猫 }} 114bf6e62f2S猫头猫 /> 115bf6e62f2S猫头猫 )} 116bf6e62f2S猫头猫 </CircularProgressBase> 117bf6e62f2S猫头猫 118bf6e62f2S猫头猫 <Icon 119bf6e62f2S猫头猫 name="playlist-music" 120bf6e62f2S猫头猫 size={rpx(56)} 121bf6e62f2S猫头猫 onPress={() => { 122bf6e62f2S猫头猫 showPanel('PlayList'); 123bf6e62f2S猫头猫 }} 124bf6e62f2S猫头猫 style={[style.actionIcon, {color: colors.text}]}></Icon> 125bf6e62f2S猫头猫 </View> 126bf6e62f2S猫头猫 </Pressable> 127bf6e62f2S猫头猫 )} 128bf6e62f2S猫头猫 </Fragment> 129bf6e62f2S猫头猫 ); 130bf6e62f2S猫头猫} 131bf6e62f2S猫头猫 132bf6e62f2S猫头猫const style = StyleSheet.create({ 133bf6e62f2S猫头猫 wrapper: { 134bf6e62f2S猫头猫 width: rpx(750), 135bf6e62f2S猫头猫 height: rpx(120), 136bf6e62f2S猫头猫 flexDirection: 'row', 137bf6e62f2S猫头猫 alignItems: 'center', 138bf6e62f2S猫头猫 paddingHorizontal: rpx(24), 139bf6e62f2S猫头猫 }, 140bf6e62f2S猫头猫 artworkWrapper: { 141bf6e62f2S猫头猫 height: rpx(120), 142bf6e62f2S猫头猫 width: rpx(120), 143bf6e62f2S猫头猫 }, 144bf6e62f2S猫头猫 textWrapper: { 145bf6e62f2S猫头猫 flexGrow: 1, 146bf6e62f2S猫头猫 maxWidth: rpx(382), 147bf6e62f2S猫头猫 }, 148bf6e62f2S猫头猫 actionGroup: { 149bf6e62f2S猫头猫 width: rpx(200), 150bf6e62f2S猫头猫 justifyContent: 'flex-end', 151bf6e62f2S猫头猫 flexDirection: 'row', 152bf6e62f2S猫头猫 alignItems: 'center', 153bf6e62f2S猫头猫 }, 154bf6e62f2S猫头猫 actionIcon: { 155bf6e62f2S猫头猫 marginLeft: rpx(36), 156bf6e62f2S猫头猫 }, 157bf6e62f2S猫头猫}); 158