Merge remote-tracking branch 'goog/master' into merge

main
satok 2011-04-25 22:22:00 +09:00
commit 0dbb7e26d1
4 changed files with 35 additions and 16 deletions

View File

@ -33,12 +33,12 @@
<string name="quick_fixes_summary" msgid="3405028402510332373">"修正一般打字錯誤"</string> <string name="quick_fixes_summary" msgid="3405028402510332373">"修正一般打字錯誤"</string>
<string name="prefs_show_suggestions" msgid="8026799663445531637">"顯示修正建議"</string> <string name="prefs_show_suggestions" msgid="8026799663445531637">"顯示修正建議"</string>
<string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"輸入時顯示建議字詞"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"輸入時顯示建議字詞"</string>
<string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"永遠顯示"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"一律顯示"</string>
<string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"以垂直模式顯示"</string> <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3551821800439659812">"以垂直模式顯示"</string>
<string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"永遠隱藏"</string> <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"永遠隱藏"</string>
<string name="prefs_settings_key" msgid="4623341240804046498">"顯示設定金鑰"</string> <string name="prefs_settings_key" msgid="4623341240804046498">"顯示設定金鑰"</string>
<string name="settings_key_mode_auto_name" msgid="2993460277873684680">"自動"</string> <string name="settings_key_mode_auto_name" msgid="2993460277873684680">"自動"</string>
<string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"永遠顯示"</string> <string name="settings_key_mode_always_show_name" msgid="3047567041784760575">"一律顯示"</string>
<string name="settings_key_mode_always_hide_name" msgid="7833948046716923994">"永遠隱藏"</string> <string name="settings_key_mode_always_hide_name" msgid="7833948046716923994">"永遠隱藏"</string>
<string name="auto_correction" msgid="4979925752001319458">"自動修正"</string> <string name="auto_correction" msgid="4979925752001319458">"自動修正"</string>
<string name="auto_correction_summary" msgid="5625751551134658006">"自動插入空白鍵和標點符號鍵盤,以修正拼字錯誤"</string> <string name="auto_correction_summary" msgid="5625751551134658006">"自動插入空白鍵和標點符號鍵盤,以修正拼字錯誤"</string>

View File

@ -29,6 +29,7 @@ import java.util.Locale;
// This class is used only when the IME doesn't use method.xml for language switching. // This class is used only when the IME doesn't use method.xml for language switching.
public class LanguageSwitcherProxy implements SharedPreferences.OnSharedPreferenceChangeListener { public class LanguageSwitcherProxy implements SharedPreferences.OnSharedPreferenceChangeListener {
private static final LanguageSwitcherProxy sInstance = new LanguageSwitcherProxy(); private static final LanguageSwitcherProxy sInstance = new LanguageSwitcherProxy();
private LatinIME mService;
private LanguageSwitcher mLanguageSwitcher; private LanguageSwitcher mLanguageSwitcher;
private SharedPreferences mPrefs; private SharedPreferences mPrefs;
@ -43,6 +44,7 @@ public class LanguageSwitcherProxy implements SharedPreferences.OnSharedPreferen
sInstance.mLanguageSwitcher = new LanguageSwitcher(service); sInstance.mLanguageSwitcher = new LanguageSwitcher(service);
sInstance.mLanguageSwitcher.loadLocales(prefs, conf.locale); sInstance.mLanguageSwitcher.loadLocales(prefs, conf.locale);
sInstance.mPrefs = prefs; sInstance.mPrefs = prefs;
sInstance.mService = service;
prefs.registerOnSharedPreferenceChangeListener(sInstance); prefs.registerOnSharedPreferenceChangeListener(sInstance);
} }
@ -80,6 +82,9 @@ public class LanguageSwitcherProxy implements SharedPreferences.OnSharedPreferen
if (key.equals(Settings.PREF_SELECTED_LANGUAGES) if (key.equals(Settings.PREF_SELECTED_LANGUAGES)
|| key.equals(Settings.PREF_INPUT_LANGUAGE)) { || key.equals(Settings.PREF_INPUT_LANGUAGE)) {
mLanguageSwitcher.loadLocales(prefs, null); mLanguageSwitcher.loadLocales(prefs, null);
if (mService != null) {
mService.onRefreshKeyboard();
}
} }
} }
} }

View File

@ -194,8 +194,7 @@ public class LatinKeyboard extends Keyboard {
// Layout local language name and left and right arrow on spacebar. // Layout local language name and left and right arrow on spacebar.
private static String layoutSpacebar(Paint paint, Locale locale, Drawable lArrow, private static String layoutSpacebar(Paint paint, Locale locale, Drawable lArrow,
Drawable rArrow, int width, int height, float origTextSize, Drawable rArrow, int width, int height, float origTextSize) {
boolean allowVariableTextSize) {
final float arrowWidth = lArrow.getIntrinsicWidth(); final float arrowWidth = lArrow.getIntrinsicWidth();
final float arrowHeight = lArrow.getIntrinsicHeight(); final float arrowHeight = lArrow.getIntrinsicHeight();
final float maxTextWidth = width - (arrowWidth + arrowWidth); final float maxTextWidth = width - (arrowWidth + arrowWidth);
@ -206,17 +205,23 @@ public class LatinKeyboard extends Keyboard {
int textWidth = getTextWidth(paint, language, origTextSize, bounds); int textWidth = getTextWidth(paint, language, origTextSize, bounds);
// Assuming text width and text size are proportional to each other. // Assuming text width and text size are proportional to each other.
float textSize = origTextSize * Math.min(maxTextWidth / textWidth, 1.0f); float textSize = origTextSize * Math.min(maxTextWidth / textWidth, 1.0f);
// allow variable text size
textWidth = getTextWidth(paint, language, textSize, bounds);
// If text size goes too small or text does not fit, use middle or short name
final boolean useMiddleName = (textSize / origTextSize < MINIMUM_SCALE_OF_LANGUAGE_NAME)
|| (textWidth > maxTextWidth);
final boolean useShortName; final boolean useShortName;
if (allowVariableTextSize) { if (useMiddleName) {
textWidth = getTextWidth(paint, language, textSize, bounds); language = SubtypeSwitcher.getMiddleDisplayLanguage(locale);
// If text size goes too small or text does not fit, use short name textWidth = getTextWidth(paint, language, origTextSize, bounds);
useShortName = textSize / origTextSize < MINIMUM_SCALE_OF_LANGUAGE_NAME textSize = origTextSize * Math.min(maxTextWidth / textWidth, 1.0f);
|| textWidth > maxTextWidth; useShortName = (textSize / origTextSize < MINIMUM_SCALE_OF_LANGUAGE_NAME)
|| (textWidth > maxTextWidth);
} else { } else {
useShortName = textWidth > maxTextWidth; useShortName = false;
textSize = origTextSize;
} }
if (useShortName) { if (useShortName) {
language = SubtypeSwitcher.getShortDisplayLanguage(locale); language = SubtypeSwitcher.getShortDisplayLanguage(locale);
textWidth = getTextWidth(paint, language, origTextSize, bounds); textWidth = getTextWidth(paint, language, origTextSize, bounds);
@ -276,11 +281,9 @@ public class LatinKeyboard extends Keyboard {
defaultTextSize = 14; defaultTextSize = 14;
} }
final boolean allowVariableTextSize = true;
final String language = layoutSpacebar(paint, inputLocale, final String language = layoutSpacebar(paint, inputLocale,
mButtonArrowLeftIcon, mButtonArrowRightIcon, width, height, mButtonArrowLeftIcon, mButtonArrowRightIcon, width, height,
getTextSizeFromTheme(mContext.getTheme(), textStyle, defaultTextSize), getTextSizeFromTheme(mContext.getTheme(), textStyle, defaultTextSize));
allowVariableTextSize);
// Draw language text with shadow // Draw language text with shadow
// In case there is no space icon, we will place the language text at the center of // In case there is no space icon, we will place the language text at the center of
@ -294,9 +297,12 @@ public class LatinKeyboard extends Keyboard {
paint.setColor(getSpacebarTextColor(mSpacebarTextColor, textFadeFactor)); paint.setColor(getSpacebarTextColor(mSpacebarTextColor, textFadeFactor));
canvas.drawText(language, width / 2, baseline - descent, paint); canvas.drawText(language, width / 2, baseline - descent, paint);
// Put arrows that are already layed out on either side of the text // Put arrows that are already laid out on either side of the text
// Because language switch is disabled on phone and number layouts, hide arrows.
// TODO: Sort out how to enable language switch on these layouts.
if (mSubtypeSwitcher.useSpacebarLanguageSwitcher() if (mSubtypeSwitcher.useSpacebarLanguageSwitcher()
&& mSubtypeSwitcher.getEnabledKeyboardLocaleCount() > 1) { && mSubtypeSwitcher.getEnabledKeyboardLocaleCount() > 1
&& !(isPhoneKeyboard() || isNumberKeyboard())) {
mButtonArrowLeftIcon.setColorFilter(getSpacebarDrawableFilter(textFadeFactor)); mButtonArrowLeftIcon.setColorFilter(getSpacebarDrawableFilter(textFadeFactor));
mButtonArrowRightIcon.setColorFilter(getSpacebarDrawableFilter(textFadeFactor)); mButtonArrowRightIcon.setColorFilter(getSpacebarDrawableFilter(textFadeFactor));
mButtonArrowLeftIcon.draw(canvas); mButtonArrowLeftIcon.draw(canvas);
@ -349,6 +355,10 @@ public class LatinKeyboard extends Keyboard {
} }
public boolean shouldTriggerSpacebarSlidingLanguageSwitch(int diff) { public boolean shouldTriggerSpacebarSlidingLanguageSwitch(int diff) {
// On phone and number layouts, sliding language switch is disabled.
// TODO: Sort out how to enable language switch on these layouts.
if (isPhoneKeyboard() || isNumberKeyboard())
return false;
return Math.abs(diff) > mSpacebarLanguageSwitchThreshold; return Math.abs(diff) > mSpacebarLanguageSwitchThreshold;
} }

View File

@ -607,6 +607,10 @@ public class SubtypeSwitcher {
return toTitleCase(locale.getDisplayLanguage(locale)); return toTitleCase(locale.getDisplayLanguage(locale));
} }
public static String getMiddleDisplayLanguage(Locale locale) {
return toTitleCase(locale.getDisplayLanguage(new Locale(locale.getLanguage())));
}
public static String getShortDisplayLanguage(Locale locale) { public static String getShortDisplayLanguage(Locale locale) {
return toTitleCase(locale.getLanguage()); return toTitleCase(locale.getLanguage());
} }