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')}
+
+
+