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

Commit 526355de authored by Android (Google) Code Review's avatar Android (Google) Code Review
Browse files

Merge change 5701 into donut

* changes:
  Expose in SynthProxy the query for the TTS supported and current language.
parents 53e083c9 bee1c7e6
Loading
Loading
Loading
Loading
+51 −10
Original line number Diff line number Diff line
@@ -278,6 +278,33 @@ android_tts_SynthProxy_native_finalize(JNIEnv *env, jobject thiz, jint jniData)
}


static int
android_tts_SynthProxy_isLanguageAvailable(JNIEnv *env, jobject thiz, jint jniData,
        jstring language, jstring country, jstring variant)
{
    int result = TTS_LANG_NOT_SUPPORTED;

    if (jniData == 0) {
        LOGE("android_tts_SynthProxy_isLanguageAvailable(): invalid JNI data");
        return result;
    }

    SynthProxyJniStorage* pSynthData = (SynthProxyJniStorage*)jniData;
    const char *langNativeString = env->GetStringUTFChars(language, 0);
    const char *countryNativeString = env->GetStringUTFChars(country, 0);
    const char *variantNativeString = env->GetStringUTFChars(variant, 0);
    // TODO check return codes
    if (pSynthData->mNativeSynthInterface) {
        result = pSynthData->mNativeSynthInterface->isLanguageAvailable(langNativeString,
                countryNativeString, variantNativeString);
    }
    env->ReleaseStringUTFChars(language, langNativeString);
    env->ReleaseStringUTFChars(country, countryNativeString);
    env->ReleaseStringUTFChars(variant, variantNativeString);
    return result;
}


static void
android_tts_SynthProxy_setLanguage(JNIEnv *env, jobject thiz, jint jniData,
        jstring language, jstring country, jstring variant)
@@ -533,24 +560,34 @@ LOGI("android_tts_SynthProxy_playAudioBuffer");
}


JNIEXPORT jstring JNICALL
static jobjectArray
android_tts_SynthProxy_getLanguage(JNIEnv *env, jobject thiz, jint jniData)
{
    if (jniData == 0) {
        LOGE("android_tts_SynthProxy_getLanguage(): invalid JNI data");
        return env->NewStringUTF("");
        return NULL;
    }

    SynthProxyJniStorage* pSynthData = (SynthProxyJniStorage*)jniData;
    size_t bufSize = 100;
    char buf[bufSize];
    memset(buf, 0, bufSize);
    // TODO check return codes

    if (pSynthData->mNativeSynthInterface) {
        // TODO use the correct getLanguage()
        //pSynthData->mNativeSynthInterface->getLanguage(buf, &bufSize);
        size_t bufSize = 100;
        char lang[bufSize];
        char country[bufSize];
        char variant[bufSize];
        memset(lang, 0, bufSize);
        memset(country, 0, bufSize);
        memset(variant, 0, bufSize);
        jobjectArray retLocale = (jobjectArray)env->NewObjectArray(3,
                env->FindClass("java/lang/String"), env->NewStringUTF(""));
        pSynthData->mNativeSynthInterface->getLanguage(lang, country, variant);
        env->SetObjectArrayElement(retLocale, 0, env->NewStringUTF(lang));
        env->SetObjectArrayElement(retLocale, 1, env->NewStringUTF(country));
        env->SetObjectArrayElement(retLocale, 2, env->NewStringUTF(variant));
        return retLocale;
    } else {
        return NULL;
    }
    return env->NewStringUTF(buf);
}


@@ -588,6 +625,10 @@ static JNINativeMethod gMethods[] = {
        "(ILjava/lang/String;Ljava/lang/String;)V",
        (void*)android_tts_SynthProxy_synthesizeToFile
    },
    {   "native_isLanguageAvailable",
        "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I",
        (void*)android_tts_SynthProxy_isLanguageAvailable
    },
    {   "native_setLanguage",
        "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V",
        (void*)android_tts_SynthProxy_setLanguage
@@ -609,7 +650,7 @@ static JNINativeMethod gMethods[] = {
        (void*)android_tts_SynthProxy_playAudioBuffer
    },
    {   "native_getLanguage",
        "(I)Ljava/lang/String;",
        "(I)[Ljava/lang/String;",
        (void*)android_tts_SynthProxy_getLanguage
    },
    {   "native_getRate",
+23 −12
Original line number Diff line number Diff line
@@ -68,7 +68,15 @@ public class SynthProxy {
    // TODO add IPA methods

    /**
     * Sets the language
     * Queries for language support.
     * Return codes are defined in android.speech.tts.TextToSpeech
     */
    public int isLanguageAvailable(String language, String country, String variant) {
        return native_isLanguageAvailable(mJniData, language, country, variant);
    }

    /**
     * Sets the language.
     */
    public void setLanguage(String language, String country, String variant) {
        native_setLanguage(mJniData, language, country, variant);
@@ -82,42 +90,42 @@ public class SynthProxy {
    }

    /**
     * Sets the speech rate
     * Sets the speech rate.
     */
    public final void setSpeechRate(int speechRate) {
        native_setSpeechRate(mJniData, speechRate);
    }

    /**
     * Sets the pitch of the synthesized voice
     * Sets the pitch of the synthesized voice.
     */
    public final void setPitch(int pitch) {
        native_setPitch(mJniData, pitch);
    }

    /**
     * Plays the given audio buffer
     * Plays the given audio buffer.
     */
    public void playAudioBuffer(int bufferPointer, int bufferSize) {
        native_playAudioBuffer(mJniData, bufferPointer, bufferSize);
    }

    /**
     * Gets the currently set language
     * Returns the currently set language, country and variant information.
     */
    public String getLanguage() {
    public String[] getLanguage() {
        return native_getLanguage(mJniData);
    }

    /**
     * Gets the currently set rate
     * Gets the currently set rate.
     */
    public int getRate() {
        return native_getRate(mJniData);
    }

    /**
     * Shuts down the native synthesizer
     * Shuts down the native synthesizer.
     */
    public void shutdown()  {
        native_shutdown(mJniData);
@@ -154,6 +162,9 @@ public class SynthProxy {

    private native final void native_synthesizeToFile(int jniData, String text, String filename);

    private native final int  native_isLanguageAvailable(int jniData, String language,
            String country, String variant);

    private native final void native_setLanguage(int jniData, String language, String country,
            String variant);

@@ -167,7 +178,7 @@ public class SynthProxy {
    // TODO add buffer format
    private native final void native_playAudioBuffer(int jniData, int bufferPointer, int bufferSize);

    private native final String native_getLanguage(int jniData);
    private native final String[] native_getLanguage(int jniData);

    private native final int native_getRate(int jniData);