diff options
Diffstat (limited to 'java')
-rw-r--r-- | java/res/values-eu-rES/strings.xml | 6 | ||||
-rw-r--r-- | java/res/values-fa/strings.xml | 8 | ||||
-rw-r--r-- | java/res/values-sk/strings.xml | 2 | ||||
-rw-r--r-- | java/res/values-sw/strings-emoji-descriptions.xml | 2 | ||||
-rw-r--r-- | java/src/com/android/inputmethod/keyboard/emoji/EmojiCategory.java | 20 | ||||
-rw-r--r-- | java/src/com/android/inputmethod/latin/EmojiAltPhysicalKeyDetector.java | 246 | ||||
-rw-r--r-- | java/src/com/android/inputmethod/latin/LatinIME.java | 5 |
7 files changed, 181 insertions, 108 deletions
diff --git a/java/res/values-eu-rES/strings.xml b/java/res/values-eu-rES/strings.xml index e9e9ddecd..898020d78 100644 --- a/java/res/values-eu-rES/strings.xml +++ b/java/res/values-eu-rES/strings.xml @@ -29,7 +29,7 @@ <string name="settings_screen_preferences" msgid="2696713156722014624">"Hobespenak"</string> <string name="settings_screen_accounts" msgid="2786418968536696670">"Kontuak eta pribatutasuna"</string> <string name="settings_screen_appearance" msgid="7358046399111611615">"Itxura eta diseinuak"</string> - <string name="settings_screen_gesture" msgid="8826372746901183556">"Keinu bidezko idazketa"</string> + <string name="settings_screen_gesture" msgid="8826372746901183556">"Idazketa lerrakorra"</string> <string name="settings_screen_correction" msgid="1616818407747682955">"Testu-zuzenketa"</string> <string name="settings_screen_advanced" msgid="7472408607625972994">"Ezarpen aurreratuak"</string> <string name="settings_screen_theme" msgid="2137262503543943871">"Gaia"</string> @@ -78,7 +78,7 @@ <string name="auto_correction_threshold_mode_very_aggressive" msgid="1853309024129480416">"Oso neurriz gainekoa"</string> <string name="bigram_prediction" msgid="1084449187723948550">"Hurrengo hitza iradokitzea"</string> <string name="bigram_prediction_summary" msgid="3896362682751109677">"Erabili aurreko hitza iradokizunak egiteko"</string> - <string name="gesture_input" msgid="826951152254563827">"Gaitu keinu bidezko idazketa"</string> + <string name="gesture_input" msgid="826951152254563827">"Gaitu idazketa lerrakorra"</string> <string name="gesture_input_summary" msgid="9180350639305731231">"Idatzi hitzak hizki batetik bestera hatza lerratuta"</string> <string name="gesture_preview_trail" msgid="3802333369335722221">"Erakutsi keinuaren bidea"</string> <string name="gesture_floating_preview_text" msgid="4443240334739381053">"Flotatze dinamikodun aurrebista"</string> @@ -141,7 +141,7 @@ <string name="prefs_enable_emoji_alt_physical_key_summary" msgid="5259484820941627827">"Teklatu fisikoko Alt tekla sakatuta emotikonoak agertzen dira"</string> <string name="button_default" msgid="3988017840431881491">"Lehenetsia"</string> <string name="setup_welcome_title" msgid="6112821709832031715">"Ongi etorri <xliff:g id="APPLICATION_NAME">%s</xliff:g> aplikaziora"</string> - <string name="setup_welcome_additional_description" msgid="8150252008545768953">"Keinu bidezko idazketarekin"</string> + <string name="setup_welcome_additional_description" msgid="8150252008545768953">"Idazketa lerrakorrarekin"</string> <string name="setup_start_action" msgid="8936036460897347708">"Lehen urratsak"</string> <string name="setup_next_action" msgid="371821437915144603">"Hurrengo urratsa"</string> <string name="setup_steps_title" msgid="6400373034871816182">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> konfiguratzen"</string> diff --git a/java/res/values-fa/strings.xml b/java/res/values-fa/strings.xml index 730e46253..dbe847bd7 100644 --- a/java/res/values-fa/strings.xml +++ b/java/res/values-fa/strings.xml @@ -168,7 +168,7 @@ <string name="user_dictionaries" msgid="3582332055892252845">"فرهنگهای لغت کاربر"</string> <string name="default_user_dict_pref_name" msgid="1625055720489280530">"فرهنگ لغت کاربر"</string> <string name="dictionary_available" msgid="4728975345815214218">"فرهنگ لغت موجود است"</string> - <string name="dictionary_downloading" msgid="2982650524622620983">"موارد در حال دانلود فعلی"</string> + <string name="dictionary_downloading" msgid="2982650524622620983">"موارد در حال بارگیری فعلی"</string> <string name="dictionary_installed" msgid="8081558343559342962">"نصب شده"</string> <string name="dictionary_disabled" msgid="8950383219564621762">"نصبشده، غیرفعال شد"</string> <string name="cannot_connect_to_dict_service" msgid="9216933695765732398">"مشکل اتصال به سرویس فرهنگ لغت"</string> @@ -183,11 +183,11 @@ <string name="install_dict" msgid="180852772562189365">"نصب"</string> <string name="cancel_download_dict" msgid="7843340278507019303">"لغو"</string> <string name="delete_dict" msgid="756853268088330054">"حذف"</string> - <string name="should_download_over_metered_prompt" msgid="1583881200688185508">"برای زبان انتخاب شده در دستگاه همراه شما فرهنگ لغتی در دسترس است.<br/> توصیه میکنیم برای بهبود بخشیدن به تجربه تایپ کردنتان، فرهنگ لغت <xliff:g id="LANGUAGE_NAME">%1$s</xliff:g> را <b>دانلود کنید</b>.<br/> <br/> دانلود از طریق 3G ممکن است یک یا دو دقیقه طول بکشد. اگر <b>طرح داده نامحدود</b> نداشته باشید، ممکن است هزینههایی برای شما اعمال شوند.<br/> اگر مطمئن نیستید چه طرح دادهای دارید٬ توصیه میکنیم یک اتصال Wi-Fi پیدا کنید تا دانلود بهطور خودکار شروع شود.<br/> <br/> نکته: با رفتن به بخش <b>زبان و ورودی</b> در منوی <b>تنظیمات</b> دستگاهتان، فرهنگهای لغت را دانلود یا حذف کنید."</string> + <string name="should_download_over_metered_prompt" msgid="1583881200688185508">"برای زبان انتخاب شده در دستگاه همراه شما فرهنگ لغتی در دسترس است.<br/> توصیه میکنیم برای بهبود بخشیدن به تجربه تایپ کردنتان، فرهنگ لغت <xliff:g id="LANGUAGE_NAME">%1$s</xliff:g> را <b>بارگیری کنید</b>.<br/> <br/> بارگیری از طریق 3G ممکن است یک یا دو دقیقه طول بکشد. اگر <b>طرح داده نامحدود</b> نداشته باشید، ممکن است هزینههایی برای شما اعمال شوند.<br/> اگر مطمئن نیستید چه طرح دادهای دارید٬ توصیه میکنیم یک اتصال Wi-Fi پیدا کنید تا بارگیری بهطور خودکار شروع شود.<br/> <br/> نکته: با رفتن به بخش <b>زبان و ورودی</b> در منوی <b>تنظیمات</b> دستگاهتان، فرهنگهای لغت را بارگیری یا حذف کنید."</string> <string name="download_over_metered" msgid="1643065851159409546">"هماکنون بارگیری شود (<xliff:g id="SIZE_IN_MEGABYTES">%1$.1f</xliff:g> مگابایت)"</string> - <string name="do_not_download_over_metered" msgid="2176209579313941583">"دانلود ازطریق Wi-Fi"</string> + <string name="do_not_download_over_metered" msgid="2176209579313941583">"بارگیری ازطریق Wi-Fi"</string> <string name="dict_available_notification_title" msgid="4583842811218581658">"یک فرهنگ لغت برای <xliff:g id="LANGUAGE_NAME">%1$s</xliff:g> در دسترس است"</string> - <string name="dict_available_notification_description" msgid="1075194169443163487">"برای مرور و دانلود فشار دهید"</string> + <string name="dict_available_notification_description" msgid="1075194169443163487">"برای مرور و بارگیری فشار دهید"</string> <string name="toast_downloading_suggestions" msgid="6128155879830851739">"بارگیری پیشنهادات برای <xliff:g id="LANGUAGE_NAME">%1$s</xliff:g> به زودی شروع میشود."</string> <string name="version_text" msgid="2715354215568469385">"نسخه <xliff:g id="VERSION_NUMBER">%1$s</xliff:g>"</string> <string name="user_dict_settings_add_menu_title" msgid="1254195365689387076">"افرودن"</string> diff --git a/java/res/values-sk/strings.xml b/java/res/values-sk/strings.xml index 3a85a5f1d..b39977ee0 100644 --- a/java/res/values-sk/strings.xml +++ b/java/res/values-sk/strings.xml @@ -43,7 +43,7 @@ <string name="clear_sync_data_confirmation" msgid="2811931135574727678">"Vaše synchronizované dáta budú odstránené z cloudu. Chcete pokračovať?"</string> <string name="clear_sync_data_ok" msgid="613104067705915132">"Odstrániť"</string> <string name="cloud_sync_cancel" msgid="5877481252150919037">"Zrušiť"</string> - <string name="cloud_sync_opt_in_text" msgid="9176039655776298248">"Váš osobný slovník sa synchronizuje a zálohuje na servery Google. S cieľom zlepšiť naše služby môžeme zhromažďovať štatistické informácie o frekvencii slov. Zhromažďovanie informácií a ich použitie bude v súlade s "<a href="https://www.google.com/policies/privacy">"pravidlami ochrany osobných údajov spoločnosti Google"</a>"."</string> + <string name="cloud_sync_opt_in_text" msgid="9176039655776298248">"Váš osobný slovník sa synchronizuje a zálohuje na servery Google. S cieľom zlepšiť naše služby môžeme zhromažďovať štatistické informácie o frekvencii slov. Zhromažďovanie informácií a ich použitie bude v súlade s "<a href="https://www.google.com/policies/privacy">"pravidlami ochrany súkromia spoločnosti Google"</a>"."</string> <string name="add_account_to_enable_sync" msgid="7836932571852055265">"Povoľte túto funkciu tak, že do zariadenia pridáte účet Google"</string> <string name="cloud_sync_summary_disabled_work_profile" msgid="1381770407303129164">"Synchronizácia je nedostupná pre zariadenia s účtami Google Apps pre firmy"</string> <string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Prepnúť na iné metódy vstupu"</string> diff --git a/java/res/values-sw/strings-emoji-descriptions.xml b/java/res/values-sw/strings-emoji-descriptions.xml index a348f0f7e..beb63b3d4 100644 --- a/java/res/values-sw/strings-emoji-descriptions.xml +++ b/java/res/values-sw/strings-emoji-descriptions.xml @@ -778,7 +778,7 @@ <string name="spoken_emoji_1F4C8" msgid="8007686702282833600">"Emoji ya chati inayoonesha grafu ikipanda"</string> <string name="spoken_emoji_1F4C9" msgid="2271951411192893684">"Emoji ya chati inayoonesha grafu ikishuka"</string> <string name="spoken_emoji_1F4CA" msgid="3525692829622381444">"Emoji ya chati inayotumia miche kuwakilisha data zake"</string> - <string name="spoken_emoji_1F4CB" msgid="977639227554095521">"Emoji ya ubao maalum wenye kishikizio cha karatasi, aghalabu kwa urahisi wa kuandika au kusoma"</string> + <string name="spoken_emoji_1F4CB" msgid="977639227554095521">"Ubao wa kunakili"</string> <string name="spoken_emoji_1F4CC" msgid="156107396088741574">"Emoji ya kipini maalum kinachotumika kushikizia karatasi ukutani"</string> <string name="spoken_emoji_1F4CD" msgid="4266572175361190231">"Emoji ya kipini chenye kichwa cha mduara kinachotumika kushikizia karatasi kwenye kuta maalum zinazoweza kutumika na vipini hivyo"</string> <string name="spoken_emoji_1F4CE" msgid="6294288509864968290">"Emoji ya kibanio cha karatasi"</string> diff --git a/java/src/com/android/inputmethod/keyboard/emoji/EmojiCategory.java b/java/src/com/android/inputmethod/keyboard/emoji/EmojiCategory.java index 75b7962cb..b57e483d1 100644 --- a/java/src/com/android/inputmethod/keyboard/emoji/EmojiCategory.java +++ b/java/src/com/android/inputmethod/keyboard/emoji/EmojiCategory.java @@ -196,6 +196,8 @@ final class EmojiCategory { addShownCategoryId(EmojiCategory.ID_FLAGS); } } + } else { + addShownCategoryId(EmojiCategory.ID_SYMBOLS); } addShownCategoryId(EmojiCategory.ID_EMOTICONS); @@ -204,9 +206,14 @@ final class EmojiCategory { recentsKbd.loadRecentKeys(mCategoryKeyboardMap.values()); mCurrentCategoryId = Settings.readLastShownEmojiCategoryId(mPrefs, defaultCategoryId); - if (mCurrentCategoryId == EmojiCategory.ID_RECENTS && + Log.i(TAG, "Last Emoji category id is " + mCurrentCategoryId); + if (!isShownCategoryId(mCurrentCategoryId)) { + Log.i(TAG, "Last emoji category " + mCurrentCategoryId + + " is invalid, starting in " + defaultCategoryId); + mCurrentCategoryId = defaultCategoryId; + } else if (mCurrentCategoryId == EmojiCategory.ID_RECENTS && recentsKbd.getSortedKeys().isEmpty()) { - Log.i(TAG, "No recent emojis found, starting in category " + mCurrentCategoryId); + Log.i(TAG, "No recent emojis found, starting in category " + defaultCategoryId); mCurrentCategoryId = defaultCategoryId; } } @@ -219,6 +226,15 @@ final class EmojiCategory { mShownCategories.add(properties); } + private boolean isShownCategoryId(final int categoryId) { + for (final CategoryProperties prop : mShownCategories) { + if (prop.mCategoryId == categoryId) { + return true; + } + } + return false; + } + public static String getCategoryName(final int categoryId, final int categoryPageId) { return sCategoryName[categoryId] + "-" + categoryPageId; } diff --git a/java/src/com/android/inputmethod/latin/EmojiAltPhysicalKeyDetector.java b/java/src/com/android/inputmethod/latin/EmojiAltPhysicalKeyDetector.java index 2529424c0..8924e0a3d 100644 --- a/java/src/com/android/inputmethod/latin/EmojiAltPhysicalKeyDetector.java +++ b/java/src/com/android/inputmethod/latin/EmojiAltPhysicalKeyDetector.java @@ -18,14 +18,15 @@ package com.android.inputmethod.latin; import android.content.res.Resources; import android.util.Log; +import android.util.Pair; import android.view.KeyEvent; import com.android.inputmethod.keyboard.KeyboardSwitcher; import com.android.inputmethod.latin.settings.Settings; -import java.util.HashMap; +import java.util.ArrayList; import java.util.HashSet; -import java.util.Map; +import java.util.List; import java.util.Set; import javax.annotation.Nonnull; @@ -35,121 +36,172 @@ import javax.annotation.Nonnull; */ final class EmojiAltPhysicalKeyDetector { private static final String TAG = "EmojiAltPhysicalKeyDetector"; + private static final boolean DEBUG = false; - private final Map<Integer, Integer> mEmojiSwitcherMap; - private final Map<Integer, Integer> mSymbolsShiftedSwitcherMap; - private final Map<Integer, Integer> mCombinedSwitcherMap; + private List<EmojiHotKeys> mHotKeysList; - // Set of keys codes that have been used as modifiers. - private Set<Integer> mActiveModifiers; + private static class HotKeySet extends HashSet<Pair<Integer, Integer>> { }; + + private abstract class EmojiHotKeys { + private final String mName; + private final HotKeySet mKeySet; + + boolean mCanFire; + int mMetaState; + + public EmojiHotKeys(final String name, HotKeySet keySet) { + mName = name; + mKeySet = keySet; + mCanFire = false; + } + + public void onKeyDown(@Nonnull final KeyEvent keyEvent) { + if (DEBUG) { + Log.d(TAG, "EmojiHotKeys.onKeyDown() - " + mName + " - considering " + keyEvent); + } + + final Pair<Integer, Integer> key = + Pair.create(keyEvent.getKeyCode(), keyEvent.getMetaState()); + if (mKeySet.contains(key)) { + if (DEBUG) { + Log.d(TAG, "EmojiHotKeys.onKeyDown() - " + mName + " - enabling action"); + } + mCanFire = true; + mMetaState = keyEvent.getMetaState(); + } else if (mCanFire) { + if (DEBUG) { + Log.d(TAG, "EmojiHotKeys.onKeyDown() - " + mName + " - disabling action"); + } + mCanFire = false; + } + } + + public void onKeyUp(@Nonnull final KeyEvent keyEvent) { + if (DEBUG) { + Log.d(TAG, "EmojiHotKeys.onKeyUp() - " + mName + " - considering " + keyEvent); + } + + final int keyCode = keyEvent.getKeyCode(); + int metaState = keyEvent.getMetaState(); + if (KeyEvent.isModifierKey(keyCode)) { + // Try restoring meta stat in case the released key was a modifier. + // I am sure one can come up with scenarios to break this, but it + // seems to work well in practice. + metaState |= mMetaState; + } + + final Pair<Integer, Integer> key = Pair.create(keyCode, metaState); + if (mKeySet.contains(key)) { + if (mCanFire) { + if (!keyEvent.isCanceled()) { + if (DEBUG) { + Log.d(TAG, "EmojiHotKeys.onKeyUp() - " + mName + " - firing action"); + } + action(); + } else { + // This key up event was a part of key combinations and + // should be ignored. + if (DEBUG) { + Log.d(TAG, "EmojiHotKeys.onKeyUp() - " + mName + " - canceled, ignoring action"); + } + } + mCanFire = false; + } + } + + if (mCanFire) { + if (DEBUG) { + Log.d(TAG, "EmojiHotKeys.onKeyUp() - " + mName + " - disabling action"); + } + mCanFire = false; + } + } + + protected abstract void action(); + } public EmojiAltPhysicalKeyDetector(@Nonnull final Resources resources) { - mEmojiSwitcherMap = parseSwitchDefinition(resources, R.array.keyboard_switcher_emoji); - mSymbolsShiftedSwitcherMap = parseSwitchDefinition( + mHotKeysList = new ArrayList<EmojiHotKeys>(); + + final HotKeySet emojiSwitchSet = parseHotKeys( + resources, R.array.keyboard_switcher_emoji); + final EmojiHotKeys emojiHotKeys = new EmojiHotKeys("emoji", emojiSwitchSet) { + @Override + protected void action() { + final KeyboardSwitcher switcher = KeyboardSwitcher.getInstance(); + switcher.onToggleKeyboard(KeyboardSwitcher.KeyboardSwitchState.EMOJI); + } + }; + mHotKeysList.add(emojiHotKeys); + + final HotKeySet symbolsSwitchSet = parseHotKeys( resources, R.array.keyboard_switcher_symbols_shifted); - mCombinedSwitcherMap = new HashMap<>(); - mCombinedSwitcherMap.putAll(mEmojiSwitcherMap); - mCombinedSwitcherMap.putAll(mSymbolsShiftedSwitcherMap); - mActiveModifiers = new HashSet<>(); + final EmojiHotKeys symbolsHotKeys = new EmojiHotKeys("symbols", symbolsSwitchSet) { + @Override + protected void action() { + final KeyboardSwitcher switcher = KeyboardSwitcher.getInstance(); + switcher.onToggleKeyboard(KeyboardSwitcher.KeyboardSwitchState.SYMBOLS_SHIFTED); + } + }; + mHotKeysList.add(symbolsHotKeys); } - private static Map<Integer, Integer> parseSwitchDefinition( - @Nonnull final Resources resources, - final int resourceId) { - final Map<Integer, Integer> definition = new HashMap<>(); - final String name = resources.getResourceEntryName(resourceId); - final String[] values = resources.getStringArray(resourceId); - for (int i = 0; values != null && i < values.length; i++) { - String[] valuePair = values[i].split(","); - if (valuePair.length != 2) { - Log.w(TAG, "Expected 2 integers in " + name + "[" + i + "] : " + values[i]); - } - try { - definition.put(Integer.parseInt(valuePair[0]), Integer.parseInt(valuePair[1])); - } catch (NumberFormatException e) { - Log.w(TAG, "Failed to parse " + name + "[" + i + "] : " + values[i], e); + public void onKeyDown(@Nonnull final KeyEvent keyEvent) { + if (DEBUG) { + Log.d(TAG, "onKeyDown(): " + keyEvent); + } + + if (shouldProcessEvent(keyEvent)) { + for (EmojiHotKeys hotKeys : mHotKeysList) { + hotKeys.onKeyDown(keyEvent); } } - return definition; } - /** - * Determine whether an up key event came from a mapped modifier key. - * - * @param keyEvent an up key event. - */ public void onKeyUp(@Nonnull final KeyEvent keyEvent) { - Log.d(TAG, "onKeyUp() : " + keyEvent); - if (!Settings.getInstance().getCurrent().mEnableEmojiAltPhysicalKey) { - // The feature is disabled. - Log.d(TAG, "onKeyUp() : Disabled"); - return; + if (DEBUG) { + Log.d(TAG, "onKeyUp(): " + keyEvent); } - if (keyEvent.isCanceled()) { - // This key up event was a part of key combinations and should be ignored. - Log.d(TAG, "onKeyUp() : Canceled"); - return; - } - final Integer mappedModifier = getMappedModifier(keyEvent); - if (mappedModifier != null) { - // If the key was modified by a mapped key, then ignore the next time - // the same modifier key comes up. - Log.d(TAG, "onKeyUp() : Using Modifier: " + mappedModifier); - mActiveModifiers.add(mappedModifier); - return; - } - final int keyCode = keyEvent.getKeyCode(); - if (mActiveModifiers.contains(keyCode)) { - // Used as a modifier, not a standalone key press. - Log.d(TAG, "onKeyUp() : Used as Modifier: " + keyCode); - mActiveModifiers.remove(keyCode); - return; - } - if (!isMappedKeyCode(keyEvent)) { - // Nothing special about this key. - Log.d(TAG, "onKeyUp() : Not Mapped: " + keyCode); - return; - } - final KeyboardSwitcher switcher = KeyboardSwitcher.getInstance(); - if (mEmojiSwitcherMap.keySet().contains(keyCode)) { - switcher.onToggleKeyboard(KeyboardSwitcher.KeyboardSwitchState.EMOJI); - } else if (mSymbolsShiftedSwitcherMap.keySet().contains(keyCode)) { - switcher.onToggleKeyboard(KeyboardSwitcher.KeyboardSwitchState.SYMBOLS_SHIFTED); - } else { - Log.w(TAG, "Cannot toggle on keyCode: " + keyCode); + + if (shouldProcessEvent(keyEvent)) { + for (EmojiHotKeys hotKeys : mHotKeysList) { + hotKeys.onKeyUp(keyEvent); + } } } - /** - * @param keyEvent pressed key event - * @return true iff the user pressed a mapped modifier key. - */ - private boolean isMappedKeyCode(@Nonnull final KeyEvent keyEvent) { - return mCombinedSwitcherMap.get(keyEvent.getKeyCode()) != null; + private static boolean shouldProcessEvent(@Nonnull final KeyEvent keyEvent) { + if (!Settings.getInstance().getCurrent().mEnableEmojiAltPhysicalKey) { + // The feature is disabled. + if (DEBUG) { + Log.d(TAG, "shouldProcessEvent(): Disabled"); + } + return false; + } + + return true; } - /** - * @param keyEvent pressed key event - * @return the mapped modifier used with this key opress, if any. - */ - private Integer getMappedModifier(@Nonnull final KeyEvent keyEvent) { - final int keyCode = keyEvent.getKeyCode(); - final int metaState = keyEvent.getMetaState(); - for (int mappedKeyCode : mCombinedSwitcherMap.keySet()) { - if (keyCode == mappedKeyCode) { - Log.d(TAG, "getMappedModifier() : KeyCode = MappedKeyCode = " + mappedKeyCode); - continue; - } - final Integer mappedMeta = mCombinedSwitcherMap.get(mappedKeyCode); - if (mappedMeta == null || mappedMeta.intValue() == -1) { - continue; + private static HotKeySet parseHotKeys( + @Nonnull final Resources resources, final int resourceId) { + final HotKeySet keySet = new HotKeySet(); + final String name = resources.getResourceEntryName(resourceId); + final String[] values = resources.getStringArray(resourceId); + for (int i = 0; values != null && i < values.length; i++) { + String[] valuePair = values[i].split(","); + if (valuePair.length != 2) { + Log.w(TAG, "Expected 2 integers in " + name + "[" + i + "] : " + values[i]); } - if ((metaState & mappedMeta) != 0) { - Log.d(TAG, "getMappedModifier() : MetaState(" + metaState - + ") contains MappedMeta(" + mappedMeta + ")"); - return mappedKeyCode; + try { + final Integer keyCode = Integer.parseInt(valuePair[0]); + final Integer metaState = Integer.parseInt(valuePair[1]); + final Pair<Integer, Integer> key = Pair.create( + keyCode, KeyEvent.normalizeMetaState(metaState)); + keySet.add(key); + } catch (NumberFormatException e) { + Log.w(TAG, "Failed to parse " + name + "[" + i + "] : " + values[i], e); } } - return null; + return keySet; } } diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index f3cf6cde2..55af62ee4 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -1658,6 +1658,11 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen // Hooks for hardware keyboard @Override public boolean onKeyDown(final int keyCode, final KeyEvent keyEvent) { + if (mEmojiAltPhysicalKeyDetector == null) { + mEmojiAltPhysicalKeyDetector = new EmojiAltPhysicalKeyDetector( + getApplicationContext().getResources()); + } + mEmojiAltPhysicalKeyDetector.onKeyDown(keyEvent); if (!ProductionFlags.IS_HARDWARE_KEYBOARD_SUPPORTED) { return super.onKeyDown(keyCode, keyEvent); } |