1bf6e62f2S猫头猫import React, {Fragment, useEffect, useState} from 'react'; 2*4060c00aS猫头猫import {Keyboard, Pressable, StyleSheet, Text, View} from 'react-native'; 3bf6e62f2S猫头猫import rpx from '@/utils/rpx'; 4bf6e62f2S猫头猫import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; 5242960d3S猫头猫import MusicQueue from '@/core/musicQueue'; 6*4060c00aS猫头猫import {Avatar, IconButton, useTheme} from 'react-native-paper'; 7bf6e62f2S猫头猫import {CircularProgressBase} from 'react-native-circular-progress-indicator'; 8bf6e62f2S猫头猫import {useNavigation} from '@react-navigation/native'; 9bf6e62f2S猫头猫import {ROUTE_PATH} from '@/entry/router'; 10bf6e62f2S猫头猫 11bf6e62f2S猫头猫import musicIsPaused from '@/utils/musicIsPaused'; 12378a6099S猫头猫import usePanel from '../panels/usePanel'; 13bf6e62f2S猫头猫import Color from 'color'; 1419dc08ecS猫头猫import ThemeText from '../base/themeText'; 151befdbcdS猫头猫import {ImgAsset} from '@/constants/assetsConst'; 16bf6e62f2S猫头猫 17*4060c00aS猫头猫export default function () { 18bf6e62f2S猫头猫 // const currentMusicState = useAtomValue(loadableCurrentMusicStateAtom); 19bf6e62f2S猫头猫 const musicItem = MusicQueue.useCurrentMusicItem(); 20bf6e62f2S猫头猫 const musicState = MusicQueue.usePlaybackState(); 2100d0309bS猫头猫 const [showKeyboard, setKeyboardStatus] = useState(false); 2208a8e62cS猫头猫 const {showPanel} = usePanel(); 23bf6e62f2S猫头猫 const navigation = useNavigation<any>(); 24bf6e62f2S猫头猫 const progress = MusicQueue.useProgress(); 25bf6e62f2S猫头猫 const {colors} = useTheme(); 26bf6e62f2S猫头猫 2700d0309bS猫头猫 useEffect(() => { 2800d0309bS猫头猫 const showSubscription = Keyboard.addListener('keyboardDidShow', () => { 2900d0309bS猫头猫 setKeyboardStatus(true); 3000d0309bS猫头猫 }); 3100d0309bS猫头猫 const hideSubscription = Keyboard.addListener('keyboardDidHide', () => { 3200d0309bS猫头猫 setKeyboardStatus(false); 3300d0309bS猫头猫 }); 3400d0309bS猫头猫 3500d0309bS猫头猫 return () => { 3600d0309bS猫头猫 showSubscription.remove(); 3700d0309bS猫头猫 hideSubscription.remove(); 3800d0309bS猫头猫 }; 3900d0309bS猫头猫 }, []); 4000d0309bS猫头猫 41bf6e62f2S猫头猫 return ( 42bf6e62f2S猫头猫 <Fragment> 4300d0309bS猫头猫 {musicItem && !showKeyboard && ( 44bf6e62f2S猫头猫 <Pressable 45bf6e62f2S猫头猫 style={[ 46bf6e62f2S猫头猫 style.wrapper, 47*4060c00aS猫头猫 { 48*4060c00aS猫头猫 backgroundColor: Color(colors.primary) 49*4060c00aS猫头猫 .alpha(0.66) 50*4060c00aS猫头猫 .toString(), 51*4060c00aS猫头猫 }, 52bf6e62f2S猫头猫 ]} 53bf6e62f2S猫头猫 onPress={() => { 54bf6e62f2S猫头猫 navigation.navigate(ROUTE_PATH.MUSIC_DETAIL); 55bf6e62f2S猫头猫 }}> 56bf6e62f2S猫头猫 <View style={style.artworkWrapper}> 57bf6e62f2S猫头猫 <Avatar.Image 58bf6e62f2S猫头猫 size={rpx(96)} 591befdbcdS猫头猫 source={ 601befdbcdS猫头猫 musicItem.artwork 611befdbcdS猫头猫 ? { 62bf6e62f2S猫头猫 uri: musicItem.artwork, 631befdbcdS猫头猫 } 641befdbcdS猫头猫 : ImgAsset.albumDefault 65*4060c00aS猫头猫 } 66*4060c00aS猫头猫 /> 67bf6e62f2S猫头猫 </View> 68bf6e62f2S猫头猫 <Text 69bf6e62f2S猫头猫 ellipsizeMode="tail" 70bf6e62f2S猫头猫 style={style.textWrapper} 71bf6e62f2S猫头猫 numberOfLines={1}> 72*4060c00aS猫头猫 <ThemeText fontSize="content"> 73*4060c00aS猫头猫 {musicItem.title} 74*4060c00aS猫头猫 </ThemeText> 75bf6e62f2S猫头猫 {musicItem?.artist && ( 76*4060c00aS猫头猫 <ThemeText 77*4060c00aS猫头猫 fontSize="description" 78*4060c00aS猫头猫 fontColor="secondary"> 791befdbcdS猫头猫 {' '} 801befdbcdS猫头猫 -{musicItem.artist} 811befdbcdS猫头猫 </ThemeText> 82bf6e62f2S猫头猫 )} 83bf6e62f2S猫头猫 </Text> 84bf6e62f2S猫头猫 <View style={style.actionGroup}> 85bf6e62f2S猫头猫 <CircularProgressBase 86bf6e62f2S猫头猫 activeStrokeWidth={rpx(4)} 87bf6e62f2S猫头猫 inActiveStrokeWidth={rpx(2)} 88bf6e62f2S猫头猫 inActiveStrokeOpacity={0.2} 89bf6e62f2S猫头猫 value={ 90bf6e62f2S猫头猫 progress?.duration 91*4060c00aS猫头猫 ? (100 * progress.position) / 92*4060c00aS猫头猫 progress.duration 93bf6e62f2S猫头猫 : 0 94bf6e62f2S猫头猫 } 95bf6e62f2S猫头猫 duration={100} 96bf6e62f2S猫头猫 radius={rpx(36)} 97bf6e62f2S猫头猫 activeStrokeColor={colors.text} 98*4060c00aS猫头猫 inActiveStrokeColor={Color(colors.text) 99*4060c00aS猫头猫 .alpha(0.5) 100*4060c00aS猫头猫 .toString()}> 101bf6e62f2S猫头猫 {musicIsPaused(musicState) ? ( 102bf6e62f2S猫头猫 <IconButton 103bf6e62f2S猫头猫 icon="play" 104bf6e62f2S猫头猫 size={rpx(48)} 105bf6e62f2S猫头猫 onPress={async () => { 106bf6e62f2S猫头猫 await MusicQueue.play(); 107bf6e62f2S猫头猫 }} 108bf6e62f2S猫头猫 /> 109bf6e62f2S猫头猫 ) : ( 110bf6e62f2S猫头猫 <IconButton 111bf6e62f2S猫头猫 icon="pause" 112bf6e62f2S猫头猫 size={rpx(48)} 113bf6e62f2S猫头猫 onPress={async () => { 114bf6e62f2S猫头猫 await MusicQueue.pause(); 115bf6e62f2S猫头猫 }} 116bf6e62f2S猫头猫 /> 117bf6e62f2S猫头猫 )} 118bf6e62f2S猫头猫 </CircularProgressBase> 119bf6e62f2S猫头猫 120bf6e62f2S猫头猫 <Icon 121bf6e62f2S猫头猫 name="playlist-music" 122bf6e62f2S猫头猫 size={rpx(56)} 123bf6e62f2S猫头猫 onPress={() => { 124bf6e62f2S猫头猫 showPanel('PlayList'); 125bf6e62f2S猫头猫 }} 126*4060c00aS猫头猫 style={[style.actionIcon, {color: colors.text}]} 127*4060c00aS猫头猫 /> 128bf6e62f2S猫头猫 </View> 129bf6e62f2S猫头猫 </Pressable> 130bf6e62f2S猫头猫 )} 131bf6e62f2S猫头猫 </Fragment> 132bf6e62f2S猫头猫 ); 133bf6e62f2S猫头猫} 134bf6e62f2S猫头猫 135bf6e62f2S猫头猫const style = StyleSheet.create({ 136bf6e62f2S猫头猫 wrapper: { 137bf6e62f2S猫头猫 width: rpx(750), 138bf6e62f2S猫头猫 height: rpx(120), 139bf6e62f2S猫头猫 flexDirection: 'row', 140bf6e62f2S猫头猫 alignItems: 'center', 141bf6e62f2S猫头猫 paddingHorizontal: rpx(24), 142bf6e62f2S猫头猫 }, 143bf6e62f2S猫头猫 artworkWrapper: { 144bf6e62f2S猫头猫 height: rpx(120), 145bf6e62f2S猫头猫 width: rpx(120), 146bf6e62f2S猫头猫 }, 147bf6e62f2S猫头猫 textWrapper: { 148bf6e62f2S猫头猫 flexGrow: 1, 149bf6e62f2S猫头猫 maxWidth: rpx(382), 150bf6e62f2S猫头猫 }, 151bf6e62f2S猫头猫 actionGroup: { 152bf6e62f2S猫头猫 width: rpx(200), 153bf6e62f2S猫头猫 justifyContent: 'flex-end', 154bf6e62f2S猫头猫 flexDirection: 'row', 155bf6e62f2S猫头猫 alignItems: 'center', 156bf6e62f2S猫头猫 }, 157bf6e62f2S猫头猫 actionIcon: { 158bf6e62f2S猫头猫 marginLeft: rpx(36), 159bf6e62f2S猫头猫 }, 160bf6e62f2S猫头猫}); 161