Loading java/src/com/android/inputmethod/keyboard/Keyboard.java +5 −9 Original line number Diff line number Diff line Loading @@ -151,16 +151,11 @@ public class Keyboard { * @param context the application or service context * @param xmlLayoutResId the resource file that contains the keyboard layout and keys. * @param id keyboard identifier * @param width keyboard width */ public Keyboard(Context context, int xmlLayoutResId, KeyboardId id) { this(context, xmlLayoutResId, id, context.getResources().getDisplayMetrics().widthPixels, context.getResources().getDisplayMetrics().heightPixels); } private Keyboard(Context context, int xmlLayoutResId, KeyboardId id, int width, int height) { Resources res = context.getResources(); public Keyboard(Context context, int xmlLayoutResId, KeyboardId id, int width) { final Resources res = context.getResources(); GRID_WIDTH = res.getInteger(R.integer.config_keyboard_grid_width); GRID_HEIGHT = res.getInteger(R.integer.config_keyboard_grid_height); GRID_SIZE = GRID_WIDTH * GRID_HEIGHT; Loading @@ -168,7 +163,8 @@ public class Keyboard { final int horizontalEdgesPadding = (int)res.getDimension( R.dimen.keyboard_horizontal_edges_padding); mDisplayWidth = width - horizontalEdgesPadding * 2; mDisplayHeight = height; // TODO: Adjust the height by referring to the height of area available for drawing as well. mDisplayHeight = res.getDisplayMetrics().heightPixels; mDefaultHorizontalGap = 0; setKeyWidth(mDisplayWidth / 10); Loading java/src/com/android/inputmethod/keyboard/KeyboardId.java +24 −4 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ public class KeyboardId { public final Locale mLocale; public final int mOrientation; public final int mWidth; public final int mMode; public final int mXmlId; public final int mColorScheme; Loading @@ -49,17 +50,20 @@ public class KeyboardId { public final boolean mHasVoiceKey; public final int mImeAction; public final boolean mEnableShiftLock; public final String mXmlName; public final EditorInfo mAttribute; private final int mHashCode; public KeyboardId(String xmlName, int xmlId, int colorScheme, Locale locale, int orientation, int mode, EditorInfo attribute, boolean hasSettingsKey, boolean voiceKeyEnabled, boolean hasVoiceKey, boolean enableShiftLock) { int width, int mode, EditorInfo attribute, boolean hasSettingsKey, boolean voiceKeyEnabled, boolean hasVoiceKey, boolean enableShiftLock) { final int inputType = (attribute != null) ? attribute.inputType : 0; final int imeOptions = (attribute != null) ? attribute.imeOptions : 0; this.mLocale = locale; this.mOrientation = orientation; this.mWidth = width; this.mMode = mode; this.mXmlId = xmlId; this.mColorScheme = colorScheme; Loading @@ -73,11 +77,14 @@ public class KeyboardId { this.mImeAction = imeOptions & ( EditorInfo.IME_MASK_ACTION | EditorInfo.IME_FLAG_NO_ENTER_ACTION); this.mEnableShiftLock = enableShiftLock; this.mXmlName = xmlName; this.mAttribute = attribute; this.mHashCode = Arrays.hashCode(new Object[] { locale, orientation, width, mode, xmlId, colorScheme, Loading @@ -90,6 +97,18 @@ public class KeyboardId { }); } public KeyboardId cloneWithNewLayout(String xmlName, int xmlId) { return new KeyboardId(xmlName, xmlId, mColorScheme, mLocale, mOrientation, mWidth, mMode, mAttribute, mHasSettingsKey, mVoiceKeyEnabled, mHasVoiceKey, mEnableShiftLock); } public KeyboardId cloneWithNewGeometry(int width) { if (mWidth == width) return this; return new KeyboardId(mXmlName, mXmlId, mColorScheme, mLocale, mOrientation, width, mMode, mAttribute, mHasSettingsKey, mVoiceKeyEnabled, mHasVoiceKey, mEnableShiftLock); } public int getXmlId() { return mXmlId; } Loading Loading @@ -118,6 +137,7 @@ public class KeyboardId { boolean equals(KeyboardId other) { return other.mLocale.equals(this.mLocale) && other.mOrientation == this.mOrientation && other.mWidth == this.mWidth && other.mMode == this.mMode && other.mXmlId == this.mXmlId && other.mColorScheme == this.mColorScheme Loading @@ -136,10 +156,10 @@ public class KeyboardId { @Override public String toString() { return String.format("[%s.xml %s %s %s imeAction=%s %s%s%s%s%s%s]", return String.format("[%s.xml %s %s%d %s %s %s%s%s%s%s%s]", mXmlName, mLocale, (mOrientation == 1 ? "port" : "land"), (mOrientation == 1 ? "port" : "land"), mWidth, modeName(mMode), EditorInfoCompatUtils.imeOptionsName(mImeAction), (mPasswordInput ? " passwordInput" : ""), Loading java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java +43 −36 Original line number Diff line number Diff line Loading @@ -37,7 +37,7 @@ import java.util.Locale; public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceChangeListener { private static final String TAG = "KeyboardSwitcher"; private static final boolean DEBUG = false; private static final boolean DEBUG_CACHE = false; public static final boolean DEBUG_STATE = false; private static String sConfigDefaultKeyboardThemeId; Loading Loading @@ -99,6 +99,7 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha private static final int DEFAULT_SETTINGS_KEY_MODE = SETTINGS_KEY_MODE_AUTO; private int mLayoutId; private int mKeyboardWidth; private static final KeyboardSwitcher sInstance = new KeyboardSwitcher(); Loading Loading @@ -151,17 +152,39 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha // Update the settings key state because number of enabled IMEs could have been changed mSettingsKeyEnabledInSettings = getSettingsKeyMode(mPrefs, mInputMethodService); final KeyboardId id = getKeyboardId(attribute, isSymbols); makeSymbolsKeyboardIds(id.mMode, attribute); mCurrentId = id; final Resources res = mInputMethodService.getResources(); mInputView.setKeyPreviewPopupEnabled(Settings.Values.isKeyPreviewPopupEnabled(mPrefs, res), Settings.Values.getKeyPreviewPopupDismissDelay(mPrefs, res)); // Note: This comment is only applied for phone number keyboard layout. // On non-xlarge device, "@integer/key_switch_alpha_symbol" key code is used to switch // between "phone keyboard" and "phone symbols keyboard". But on xlarge device, // "@integer/key_shift" key code is used for that purpose in order to properly display // "more" and "locked more" key labels. To achieve these behavior, we should initialize // mSymbolsId and mSymbolsShiftedId to "phone keyboard" and "phone symbols keyboard" // respectively here for xlarge device's layout switching. mSymbolsId = makeSiblingKeyboardId(id, R.xml.kbd_symbols, R.xml.kbd_phone); mSymbolsShiftedId = makeSiblingKeyboardId( id, R.xml.kbd_symbols_shift, R.xml.kbd_phone_symbols); setKeyboard(getKeyboard(id)); } public void onSizeChanged() { final int width = mInputMethodService.getWindow().getWindow().getDecorView().getWidth(); if (width == 0) return; mKeyboardWidth = width; // Set keyboard with new width. final KeyboardId newId = mCurrentId.cloneWithNewGeometry(width); setKeyboard(getKeyboard(newId)); } private void setKeyboard(final Keyboard newKeyboard) { final Keyboard oldKeyboard = mInputView.getKeyboard(); mInputView.setKeyboard(newKeyboard); mCurrentId = newKeyboard.mId; final Resources res = mInputMethodService.getResources(); mInputView.setKeyPreviewPopupEnabled( Settings.Values.isKeyPreviewPopupEnabled(mPrefs, res), Settings.Values.getKeyPreviewPopupDismissDelay(mPrefs, res)); final boolean localeChanged = (oldKeyboard == null) || !newKeyboard.mId.mLocale.equals(oldKeyboard.mId.mLocale); mInputMethodService.mHandler.startDisplayLanguageOnSpacebar(localeChanged); Loading @@ -175,19 +198,19 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha final Locale savedLocale = Utils.setSystemLocale(res, mSubtypeSwitcher.getInputLocale()); keyboard = new LatinKeyboard(mInputMethodService, id); keyboard = new LatinKeyboard(mInputMethodService, id, id.mWidth); if (id.mEnableShiftLock) { keyboard.enableShiftLock(); } mKeyboardCache.put(id, new SoftReference<LatinKeyboard>(keyboard)); if (DEBUG) if (DEBUG_CACHE) Log.d(TAG, "keyboard cache size=" + mKeyboardCache.size() + ": " + ((ref == null) ? "LOAD" : "GCed") + " id=" + id); Utils.setSystemLocale(res, savedLocale); } else if (DEBUG) { } else if (DEBUG_CACHE) { Log.d(TAG, "keyboard cache size=" + mKeyboardCache.size() + ": HIT id=" + id); } Loading Loading @@ -244,33 +267,19 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha final boolean hasSettingsKey = hasSettingsKey(attribute); final Resources res = mInputMethodService.getResources(); final int orientation = res.getConfiguration().orientation; if (mKeyboardWidth == 0) mKeyboardWidth = res.getDisplayMetrics().widthPixels; final Locale locale = mSubtypeSwitcher.getInputLocale(); return new KeyboardId( res.getResourceEntryName(xmlId), xmlId, charColorId, locale, orientation, mode, attribute, hasSettingsKey, mVoiceKeyEnabled, hasVoiceKey, enableShiftLock); res.getResourceEntryName(xmlId), xmlId, charColorId, locale, orientation, mKeyboardWidth, mode, attribute, hasSettingsKey, mVoiceKeyEnabled, hasVoiceKey, enableShiftLock); } private void makeSymbolsKeyboardIds(final int mode, EditorInfo attribute) { final Locale locale = mSubtypeSwitcher.getInputLocale(); final Resources res = mInputMethodService.getResources(); final int orientation = res.getConfiguration().orientation; final int colorScheme = getColorScheme(); final boolean hasVoiceKey = mVoiceKeyEnabled && !mVoiceButtonOnPrimary; final boolean hasSettingsKey = hasSettingsKey(attribute); // Note: This comment is only applied for phone number keyboard layout. // On non-xlarge device, "@integer/key_switch_alpha_symbol" key code is used to switch // between "phone keyboard" and "phone symbols keyboard". But on xlarge device, // "@integer/key_shift" key code is used for that purpose in order to properly display // "more" and "locked more" key labels. To achieve these behavior, we should initialize // mSymbolsId and mSymbolsShiftedId to "phone keyboard" and "phone symbols keyboard" // respectively here for xlarge device's layout switching. int xmlId = mode == KeyboardId.MODE_PHONE ? R.xml.kbd_phone : R.xml.kbd_symbols; final String xmlName = res.getResourceEntryName(xmlId); mSymbolsId = new KeyboardId(xmlName, xmlId, colorScheme, locale, orientation, mode, attribute, hasSettingsKey, mVoiceKeyEnabled, hasVoiceKey, false); xmlId = mode == KeyboardId.MODE_PHONE ? R.xml.kbd_phone_symbols : R.xml.kbd_symbols_shift; mSymbolsShiftedId = new KeyboardId(xmlName, xmlId, colorScheme, locale, orientation, mode, attribute, hasSettingsKey, mVoiceKeyEnabled, hasVoiceKey, false); private KeyboardId makeSiblingKeyboardId(KeyboardId base, int alphabet, int phone) { final int xmlId = base.mMode == KeyboardId.MODE_PHONE ? phone : alphabet; final String xmlName = mInputMethodService.getResources().getResourceEntryName(xmlId); return base.cloneWithNewLayout(xmlName, xmlId); } public int getKeyboardMode() { Loading Loading @@ -561,14 +570,12 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha return; final LatinKeyboard keyboard; if (mCurrentId.equals(mSymbolsId) || !mCurrentId.equals(mSymbolsShiftedId)) { mCurrentId = mSymbolsShiftedId; keyboard = getKeyboard(mCurrentId); keyboard = getKeyboard(mSymbolsShiftedId); // Symbol shifted keyboard has an ALT key that has a caps lock style indicator. To // enable the indicator, we need to call setShiftLocked(true). keyboard.setShiftLocked(true); } else { mCurrentId = mSymbolsId; keyboard = getKeyboard(mCurrentId); keyboard = getKeyboard(mSymbolsId); // Symbol keyboard has an ALT key that has a caps lock style indicator. To disable the // indicator, we need to call setShiftLocked(false). keyboard.setShiftLocked(false); Loading java/src/com/android/inputmethod/keyboard/KeyboardView.java +6 −0 Original line number Diff line number Diff line Loading @@ -462,6 +462,12 @@ public class KeyboardView extends View implements PointerTracker.UIProxy { return mKeyboardActionListener; } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { // TODO: Should notify InputMethodService instead? KeyboardSwitcher.getInstance().onSizeChanged(); } /** * Attaches a keyboard to this view. The keyboard can be switched at any time and the * view will re-layout itself to accommodate the keyboard. Loading java/src/com/android/inputmethod/keyboard/LatinKeyboard.java +2 −2 Original line number Diff line number Diff line Loading @@ -88,8 +88,8 @@ public class LatinKeyboard extends Keyboard { private static final String SMALL_TEXT_SIZE_OF_LANGUAGE_ON_SPACEBAR = "small"; private static final String MEDIUM_TEXT_SIZE_OF_LANGUAGE_ON_SPACEBAR = "medium"; public LatinKeyboard(Context context, KeyboardId id) { super(context, id.getXmlId(), id); public LatinKeyboard(Context context, KeyboardId id, int width) { super(context, id.getXmlId(), id, width); final Resources res = context.getResources(); mContext = context; Loading Loading
java/src/com/android/inputmethod/keyboard/Keyboard.java +5 −9 Original line number Diff line number Diff line Loading @@ -151,16 +151,11 @@ public class Keyboard { * @param context the application or service context * @param xmlLayoutResId the resource file that contains the keyboard layout and keys. * @param id keyboard identifier * @param width keyboard width */ public Keyboard(Context context, int xmlLayoutResId, KeyboardId id) { this(context, xmlLayoutResId, id, context.getResources().getDisplayMetrics().widthPixels, context.getResources().getDisplayMetrics().heightPixels); } private Keyboard(Context context, int xmlLayoutResId, KeyboardId id, int width, int height) { Resources res = context.getResources(); public Keyboard(Context context, int xmlLayoutResId, KeyboardId id, int width) { final Resources res = context.getResources(); GRID_WIDTH = res.getInteger(R.integer.config_keyboard_grid_width); GRID_HEIGHT = res.getInteger(R.integer.config_keyboard_grid_height); GRID_SIZE = GRID_WIDTH * GRID_HEIGHT; Loading @@ -168,7 +163,8 @@ public class Keyboard { final int horizontalEdgesPadding = (int)res.getDimension( R.dimen.keyboard_horizontal_edges_padding); mDisplayWidth = width - horizontalEdgesPadding * 2; mDisplayHeight = height; // TODO: Adjust the height by referring to the height of area available for drawing as well. mDisplayHeight = res.getDisplayMetrics().heightPixels; mDefaultHorizontalGap = 0; setKeyWidth(mDisplayWidth / 10); Loading
java/src/com/android/inputmethod/keyboard/KeyboardId.java +24 −4 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ public class KeyboardId { public final Locale mLocale; public final int mOrientation; public final int mWidth; public final int mMode; public final int mXmlId; public final int mColorScheme; Loading @@ -49,17 +50,20 @@ public class KeyboardId { public final boolean mHasVoiceKey; public final int mImeAction; public final boolean mEnableShiftLock; public final String mXmlName; public final EditorInfo mAttribute; private final int mHashCode; public KeyboardId(String xmlName, int xmlId, int colorScheme, Locale locale, int orientation, int mode, EditorInfo attribute, boolean hasSettingsKey, boolean voiceKeyEnabled, boolean hasVoiceKey, boolean enableShiftLock) { int width, int mode, EditorInfo attribute, boolean hasSettingsKey, boolean voiceKeyEnabled, boolean hasVoiceKey, boolean enableShiftLock) { final int inputType = (attribute != null) ? attribute.inputType : 0; final int imeOptions = (attribute != null) ? attribute.imeOptions : 0; this.mLocale = locale; this.mOrientation = orientation; this.mWidth = width; this.mMode = mode; this.mXmlId = xmlId; this.mColorScheme = colorScheme; Loading @@ -73,11 +77,14 @@ public class KeyboardId { this.mImeAction = imeOptions & ( EditorInfo.IME_MASK_ACTION | EditorInfo.IME_FLAG_NO_ENTER_ACTION); this.mEnableShiftLock = enableShiftLock; this.mXmlName = xmlName; this.mAttribute = attribute; this.mHashCode = Arrays.hashCode(new Object[] { locale, orientation, width, mode, xmlId, colorScheme, Loading @@ -90,6 +97,18 @@ public class KeyboardId { }); } public KeyboardId cloneWithNewLayout(String xmlName, int xmlId) { return new KeyboardId(xmlName, xmlId, mColorScheme, mLocale, mOrientation, mWidth, mMode, mAttribute, mHasSettingsKey, mVoiceKeyEnabled, mHasVoiceKey, mEnableShiftLock); } public KeyboardId cloneWithNewGeometry(int width) { if (mWidth == width) return this; return new KeyboardId(mXmlName, mXmlId, mColorScheme, mLocale, mOrientation, width, mMode, mAttribute, mHasSettingsKey, mVoiceKeyEnabled, mHasVoiceKey, mEnableShiftLock); } public int getXmlId() { return mXmlId; } Loading Loading @@ -118,6 +137,7 @@ public class KeyboardId { boolean equals(KeyboardId other) { return other.mLocale.equals(this.mLocale) && other.mOrientation == this.mOrientation && other.mWidth == this.mWidth && other.mMode == this.mMode && other.mXmlId == this.mXmlId && other.mColorScheme == this.mColorScheme Loading @@ -136,10 +156,10 @@ public class KeyboardId { @Override public String toString() { return String.format("[%s.xml %s %s %s imeAction=%s %s%s%s%s%s%s]", return String.format("[%s.xml %s %s%d %s %s %s%s%s%s%s%s]", mXmlName, mLocale, (mOrientation == 1 ? "port" : "land"), (mOrientation == 1 ? "port" : "land"), mWidth, modeName(mMode), EditorInfoCompatUtils.imeOptionsName(mImeAction), (mPasswordInput ? " passwordInput" : ""), Loading
java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java +43 −36 Original line number Diff line number Diff line Loading @@ -37,7 +37,7 @@ import java.util.Locale; public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceChangeListener { private static final String TAG = "KeyboardSwitcher"; private static final boolean DEBUG = false; private static final boolean DEBUG_CACHE = false; public static final boolean DEBUG_STATE = false; private static String sConfigDefaultKeyboardThemeId; Loading Loading @@ -99,6 +99,7 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha private static final int DEFAULT_SETTINGS_KEY_MODE = SETTINGS_KEY_MODE_AUTO; private int mLayoutId; private int mKeyboardWidth; private static final KeyboardSwitcher sInstance = new KeyboardSwitcher(); Loading Loading @@ -151,17 +152,39 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha // Update the settings key state because number of enabled IMEs could have been changed mSettingsKeyEnabledInSettings = getSettingsKeyMode(mPrefs, mInputMethodService); final KeyboardId id = getKeyboardId(attribute, isSymbols); makeSymbolsKeyboardIds(id.mMode, attribute); mCurrentId = id; final Resources res = mInputMethodService.getResources(); mInputView.setKeyPreviewPopupEnabled(Settings.Values.isKeyPreviewPopupEnabled(mPrefs, res), Settings.Values.getKeyPreviewPopupDismissDelay(mPrefs, res)); // Note: This comment is only applied for phone number keyboard layout. // On non-xlarge device, "@integer/key_switch_alpha_symbol" key code is used to switch // between "phone keyboard" and "phone symbols keyboard". But on xlarge device, // "@integer/key_shift" key code is used for that purpose in order to properly display // "more" and "locked more" key labels. To achieve these behavior, we should initialize // mSymbolsId and mSymbolsShiftedId to "phone keyboard" and "phone symbols keyboard" // respectively here for xlarge device's layout switching. mSymbolsId = makeSiblingKeyboardId(id, R.xml.kbd_symbols, R.xml.kbd_phone); mSymbolsShiftedId = makeSiblingKeyboardId( id, R.xml.kbd_symbols_shift, R.xml.kbd_phone_symbols); setKeyboard(getKeyboard(id)); } public void onSizeChanged() { final int width = mInputMethodService.getWindow().getWindow().getDecorView().getWidth(); if (width == 0) return; mKeyboardWidth = width; // Set keyboard with new width. final KeyboardId newId = mCurrentId.cloneWithNewGeometry(width); setKeyboard(getKeyboard(newId)); } private void setKeyboard(final Keyboard newKeyboard) { final Keyboard oldKeyboard = mInputView.getKeyboard(); mInputView.setKeyboard(newKeyboard); mCurrentId = newKeyboard.mId; final Resources res = mInputMethodService.getResources(); mInputView.setKeyPreviewPopupEnabled( Settings.Values.isKeyPreviewPopupEnabled(mPrefs, res), Settings.Values.getKeyPreviewPopupDismissDelay(mPrefs, res)); final boolean localeChanged = (oldKeyboard == null) || !newKeyboard.mId.mLocale.equals(oldKeyboard.mId.mLocale); mInputMethodService.mHandler.startDisplayLanguageOnSpacebar(localeChanged); Loading @@ -175,19 +198,19 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha final Locale savedLocale = Utils.setSystemLocale(res, mSubtypeSwitcher.getInputLocale()); keyboard = new LatinKeyboard(mInputMethodService, id); keyboard = new LatinKeyboard(mInputMethodService, id, id.mWidth); if (id.mEnableShiftLock) { keyboard.enableShiftLock(); } mKeyboardCache.put(id, new SoftReference<LatinKeyboard>(keyboard)); if (DEBUG) if (DEBUG_CACHE) Log.d(TAG, "keyboard cache size=" + mKeyboardCache.size() + ": " + ((ref == null) ? "LOAD" : "GCed") + " id=" + id); Utils.setSystemLocale(res, savedLocale); } else if (DEBUG) { } else if (DEBUG_CACHE) { Log.d(TAG, "keyboard cache size=" + mKeyboardCache.size() + ": HIT id=" + id); } Loading Loading @@ -244,33 +267,19 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha final boolean hasSettingsKey = hasSettingsKey(attribute); final Resources res = mInputMethodService.getResources(); final int orientation = res.getConfiguration().orientation; if (mKeyboardWidth == 0) mKeyboardWidth = res.getDisplayMetrics().widthPixels; final Locale locale = mSubtypeSwitcher.getInputLocale(); return new KeyboardId( res.getResourceEntryName(xmlId), xmlId, charColorId, locale, orientation, mode, attribute, hasSettingsKey, mVoiceKeyEnabled, hasVoiceKey, enableShiftLock); res.getResourceEntryName(xmlId), xmlId, charColorId, locale, orientation, mKeyboardWidth, mode, attribute, hasSettingsKey, mVoiceKeyEnabled, hasVoiceKey, enableShiftLock); } private void makeSymbolsKeyboardIds(final int mode, EditorInfo attribute) { final Locale locale = mSubtypeSwitcher.getInputLocale(); final Resources res = mInputMethodService.getResources(); final int orientation = res.getConfiguration().orientation; final int colorScheme = getColorScheme(); final boolean hasVoiceKey = mVoiceKeyEnabled && !mVoiceButtonOnPrimary; final boolean hasSettingsKey = hasSettingsKey(attribute); // Note: This comment is only applied for phone number keyboard layout. // On non-xlarge device, "@integer/key_switch_alpha_symbol" key code is used to switch // between "phone keyboard" and "phone symbols keyboard". But on xlarge device, // "@integer/key_shift" key code is used for that purpose in order to properly display // "more" and "locked more" key labels. To achieve these behavior, we should initialize // mSymbolsId and mSymbolsShiftedId to "phone keyboard" and "phone symbols keyboard" // respectively here for xlarge device's layout switching. int xmlId = mode == KeyboardId.MODE_PHONE ? R.xml.kbd_phone : R.xml.kbd_symbols; final String xmlName = res.getResourceEntryName(xmlId); mSymbolsId = new KeyboardId(xmlName, xmlId, colorScheme, locale, orientation, mode, attribute, hasSettingsKey, mVoiceKeyEnabled, hasVoiceKey, false); xmlId = mode == KeyboardId.MODE_PHONE ? R.xml.kbd_phone_symbols : R.xml.kbd_symbols_shift; mSymbolsShiftedId = new KeyboardId(xmlName, xmlId, colorScheme, locale, orientation, mode, attribute, hasSettingsKey, mVoiceKeyEnabled, hasVoiceKey, false); private KeyboardId makeSiblingKeyboardId(KeyboardId base, int alphabet, int phone) { final int xmlId = base.mMode == KeyboardId.MODE_PHONE ? phone : alphabet; final String xmlName = mInputMethodService.getResources().getResourceEntryName(xmlId); return base.cloneWithNewLayout(xmlName, xmlId); } public int getKeyboardMode() { Loading Loading @@ -561,14 +570,12 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha return; final LatinKeyboard keyboard; if (mCurrentId.equals(mSymbolsId) || !mCurrentId.equals(mSymbolsShiftedId)) { mCurrentId = mSymbolsShiftedId; keyboard = getKeyboard(mCurrentId); keyboard = getKeyboard(mSymbolsShiftedId); // Symbol shifted keyboard has an ALT key that has a caps lock style indicator. To // enable the indicator, we need to call setShiftLocked(true). keyboard.setShiftLocked(true); } else { mCurrentId = mSymbolsId; keyboard = getKeyboard(mCurrentId); keyboard = getKeyboard(mSymbolsId); // Symbol keyboard has an ALT key that has a caps lock style indicator. To disable the // indicator, we need to call setShiftLocked(false). keyboard.setShiftLocked(false); Loading
java/src/com/android/inputmethod/keyboard/KeyboardView.java +6 −0 Original line number Diff line number Diff line Loading @@ -462,6 +462,12 @@ public class KeyboardView extends View implements PointerTracker.UIProxy { return mKeyboardActionListener; } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { // TODO: Should notify InputMethodService instead? KeyboardSwitcher.getInstance().onSizeChanged(); } /** * Attaches a keyboard to this view. The keyboard can be switched at any time and the * view will re-layout itself to accommodate the keyboard. Loading
java/src/com/android/inputmethod/keyboard/LatinKeyboard.java +2 −2 Original line number Diff line number Diff line Loading @@ -88,8 +88,8 @@ public class LatinKeyboard extends Keyboard { private static final String SMALL_TEXT_SIZE_OF_LANGUAGE_ON_SPACEBAR = "small"; private static final String MEDIUM_TEXT_SIZE_OF_LANGUAGE_ON_SPACEBAR = "medium"; public LatinKeyboard(Context context, KeyboardId id) { super(context, id.getXmlId(), id); public LatinKeyboard(Context context, KeyboardId id, int width) { super(context, id.getXmlId(), id, width); final Resources res = context.getResources(); mContext = context; Loading