diff options
| author | 2022-04-21 18:57:48 +0200 | |
|---|---|---|
| committer | 2022-04-25 09:50:43 +0200 | |
| commit | eb8d8852f374c9063eb369757645d267bdacbfdf (patch) | |
| tree | 83908316f8b45aec270af867107a32f010911922 | |
| parent | 9f46a6ec82a5076c271a674fb8c3b8d539ce9bfb (diff) | |
audio: fix accessibility routing in call
Align the accessibility strategy routing with the communication strategy
routing so that TalkBack audio is routed to the active audio device
during a call.
Bug: 176897051
Test: repro steps in the bug
Change-Id: I1ccbf2b3d7079ffad7d64f886303170e8bbcee27
| -rw-r--r-- | services/core/java/com/android/server/audio/AudioDeviceBroker.java | 58 |
1 files changed, 24 insertions, 34 deletions
diff --git a/services/core/java/com/android/server/audio/AudioDeviceBroker.java b/services/core/java/com/android/server/audio/AudioDeviceBroker.java index 0b3c18b5113b..3b715a218e5d 100644 --- a/services/core/java/com/android/server/audio/AudioDeviceBroker.java +++ b/services/core/java/com/android/server/audio/AudioDeviceBroker.java @@ -82,6 +82,11 @@ import java.util.concurrent.atomic.AtomicBoolean; /** ID for Communication strategy retrieved form audio policy manager */ private int mCommunicationStrategyId = -1; + + /** ID for Accessibility strategy retrieved form audio policy manager */ + private int mAccessibilityStrategyId = -1; + + /** Active communication device reported by audio policy manager */ private AudioDeviceInfo mActiveCommunicationDevice; /** Last preferred device set for communication strategy */ @@ -141,22 +146,28 @@ import java.util.concurrent.atomic.AtomicBoolean; init(); } - private void initCommunicationStrategyId() { + private void initRoutingStrategyIds() { List<AudioProductStrategy> strategies = AudioProductStrategy.getAudioProductStrategies(); + mCommunicationStrategyId = -1; + mAccessibilityStrategyId = -1; for (AudioProductStrategy strategy : strategies) { - if (strategy.getAudioAttributesForLegacyStreamType(AudioSystem.STREAM_VOICE_CALL) - != null) { + if (mCommunicationStrategyId == -1 + && strategy.getAudioAttributesForLegacyStreamType( + AudioSystem.STREAM_VOICE_CALL) != null) { mCommunicationStrategyId = strategy.getId(); - return; + } + if (mAccessibilityStrategyId == -1 + && strategy.getAudioAttributesForLegacyStreamType( + AudioSystem.STREAM_ACCESSIBILITY) != null) { + mAccessibilityStrategyId = strategy.getId(); } } - mCommunicationStrategyId = -1; } private void init() { setupMessaging(mContext); - initCommunicationStrategyId(); + initRoutingStrategyIds(); mPreferredCommunicationDevice = null; updateActiveCommunicationDevice(); @@ -813,19 +824,10 @@ import java.util.concurrent.atomic.AtomicBoolean; return mDeviceInventory.setPreferredDevicesForStrategySync(strategy, devices); } - /*package*/ void postSetPreferredDevicesForStrategy(int strategy, - @NonNull List<AudioDeviceAttributes> devices) { - sendILMsgNoDelay(MSG_IL_SET_PREF_DEVICES_FOR_STRATEGY, SENDMSG_REPLACE, strategy, devices); - } - /*package*/ int removePreferredDevicesForStrategySync(int strategy) { return mDeviceInventory.removePreferredDevicesForStrategySync(strategy); } - /*package*/ void postRemovePreferredDevicesForStrategy(int strategy) { - sendIMsgNoDelay(MSG_I_REMOVE_PREF_DEVICES_FOR_STRATEGY, SENDMSG_REPLACE, strategy); - } - /*package*/ void registerStrategyPreferredDevicesDispatcher( @NonNull IStrategyPreferredDevicesDispatcher dispatcher) { mDeviceInventory.registerStrategyPreferredDevicesDispatcher(dispatcher); @@ -1157,6 +1159,9 @@ import java.util.concurrent.atomic.AtomicBoolean; pw.println(prefix + "mCommunicationStrategyId: " + mCommunicationStrategyId); + pw.println(prefix + "mAccessibilityStrategyId: " + + mAccessibilityStrategyId); + pw.println("\n" + prefix + "mModeOwnerPid: " + mModeOwnerPid); mBtHelper.dump(pw, prefix); @@ -1252,7 +1257,7 @@ import java.util.concurrent.atomic.AtomicBoolean; case MSG_RESTORE_DEVICES: synchronized (mSetModeLock) { synchronized (mDeviceStateLock) { - initCommunicationStrategyId(); + initRoutingStrategyIds(); updateActiveCommunicationDevice(); mDeviceInventory.onRestoreDevices(); mBtHelper.onAudioServerDiedRestoreA2dp(); @@ -1440,22 +1445,6 @@ import java.util.concurrent.atomic.AtomicBoolean; final int strategy = msg.arg1; mDeviceInventory.onSaveRemovePreferredDevices(strategy); } break; - case MSG_IL_SET_PREF_DEVICES_FOR_STRATEGY: { - final int strategy = msg.arg1; - final List<AudioDeviceAttributes> devices = - (List<AudioDeviceAttributes>) msg.obj; - setPreferredDevicesForStrategySync(strategy, devices); - if (strategy == mCommunicationStrategyId) { - onUpdatePhoneStrategyDevice(devices.isEmpty() ? null : devices.get(0)); - } - } break; - case MSG_I_REMOVE_PREF_DEVICES_FOR_STRATEGY: { - final int strategy = msg.arg1; - removePreferredDevicesForStrategySync(strategy); - if (strategy == mCommunicationStrategyId) { - onUpdatePhoneStrategyDevice(null); - } - } break; case MSG_CHECK_MUTE_MUSIC: checkMessagesMuteMusic(0); break; @@ -1533,8 +1522,6 @@ import java.util.concurrent.atomic.AtomicBoolean; private static final int MSG_I_SAVE_CLEAR_PREF_DEVICES_FOR_CAPTURE_PRESET = 38; private static final int MSG_L_UPDATE_COMMUNICATION_ROUTE = 39; - private static final int MSG_IL_SET_PREF_DEVICES_FOR_STRATEGY = 40; - private static final int MSG_I_REMOVE_PREF_DEVICES_FOR_STRATEGY = 41; private static final int MSG_L_SET_COMMUNICATION_ROUTE_FOR_CLIENT = 42; private static final int MSG_L_UPDATE_COMMUNICATION_ROUTE_CLIENT = 43; private static final int MSG_I_SCO_AUDIO_STATE_CHANGED = 44; @@ -1836,9 +1823,12 @@ import java.util.concurrent.atomic.AtomicBoolean; } if (preferredCommunicationDevice == null) { removePreferredDevicesForStrategySync(mCommunicationStrategyId); + removePreferredDevicesForStrategySync(mAccessibilityStrategyId); } else { setPreferredDevicesForStrategySync( mCommunicationStrategyId, Arrays.asList(preferredCommunicationDevice)); + setPreferredDevicesForStrategySync( + mAccessibilityStrategyId, Arrays.asList(preferredCommunicationDevice)); } onUpdatePhoneStrategyDevice(preferredCommunicationDevice); } |