From c18e5a16de21dfa111309b16d0b5a24a849069ac Mon Sep 17 00:00:00 2001 From: Eric Laurent Date: Fri, 20 Jan 2023 19:30:09 +0100 Subject: [PATCH] AudioManager: relax exceptions for setCommunicationDevice Do not throw an IllegalArgumentException exception in setCommunicationDevice() if the selected device is not connected any more but return false instead; This race condition cannot be avoided programmatically. Bug: 264837721 Test: manual regression tests for call routing Change-Id: I6ba0c81b89a5871a210a115885836693e4972fcb --- media/java/android/media/AudioManager.java | 3 ++- services/core/java/com/android/server/audio/AudioService.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index 798688ea7b46e..8d96bb7ab2749 100644 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -7687,7 +7687,8 @@ public class AudioManager { Objects.requireNonNull(device); try { if (device.getId() == 0) { - throw new IllegalArgumentException("In valid device: " + device); + Log.w(TAG, "setCommunicationDevice: device not found: " + device); + return false; } return getService().setCommunicationDevice(mICallBack, device.getId()); } catch (RemoteException e) { diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index 1bd8f1ea1c18a..8931ddee74fde 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -5894,7 +5894,8 @@ public class AudioService extends IAudioService.Stub if (portId != 0) { device = AudioManager.getDeviceForPortId(portId, AudioManager.GET_DEVICES_OUTPUTS); if (device == null) { - throw new IllegalArgumentException("invalid portID " + portId); + Log.w(TAG, "setCommunicationDevice: invalid portID " + portId); + return false; } if (!isValidCommunicationDevice(device)) { throw new IllegalArgumentException("invalid device type " + device.getType());