aboutsummaryrefslogtreecommitdiffstats
path: root/java
diff options
context:
space:
mode:
Diffstat (limited to 'java')
-rw-r--r--java/res/values-eu-rES/strings.xml6
-rw-r--r--java/res/values-fa/strings.xml8
-rw-r--r--java/res/values-sk/strings.xml2
-rw-r--r--java/res/values-sw/strings-emoji-descriptions.xml2
-rw-r--r--java/src/com/android/inputmethod/keyboard/emoji/EmojiCategory.java20
-rw-r--r--java/src/com/android/inputmethod/latin/EmojiAltPhysicalKeyDetector.java246
-rw-r--r--java/src/com/android/inputmethod/latin/LatinIME.java5
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">"‏برای زبان انتخاب شده در دستگاه همراه شما فرهنگ لغتی در دسترس است.&lt;br/&gt; توصیه می‌کنیم برای بهبود بخشیدن به تجربه تایپ کردنتان، فرهنگ لغت <xliff:g id="LANGUAGE_NAME">%1$s</xliff:g> را &lt;b&gt;دانلود کنید&lt;/b&gt;.‏&lt;br/&gt; &lt;br/&gt; دانلود از طریق 3G ممکن است یک یا دو دقیقه طول بکشد. اگر &lt;b&gt;طرح داده نامحدود&lt;/b&gt; نداشته باشید، ممکن است هزینه‌هایی برای شما اعمال شوند.&lt;br/&gt; اگر مطمئن نیستید چه طرح داده‌ای دارید٬ توصیه می‌کنیم یک اتصال Wi-Fi پیدا کنید تا دانلود به‌طور خودکار شروع شود.&lt;br/&gt; &lt;br/&gt; نکته: با رفتن به بخش &lt;b&gt;زبان و ورودی&lt;/b&gt; در منوی &lt;b&gt;تنظیمات&lt;/b&gt; دستگاهتان، فرهنگ‌های لغت را دانلود یا حذف کنید."</string>
+ <string name="should_download_over_metered_prompt" msgid="1583881200688185508">"‏برای زبان انتخاب شده در دستگاه همراه شما فرهنگ لغتی در دسترس است.&lt;br/&gt; توصیه می‌کنیم برای بهبود بخشیدن به تجربه تایپ کردنتان، فرهنگ لغت <xliff:g id="LANGUAGE_NAME">%1$s</xliff:g> را &lt;b&gt;بارگیری کنید&lt;/b&gt;.‏&lt;br/&gt; &lt;br/&gt; بارگیری از طریق 3G ممکن است یک یا دو دقیقه طول بکشد. اگر &lt;b&gt;طرح داده نامحدود&lt;/b&gt; نداشته باشید، ممکن است هزینه‌هایی برای شما اعمال شوند.&lt;br/&gt; اگر مطمئن نیستید چه طرح داده‌ای دارید٬ توصیه می‌کنیم یک اتصال Wi-Fi پیدا کنید تا بارگیری به‌طور خودکار شروع شود.&lt;br/&gt; &lt;br/&gt; نکته: با رفتن به بخش &lt;b&gt;زبان و ورودی&lt;/b&gt; در منوی &lt;b&gt;تنظیمات&lt;/b&gt; دستگاهتان، فرهنگ‌های لغت را بارگیری یا حذف کنید."</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);
}