import { useAtomValue } from 'jotai/utils'; import React from 'react'; import { Pressable, StatusBar, StyleSheet, Text, useWindowDimensions, View } from 'react-native'; import FastImage from 'react-native-fast-image'; import TrackPlayer, { State } from 'react-native-track-player'; import { currentQueueNameAtom, currentTrackAtom, playerStateAtom } from '../state/trackplayer'; import text from '../styles/text'; import CoverArt from './common/CoverArt'; import ImageGradientBackground from './common/ImageGradientBackground'; const NowPlayingHeader = () => { const queueName = useAtomValue(currentQueueNameAtom); return ( {queueName || 'Nothing playing...'} ); }; const headerStyles = StyleSheet.create({ container: { height: 58, flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', // backgroundColor: 'green', }, icons: { height: 22, width: 22, margin: 17, }, queueName: { ...text.paragraph, }, }); const SongCoverArt = () => { const track = useAtomValue(currentTrackAtom); const layout = useWindowDimensions(); const size = layout.width - layout.width / 7; return ( } height={size} width={size} coverArtUri={track?.artwork as string} /> ); }; const coverArtStyles = StyleSheet.create({ container: { width: '100%', alignItems: 'center', marginTop: 10, }, }); const SongInfo = () => { const track = useAtomValue(currentTrackAtom); return ( {track?.title} {track?.artist} ); }; const infoStyles = StyleSheet.create({ container: { width: '100%', alignItems: 'center', marginTop: 20, paddingHorizontal: 20, }, title: { ...text.songListTitle, fontSize: 22, textAlign: 'center', }, artist: { ...text.songListSubtitle, fontSize: 14, textAlign: 'center', }, }); const PlayerControls = () => { const state = useAtomValue(playerStateAtom); let playPauseIcon: number; let playPauseStyle: any; let playPauseAction: () => void; switch (state) { case State.Playing: case State.Buffering: case State.Connecting: playPauseIcon = require('../../res/pause_circle-fill.png'); playPauseStyle = controlsStyles.enabled; playPauseAction = () => TrackPlayer.pause(); break; case State.Paused: playPauseIcon = require('../../res/play_circle-fill.png'); playPauseStyle = controlsStyles.enabled; playPauseAction = () => TrackPlayer.play(); break; default: playPauseIcon = require('../../res/play_circle-fill.png'); playPauseStyle = controlsStyles.disabled; playPauseAction = () => {}; break; } return ( ); }; const controlsStyles = StyleSheet.create({ container: { width: '100%', flexDirection: 'row', alignItems: 'center', justifyContent: 'center', marginTop: 40, }, skip: { height: 40, width: 40, marginHorizontal: 18, }, play: { height: 90, width: 90, }, enabled: { opacity: 1, }, disabled: { opacity: 0.35, }, }); const NowPlayingLayout = () => { const track = useAtomValue(currentTrackAtom); return ( ); }; export default NowPlayingLayout;