xref: /MusicFree/src/components/musicBar/index.tsx (revision 19dc08ecf646164591cb30515347b693c01518c7)
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