diff options
-rw-r--r-- | java/src/com/android/inputmethod/keyboard/Keyboard.java | 2 | ||||
-rw-r--r-- | java/src/com/android/inputmethod/keyboard/ProximityInfo.java | 14 | ||||
-rw-r--r-- | native/jni/com_android_inputmethod_keyboard_ProximityInfo.cpp | 3 | ||||
-rw-r--r-- | native/src/additional_proximity_chars.cpp | 10 | ||||
-rw-r--r-- | native/src/additional_proximity_chars.h | 18 | ||||
-rw-r--r-- | native/src/proximity_info.cpp | 25 | ||||
-rw-r--r-- | native/src/proximity_info.h | 1 |
7 files changed, 54 insertions, 19 deletions
diff --git a/java/src/com/android/inputmethod/keyboard/Keyboard.java b/java/src/com/android/inputmethod/keyboard/Keyboard.java index 53467122a..b7f1ddde6 100644 --- a/java/src/com/android/inputmethod/keyboard/Keyboard.java +++ b/java/src/com/android/inputmethod/keyboard/Keyboard.java @@ -154,7 +154,7 @@ public class Keyboard { mIconsSet = params.mIconsSet; mAdditionalProximityChars = params.mAdditionalProximityChars; - mProximityInfo = new ProximityInfo( + mProximityInfo = new ProximityInfo(params.mId.mLocale.toString(), params.GRID_WIDTH, params.GRID_HEIGHT, mOccupiedWidth, mOccupiedHeight, mMostCommonKeyWidth, mMostCommonKeyHeight, mKeys, params.mTouchPositionCorrection, params.mAdditionalProximityChars); diff --git a/java/src/com/android/inputmethod/keyboard/ProximityInfo.java b/java/src/com/android/inputmethod/keyboard/ProximityInfo.java index 13d18e55a..8a65a5fc6 100644 --- a/java/src/com/android/inputmethod/keyboard/ProximityInfo.java +++ b/java/src/com/android/inputmethod/keyboard/ProximityInfo.java @@ -17,6 +17,7 @@ package com.android.inputmethod.keyboard; import android.graphics.Rect; +import android.text.TextUtils; import com.android.inputmethod.keyboard.Keyboard.Params.TouchPositionCorrection; import com.android.inputmethod.latin.JniUtils; @@ -46,10 +47,17 @@ public class ProximityInfo { private final int mKeyboardHeight; private final int mMostCommonKeyWidth; private final Key[][] mGridNeighbors; + private final String mLocaleStr; - ProximityInfo(int gridWidth, int gridHeight, int minWidth, int height, int mostCommonKeyWidth, + ProximityInfo(String localeStr, int gridWidth, int gridHeight, int minWidth, int height, + int mostCommonKeyWidth, int mostCommonKeyHeight, Set<Key> keys, TouchPositionCorrection touchPositionCorrection, Map<Integer, List<Integer>> additionalProximityChars) { + if (TextUtils.isEmpty(localeStr)) { + mLocaleStr = ""; + } else { + mLocaleStr = localeStr; + } mGridWidth = gridWidth; mGridHeight = gridHeight; mGridSize = mGridWidth * mGridHeight; @@ -69,7 +77,7 @@ public class ProximityInfo { } public static ProximityInfo createDummyProximityInfo() { - return new ProximityInfo(1, 1, 1, 1, 1, 1, Collections.<Key> emptySet(), + return new ProximityInfo("", 1, 1, 1, 1, 1, 1, Collections.<Key> emptySet(), null, Collections.<Integer, List<Integer>> emptyMap()); } @@ -155,7 +163,7 @@ public class ProximityInfo { calculateSweetSpotParams = false; } - mNativeProximityInfo = setProximityInfoNative("", MAX_PROXIMITY_CHARS_SIZE, + mNativeProximityInfo = setProximityInfoNative(mLocaleStr, MAX_PROXIMITY_CHARS_SIZE, keyboardWidth, keyboardHeight, mGridWidth, mGridHeight, mMostCommonKeyWidth, proximityCharsArray, keyCount, keyXCoordinates, keyYCoordinates, keyWidths, keyHeights, keyCharCodes, diff --git a/native/jni/com_android_inputmethod_keyboard_ProximityInfo.cpp b/native/jni/com_android_inputmethod_keyboard_ProximityInfo.cpp index a9b6cca5b..e47a64a9e 100644 --- a/native/jni/com_android_inputmethod_keyboard_ProximityInfo.cpp +++ b/native/jni/com_android_inputmethod_keyboard_ProximityInfo.cpp @@ -47,7 +47,8 @@ static jlong latinime_Keyboard_setProximityInfo(JNIEnv *env, jobject object, jfloat *sweetSpotCenterXs = safeGetFloatArrayElements(env, sweetSpotCenterXArray); jfloat *sweetSpotCenterYs = safeGetFloatArrayElements(env, sweetSpotCenterYArray); jfloat *sweetSpotRadii = safeGetFloatArrayElements(env, sweetSpotRadiusArray); - ProximityInfo *proximityInfo = new ProximityInfo(localeStr, maxProximityCharsSize, displayWidth, + ProximityInfo *proximityInfo = new ProximityInfo( + localeStr, maxProximityCharsSize, displayWidth, displayHeight, gridWidth, gridHeight, mostCommonkeyWidth, (const uint32_t*)proximityChars, keyCount, (const int32_t*)keyXCoordinates, (const int32_t*)keyYCoordinates, diff --git a/native/src/additional_proximity_chars.cpp b/native/src/additional_proximity_chars.cpp index 74c96ae0b..401c85aae 100644 --- a/native/src/additional_proximity_chars.cpp +++ b/native/src/additional_proximity_chars.cpp @@ -19,23 +19,23 @@ namespace latinime { const std::string AdditionalProximityChars::LOCALE_EN_US("en"); -const uint16_t AdditionalProximityChars::EN_US_ADDITIONAL_A[EN_US_ADDITIONAL_A_SIZE] = { +const uint32_t AdditionalProximityChars::EN_US_ADDITIONAL_A[EN_US_ADDITIONAL_A_SIZE] = { 'e', 'i', 'o', 'u' }; -const uint16_t AdditionalProximityChars::EN_US_ADDITIONAL_E[EN_US_ADDITIONAL_E_SIZE] = { +const uint32_t AdditionalProximityChars::EN_US_ADDITIONAL_E[EN_US_ADDITIONAL_E_SIZE] = { 'a', 'i', 'o', 'u' }; -const uint16_t AdditionalProximityChars::EN_US_ADDITIONAL_I[EN_US_ADDITIONAL_I_SIZE] = { +const uint32_t AdditionalProximityChars::EN_US_ADDITIONAL_I[EN_US_ADDITIONAL_I_SIZE] = { 'a', 'e', 'o', 'u' }; -const uint16_t AdditionalProximityChars::EN_US_ADDITIONAL_O[EN_US_ADDITIONAL_O_SIZE] = { +const uint32_t AdditionalProximityChars::EN_US_ADDITIONAL_O[EN_US_ADDITIONAL_O_SIZE] = { 'a', 'e', 'i', 'u' }; -const uint16_t AdditionalProximityChars::EN_US_ADDITIONAL_U[EN_US_ADDITIONAL_U_SIZE] = { +const uint32_t AdditionalProximityChars::EN_US_ADDITIONAL_U[EN_US_ADDITIONAL_U_SIZE] = { 'a', 'e', 'i', 'o' }; } diff --git a/native/src/additional_proximity_chars.h b/native/src/additional_proximity_chars.h index b76726c69..e0049d949 100644 --- a/native/src/additional_proximity_chars.h +++ b/native/src/additional_proximity_chars.h @@ -26,23 +26,23 @@ class AdditionalProximityChars { private: static const std::string LOCALE_EN_US; static const int EN_US_ADDITIONAL_A_SIZE = 4; - static const uint16_t EN_US_ADDITIONAL_A[]; + static const uint32_t EN_US_ADDITIONAL_A[]; static const int EN_US_ADDITIONAL_E_SIZE = 4; - static const uint16_t EN_US_ADDITIONAL_E[]; + static const uint32_t EN_US_ADDITIONAL_E[]; static const int EN_US_ADDITIONAL_I_SIZE = 4; - static const uint16_t EN_US_ADDITIONAL_I[]; + static const uint32_t EN_US_ADDITIONAL_I[]; static const int EN_US_ADDITIONAL_O_SIZE = 4; - static const uint16_t EN_US_ADDITIONAL_O[]; + static const uint32_t EN_US_ADDITIONAL_O[]; static const int EN_US_ADDITIONAL_U_SIZE = 4; - static const uint16_t EN_US_ADDITIONAL_U[]; + static const uint32_t EN_US_ADDITIONAL_U[]; - static bool isEnLocale(std::string* locale_str) { + static bool isEnLocale(const std::string* locale_str) { return locale_str && locale_str->size() >= LOCALE_EN_US.size() && locale_str->compare(0, LOCALE_EN_US.size(), LOCALE_EN_US); } public: - static int getAdditionalCharsSize(std::string* locale_str, uint16_t c) { + static int getAdditionalCharsSize(const std::string* locale_str, const uint16_t c) { if (!isEnLocale(locale_str)) { return 0; } @@ -62,7 +62,7 @@ class AdditionalProximityChars { } } - static const uint16_t* getAdditionalChars(std::string* locale_str, uint16_t c) { + static const uint32_t* getAdditionalChars(const std::string* locale_str, const uint32_t c) { if (!isEnLocale(locale_str)) { return 0; } @@ -82,7 +82,7 @@ class AdditionalProximityChars { } } - static bool hasAdditionalChars(std::string* locale_str, uint16_t c) { + static bool hasAdditionalChars(const std::string* locale_str, const uint32_t c) { return getAdditionalCharsSize(locale_str, c) > 0; } }; diff --git a/native/src/proximity_info.cpp b/native/src/proximity_info.cpp index 561fffa90..e590740d2 100644 --- a/native/src/proximity_info.cpp +++ b/native/src/proximity_info.cpp @@ -50,6 +50,7 @@ ProximityInfo::ProximityInfo(const std::string localeStr, const int maxProximity HAS_TOUCH_POSITION_CORRECTION_DATA(keyCount > 0 && keyXCoordinates && keyYCoordinates && keyWidths && keyHeights && keyCharCodes && sweetSpotCenterXs && sweetSpotCenterYs && sweetSpotRadii), + mLocaleStr(localeStr), mInputXCoordinates(0), mInputYCoordinates(0), mTouchPositionCorrectionEnabled(false) { const int proximityGridLength = GRID_WIDTH * GRID_HEIGHT * MAX_PROXIMITY_CHARS_SIZE; @@ -164,6 +165,30 @@ void ProximityInfo::calculateNearbyKeyCodes( } } } + const int existingProximitySize = insertPos; + for (int i = 0; i < existingProximitySize; ++i) { + const uint32_t c = inputCodes[i]; + const int additionalProximitySize = + AdditionalProximityChars::hasAdditionalChars(&mLocaleStr, c); + if (additionalProximitySize <= 0) { + continue; + } + const uint32_t* additionalProximityChars = + AdditionalProximityChars::getAdditionalChars(&mLocaleStr, c); + for (int j = 0; j < additionalProximitySize; ++j) { + const uint32_t ac = additionalProximityChars[j]; + int k = 0; + for (; k < insertPos; ++k) { + if ((int)ac == inputCodes[k]) { + break; + } + } + if (k < insertPos) { + continue; + } + inputCodes[insertPos++] = ac; + } + } // TODO: calculate additional chars } diff --git a/native/src/proximity_info.h b/native/src/proximity_info.h index bfcef63d1..8c342e0ef 100644 --- a/native/src/proximity_info.h +++ b/native/src/proximity_info.h @@ -104,6 +104,7 @@ class ProximityInfo { const int CELL_HEIGHT; const int KEY_COUNT; const bool HAS_TOUCH_POSITION_CORRECTION_DATA; + const std::string mLocaleStr; const int *mInputCodes; const int *mInputXCoordinates; const int *mInputYCoordinates; |