blob: 9015563f439e7e7eb0cfb30e132797cd7d192930 [file] [log] [blame]
/*
* Copyright (C) 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.server.texttospeech;
import static com.android.server.texttospeech.TextToSpeechManagerPerUserService.runSessionCallbackMethod;
import android.annotation.NonNull;
import android.annotation.UserIdInt;
import android.content.Context;
import android.os.UserHandle;
import android.speech.tts.ITextToSpeechManager;
import android.speech.tts.ITextToSpeechSessionCallback;
import com.android.server.infra.AbstractMasterSystemService;
/**
* A service that allows secured synthesizing of text to speech audio. Upon request creates a
* session
* that is managed by {@link TextToSpeechManagerPerUserService}.
*
* @see ITextToSpeechManager
*/
public final class TextToSpeechManagerService extends
AbstractMasterSystemService<TextToSpeechManagerService,
TextToSpeechManagerPerUserService> {
private static final String TAG = TextToSpeechManagerService.class.getSimpleName();
public TextToSpeechManagerService(@NonNull Context context) {
super(context, /* serviceNameResolver= */ null,
/* disallowProperty = */null);
}
@Override // from SystemService
public void onStart() {
publishBinderService(Context.TEXT_TO_SPEECH_MANAGER_SERVICE,
new TextToSpeechManagerServiceStub());
}
@Override
protected TextToSpeechManagerPerUserService newServiceLocked(
@UserIdInt int resolvedUserId, boolean disabled) {
return new TextToSpeechManagerPerUserService(this, mLock, resolvedUserId);
}
private final class TextToSpeechManagerServiceStub extends ITextToSpeechManager.Stub {
@Override
public void createSession(String engine,
ITextToSpeechSessionCallback sessionCallback) {
synchronized (mLock) {
TextToSpeechManagerPerUserService perUserService = getServiceForUserLocked(
UserHandle.getCallingUserId());
if (perUserService != null) {
perUserService.createSessionLocked(engine, sessionCallback);
} else {
runSessionCallbackMethod(
() -> sessionCallback.onError("Service is not available for user"));
}
}
}
}
}