1bf6e62f2S猫头猫import React, {Fragment, useEffect, useState} from 'react'; 24060c00aS猫头猫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'; 64060c00aS猫头猫import {Avatar, IconButton, useTheme} from 'react-native-paper'; 7bf6e62f2S猫头猫import {CircularProgressBase} from 'react-native-circular-progress-indicator'; 8e7fa3837S猫头猫import {ROUTE_PATH, useNavigate} from '@/entry/router'; 9bf6e62f2S猫头猫 10bf6e62f2S猫头猫import musicIsPaused from '@/utils/musicIsPaused'; 11378a6099S猫头猫import usePanel from '../panels/usePanel'; 12bf6e62f2S猫头猫import Color from 'color'; 1319dc08ecS猫头猫import ThemeText from '../base/themeText'; 141befdbcdS猫头猫import {ImgAsset} from '@/constants/assetsConst'; 15bf6e62f2S猫头猫 16*c9af9657S猫头猫function CircularPlayBtn() { 17*c9af9657S猫头猫 const progress = MusicQueue.useProgress(); 18*c9af9657S猫头猫 const musicState = MusicQueue.usePlaybackState(); 19*c9af9657S猫头猫 const {colors} = useTheme(); 20*c9af9657S猫头猫 21*c9af9657S猫头猫 return ( 22*c9af9657S猫头猫 <CircularProgressBase 23*c9af9657S猫头猫 activeStrokeWidth={rpx(4)} 24*c9af9657S猫头猫 inActiveStrokeWidth={rpx(2)} 25*c9af9657S猫头猫 inActiveStrokeOpacity={0.2} 26*c9af9657S猫头猫 value={ 27*c9af9657S猫头猫 progress?.duration 28*c9af9657S猫头猫 ? (100 * progress.position) / progress.duration 29*c9af9657S猫头猫 : 0 30*c9af9657S猫头猫 } 31*c9af9657S猫头猫 duration={100} 32*c9af9657S猫头猫 radius={rpx(36)} 33*c9af9657S猫头猫 activeStrokeColor={colors.text} 34*c9af9657S猫头猫 inActiveStrokeColor={Color(colors.text).alpha(0.5).toString()}> 35*c9af9657S猫头猫 {musicIsPaused(musicState) ? ( 36*c9af9657S猫头猫 <IconButton 37*c9af9657S猫头猫 icon="play" 38*c9af9657S猫头猫 size={rpx(48)} 39*c9af9657S猫头猫 onPress={async () => { 40*c9af9657S猫头猫 await MusicQueue.play(); 41*c9af9657S猫头猫 }} 42*c9af9657S猫头猫 /> 43*c9af9657S猫头猫 ) : ( 44*c9af9657S猫头猫 <IconButton 45*c9af9657S猫头猫 icon="pause" 46*c9af9657S猫头猫 size={rpx(48)} 47*c9af9657S猫头猫 onPress={async () => { 48*c9af9657S猫头猫 await MusicQueue.pause(); 49*c9af9657S猫头猫 }} 50*c9af9657S猫头猫 /> 51*c9af9657S猫头猫 )} 52*c9af9657S猫头猫 </CircularProgressBase> 53*c9af9657S猫头猫 ); 54*c9af9657S猫头猫} 55*c9af9657S猫头猫 564060c00aS猫头猫export default function () { 57bf6e62f2S猫头猫 const musicItem = MusicQueue.useCurrentMusicItem(); 58*c9af9657S猫头猫 5900d0309bS猫头猫 const [showKeyboard, setKeyboardStatus] = useState(false); 6008a8e62cS猫头猫 const {showPanel} = usePanel(); 61e7fa3837S猫头猫 const navigate = useNavigate(); 62bf6e62f2S猫头猫 const {colors} = useTheme(); 63bf6e62f2S猫头猫 6400d0309bS猫头猫 useEffect(() => { 6500d0309bS猫头猫 const showSubscription = Keyboard.addListener('keyboardDidShow', () => { 6600d0309bS猫头猫 setKeyboardStatus(true); 6700d0309bS猫头猫 }); 6800d0309bS猫头猫 const hideSubscription = Keyboard.addListener('keyboardDidHide', () => { 6900d0309bS猫头猫 setKeyboardStatus(false); 7000d0309bS猫头猫 }); 7100d0309bS猫头猫 7200d0309bS猫头猫 return () => { 7300d0309bS猫头猫 showSubscription.remove(); 7400d0309bS猫头猫 hideSubscription.remove(); 7500d0309bS猫头猫 }; 7600d0309bS猫头猫 }, []); 7700d0309bS猫头猫 78bf6e62f2S猫头猫 return ( 79bf6e62f2S猫头猫 <Fragment> 8000d0309bS猫头猫 {musicItem && !showKeyboard && ( 81bf6e62f2S猫头猫 <Pressable 82bf6e62f2S猫头猫 style={[ 83bf6e62f2S猫头猫 style.wrapper, 844060c00aS猫头猫 { 854060c00aS猫头猫 backgroundColor: Color(colors.primary) 864060c00aS猫头猫 .alpha(0.66) 874060c00aS猫头猫 .toString(), 884060c00aS猫头猫 }, 89bf6e62f2S猫头猫 ]} 90bf6e62f2S猫头猫 onPress={() => { 91e7fa3837S猫头猫 navigate(ROUTE_PATH.MUSIC_DETAIL); 92bf6e62f2S猫头猫 }}> 93bf6e62f2S猫头猫 <View style={style.artworkWrapper}> 94bf6e62f2S猫头猫 <Avatar.Image 95bf6e62f2S猫头猫 size={rpx(96)} 961befdbcdS猫头猫 source={ 971befdbcdS猫头猫 musicItem.artwork 981befdbcdS猫头猫 ? { 99bf6e62f2S猫头猫 uri: musicItem.artwork, 1001befdbcdS猫头猫 } 1011befdbcdS猫头猫 : ImgAsset.albumDefault 1024060c00aS猫头猫 } 1034060c00aS猫头猫 /> 104bf6e62f2S猫头猫 </View> 105bf6e62f2S猫头猫 <Text 106bf6e62f2S猫头猫 ellipsizeMode="tail" 107bf6e62f2S猫头猫 style={style.textWrapper} 108bf6e62f2S猫头猫 numberOfLines={1}> 1094060c00aS猫头猫 <ThemeText fontSize="content"> 1104060c00aS猫头猫 {musicItem.title} 1114060c00aS猫头猫 </ThemeText> 112bf6e62f2S猫头猫 {musicItem?.artist && ( 1134060c00aS猫头猫 <ThemeText 1144060c00aS猫头猫 fontSize="description" 1154060c00aS猫头猫 fontColor="secondary"> 1161befdbcdS猫头猫 {' '} 1171befdbcdS猫头猫 -{musicItem.artist} 1181befdbcdS猫头猫 </ThemeText> 119bf6e62f2S猫头猫 )} 120bf6e62f2S猫头猫 </Text> 121bf6e62f2S猫头猫 <View style={style.actionGroup}> 122*c9af9657S猫头猫 <CircularPlayBtn /> 123bf6e62f2S猫头猫 124bf6e62f2S猫头猫 <Icon 125bf6e62f2S猫头猫 name="playlist-music" 126bf6e62f2S猫头猫 size={rpx(56)} 127bf6e62f2S猫头猫 onPress={() => { 128bf6e62f2S猫头猫 showPanel('PlayList'); 129bf6e62f2S猫头猫 }} 1304060c00aS猫头猫 style={[style.actionIcon, {color: colors.text}]} 1314060c00aS猫头猫 /> 132bf6e62f2S猫头猫 </View> 133bf6e62f2S猫头猫 </Pressable> 134bf6e62f2S猫头猫 )} 135bf6e62f2S猫头猫 </Fragment> 136bf6e62f2S猫头猫 ); 137bf6e62f2S猫头猫} 138bf6e62f2S猫头猫 139bf6e62f2S猫头猫const style = StyleSheet.create({ 140bf6e62f2S猫头猫 wrapper: { 141bf6e62f2S猫头猫 width: rpx(750), 142bf6e62f2S猫头猫 height: rpx(120), 143bf6e62f2S猫头猫 flexDirection: 'row', 144bf6e62f2S猫头猫 alignItems: 'center', 145bf6e62f2S猫头猫 paddingHorizontal: rpx(24), 146bf6e62f2S猫头猫 }, 147bf6e62f2S猫头猫 artworkWrapper: { 148bf6e62f2S猫头猫 height: rpx(120), 149bf6e62f2S猫头猫 width: rpx(120), 150bf6e62f2S猫头猫 }, 151bf6e62f2S猫头猫 textWrapper: { 152bf6e62f2S猫头猫 flexGrow: 1, 153bf6e62f2S猫头猫 maxWidth: rpx(382), 154bf6e62f2S猫头猫 }, 155bf6e62f2S猫头猫 actionGroup: { 156bf6e62f2S猫头猫 width: rpx(200), 157bf6e62f2S猫头猫 justifyContent: 'flex-end', 158bf6e62f2S猫头猫 flexDirection: 'row', 159bf6e62f2S猫头猫 alignItems: 'center', 160bf6e62f2S猫头猫 }, 161bf6e62f2S猫头猫 actionIcon: { 162bf6e62f2S猫头猫 marginLeft: rpx(36), 163bf6e62f2S猫头猫 }, 164bf6e62f2S猫头猫}); 165