Skip to content
Snippets Groups Projects
Commit 2d258d68 authored by Ján Sebechlebský's avatar Ján Sebechlebský Committed by Automerger Merge Worker
Browse files

Merge "Support virtual device specific audio session in TTS." into udc-dev am: 0b263f79

parents 632dc413 0b263f79
No related branches found
No related tags found
No related merge requests found
......@@ -15,12 +15,17 @@
*/
package android.speech.tts;
import static android.content.Context.DEVICE_ID_DEFAULT;
import static android.media.AudioManager.AUDIO_SESSION_ID_GENERATE;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RawRes;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
import android.companion.virtual.VirtualDevice;
import android.companion.virtual.VirtualDeviceManager;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.ComponentName;
import android.content.ContentResolver;
......@@ -791,9 +796,48 @@ public class TextToSpeech {
mIsSystem = isSystem;
addDeviceSpecificSessionIdToParams(mContext, mParams);
initTts();
}
/**
* Add {@link VirtualDevice} specific playback audio session associated with context to
* parameters {@link Bundle} if applicable.
*
* @param context - {@link Context} context instance to extract the device specific audio
* session id from.
* @param params - {@link Bundle} to add the device specific audio session id to.
*/
private static void addDeviceSpecificSessionIdToParams(
@NonNull Context context, @NonNull Bundle params) {
int audioSessionId = getDeviceSpecificPlaybackSessionId(context);
if (audioSessionId != AUDIO_SESSION_ID_GENERATE) {
params.putInt(Engine.KEY_PARAM_SESSION_ID, audioSessionId);
}
}
/**
* Helper method to fetch {@link VirtualDevice} specific playback audio session id for given
* {@link Context} instance.
*
* @param context - {@link Context} to fetch the audio sesion id for.
* @return audio session id corresponding to {@link VirtualDevice} in case the context is
* associated with {@link VirtualDevice} configured with specific audio session id,
* {@link AudioManager#AUDIO_SESSION_ID_GENERATE} otherwise.
* @see android.companion.virtual.VirtualDeviceManager#getAudioPlaybackSessionId(int)
*/
private static int getDeviceSpecificPlaybackSessionId(@NonNull Context context) {
int deviceId = context.getDeviceId();
if (deviceId == DEVICE_ID_DEFAULT) {
return AUDIO_SESSION_ID_GENERATE;
}
VirtualDeviceManager vdm = context.getSystemService(VirtualDeviceManager.class);
if (vdm == null) {
return AUDIO_SESSION_ID_GENERATE;
}
return vdm.getAudioPlaybackSessionId(deviceId);
}
private <R> R runActionNoReconnect(Action<R> action, R errorResult, String method,
boolean onlyEstablishedConnection) {
return runAction(action, errorResult, method, false, onlyEstablishedConnection);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment