AudioDeviceInventory: reapply preferred device roles when needed
Because a preferred device role requested via an AudioManager API can be conflicting with a communication device request and is persisted, we need to reapply any active device role request when the communication device request is cleared. Also add missing restoration of preferred capture preset. Bug: 285773888 Test: repro steps in bug Test: atest NonDefaultDeviceForStrategyTest Test: atest AudioManagerTest#testPreferredDevicesForStrategy Test: atest AudioManagerTest#testPreferredDeviceForCapturePreset Change-Id: I5d83a3e7a2485a6ef685d0779951bfb7ef9c991e
This commit is contained in:
@@ -2214,6 +2214,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
||||
mDeviceInventory.removePreferredDevicesForStrategyInt(mAccessibilityStrategyId);
|
||||
}
|
||||
mDeviceInventory.applyConnectedDevicesRoles();
|
||||
mDeviceInventory.reapplyExternalDevicesRoles();
|
||||
} else {
|
||||
mDeviceInventory.setPreferredDevicesForStrategyInt(
|
||||
mCommunicationStrategyId, Arrays.asList(preferredCommunicationDevice));
|
||||
|
||||
@@ -361,23 +361,34 @@ public class AudioDeviceInventory {
|
||||
AudioSystem.DEVICE_STATE_AVAILABLE,
|
||||
di.mDeviceCodecFormat);
|
||||
}
|
||||
mAppliedStrategyRoles.clear();
|
||||
mAppliedStrategyRolesInt.clear();
|
||||
mAppliedPresetRoles.clear();
|
||||
mAppliedPresetRolesInt.clear();
|
||||
applyConnectedDevicesRoles_l();
|
||||
}
|
||||
reapplyExternalDevicesRoles();
|
||||
}
|
||||
|
||||
/*package*/ void reapplyExternalDevicesRoles() {
|
||||
synchronized (mDevicesLock) {
|
||||
mAppliedStrategyRoles.clear();
|
||||
mAppliedPresetRoles.clear();
|
||||
}
|
||||
synchronized (mPreferredDevices) {
|
||||
mPreferredDevices.forEach((strategy, devices) -> {
|
||||
setPreferredDevicesForStrategy(strategy, devices); });
|
||||
setPreferredDevicesForStrategy(strategy, devices);
|
||||
});
|
||||
}
|
||||
synchronized (mNonDefaultDevices) {
|
||||
mNonDefaultDevices.forEach((strategy, devices) -> {
|
||||
addDevicesRoleForStrategy(strategy, AudioSystem.DEVICE_ROLE_DISABLED,
|
||||
devices, false /* internal */); });
|
||||
devices, false /* internal */);
|
||||
});
|
||||
}
|
||||
synchronized (mPreferredDevicesForCapturePreset) {
|
||||
// TODO: call audiosystem to restore
|
||||
mPreferredDevicesForCapturePreset.forEach((capturePreset, devices) -> {
|
||||
setDevicesRoleForCapturePreset(
|
||||
capturePreset, AudioSystem.DEVICE_ROLE_PREFERRED, devices);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1163,6 +1174,7 @@ public class AudioDeviceInventory {
|
||||
return mAudioSystem.removeDevicesRoleForStrategy(s, r, d); });
|
||||
purgeRoles(mAppliedPresetRolesInt, (p, r, d) -> {
|
||||
return mAudioSystem.removeDevicesRoleForCapturePreset(p, r, d); });
|
||||
reapplyExternalDevicesRoles();
|
||||
}
|
||||
|
||||
@GuardedBy("mDevicesLock")
|
||||
|
||||
Reference in New Issue
Block a user