diff --git a/src/assets/icons/repeat.1.svg b/src/assets/icons/repeat.1.svg new file mode 100644 index 0000000..06fdd24 --- /dev/null +++ b/src/assets/icons/repeat.1.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/screens/modals/Player/components/Queue.tsx b/src/screens/modals/Player/components/Queue.tsx index f450b21..ced7145 100644 --- a/src/screens/modals/Player/components/Queue.tsx +++ b/src/screens/modals/Player/components/Queue.tsx @@ -9,6 +9,7 @@ import { t } from '@localisation'; import useDefaultStyles from 'components/Colors'; import { Text } from 'components/Typography'; import RepeatIcon from 'assets/icons/repeat.svg'; +import RepeatSingleIcon from 'assets/icons/repeat.1.svg'; import Button from 'components/Button'; import { THEME_COLOR } from 'CONSTANTS'; import DownloadIcon from 'components/DownloadIcon'; @@ -74,7 +75,7 @@ interface Props { export default function Queue({ header }: Props) { const defaultStyles = useDefaultStyles(); const queue = useQueue(); - const [isRepeating, setIsRepeating] = useState(false); + const [repeatMode, setRepeatMode] = useState(RepeatMode.Off); const { index: currentIndex } = useCurrentTrack(); const playTrack = useCallback(async (index: number) => { @@ -86,19 +87,25 @@ export default function Queue({ header }: Props) { await TrackPlayer.reset(); }, []); - const toggleLoop = useCallback(() => { - setIsRepeating((prev) => { - TrackPlayer.setRepeatMode(prev ? RepeatMode.Off : RepeatMode.Queue); - return !prev; + const toggleQueueLoop = useCallback(() => { + setRepeatMode((currentMode) => { + const newMode = currentMode === RepeatMode.Queue ? RepeatMode.Off : RepeatMode.Queue; + TrackPlayer.setRepeatMode(newMode); + return newMode; + }); + }, []); + + const toggleTrackLoop = useCallback(() => { + setRepeatMode((currentMode) => { + const newMode = currentMode === RepeatMode.Track ? RepeatMode.Off : RepeatMode.Track; + TrackPlayer.setRepeatMode(newMode); + return newMode; }); }, []); // Retrieve the repeat mode and assign it to the state on component mount useEffect(() => { - TrackPlayer.getRepeatMode() - .then((mode) => { - setIsRepeating(mode === RepeatMode.Queue); - }); + TrackPlayer.getRepeatMode().then(setRepeatMode); }, []); return ( @@ -112,11 +119,21 @@ export default function Queue({ header }: Props) { {t('queue')} + + +