Merge "Set docking ringtone to be played from builtin speaker."

This commit is contained in:
TreeHugger Robot
2022-11-29 22:51:23 +00:00
committed by Android (Google) Code Review
2 changed files with 35 additions and 0 deletions

View File

@@ -89,6 +89,7 @@ public class Ringtone {
.setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build();
private boolean mPreferBuiltinDevice;
// playback properties, use synchronized with mPlaybackSettingsLock
private boolean mIsLooping = false;
private float mVolume = 1.0f;
@@ -156,6 +157,37 @@ public class Ringtone {
mAudioAttributes = attributes;
}
/**
* Finds the output device of type {@link AudioDeviceInfo#TYPE_BUILTIN_SPEAKER}. This device is
* the one on which outgoing audio for SIM calls is played.
*
* @param audioManager the audio manage.
* @return the {@link AudioDeviceInfo} corresponding to the builtin device, or {@code null} if
* none can be found.
*/
private AudioDeviceInfo getBuiltinDevice(AudioManager audioManager) {
AudioDeviceInfo[] deviceList = audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS);
for (AudioDeviceInfo device : deviceList) {
if (device.getType() == AudioDeviceInfo.TYPE_BUILTIN_SPEAKER) {
return device;
}
}
return null;
}
/**
* Sets the preferred device of the ringtong playback to the built-in device.
*
* @hide
*/
public boolean preferBuiltinDevice(boolean enable) {
mPreferBuiltinDevice = enable;
if (mLocalPlayer == null) {
return true;
}
return mLocalPlayer.setPreferredDevice(getBuiltinDevice(mAudioManager));
}
/**
* Creates a local media player for the ringtone using currently set attributes.
* @return true if media player creation succeeded or is deferred,
@@ -174,6 +206,8 @@ public class Ringtone {
try {
mLocalPlayer.setDataSource(mContext, mUri);
mLocalPlayer.setAudioAttributes(mAudioAttributes);
mLocalPlayer.setPreferredDevice(
mPreferBuiltinDevice ? getBuiltinDevice(mAudioManager) : null);
synchronized (mPlaybackSettingsLock) {
applyPlaybackProperties_sync();
}

View File

@@ -302,6 +302,7 @@ final class DockObserver extends SystemService {
getContext(), soundUri);
if (sfx != null) {
sfx.setStreamType(AudioManager.STREAM_SYSTEM);
sfx.preferBuiltinDevice(true);
sfx.play();
}
}