aboutsummaryrefslogtreecommitdiffstats
path: root/java/src
diff options
context:
space:
mode:
authorTadashi G. Takaoka <takaoka@google.com>2012-04-03 21:03:10 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-04-03 21:03:10 -0700
commit234bf612ca975bead3cb53a9baf6502aa1709b42 (patch)
tree5f5c09cb199b6de32d65800487d6424ed68b5785 /java/src
parente0d06fa793e0a50ffb067be4806713d6bb6ef787 (diff)
parent3bf57a5624679a20db26df912077a53b9f90ad36 (diff)
downloadlatinime-234bf612ca975bead3cb53a9baf6502aa1709b42.tar.gz
latinime-234bf612ca975bead3cb53a9baf6502aa1709b42.tar.xz
latinime-234bf612ca975bead3cb53a9baf6502aa1709b42.zip
Merge "Use "No language (QWERTY)" for language agnostic QWERTY keyboard name"
Diffstat (limited to 'java/src')
-rw-r--r--java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java8
-rw-r--r--java/src/com/android/inputmethod/latin/StringUtils.java38
-rw-r--r--java/src/com/android/inputmethod/latin/SubtypeLocale.java91
-rw-r--r--java/src/com/android/inputmethod/latin/SubtypeSwitcher.java4
-rw-r--r--java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java5
5 files changed, 88 insertions, 58 deletions
diff --git a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
index e2af97185..2689e6e13 100644
--- a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
@@ -47,7 +47,7 @@ import com.android.inputmethod.latin.LatinImeLogger;
import com.android.inputmethod.latin.R;
import com.android.inputmethod.latin.ResearchLogger;
import com.android.inputmethod.latin.StaticInnerHandlerWrapper;
-import com.android.inputmethod.latin.StringUtils;
+import com.android.inputmethod.latin.SubtypeLocale;
import com.android.inputmethod.latin.SubtypeUtils;
import com.android.inputmethod.latin.Utils;
import com.android.inputmethod.latin.Utils.UsabilityStudyLogUtils;
@@ -926,7 +926,7 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
paint.setTextAlign(Align.CENTER);
paint.setTypeface(Typeface.DEFAULT);
// Estimate appropriate language name text size to fit in maxTextWidth.
- String language = StringUtils.getFullDisplayName(locale, true);
+ String language = SubtypeLocale.getFullDisplayName(locale);
int textWidth = getTextWidth(paint, language, origTextSize);
// Assuming text width and text size are proportional to each other.
float textSize = origTextSize * Math.min(width / textWidth, 1.0f);
@@ -938,7 +938,7 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
final boolean useShortName;
if (useMiddleName) {
- language = StringUtils.getMiddleDisplayLanguage(locale);
+ language = SubtypeLocale.getMiddleDisplayName(locale);
textWidth = getTextWidth(paint, language, origTextSize);
textSize = origTextSize * Math.min(width / textWidth, 1.0f);
useShortName = (textSize / origTextSize < MINIMUM_SCALE_OF_LANGUAGE_NAME)
@@ -948,7 +948,7 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
}
if (useShortName) {
- language = StringUtils.getShortDisplayLanguage(locale);
+ language = SubtypeLocale.getShortDisplayName(locale);
textWidth = getTextWidth(paint, language, origTextSize);
textSize = origTextSize * Math.min(width / textWidth, 1.0f);
}
diff --git a/java/src/com/android/inputmethod/latin/StringUtils.java b/java/src/com/android/inputmethod/latin/StringUtils.java
index 7b34cae63..7000e4633 100644
--- a/java/src/com/android/inputmethod/latin/StringUtils.java
+++ b/java/src/com/android/inputmethod/latin/StringUtils.java
@@ -22,7 +22,6 @@ import android.view.inputmethod.EditorInfo;
import com.android.inputmethod.keyboard.Keyboard;
import java.util.ArrayList;
-import java.util.Locale;
public class StringUtils {
private StringUtils() {
@@ -150,41 +149,4 @@ public class StringUtils {
i++;
}
}
-
- public static String getFullDisplayName(Locale locale, boolean returnsNameInThisLocale) {
- if (returnsNameInThisLocale) {
- return toTitleCase(SubtypeLocale.getFullDisplayName(locale), locale);
- } else {
- return toTitleCase(locale.getDisplayName(), locale);
- }
- }
-
- public static String getDisplayLanguage(Locale locale) {
- return toTitleCase(SubtypeLocale.getFullDisplayName(locale), locale);
- }
-
- public static String getMiddleDisplayLanguage(Locale locale) {
- return toTitleCase((LocaleUtils.constructLocaleFromString(
- locale.getLanguage()).getDisplayLanguage(locale)), locale);
- }
-
- public static String getShortDisplayLanguage(Locale locale) {
- return toTitleCase(locale.getLanguage(), locale);
- }
-
- public static String toTitleCase(String s, Locale locale) {
- if (s.length() <= 1) {
- // TODO: is this really correct? Shouldn't this be s.toUpperCase()?
- return s;
- }
- // TODO: fix the bugs below
- // - This does not work for Greek, because it returns upper case instead of title case.
- // - It does not work for Serbian, because it fails to account for the "lj" character,
- // which should be "Lj" in title case and "LJ" in upper case.
- // - It does not work for Dutch, because it fails to account for the "ij" digraph, which
- // are two different characters but both should be capitalized as "IJ" as if they were
- // a single letter.
- // - It also does not work with unicode surrogate code points.
- return s.toUpperCase(locale).charAt(0) + s.substring(1);
- }
}
diff --git a/java/src/com/android/inputmethod/latin/SubtypeLocale.java b/java/src/com/android/inputmethod/latin/SubtypeLocale.java
index 66c13bd2e..40051a7ee 100644
--- a/java/src/com/android/inputmethod/latin/SubtypeLocale.java
+++ b/java/src/com/android/inputmethod/latin/SubtypeLocale.java
@@ -22,6 +22,13 @@ import android.content.res.Resources;
import java.util.Locale;
public class SubtypeLocale {
+ // Special language code to represent "no language".
+ /* package for test */ static final String NO_LANGUAGE = "zz";
+ // Special country code to represent "QWERTY".
+ /* package for test */ static final String QWERTY = "QY";
+
+ public static final Locale LOCALE_NO_LANGUAGE_QWERTY = new Locale(NO_LANGUAGE, QWERTY);
+
private static String[] sExceptionKeys;
private static String[] sExceptionValues;
@@ -35,18 +42,82 @@ public class SubtypeLocale {
sExceptionValues = res.getStringArray(R.array.subtype_locale_exception_values);
}
- public static String getFullDisplayName(Locale locale) {
- final String localeCode = locale.toString();
+ private static String lookupExceptionalLocale(String key) {
for (int index = 0; index < sExceptionKeys.length; index++) {
- if (sExceptionKeys[index].equals(localeCode)) {
- final String value = sExceptionValues[index];
- if (value.indexOf("%s") >= 0) {
- final String languageName = locale.getDisplayLanguage(locale);
- return String.format(value, languageName);
- }
- return value;
+ if (sExceptionKeys[index].equals(key)) {
+ return sExceptionValues[index];
}
}
- return locale.getDisplayName(locale);
+ return null;
+ }
+
+ // Get Locale's full display name in its locale.
+ // For example:
+ // "fr_CH" is converted to "Français (Suisse)".
+ // "de_QY" is converted to "Deutsche (QWERTY)". (Any locale that has country code "QY")
+ // "zz_QY" is converted to "QWERTY". (The language code "zz" means "No language", thus just
+ // ends up with the keyboard layout name.)
+ public static String getFullDisplayName(Locale locale) {
+ final String key;
+ if (locale.getLanguage().equals(NO_LANGUAGE)) {
+ key = locale.getCountry();
+ } else if (locale.getCountry().equals(QWERTY)) {
+ key = "*_" + QWERTY;
+ } else {
+ key = locale.toString();
+ }
+ final String value = lookupExceptionalLocale(key);
+ if (value == null) {
+ return toTitleCase(locale.getDisplayName(locale), locale);
+ }
+ if (value.indexOf("%s") >= 0) {
+ final String languageName = toTitleCase(locale.getDisplayLanguage(locale), locale);
+ return String.format(value, languageName);
+ }
+ return value;
+ }
+
+ // Get Locale's middle display name in its locale.
+ // For example:
+ // "fr_CH" is converted to "Français".
+ // "de_QY" is converted to "Deutsche". (Any locale that has country code "QY")
+ // "zz_QY" is converted to "QWERTY". (The language code "zz" means "No language", thus just
+ // ends up with the keyboard layout name.)
+ public static String getMiddleDisplayName(Locale locale) {
+ if (NO_LANGUAGE.equals(locale.getLanguage())) {
+ return lookupExceptionalLocale(locale.getCountry());
+ } else {
+ return toTitleCase(locale.getDisplayLanguage(locale), locale);
+ }
+ }
+
+ // Get Locale's short display name in its locale.
+ // For example:
+ // "fr_CH" is converted to "Fr".
+ // "de_QY" is converted to "De". (Any locale that has country code "QY")
+ // "zz_QY" is converter to "QY". (The language code "zz" means "No language", thus just ends
+ // up with the keyboard layout name.)
+ public static String getShortDisplayName(Locale locale) {
+ if (NO_LANGUAGE.equals(locale.getLanguage())) {
+ return locale.getCountry();
+ } else {
+ return toTitleCase(locale.getLanguage(), locale);
+ }
+ }
+
+ public static String toTitleCase(String s, Locale locale) {
+ if (s.length() <= 1) {
+ // TODO: is this really correct? Shouldn't this be s.toUpperCase()?
+ return s;
+ }
+ // TODO: fix the bugs below
+ // - This does not work for Greek, because it returns upper case instead of title case.
+ // - It does not work for Serbian, because it fails to account for the "lj" character,
+ // which should be "Lj" in title case and "LJ" in upper case.
+ // - It does not work for Dutch, because it fails to account for the "ij" digraph, which
+ // are two different characters but both should be capitalized as "IJ" as if they were
+ // a single letter.
+ // - It also does not work with unicode surrogate code points.
+ return s.toUpperCase(locale).charAt(0) + s.substring(1);
}
}
diff --git a/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java b/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
index e35364420..c2dafcf73 100644
--- a/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
+++ b/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
@@ -420,10 +420,6 @@ public class SubtypeSwitcher {
return KEYBOARD_MODE.equals(getCurrentSubtypeMode());
}
- public String getInputLanguageName() {
- return StringUtils.getDisplayLanguage(getInputLocale());
- }
-
/////////////////////////////
// Other utility functions //
/////////////////////////////
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
index 7b13e40c2..cd01bb146 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
@@ -37,6 +37,7 @@ import com.android.inputmethod.latin.Flag;
import com.android.inputmethod.latin.LocaleUtils;
import com.android.inputmethod.latin.R;
import com.android.inputmethod.latin.StringUtils;
+import com.android.inputmethod.latin.SubtypeLocale;
import com.android.inputmethod.latin.SynchronouslyLoadedContactsDictionary;
import com.android.inputmethod.latin.SynchronouslyLoadedUserDictionary;
import com.android.inputmethod.latin.WhitelistDictionary;
@@ -325,8 +326,8 @@ public class AndroidSpellCheckerService extends SpellCheckerService
} else if (CAPITALIZE_FIRST == capitalizeType) {
for (int i = 0; i < mSuggestions.size(); ++i) {
// Likewise
- mSuggestions.set(i, StringUtils.toTitleCase(mSuggestions.get(i).toString(),
- locale));
+ mSuggestions.set(i, SubtypeLocale.toTitleCase(
+ mSuggestions.get(i).toString(), locale));
}
}
// This returns a String[], while toArray() returns an Object[] which cannot be cast