Merge "Support virtual device specific audio session in TTS." into udc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
0b263f790c
@@ -15,12 +15,17 @@
|
|||||||
*/
|
*/
|
||||||
package android.speech.tts;
|
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.IntDef;
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
import android.annotation.RawRes;
|
import android.annotation.RawRes;
|
||||||
import android.annotation.SdkConstant;
|
import android.annotation.SdkConstant;
|
||||||
import android.annotation.SdkConstant.SdkConstantType;
|
import android.annotation.SdkConstant.SdkConstantType;
|
||||||
|
import android.companion.virtual.VirtualDevice;
|
||||||
|
import android.companion.virtual.VirtualDeviceManager;
|
||||||
import android.compat.annotation.UnsupportedAppUsage;
|
import android.compat.annotation.UnsupportedAppUsage;
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
@@ -791,9 +796,48 @@ public class TextToSpeech {
|
|||||||
|
|
||||||
mIsSystem = isSystem;
|
mIsSystem = isSystem;
|
||||||
|
|
||||||
|
addDeviceSpecificSessionIdToParams(mContext, mParams);
|
||||||
initTts();
|
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,
|
private <R> R runActionNoReconnect(Action<R> action, R errorResult, String method,
|
||||||
boolean onlyEstablishedConnection) {
|
boolean onlyEstablishedConnection) {
|
||||||
return runAction(action, errorResult, method, false, onlyEstablishedConnection);
|
return runAction(action, errorResult, method, false, onlyEstablishedConnection);
|
||||||
|
|||||||
Reference in New Issue
Block a user