Loading media/java/android/media/AudioDeviceInfo.java +10 −1 Original line number Diff line number Diff line Loading @@ -836,5 +836,14 @@ public final class AudioDeviceInfo { TYPE_ECHO_REFERENCE, AudioSystem.DEVICE_IN_ECHO_REFERENCE); } @Override public String toString() { return new String("AudioDeviceInfo:" + " type: " + (isSink() ? AudioSystem.getOutputDeviceName(getInternalType()) : AudioSystem.getInputDeviceName(getInternalType())) + " addr: " + getAddress() + " id: " + getId()); } } services/core/java/com/android/server/audio/AudioDeviceBroker.java +4 −0 Original line number Diff line number Diff line Loading @@ -1414,6 +1414,10 @@ public class AudioDeviceBroker { return mDeviceInventory.setPreferredDevicesForStrategyAndSave(strategy, devices); } /*package*/ List<AudioDeviceAttributes> getPreferredDevicesForStrategy(int strategy) { return mDeviceInventory.getPreferredDevicesForStrategy(strategy); } /*package*/ int removePreferredDevicesForStrategySync(int strategy) { return mDeviceInventory.removePreferredDevicesForStrategyAndSave(strategy); } Loading services/core/java/com/android/server/audio/AudioDeviceInventory.java +26 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import static android.media.AudioSystem.isBluetoothScoOutDevice; import static com.android.internal.annotations.VisibleForTesting.Visibility.PACKAGE; import static com.android.media.audio.Flags.asDeviceConnectionFailure; import static com.android.media.audio.Flags.updatePreferredDevicesForStrategy; import android.annotation.NonNull; import android.annotation.Nullable; Loading Loading @@ -1426,6 +1427,31 @@ public class AudioDeviceInventory { strategy, AudioSystem.DEVICE_ROLE_PREFERRED, true /*internal */); } /*package*/ List<AudioDeviceAttributes> getPreferredDevicesForStrategy(int strategy) { synchronized (mDevicesLock) { try (SafeCloseable ignored = ClearCallingIdentityContext.create()) { List<AudioDeviceAttributes> devices = new ArrayList<>(); if (updatePreferredDevicesForStrategy()) { Pair<Integer, Integer> key = new Pair<>(strategy, AudioSystem.DEVICE_ROLE_PREFERRED); devices = mAppliedStrategyRoles.get(key); if (devices == null) { return new ArrayList<AudioDeviceAttributes>(); } } else { int status = AudioSystem.getDevicesForRoleAndStrategy( strategy, AudioSystem.DEVICE_ROLE_PREFERRED, devices); if (status != AudioSystem.SUCCESS) { Log.e(TAG, String.format("Error %d in getPreferredDeviceForStrategy(%d)", status, strategy)); return new ArrayList<AudioDeviceAttributes>(); } } return devices; } } } /*package*/ int setDeviceAsNonDefaultForStrategyAndSave(int strategy, @NonNull AudioDeviceAttributes device) { int status = AudioSystem.ERROR; Loading services/core/java/com/android/server/audio/AudioService.java +7 −16 Original line number Diff line number Diff line Loading @@ -79,6 +79,7 @@ import static com.android.media.audio.Flags.optimizeBtDeviceSwitch; import static com.android.media.audio.Flags.replaceStreamBtSco; import static com.android.media.audio.Flags.ringMyCar; import static com.android.media.audio.Flags.ringerModeAffectsAlarm; import static com.android.media.audio.Flags.updatePreferredDevicesForStrategy; import static com.android.media.flags.Flags.enableAudioInputDeviceRoutingAndVolumeControl; import static com.android.server.audio.SoundDoseHelper.ACTION_CHECK_MUSIC_ACTIVE; import static com.android.server.utils.EventLogger.Event.ALOGE; Loading Loading @@ -3572,23 +3573,11 @@ public class AudioService extends IAudioService.Stub public List<AudioDeviceAttributes> getPreferredDevicesForStrategy(int strategy) { super.getPreferredDevicesForStrategy_enforcePermission(); List<AudioDeviceAttributes> devices = new ArrayList<>(); int status = AudioSystem.SUCCESS; final long identity = Binder.clearCallingIdentity(); try { status = AudioSystem.getDevicesForRoleAndStrategy( strategy, AudioSystem.DEVICE_ROLE_PREFERRED, devices); } finally { Binder.restoreCallingIdentity(identity); } if (status != AudioSystem.SUCCESS) { Log.e(TAG, String.format("Error %d in getPreferredDeviceForStrategy(%d)", status, strategy)); return new ArrayList<AudioDeviceAttributes>(); } else { List<AudioDeviceAttributes> devices = mDeviceBroker.getPreferredDevicesForStrategy(strategy); return anonymizeAudioDeviceAttributesList(devices); } } /** * @see AudioManager#setDeviceAsNonDefaultForStrategy(AudioProductStrategy, Loading Loading @@ -5304,6 +5293,8 @@ public class AudioService extends IAudioService.Stub + unifyAbsoluteVolumeManagement()); pw.println("\tandroid.media.audio.Flags.registerVolumeCallbackApiHardening:" + registerVolumeCallbackApiHardening()); pw.println("\tcom.android.media.audio.Flags.updatePreferredDevicesForStrategy:" + updatePreferredDevicesForStrategy()); } private void dumpAudioMode(PrintWriter pw) { Loading Loading
media/java/android/media/AudioDeviceInfo.java +10 −1 Original line number Diff line number Diff line Loading @@ -836,5 +836,14 @@ public final class AudioDeviceInfo { TYPE_ECHO_REFERENCE, AudioSystem.DEVICE_IN_ECHO_REFERENCE); } @Override public String toString() { return new String("AudioDeviceInfo:" + " type: " + (isSink() ? AudioSystem.getOutputDeviceName(getInternalType()) : AudioSystem.getInputDeviceName(getInternalType())) + " addr: " + getAddress() + " id: " + getId()); } }
services/core/java/com/android/server/audio/AudioDeviceBroker.java +4 −0 Original line number Diff line number Diff line Loading @@ -1414,6 +1414,10 @@ public class AudioDeviceBroker { return mDeviceInventory.setPreferredDevicesForStrategyAndSave(strategy, devices); } /*package*/ List<AudioDeviceAttributes> getPreferredDevicesForStrategy(int strategy) { return mDeviceInventory.getPreferredDevicesForStrategy(strategy); } /*package*/ int removePreferredDevicesForStrategySync(int strategy) { return mDeviceInventory.removePreferredDevicesForStrategyAndSave(strategy); } Loading
services/core/java/com/android/server/audio/AudioDeviceInventory.java +26 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import static android.media.AudioSystem.isBluetoothScoOutDevice; import static com.android.internal.annotations.VisibleForTesting.Visibility.PACKAGE; import static com.android.media.audio.Flags.asDeviceConnectionFailure; import static com.android.media.audio.Flags.updatePreferredDevicesForStrategy; import android.annotation.NonNull; import android.annotation.Nullable; Loading Loading @@ -1426,6 +1427,31 @@ public class AudioDeviceInventory { strategy, AudioSystem.DEVICE_ROLE_PREFERRED, true /*internal */); } /*package*/ List<AudioDeviceAttributes> getPreferredDevicesForStrategy(int strategy) { synchronized (mDevicesLock) { try (SafeCloseable ignored = ClearCallingIdentityContext.create()) { List<AudioDeviceAttributes> devices = new ArrayList<>(); if (updatePreferredDevicesForStrategy()) { Pair<Integer, Integer> key = new Pair<>(strategy, AudioSystem.DEVICE_ROLE_PREFERRED); devices = mAppliedStrategyRoles.get(key); if (devices == null) { return new ArrayList<AudioDeviceAttributes>(); } } else { int status = AudioSystem.getDevicesForRoleAndStrategy( strategy, AudioSystem.DEVICE_ROLE_PREFERRED, devices); if (status != AudioSystem.SUCCESS) { Log.e(TAG, String.format("Error %d in getPreferredDeviceForStrategy(%d)", status, strategy)); return new ArrayList<AudioDeviceAttributes>(); } } return devices; } } } /*package*/ int setDeviceAsNonDefaultForStrategyAndSave(int strategy, @NonNull AudioDeviceAttributes device) { int status = AudioSystem.ERROR; Loading
services/core/java/com/android/server/audio/AudioService.java +7 −16 Original line number Diff line number Diff line Loading @@ -79,6 +79,7 @@ import static com.android.media.audio.Flags.optimizeBtDeviceSwitch; import static com.android.media.audio.Flags.replaceStreamBtSco; import static com.android.media.audio.Flags.ringMyCar; import static com.android.media.audio.Flags.ringerModeAffectsAlarm; import static com.android.media.audio.Flags.updatePreferredDevicesForStrategy; import static com.android.media.flags.Flags.enableAudioInputDeviceRoutingAndVolumeControl; import static com.android.server.audio.SoundDoseHelper.ACTION_CHECK_MUSIC_ACTIVE; import static com.android.server.utils.EventLogger.Event.ALOGE; Loading Loading @@ -3572,23 +3573,11 @@ public class AudioService extends IAudioService.Stub public List<AudioDeviceAttributes> getPreferredDevicesForStrategy(int strategy) { super.getPreferredDevicesForStrategy_enforcePermission(); List<AudioDeviceAttributes> devices = new ArrayList<>(); int status = AudioSystem.SUCCESS; final long identity = Binder.clearCallingIdentity(); try { status = AudioSystem.getDevicesForRoleAndStrategy( strategy, AudioSystem.DEVICE_ROLE_PREFERRED, devices); } finally { Binder.restoreCallingIdentity(identity); } if (status != AudioSystem.SUCCESS) { Log.e(TAG, String.format("Error %d in getPreferredDeviceForStrategy(%d)", status, strategy)); return new ArrayList<AudioDeviceAttributes>(); } else { List<AudioDeviceAttributes> devices = mDeviceBroker.getPreferredDevicesForStrategy(strategy); return anonymizeAudioDeviceAttributesList(devices); } } /** * @see AudioManager#setDeviceAsNonDefaultForStrategy(AudioProductStrategy, Loading Loading @@ -5304,6 +5293,8 @@ public class AudioService extends IAudioService.Stub + unifyAbsoluteVolumeManagement()); pw.println("\tandroid.media.audio.Flags.registerVolumeCallbackApiHardening:" + registerVolumeCallbackApiHardening()); pw.println("\tcom.android.media.audio.Flags.updatePreferredDevicesForStrategy:" + updatePreferredDevicesForStrategy()); } private void dumpAudioMode(PrintWriter pw) { Loading