Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d79d21c9 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:...

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

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/22463391



Change-Id: Ie4b416b2f14ca17ce85dde2659d16a8336b0a1be
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 7105c4ee 2d258d68
Loading
Loading
Loading
Loading
+44 −0
Original line number Diff line number Diff line
@@ -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);