1bf6e62f2S猫头猫import React, {Fragment, useEffect, useState} from 'react'; 2*00d0309bS猫头猫import { 3*00d0309bS猫头猫 Keyboard, 4*00d0309bS猫头猫 Pressable, 5*00d0309bS猫头猫 StyleSheet, 6*00d0309bS猫头猫 Text, 7*00d0309bS猫头猫 ToastAndroid, 8*00d0309bS猫头猫 View, 9*00d0309bS猫头猫} from 'react-native'; 10bf6e62f2S猫头猫import rpx from '@/utils/rpx'; 11bf6e62f2S猫头猫import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; 12bf6e62f2S猫头猫import useTextColor from '@/hooks/useTextColor'; 13bf6e62f2S猫头猫import MusicQueue from '@/common/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(); 30*00d0309bS猫头猫 const [showKeyboard, setKeyboardStatus] = useState(false); 3108a8e62cS猫头猫 const {showPanel} = usePanel(); 32bf6e62f2S猫头猫 const navigation = useNavigation<any>(); 33bf6e62f2S猫头猫 const progress = MusicQueue.useProgress(); 34bf6e62f2S猫头猫 const {colors} = useTheme(); 35bf6e62f2S猫头猫 36*00d0309bS猫头猫 console.log(musicItem, showKeyboard); 37*00d0309bS猫头猫 38*00d0309bS猫头猫 useEffect(() => { 39*00d0309bS猫头猫 const showSubscription = Keyboard.addListener('keyboardDidShow', () => { 40*00d0309bS猫头猫 setKeyboardStatus(true); 41*00d0309bS猫头猫 }); 42*00d0309bS猫头猫 const hideSubscription = Keyboard.addListener('keyboardDidHide', () => { 43*00d0309bS猫头猫 setKeyboardStatus(false); 44*00d0309bS猫头猫 }); 45*00d0309bS猫头猫 46*00d0309bS猫头猫 return () => { 47*00d0309bS猫头猫 showSubscription.remove(); 48*00d0309bS猫头猫 hideSubscription.remove(); 49*00d0309bS猫头猫 }; 50*00d0309bS猫头猫 }, []); 51*00d0309bS猫头猫 52bf6e62f2S猫头猫 return ( 53bf6e62f2S猫头猫 <Fragment> 54*00d0309bS猫头猫 {musicItem && !showKeyboard && ( 55bf6e62f2S猫头猫 <Pressable 56bf6e62f2S猫头猫 style={[ 57bf6e62f2S猫头猫 style.wrapper, 5808a8e62cS猫头猫 {backgroundColor: Color(colors.primary).alpha(0.66).toString()}, 59bf6e62f2S猫头猫 ]} 60bf6e62f2S猫头猫 onPress={() => { 61bf6e62f2S猫头猫 navigation.navigate(ROUTE_PATH.MUSIC_DETAIL); 62bf6e62f2S猫头猫 }}> 63bf6e62f2S猫头猫 <View style={style.artworkWrapper}> 64bf6e62f2S猫头猫 <Avatar.Image 65bf6e62f2S猫头猫 size={rpx(96)} 661befdbcdS猫头猫 source={ 671befdbcdS猫头猫 musicItem.artwork 681befdbcdS猫头猫 ? { 69bf6e62f2S猫头猫 uri: musicItem.artwork, 701befdbcdS猫头猫 } 711befdbcdS猫头猫 : ImgAsset.albumDefault 721befdbcdS猫头猫 }></Avatar.Image> 73bf6e62f2S猫头猫 </View> 74bf6e62f2S猫头猫 <Text 75bf6e62f2S猫头猫 ellipsizeMode="tail" 76bf6e62f2S猫头猫 style={style.textWrapper} 77bf6e62f2S猫头猫 numberOfLines={1}> 781befdbcdS猫头猫 <ThemeText fontSize="content">{musicItem.title}</ThemeText> 79bf6e62f2S猫头猫 {musicItem?.artist && ( 801befdbcdS猫头猫 <ThemeText fontSize="description" fontColor="secondary"> 811befdbcdS猫头猫 {' '} 821befdbcdS猫头猫 -{musicItem.artist} 831befdbcdS猫头猫 </ThemeText> 84bf6e62f2S猫头猫 )} 85bf6e62f2S猫头猫 </Text> 86bf6e62f2S猫头猫 <View style={style.actionGroup}> 87bf6e62f2S猫头猫 <CircularProgressBase 88bf6e62f2S猫头猫 activeStrokeWidth={rpx(4)} 89bf6e62f2S猫头猫 inActiveStrokeWidth={rpx(2)} 90bf6e62f2S猫头猫 inActiveStrokeOpacity={0.2} 91bf6e62f2S猫头猫 value={ 92bf6e62f2S猫头猫 progress?.duration 93bf6e62f2S猫头猫 ? (100 * progress.position) / progress.duration 94bf6e62f2S猫头猫 : 0 95bf6e62f2S猫头猫 } 96bf6e62f2S猫头猫 duration={100} 97bf6e62f2S猫头猫 radius={rpx(36)} 98bf6e62f2S猫头猫 activeStrokeColor={colors.text} 99bf6e62f2S猫头猫 inActiveStrokeColor={Color(colors.text).alpha(0.5).toString()}> 100bf6e62f2S猫头猫 {musicIsPaused(musicState) ? ( 101bf6e62f2S猫头猫 <IconButton 102bf6e62f2S猫头猫 icon="play" 103bf6e62f2S猫头猫 size={rpx(48)} 104bf6e62f2S猫头猫 onPress={async () => { 105bf6e62f2S猫头猫 await MusicQueue.play(); 106bf6e62f2S猫头猫 }} 107bf6e62f2S猫头猫 /> 108bf6e62f2S猫头猫 ) : ( 109bf6e62f2S猫头猫 <IconButton 110bf6e62f2S猫头猫 icon="pause" 111bf6e62f2S猫头猫 size={rpx(48)} 112bf6e62f2S猫头猫 onPress={async () => { 113bf6e62f2S猫头猫 await MusicQueue.pause(); 114bf6e62f2S猫头猫 }} 115bf6e62f2S猫头猫 /> 116bf6e62f2S猫头猫 )} 117bf6e62f2S猫头猫 </CircularProgressBase> 118bf6e62f2S猫头猫 119bf6e62f2S猫头猫 <Icon 120bf6e62f2S猫头猫 name="playlist-music" 121bf6e62f2S猫头猫 size={rpx(56)} 122bf6e62f2S猫头猫 onPress={() => { 123bf6e62f2S猫头猫 showPanel('PlayList'); 124bf6e62f2S猫头猫 }} 125bf6e62f2S猫头猫 style={[style.actionIcon, {color: colors.text}]}></Icon> 126bf6e62f2S猫头猫 </View> 127bf6e62f2S猫头猫 </Pressable> 128bf6e62f2S猫头猫 )} 129bf6e62f2S猫头猫 </Fragment> 130bf6e62f2S猫头猫 ); 131bf6e62f2S猫头猫} 132bf6e62f2S猫头猫 133bf6e62f2S猫头猫const style = StyleSheet.create({ 134bf6e62f2S猫头猫 wrapper: { 135bf6e62f2S猫头猫 width: rpx(750), 136bf6e62f2S猫头猫 height: rpx(120), 137bf6e62f2S猫头猫 flexDirection: 'row', 138bf6e62f2S猫头猫 alignItems: 'center', 139bf6e62f2S猫头猫 paddingHorizontal: rpx(24), 140bf6e62f2S猫头猫 }, 141bf6e62f2S猫头猫 artworkWrapper: { 142bf6e62f2S猫头猫 height: rpx(120), 143bf6e62f2S猫头猫 width: rpx(120), 144bf6e62f2S猫头猫 }, 145bf6e62f2S猫头猫 textWrapper: { 146bf6e62f2S猫头猫 flexGrow: 1, 147bf6e62f2S猫头猫 maxWidth: rpx(382), 148bf6e62f2S猫头猫 }, 149bf6e62f2S猫头猫 actionGroup: { 150bf6e62f2S猫头猫 width: rpx(200), 151bf6e62f2S猫头猫 justifyContent: 'flex-end', 152bf6e62f2S猫头猫 flexDirection: 'row', 153bf6e62f2S猫头猫 alignItems: 'center', 154bf6e62f2S猫头猫 }, 155bf6e62f2S猫头猫 actionIcon: { 156bf6e62f2S猫头猫 marginLeft: rpx(36), 157bf6e62f2S猫头猫 }, 158bf6e62f2S猫头猫}); 159