summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Eric Laurent <elaurent@google.com> 2022-04-21 18:57:48 +0200
committer Eric Laurent <elaurent@google.com> 2022-04-25 09:50:43 +0200
commiteb8d8852f374c9063eb369757645d267bdacbfdf (patch)
tree83908316f8b45aec270af867107a32f010911922
parent9f46a6ec82a5076c271a674fb8c3b8d539ce9bfb (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.java58
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);
}