From 39268ffcb74f4c177e5e7427b66480c77743f928 Mon Sep 17 00:00:00 2001 From: Narayan Kamath Date: Mon, 17 Oct 2011 14:37:40 +0100 Subject: [PATCH] Format default locale the same way as those stored in prefs. Also explicitly disallow locales with empty countries. This is required to match them against the set of engine supported locales. bug:5309930 Change-Id: Ie9714fdc09d3081081a2393d97c31e3a42bca294 --- core/java/android/speech/tts/TtsEngines.java | 27 ++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/core/java/android/speech/tts/TtsEngines.java b/core/java/android/speech/tts/TtsEngines.java index bb72bea37d04d..2706bc72d7e83 100644 --- a/core/java/android/speech/tts/TtsEngines.java +++ b/core/java/android/speech/tts/TtsEngines.java @@ -344,7 +344,10 @@ public class TtsEngines { String v1Locale = lang; if (!TextUtils.isEmpty(country)) { v1Locale += LOCALE_DELIMITER + country; + } else { + return v1Locale; } + if (!TextUtils.isEmpty(variant)) { v1Locale += LOCALE_DELIMITER + variant; } @@ -355,8 +358,28 @@ public class TtsEngines { private String getDefaultLocale() { final Locale locale = Locale.getDefault(); - return locale.getISO3Language() + LOCALE_DELIMITER + locale.getISO3Country() + - LOCALE_DELIMITER + locale.getVariant(); + // Note that the default locale might have an empty variant + // or language, and we take care that the construction is + // the same as {@link #getV1Locale} i.e no trailing delimiters + // or spaces. + String defaultLocale = locale.getISO3Language(); + if (TextUtils.isEmpty(defaultLocale)) { + Log.w(TAG, "Default locale is empty."); + return ""; + } + + if (!TextUtils.isEmpty(locale.getISO3Country())) { + defaultLocale += LOCALE_DELIMITER + locale.getISO3Country(); + } else { + // Do not allow locales of the form lang--variant with + // an empty country. + return defaultLocale; + } + if (!TextUtils.isEmpty(locale.getVariant())) { + defaultLocale += LOCALE_DELIMITER + locale.getVariant(); + } + + return defaultLocale; } /**