Merge "Set docking ringtone to be played from builtin speaker." into tm-qpr-dev

This commit is contained in:
TreeHugger Robot
2022-11-29 13:37:27 +00:00
committed by Android (Google) Code Review
2 changed files with 36 additions and 0 deletions

View File

@@ -89,6 +89,7 @@ public class Ringtone {
.setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE) .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build(); .build();
private boolean mPreferBuiltinDevice;
// playback properties, use synchronized with mPlaybackSettingsLock // playback properties, use synchronized with mPlaybackSettingsLock
private boolean mIsLooping = false; private boolean mIsLooping = false;
private float mVolume = 1.0f; private float mVolume = 1.0f;
@@ -156,8 +157,40 @@ public class Ringtone {
mAudioAttributes = attributes; 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. * Creates a local media player for the ringtone using currently set attributes.
*
* @hide * @hide
*/ */
public void createLocalMediaPlayer() { public void createLocalMediaPlayer() {
@@ -172,6 +205,8 @@ public class Ringtone {
try { try {
mLocalPlayer.setDataSource(mContext, mUri); mLocalPlayer.setDataSource(mContext, mUri);
mLocalPlayer.setAudioAttributes(mAudioAttributes); mLocalPlayer.setAudioAttributes(mAudioAttributes);
mLocalPlayer.setPreferredDevice(
mPreferBuiltinDevice ? getBuiltinDevice(mAudioManager) : null);
synchronized (mPlaybackSettingsLock) { synchronized (mPlaybackSettingsLock) {
applyPlaybackProperties_sync(); applyPlaybackProperties_sync();
} }

View File

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