1bf6e62f2S猫头猫import React, {Fragment, useEffect, useState} from 'react'; 2bf6e62f2S猫头猫import {Pressable, StyleSheet, Text, ToastAndroid, View} from 'react-native'; 3bf6e62f2S猫头猫import rpx from '@/utils/rpx'; 4bf6e62f2S猫头猫import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; 5bf6e62f2S猫头猫import useTextColor from '@/hooks/useTextColor'; 6bf6e62f2S猫头猫import MusicQueue from '@/common/musicQueue'; 7bf6e62f2S猫头猫import {Avatar, IconButton, Portal, useTheme} from 'react-native-paper'; 8bf6e62f2S猫头猫import {CircularProgressBase} from 'react-native-circular-progress-indicator'; 9bf6e62f2S猫头猫import {useNavigation} from '@react-navigation/native'; 10bf6e62f2S猫头猫import {ROUTE_PATH} from '@/entry/router'; 11bf6e62f2S猫头猫 12bf6e62f2S猫头猫import musicIsPaused from '@/utils/musicIsPaused'; 1308a8e62cS猫头猫import usePanel from '../panels/usePanelShow'; 14bf6e62f2S猫头猫import Color from 'color'; 15*19dc08ecS猫头猫import ThemeText from '../base/themeText'; 161befdbcdS猫头猫import {ImgAsset} from '@/constants/assetsConst'; 17bf6e62f2S猫头猫 18bf6e62f2S猫头猫interface IProps {} 19bf6e62f2S猫头猫export default function (props: IProps) { 20bf6e62f2S猫头猫 // const currentMusicState = useAtomValue(loadableCurrentMusicStateAtom); 21bf6e62f2S猫头猫 const musicItem = MusicQueue.useCurrentMusicItem(); 22bf6e62f2S猫头猫 const musicState = MusicQueue.usePlaybackState(); 2308a8e62cS猫头猫 const {showPanel} = usePanel(); 24bf6e62f2S猫头猫 const navigation = useNavigation<any>(); 25bf6e62f2S猫头猫 const progress = MusicQueue.useProgress(); 26bf6e62f2S猫头猫 const {colors} = useTheme(); 27bf6e62f2S猫头猫 28bf6e62f2S猫头猫 return ( 29bf6e62f2S猫头猫 <Fragment> 30bf6e62f2S猫头猫 {musicItem && ( 31bf6e62f2S猫头猫 <Pressable 32bf6e62f2S猫头猫 style={[ 33bf6e62f2S猫头猫 style.wrapper, 3408a8e62cS猫头猫 {backgroundColor: Color(colors.primary).alpha(0.66).toString()}, 35bf6e62f2S猫头猫 ]} 36bf6e62f2S猫头猫 onPress={() => { 37bf6e62f2S猫头猫 navigation.navigate(ROUTE_PATH.MUSIC_DETAIL); 38bf6e62f2S猫头猫 }}> 39bf6e62f2S猫头猫 <View style={style.artworkWrapper}> 40bf6e62f2S猫头猫 <Avatar.Image 41bf6e62f2S猫头猫 size={rpx(96)} 421befdbcdS猫头猫 source={ 431befdbcdS猫头猫 musicItem.artwork 441befdbcdS猫头猫 ? { 45bf6e62f2S猫头猫 uri: musicItem.artwork, 461befdbcdS猫头猫 } 471befdbcdS猫头猫 : ImgAsset.albumDefault 481befdbcdS猫头猫 }></Avatar.Image> 49bf6e62f2S猫头猫 </View> 50bf6e62f2S猫头猫 <Text 51bf6e62f2S猫头猫 ellipsizeMode="tail" 52bf6e62f2S猫头猫 style={style.textWrapper} 53bf6e62f2S猫头猫 numberOfLines={1}> 541befdbcdS猫头猫 <ThemeText fontSize="content">{musicItem.title}</ThemeText> 55bf6e62f2S猫头猫 {musicItem?.artist && ( 561befdbcdS猫头猫 <ThemeText fontSize="description" fontColor="secondary"> 571befdbcdS猫头猫 {' '} 581befdbcdS猫头猫 -{musicItem.artist} 591befdbcdS猫头猫 </ThemeText> 60bf6e62f2S猫头猫 )} 61bf6e62f2S猫头猫 </Text> 62bf6e62f2S猫头猫 <View style={style.actionGroup}> 63bf6e62f2S猫头猫 <CircularProgressBase 64bf6e62f2S猫头猫 activeStrokeWidth={rpx(4)} 65bf6e62f2S猫头猫 inActiveStrokeWidth={rpx(2)} 66bf6e62f2S猫头猫 inActiveStrokeOpacity={0.2} 67bf6e62f2S猫头猫 value={ 68bf6e62f2S猫头猫 progress?.duration 69bf6e62f2S猫头猫 ? (100 * progress.position) / progress.duration 70bf6e62f2S猫头猫 : 0 71bf6e62f2S猫头猫 } 72bf6e62f2S猫头猫 duration={100} 73bf6e62f2S猫头猫 radius={rpx(36)} 74bf6e62f2S猫头猫 activeStrokeColor={colors.text} 75bf6e62f2S猫头猫 inActiveStrokeColor={Color(colors.text).alpha(0.5).toString()}> 76bf6e62f2S猫头猫 {musicIsPaused(musicState) ? ( 77bf6e62f2S猫头猫 <IconButton 78bf6e62f2S猫头猫 icon="play" 79bf6e62f2S猫头猫 size={rpx(48)} 80bf6e62f2S猫头猫 onPress={async () => { 81bf6e62f2S猫头猫 await MusicQueue.play(); 82bf6e62f2S猫头猫 }} 83bf6e62f2S猫头猫 /> 84bf6e62f2S猫头猫 ) : ( 85bf6e62f2S猫头猫 <IconButton 86bf6e62f2S猫头猫 icon="pause" 87bf6e62f2S猫头猫 size={rpx(48)} 88bf6e62f2S猫头猫 onPress={async () => { 89bf6e62f2S猫头猫 await MusicQueue.pause(); 90bf6e62f2S猫头猫 }} 91bf6e62f2S猫头猫 /> 92bf6e62f2S猫头猫 )} 93bf6e62f2S猫头猫 </CircularProgressBase> 94bf6e62f2S猫头猫 95bf6e62f2S猫头猫 <Icon 96bf6e62f2S猫头猫 name="playlist-music" 97bf6e62f2S猫头猫 size={rpx(56)} 98bf6e62f2S猫头猫 onPress={() => { 99bf6e62f2S猫头猫 showPanel('PlayList'); 100bf6e62f2S猫头猫 }} 101bf6e62f2S猫头猫 style={[style.actionIcon, {color: colors.text}]}></Icon> 102bf6e62f2S猫头猫 </View> 103bf6e62f2S猫头猫 </Pressable> 104bf6e62f2S猫头猫 )} 105bf6e62f2S猫头猫 </Fragment> 106bf6e62f2S猫头猫 ); 107bf6e62f2S猫头猫} 108bf6e62f2S猫头猫 109bf6e62f2S猫头猫const style = StyleSheet.create({ 110bf6e62f2S猫头猫 wrapper: { 111bf6e62f2S猫头猫 width: rpx(750), 112bf6e62f2S猫头猫 height: rpx(120), 113bf6e62f2S猫头猫 flexDirection: 'row', 114bf6e62f2S猫头猫 alignItems: 'center', 115bf6e62f2S猫头猫 paddingHorizontal: rpx(24), 116bf6e62f2S猫头猫 }, 117bf6e62f2S猫头猫 artworkWrapper: { 118bf6e62f2S猫头猫 height: rpx(120), 119bf6e62f2S猫头猫 width: rpx(120), 120bf6e62f2S猫头猫 }, 121bf6e62f2S猫头猫 textWrapper: { 122bf6e62f2S猫头猫 flexGrow: 1, 123bf6e62f2S猫头猫 maxWidth: rpx(382), 124bf6e62f2S猫头猫 }, 125bf6e62f2S猫头猫 actionGroup: { 126bf6e62f2S猫头猫 width: rpx(200), 127bf6e62f2S猫头猫 justifyContent: 'flex-end', 128bf6e62f2S猫头猫 flexDirection: 'row', 129bf6e62f2S猫头猫 alignItems: 'center', 130bf6e62f2S猫头猫 }, 131bf6e62f2S猫头猫 actionIcon: { 132bf6e62f2S猫头猫 marginLeft: rpx(36), 133bf6e62f2S猫头猫 }, 134bf6e62f2S猫头猫}); 135