Loading java/src/com/android/inputmethod/keyboard/Keyboard.java +13 −0 Original line number Diff line number Diff line Loading @@ -440,6 +440,19 @@ public class Keyboard { } } public static String toThemeName(int themeId) { // This should be aligned with theme-*.xml resource files' themeId attribute. switch (themeId) { case 0: return "Basic"; case 1: return "BasicHighContrast"; case 5: return "IceCreamSandwich"; case 6: return "Stone"; case 7: return "StoneBold"; case 8: return "GingerBread"; default: return null; } } /** * Keyboard Building helper. * Loading java/src/com/android/inputmethod/keyboard/KeyboardSet.java +42 −25 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.inputmethod.keyboard; import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.TypedArray; import android.content.res.XmlResourceParser; Loading @@ -28,8 +29,6 @@ import com.android.inputmethod.latin.LatinIME; import com.android.inputmethod.latin.LatinImeLogger; import com.android.inputmethod.latin.LocaleUtils; import com.android.inputmethod.latin.R; import com.android.inputmethod.latin.SettingsValues; import com.android.inputmethod.latin.SubtypeSwitcher; import com.android.inputmethod.latin.Utils; import com.android.inputmethod.latin.XmlParseUtils; Loading Loading @@ -61,6 +60,7 @@ public class KeyboardSet { int mMode; int mInputType; int mImeOptions; boolean mTouchPositionCorrectionEnabled; boolean mSettingsKeyEnabled; boolean mVoiceKeyEnabled; boolean mVoiceKeyOnMain; Loading Loading @@ -115,9 +115,8 @@ public class KeyboardSet { return Builder.getKeyboardId(elementState, false, mParams); } private static Keyboard getKeyboard(Context context, int xmlId, KeyboardId id) { private Keyboard getKeyboard(Context context, int xmlId, KeyboardId id) { final Resources res = context.getResources(); final SubtypeSwitcher subtypeSwitcher = SubtypeSwitcher.getInstance(); final SoftReference<Keyboard> ref = sKeyboardCache.get(id); Keyboard keyboard = (ref == null) ? null : ref.get(); if (keyboard == null) { Loading @@ -126,9 +125,7 @@ public class KeyboardSet { final Keyboard.Builder<Keyboard.Params> builder = new Keyboard.Builder<Keyboard.Params>(context, new Keyboard.Params()); builder.load(xmlId, id); builder.setTouchPositionCorrectionEnabled( subtypeSwitcher.currentSubtypeContainsExtraValueKey( LatinIME.SUBTYPE_EXTRA_VALUE_SUPPORT_TOUCH_POSITION_CORRECTION)); builder.setTouchPositionCorrectionEnabled(mParams.mTouchPositionCorrectionEnabled); keyboard = builder.build(); } finally { LocaleUtils.setSystemLocale(res, savedLocale); Loading @@ -151,15 +148,17 @@ public class KeyboardSet { public static class Builder { private final Context mContext; private final String mPackageName; private final Resources mResources; private final EditorInfo mEditorInfo; private final Params mParams = new Params(); public Builder(Context context, EditorInfo editorInfo, SettingsValues settingsValues) { public Builder(Context context, EditorInfo editorInfo) { mContext = context; mPackageName = context.getPackageName(); mResources = context.getResources(); final SubtypeSwitcher subtypeSwitcher = SubtypeSwitcher.getInstance(); final String packageName = context.getPackageName(); mEditorInfo = editorInfo; final Params params = mParams; params.mMode = Utils.getKeyboardMode(editorInfo); Loading @@ -167,27 +166,45 @@ public class KeyboardSet { params.mInputType = editorInfo.inputType; params.mImeOptions = editorInfo.imeOptions; } params.mSettingsKeyEnabled = settingsValues.isSettingsKeyEnabled(); params.mNoSettingsKey = Utils.inPrivateImeOptions( mPackageName, LatinIME.IME_OPTION_NO_SETTINGS_KEY, mEditorInfo); } public Builder setScreenGeometry(int orientation, int widthPixels) { mParams.mOrientation = orientation; mParams.mWidth = widthPixels; return this; } // TODO: Use InputMethodSubtype object as argument. public Builder setSubtype(Locale inputLocale, boolean asciiCapable, boolean touchPositionCorrectionEnabled) { final boolean forceAscii = Utils.inPrivateImeOptions( mPackageName, LatinIME.IME_OPTION_FORCE_ASCII, mEditorInfo); mParams.mLocale = (forceAscii && !asciiCapable) ? Locale.US : inputLocale; mParams.mTouchPositionCorrectionEnabled = touchPositionCorrectionEnabled; return this; } public Builder setOptions(boolean settingsKeyEnabled, boolean voiceKeyEnabled, boolean voiceKeyOnMain) { mParams.mSettingsKeyEnabled = settingsKeyEnabled; @SuppressWarnings("deprecation") final boolean noMicrophone = Utils.inPrivateImeOptions( packageName, LatinIME.IME_OPTION_NO_MICROPHONE, editorInfo) mPackageName, LatinIME.IME_OPTION_NO_MICROPHONE, mEditorInfo) || Utils.inPrivateImeOptions( null, LatinIME.IME_OPTION_NO_MICROPHONE_COMPAT, editorInfo); params.mVoiceKeyEnabled = settingsValues.isVoiceKeyEnabled(editorInfo) && !noMicrophone; params.mVoiceKeyOnMain = settingsValues.isVoiceKeyOnMain(); params.mNoSettingsKey = Utils.inPrivateImeOptions( packageName, LatinIME.IME_OPTION_NO_SETTINGS_KEY, editorInfo); final boolean forceAscii = Utils.inPrivateImeOptions( packageName, LatinIME.IME_OPTION_FORCE_ASCII, editorInfo); final boolean asciiCapable = subtypeSwitcher.currentSubtypeContainsExtraValueKey( LatinIME.SUBTYPE_EXTRA_VALUE_ASCII_CAPABLE); params.mLocale = (forceAscii && !asciiCapable) ? Locale.US : subtypeSwitcher.getInputLocale(); params.mOrientation = mResources.getConfiguration().orientation; params.mWidth = mResources.getDisplayMetrics().widthPixels; null, LatinIME.IME_OPTION_NO_MICROPHONE_COMPAT, mEditorInfo); mParams.mVoiceKeyEnabled = voiceKeyEnabled && !noMicrophone; mParams.mVoiceKeyOnMain = voiceKeyOnMain; return this; } public KeyboardSet build() { if (mParams.mOrientation == Configuration.ORIENTATION_UNDEFINED) throw new RuntimeException("Screen geometry is not specified"); if (mParams.mLocale == null) throw new RuntimeException("KeyboardSet subtype is not specified"); final Locale savedLocale = LocaleUtils.setSystemLocale(mResources, mParams.mLocale); try { parseKeyboardSet(mResources, R.xml.keyboard_set); Loading java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java +14 −15 Original line number Diff line number Diff line Loading @@ -117,8 +117,20 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions, } public void loadKeyboard(EditorInfo editorInfo, SettingsValues settingsValues) { mKeyboardSet = new KeyboardSet.Builder(mThemeContext, editorInfo, settingsValues) .build(); final KeyboardSet.Builder builder = new KeyboardSet.Builder(mThemeContext, editorInfo); builder.setScreenGeometry(mThemeContext.getResources().getConfiguration().orientation, mThemeContext.getResources().getDisplayMetrics().widthPixels); builder.setSubtype( mSubtypeSwitcher.getInputLocale(), mSubtypeSwitcher.currentSubtypeContainsExtraValueKey( LatinIME.SUBTYPE_EXTRA_VALUE_ASCII_CAPABLE), mSubtypeSwitcher.currentSubtypeContainsExtraValueKey( LatinIME.SUBTYPE_EXTRA_VALUE_SUPPORT_TOUCH_POSITION_CORRECTION)); builder.setOptions( settingsValues.isSettingsKeyEnabled(), settingsValues.isVoiceKeyEnabled(editorInfo), settingsValues.isVoiceKeyOnMain()); mKeyboardSet = builder.build(); final KeyboardId mainKeyboardId = mKeyboardSet.getMainKeyboardId(); try { mState.onLoadKeyboard(mResources.getString(R.string.layout_switch_back_symbols), Loading Loading @@ -418,17 +430,4 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions, } } } private static String themeName(int themeId) { // This should be aligned with theme-*.xml resource files' themeId attribute. switch (themeId) { case 0: return "Basic"; case 1: return "BasicHighContrast"; case 5: return "IceCreamSandwich"; case 6: return "Stone"; case 7: return "StoneBold"; case 8: return "GingerBread"; default: return null; } } } Loading
java/src/com/android/inputmethod/keyboard/Keyboard.java +13 −0 Original line number Diff line number Diff line Loading @@ -440,6 +440,19 @@ public class Keyboard { } } public static String toThemeName(int themeId) { // This should be aligned with theme-*.xml resource files' themeId attribute. switch (themeId) { case 0: return "Basic"; case 1: return "BasicHighContrast"; case 5: return "IceCreamSandwich"; case 6: return "Stone"; case 7: return "StoneBold"; case 8: return "GingerBread"; default: return null; } } /** * Keyboard Building helper. * Loading
java/src/com/android/inputmethod/keyboard/KeyboardSet.java +42 −25 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.inputmethod.keyboard; import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.TypedArray; import android.content.res.XmlResourceParser; Loading @@ -28,8 +29,6 @@ import com.android.inputmethod.latin.LatinIME; import com.android.inputmethod.latin.LatinImeLogger; import com.android.inputmethod.latin.LocaleUtils; import com.android.inputmethod.latin.R; import com.android.inputmethod.latin.SettingsValues; import com.android.inputmethod.latin.SubtypeSwitcher; import com.android.inputmethod.latin.Utils; import com.android.inputmethod.latin.XmlParseUtils; Loading Loading @@ -61,6 +60,7 @@ public class KeyboardSet { int mMode; int mInputType; int mImeOptions; boolean mTouchPositionCorrectionEnabled; boolean mSettingsKeyEnabled; boolean mVoiceKeyEnabled; boolean mVoiceKeyOnMain; Loading Loading @@ -115,9 +115,8 @@ public class KeyboardSet { return Builder.getKeyboardId(elementState, false, mParams); } private static Keyboard getKeyboard(Context context, int xmlId, KeyboardId id) { private Keyboard getKeyboard(Context context, int xmlId, KeyboardId id) { final Resources res = context.getResources(); final SubtypeSwitcher subtypeSwitcher = SubtypeSwitcher.getInstance(); final SoftReference<Keyboard> ref = sKeyboardCache.get(id); Keyboard keyboard = (ref == null) ? null : ref.get(); if (keyboard == null) { Loading @@ -126,9 +125,7 @@ public class KeyboardSet { final Keyboard.Builder<Keyboard.Params> builder = new Keyboard.Builder<Keyboard.Params>(context, new Keyboard.Params()); builder.load(xmlId, id); builder.setTouchPositionCorrectionEnabled( subtypeSwitcher.currentSubtypeContainsExtraValueKey( LatinIME.SUBTYPE_EXTRA_VALUE_SUPPORT_TOUCH_POSITION_CORRECTION)); builder.setTouchPositionCorrectionEnabled(mParams.mTouchPositionCorrectionEnabled); keyboard = builder.build(); } finally { LocaleUtils.setSystemLocale(res, savedLocale); Loading @@ -151,15 +148,17 @@ public class KeyboardSet { public static class Builder { private final Context mContext; private final String mPackageName; private final Resources mResources; private final EditorInfo mEditorInfo; private final Params mParams = new Params(); public Builder(Context context, EditorInfo editorInfo, SettingsValues settingsValues) { public Builder(Context context, EditorInfo editorInfo) { mContext = context; mPackageName = context.getPackageName(); mResources = context.getResources(); final SubtypeSwitcher subtypeSwitcher = SubtypeSwitcher.getInstance(); final String packageName = context.getPackageName(); mEditorInfo = editorInfo; final Params params = mParams; params.mMode = Utils.getKeyboardMode(editorInfo); Loading @@ -167,27 +166,45 @@ public class KeyboardSet { params.mInputType = editorInfo.inputType; params.mImeOptions = editorInfo.imeOptions; } params.mSettingsKeyEnabled = settingsValues.isSettingsKeyEnabled(); params.mNoSettingsKey = Utils.inPrivateImeOptions( mPackageName, LatinIME.IME_OPTION_NO_SETTINGS_KEY, mEditorInfo); } public Builder setScreenGeometry(int orientation, int widthPixels) { mParams.mOrientation = orientation; mParams.mWidth = widthPixels; return this; } // TODO: Use InputMethodSubtype object as argument. public Builder setSubtype(Locale inputLocale, boolean asciiCapable, boolean touchPositionCorrectionEnabled) { final boolean forceAscii = Utils.inPrivateImeOptions( mPackageName, LatinIME.IME_OPTION_FORCE_ASCII, mEditorInfo); mParams.mLocale = (forceAscii && !asciiCapable) ? Locale.US : inputLocale; mParams.mTouchPositionCorrectionEnabled = touchPositionCorrectionEnabled; return this; } public Builder setOptions(boolean settingsKeyEnabled, boolean voiceKeyEnabled, boolean voiceKeyOnMain) { mParams.mSettingsKeyEnabled = settingsKeyEnabled; @SuppressWarnings("deprecation") final boolean noMicrophone = Utils.inPrivateImeOptions( packageName, LatinIME.IME_OPTION_NO_MICROPHONE, editorInfo) mPackageName, LatinIME.IME_OPTION_NO_MICROPHONE, mEditorInfo) || Utils.inPrivateImeOptions( null, LatinIME.IME_OPTION_NO_MICROPHONE_COMPAT, editorInfo); params.mVoiceKeyEnabled = settingsValues.isVoiceKeyEnabled(editorInfo) && !noMicrophone; params.mVoiceKeyOnMain = settingsValues.isVoiceKeyOnMain(); params.mNoSettingsKey = Utils.inPrivateImeOptions( packageName, LatinIME.IME_OPTION_NO_SETTINGS_KEY, editorInfo); final boolean forceAscii = Utils.inPrivateImeOptions( packageName, LatinIME.IME_OPTION_FORCE_ASCII, editorInfo); final boolean asciiCapable = subtypeSwitcher.currentSubtypeContainsExtraValueKey( LatinIME.SUBTYPE_EXTRA_VALUE_ASCII_CAPABLE); params.mLocale = (forceAscii && !asciiCapable) ? Locale.US : subtypeSwitcher.getInputLocale(); params.mOrientation = mResources.getConfiguration().orientation; params.mWidth = mResources.getDisplayMetrics().widthPixels; null, LatinIME.IME_OPTION_NO_MICROPHONE_COMPAT, mEditorInfo); mParams.mVoiceKeyEnabled = voiceKeyEnabled && !noMicrophone; mParams.mVoiceKeyOnMain = voiceKeyOnMain; return this; } public KeyboardSet build() { if (mParams.mOrientation == Configuration.ORIENTATION_UNDEFINED) throw new RuntimeException("Screen geometry is not specified"); if (mParams.mLocale == null) throw new RuntimeException("KeyboardSet subtype is not specified"); final Locale savedLocale = LocaleUtils.setSystemLocale(mResources, mParams.mLocale); try { parseKeyboardSet(mResources, R.xml.keyboard_set); Loading
java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java +14 −15 Original line number Diff line number Diff line Loading @@ -117,8 +117,20 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions, } public void loadKeyboard(EditorInfo editorInfo, SettingsValues settingsValues) { mKeyboardSet = new KeyboardSet.Builder(mThemeContext, editorInfo, settingsValues) .build(); final KeyboardSet.Builder builder = new KeyboardSet.Builder(mThemeContext, editorInfo); builder.setScreenGeometry(mThemeContext.getResources().getConfiguration().orientation, mThemeContext.getResources().getDisplayMetrics().widthPixels); builder.setSubtype( mSubtypeSwitcher.getInputLocale(), mSubtypeSwitcher.currentSubtypeContainsExtraValueKey( LatinIME.SUBTYPE_EXTRA_VALUE_ASCII_CAPABLE), mSubtypeSwitcher.currentSubtypeContainsExtraValueKey( LatinIME.SUBTYPE_EXTRA_VALUE_SUPPORT_TOUCH_POSITION_CORRECTION)); builder.setOptions( settingsValues.isSettingsKeyEnabled(), settingsValues.isVoiceKeyEnabled(editorInfo), settingsValues.isVoiceKeyOnMain()); mKeyboardSet = builder.build(); final KeyboardId mainKeyboardId = mKeyboardSet.getMainKeyboardId(); try { mState.onLoadKeyboard(mResources.getString(R.string.layout_switch_back_symbols), Loading Loading @@ -418,17 +430,4 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions, } } } private static String themeName(int themeId) { // This should be aligned with theme-*.xml resource files' themeId attribute. switch (themeId) { case 0: return "Basic"; case 1: return "BasicHighContrast"; case 5: return "IceCreamSandwich"; case 6: return "Stone"; case 7: return "StoneBold"; case 8: return "GingerBread"; default: return null; } } }