/** * Copyright (c) Double Symmetry GmbH * Commercial use requires a license. See https://rntp.dev/pricing */ import { useEffect, useState } from 'react'; import { AppState } from 'react-native'; import * as TrackPlayer from '../audio'; import { Event, type PlaybackState } from '../events'; /** * Returns the current playback state, updating when it changes. */ export function usePlaybackState(): PlaybackState { const [state, setState] = useState(() => TrackPlayer.getPlaybackState() ); useEffect(() => { const sub = TrackPlayer.addEventListener( Event.PlaybackStateChanged, (event) => { setState(event.state); } ); // Android background state changes bypass addEventListener (they reach the // headless handler instead), so re-read native state on foreground. const appStateSub = AppState.addEventListener('change', (status) => { if (status === 'active') setState(TrackPlayer.getPlaybackState()); }); return () => { sub.remove(); appStateSub.remove(); }; }, []); return state; }