From 7cb3b4334fffd6514b06f2633d974ea466702bf3 Mon Sep 17 00:00:00 2001 From: Dmytro Bogovych Date: Sun, 17 May 2026 07:20:47 +0300 Subject: [PATCH] - expose AudioManager::setAudioInput() to inject custom input device Lets a host inject e.g. NullInputDevice before start() so the default platform microphone is not constructed, avoiding the RECORD_AUDIO permission on Android while leaving the real speaker output in place. Co-Authored-By: Claude Opus 4.7 --- src/engine/agent/Agent_AudioManager.cpp | 6 ++++++ src/engine/agent/Agent_AudioManager.h | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/src/engine/agent/Agent_AudioManager.cpp b/src/engine/agent/Agent_AudioManager.cpp index f7da74c9..0145bd8f 100644 --- a/src/engine/agent/Agent_AudioManager.cpp +++ b/src/engine/agent/Agent_AudioManager.cpp @@ -167,6 +167,12 @@ void AudioManager::stop(int usageId) } } +void AudioManager::setAudioInput(Audio::PInputDevice input) +{ + LOCK_MANAGER; + mAudioInput = std::move(input); +} + void AudioManager::startPlayFile(int usageId, const std::string& path, AudioTarget target, LoopMode lm, int timelimit) { // Check if file exists diff --git a/src/engine/agent/Agent_AudioManager.h b/src/engine/agent/Agent_AudioManager.h index 8d6321de..8cb6e361 100644 --- a/src/engine/agent/Agent_AudioManager.h +++ b/src/engine/agent/Agent_AudioManager.h @@ -53,6 +53,11 @@ public: void start(int usageId); void stop(int usageId); + // Inject a custom input device. Must be called before start(): when set, + // start() skips construction of the default platform microphone. Pass an + // empty pointer to clear the override. + void setAudioInput(Audio::PInputDevice input); + enum AudioTarget { atNull,