From d815723e15874a45ce80eb9e9a364a224019db54 Mon Sep 17 00:00:00 2001 From: miloszwielgus Date: Thu, 6 Nov 2025 12:27:04 +0100 Subject: [PATCH 1/2] Feat: dummy recorder notification --- .../common-app/src/examples/Record/Record.tsx | 33 ++++ .../android/app/src/main/AndroidManifest.xml | 1 + .../com/swmansion/audioapi/AudioAPIModule.kt | 12 ++ .../audioapi/system/AudioFocusListener.kt | 31 +--- .../audioapi/system/LockScreenManager.kt | 33 +--- .../system/MediaNotificationManager.kt | 108 ++++++----- .../audioapi/system/MediaSessionManager.kt | 110 +++++++++-- .../system/RecordingLockScreenManager.kt | 78 ++++++++ .../src/oldarch/NativeAudioAPIModuleSpec.java | 172 ++++++++++-------- packages/react-native-audio-api/src/api.ts | 3 + .../src/specs/NativeAudioAPIModule.ts | 14 +- .../src/system/AudioManager.ts | 14 ++ .../src/system/types.ts | 16 ++ 13 files changed, 433 insertions(+), 192 deletions(-) create mode 100644 packages/react-native-audio-api/android/src/main/java/com/swmansion/audioapi/system/RecordingLockScreenManager.kt diff --git a/apps/common-app/src/examples/Record/Record.tsx b/apps/common-app/src/examples/Record/Record.tsx index cdb09addb..2ce133b44 100644 --- a/apps/common-app/src/examples/Record/Record.tsx +++ b/apps/common-app/src/examples/Record/Record.tsx @@ -20,6 +20,7 @@ const Record: FC = () => { const recorderAdapterRef = useRef(null); const audioBuffersRef = useRef([]); const sourcesRef = useRef([]); + const isRecordingRef = useRef(false); useEffect(() => { const setup = async () => { @@ -49,12 +50,28 @@ const Record: FC = () => { iosMode: 'spokenAudio', iosOptions: ['defaultToSpeaker', 'allowBluetoothA2DP'], }); + + // Set UI mode to recording + AudioManager.setUiMode('RECORDING'); + + // Set recording lock screen info + AudioManager.setRecordingLockScreenInfo({ + title: 'Recording Audio', + description: 'Recording in progress...', + }); }; const stopRecorder = () => { if (recorderRef.current) { recorderRef.current.stop(); console.log('Recording stopped'); + + // Reset recording lock screen info + AudioManager.resetRecordingLockScreenInfo(); + + // Set UI mode back to playback + AudioManager.setUiMode('PLAYBACK'); + // advised, but not required AudioManager.setAudioSessionOptions({ iosCategory: 'playback', @@ -78,6 +95,7 @@ const Record: FC = () => { recorderRef.current.connect(recorderAdapterRef.current); recorderRef.current.start(); + isRecordingRef.current = true; console.log('Recording started'); console.log('Audio context state:', aCtxRef.current.state); if (aCtxRef.current.state === 'suspended') { @@ -91,6 +109,7 @@ const Record: FC = () => { stopRecorder(); aCtxRef.current = null; recorderAdapterRef.current = null; + isRecordingRef.current = false; }; const startRecordReplay = () => { @@ -109,6 +128,7 @@ const Record: FC = () => { }); recorderRef.current.start(); + isRecordingRef.current = true; setTimeout(() => { stopRecorder(); @@ -155,6 +175,19 @@ const Record: FC = () => { Sample rate: {SAMPLE_RATE} + + + + Recording Status:{' '} + {isRecordingRef.current ? '🔴 Recording' : '⏹️ Stopped'} + + + {isRecordingRef.current + ? 'Recording lock screen info is active' + : 'Recording lock screen info is cleared'} + + + Echo