Implement additional proximity characters in the native code
Bug: 4343280 Change-Id: I9bbc5cab2fef1ee80c1fe32017df811ef8af10bcmain
parent
95fcb0cce9
commit
552c3c27f0
|
@ -76,7 +76,7 @@ public class ProximityInfo {
|
|||
public static ProximityInfo createSpellCheckerProximityInfo(final int[] proximity) {
|
||||
final ProximityInfo spellCheckerProximityInfo = createDummyProximityInfo();
|
||||
spellCheckerProximityInfo.mNativeProximityInfo =
|
||||
spellCheckerProximityInfo.setProximityInfoNative(
|
||||
spellCheckerProximityInfo.setProximityInfoNative("",
|
||||
SpellCheckerProximityInfo.ROW_SIZE, 480, 300, 11, 3, (480 / 10), proximity,
|
||||
0, null, null, null, null, null, null, null, null);
|
||||
return spellCheckerProximityInfo;
|
||||
|
@ -87,7 +87,8 @@ public class ProximityInfo {
|
|||
JniUtils.loadNativeLibrary();
|
||||
}
|
||||
|
||||
private native long setProximityInfoNative(int maxProximityCharsSize, int displayWidth,
|
||||
private native long setProximityInfoNative(
|
||||
String locale, int maxProximityCharsSize, int displayWidth,
|
||||
int displayHeight, int gridWidth, int gridHeight,
|
||||
int mostCommonKeyWidth, int[] proximityCharsArray,
|
||||
int keyCount, int[] keyXCoordinates, int[] keyYCoordinates,
|
||||
|
@ -154,7 +155,7 @@ public class ProximityInfo {
|
|||
calculateSweetSpotParams = false;
|
||||
}
|
||||
|
||||
mNativeProximityInfo = setProximityInfoNative(MAX_PROXIMITY_CHARS_SIZE,
|
||||
mNativeProximityInfo = setProximityInfoNative("", MAX_PROXIMITY_CHARS_SIZE,
|
||||
keyboardWidth, keyboardHeight, mGridWidth, mGridHeight, mMostCommonKeyWidth,
|
||||
proximityCharsArray,
|
||||
keyCount, keyXCoordinates, keyYCoordinates, keyWidths, keyHeights, keyCharCodes,
|
||||
|
|
|
@ -30,6 +30,7 @@ LATIN_IME_JNI_SRC_FILES := \
|
|||
jni_common.cpp
|
||||
|
||||
LATIN_IME_CORE_SRC_FILES := \
|
||||
additional_proximity_chars.cpp \
|
||||
basechars.cpp \
|
||||
bigram_dictionary.cpp \
|
||||
char_utils.cpp \
|
||||
|
|
|
@ -25,16 +25,19 @@
|
|||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <string>
|
||||
|
||||
namespace latinime {
|
||||
|
||||
static jlong latinime_Keyboard_setProximityInfo(JNIEnv *env, jobject object,
|
||||
jint maxProximityCharsSize, jint displayWidth, jint displayHeight, jint gridWidth,
|
||||
jint gridHeight, jint mostCommonkeyWidth, jintArray proximityCharsArray, jint keyCount,
|
||||
jintArray keyXCoordinateArray, jintArray keyYCoordinateArray, jintArray keyWidthArray,
|
||||
jintArray keyHeightArray, jintArray keyCharCodeArray,
|
||||
jstring localejStr, jint maxProximityCharsSize, jint displayWidth, jint displayHeight,
|
||||
jint gridWidth, jint gridHeight, jint mostCommonkeyWidth, jintArray proximityCharsArray,
|
||||
jint keyCount, jintArray keyXCoordinateArray, jintArray keyYCoordinateArray,
|
||||
jintArray keyWidthArray, jintArray keyHeightArray, jintArray keyCharCodeArray,
|
||||
jfloatArray sweetSpotCenterXArray, jfloatArray sweetSpotCenterYArray,
|
||||
jfloatArray sweetSpotRadiusArray) {
|
||||
const char *localeStrPtr = env->GetStringUTFChars(localejStr, 0);
|
||||
const std::string localeStr(localeStrPtr);
|
||||
jint *proximityChars = env->GetIntArrayElements(proximityCharsArray, 0);
|
||||
jint *keyXCoordinates = safeGetIntArrayElements(env, keyXCoordinateArray);
|
||||
jint *keyYCoordinates = safeGetIntArrayElements(env, keyYCoordinateArray);
|
||||
|
@ -44,7 +47,7 @@ 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(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,
|
||||
|
@ -60,6 +63,7 @@ static jlong latinime_Keyboard_setProximityInfo(JNIEnv *env, jobject object,
|
|||
safeReleaseIntArrayElements(env, keyYCoordinateArray, keyYCoordinates);
|
||||
safeReleaseIntArrayElements(env, keyXCoordinateArray, keyXCoordinates);
|
||||
env->ReleaseIntArrayElements(proximityCharsArray, proximityChars, 0);
|
||||
env->ReleaseStringUTFChars(localejStr, localeStrPtr);
|
||||
return (jlong)proximityInfo;
|
||||
}
|
||||
|
||||
|
@ -70,7 +74,7 @@ static void latinime_Keyboard_release(JNIEnv *env, jobject object, jlong proximi
|
|||
}
|
||||
|
||||
static JNINativeMethod sKeyboardMethods[] = {
|
||||
{"setProximityInfoNative", "(IIIIII[II[I[I[I[I[I[F[F[F)J",
|
||||
{"setProximityInfoNative", "(Ljava/lang/String;IIIIII[II[I[I[I[I[I[F[F[F)J",
|
||||
(void*)latinime_Keyboard_setProximityInfo},
|
||||
{"releaseProximityInfoNative", "(J)V", (void*)latinime_Keyboard_release}
|
||||
};
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
/*
|
||||
* Copyright (C) 2012 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include "additional_proximity_chars.h"
|
||||
|
||||
namespace latinime {
|
||||
const std::string AdditionalProximityChars::LOCALE_EN_US("en");
|
||||
|
||||
const uint16_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] = {
|
||||
'a', 'i', 'o', 'u'
|
||||
};
|
||||
|
||||
const uint16_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] = {
|
||||
'a', 'e', 'i', 'u'
|
||||
};
|
||||
|
||||
const uint16_t AdditionalProximityChars::EN_US_ADDITIONAL_U[EN_US_ADDITIONAL_U_SIZE] = {
|
||||
'a', 'e', 'i', 'o'
|
||||
};
|
||||
}
|
|
@ -0,0 +1,92 @@
|
|||
/*
|
||||
* Copyright (C) 2012 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef LATINIME_ADDITIONAL_PROXIMITY_CHARS_H
|
||||
#define LATINIME_ADDITIONAL_PROXIMITY_CHARS_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <string>
|
||||
|
||||
namespace latinime {
|
||||
|
||||
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 int EN_US_ADDITIONAL_E_SIZE = 4;
|
||||
static const uint16_t EN_US_ADDITIONAL_E[];
|
||||
static const int EN_US_ADDITIONAL_I_SIZE = 4;
|
||||
static const uint16_t EN_US_ADDITIONAL_I[];
|
||||
static const int EN_US_ADDITIONAL_O_SIZE = 4;
|
||||
static const uint16_t EN_US_ADDITIONAL_O[];
|
||||
static const int EN_US_ADDITIONAL_U_SIZE = 4;
|
||||
static const uint16_t EN_US_ADDITIONAL_U[];
|
||||
|
||||
static bool isEnLocale(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) {
|
||||
if (!isEnLocale(locale_str)) {
|
||||
return 0;
|
||||
}
|
||||
switch(c) {
|
||||
case 'a':
|
||||
return EN_US_ADDITIONAL_A_SIZE;
|
||||
case 'e':
|
||||
return EN_US_ADDITIONAL_E_SIZE;
|
||||
case 'i':
|
||||
return EN_US_ADDITIONAL_I_SIZE;
|
||||
case 'o':
|
||||
return EN_US_ADDITIONAL_O_SIZE;
|
||||
case 'u':
|
||||
return EN_US_ADDITIONAL_U_SIZE;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static const uint16_t* getAdditionalChars(std::string* locale_str, uint16_t c) {
|
||||
if (!isEnLocale(locale_str)) {
|
||||
return 0;
|
||||
}
|
||||
switch(c) {
|
||||
case 'a':
|
||||
return EN_US_ADDITIONAL_A;
|
||||
case 'e':
|
||||
return EN_US_ADDITIONAL_E;
|
||||
case 'i':
|
||||
return EN_US_ADDITIONAL_I;
|
||||
case 'o':
|
||||
return EN_US_ADDITIONAL_O;
|
||||
case 'u':
|
||||
return EN_US_ADDITIONAL_U;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static bool hasAdditionalChars(std::string* locale_str, uint16_t c) {
|
||||
return getAdditionalCharsSize(locale_str, c) > 0;
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif // LATINIME_ADDITIONAL_PROXIMITY_CHARS_H
|
|
@ -16,10 +16,11 @@
|
|||
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <string>
|
||||
|
||||
#define LOG_TAG "LatinIME: proximity_info.cpp"
|
||||
|
||||
#include "additional_proximity_chars.h"
|
||||
#include "dictionary.h"
|
||||
#include "proximity_info.h"
|
||||
|
||||
|
@ -33,9 +34,9 @@ inline void copyOrFillZero(void *to, const void *from, size_t size) {
|
|||
}
|
||||
}
|
||||
|
||||
ProximityInfo::ProximityInfo(const int maxProximityCharsSize, const int keyboardWidth,
|
||||
const int keyboardHeight, const int gridWidth, const int gridHeight,
|
||||
const int mostCommonKeyWidth,
|
||||
ProximityInfo::ProximityInfo(const std::string localeStr, const int maxProximityCharsSize,
|
||||
const int keyboardWidth, const int keyboardHeight, const int gridWidth,
|
||||
const int gridHeight, const int mostCommonKeyWidth,
|
||||
const uint32_t *proximityCharsArray, const int keyCount, const int32_t *keyXCoordinates,
|
||||
const int32_t *keyYCoordinates, const int32_t *keyWidths, const int32_t *keyHeights,
|
||||
const int32_t *keyCharCodes, const float *sweetSpotCenterXs, const float *sweetSpotCenterYs,
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#define LATINIME_PROXIMITY_INFO_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <string>
|
||||
|
||||
#include "defines.h"
|
||||
|
||||
|
@ -43,9 +44,9 @@ class ProximityInfo {
|
|||
ADDITIONAL_PROXIMITY_CHAR
|
||||
} ProximityType;
|
||||
|
||||
ProximityInfo(const int maxProximityCharsSize, const int keyboardWidth,
|
||||
const int keybaordHeight, const int gridWidth, const int gridHeight,
|
||||
const int mostCommonkeyWidth,
|
||||
ProximityInfo(const std::string localeStr, const int maxProximityCharsSize,
|
||||
const int keyboardWidth, const int keybaordHeight, const int gridWidth,
|
||||
const int gridHeight, const int mostCommonkeyWidth,
|
||||
const uint32_t *proximityCharsArray, const int keyCount, const int32_t *keyXCoordinates,
|
||||
const int32_t *keyYCoordinates, const int32_t *keyWidths, const int32_t *keyHeights,
|
||||
const int32_t *keyCharCodes, const float *sweetSpotCenterXs,
|
||||
|
|
Loading…
Reference in New Issue