/** * 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 } from '../events'; /** * Returns whether the player is currently producing audio output. */ export function useIsPlaying(): boolean { const [playing, setPlaying] = useState(() => TrackPlayer.isPlaying() ); useEffect(() => { const sub = TrackPlayer.addEventListener( Event.IsPlayingChanged, (event) => { setPlaying(event.playing); } ); // 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') setPlaying(TrackPlayer.isPlaying()); }); return () => { sub.remove(); appStateSub.remove(); }; }, []); return playing; }