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) {
|
public static ProximityInfo createSpellCheckerProximityInfo(final int[] proximity) {
|
||||||
final ProximityInfo spellCheckerProximityInfo = createDummyProximityInfo();
|
final ProximityInfo spellCheckerProximityInfo = createDummyProximityInfo();
|
||||||
spellCheckerProximityInfo.mNativeProximityInfo =
|
spellCheckerProximityInfo.mNativeProximityInfo =
|
||||||
spellCheckerProximityInfo.setProximityInfoNative(
|
spellCheckerProximityInfo.setProximityInfoNative("",
|
||||||
SpellCheckerProximityInfo.ROW_SIZE, 480, 300, 11, 3, (480 / 10), proximity,
|
SpellCheckerProximityInfo.ROW_SIZE, 480, 300, 11, 3, (480 / 10), proximity,
|
||||||
0, null, null, null, null, null, null, null, null);
|
0, null, null, null, null, null, null, null, null);
|
||||||
return spellCheckerProximityInfo;
|
return spellCheckerProximityInfo;
|
||||||
|
@ -87,7 +87,8 @@ public class ProximityInfo {
|
||||||
JniUtils.loadNativeLibrary();
|
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 displayHeight, int gridWidth, int gridHeight,
|
||||||
int mostCommonKeyWidth, int[] proximityCharsArray,
|
int mostCommonKeyWidth, int[] proximityCharsArray,
|
||||||
int keyCount, int[] keyXCoordinates, int[] keyYCoordinates,
|
int keyCount, int[] keyXCoordinates, int[] keyYCoordinates,
|
||||||
|
@ -154,7 +155,7 @@ public class ProximityInfo {
|
||||||
calculateSweetSpotParams = false;
|
calculateSweetSpotParams = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
mNativeProximityInfo = setProximityInfoNative(MAX_PROXIMITY_CHARS_SIZE,
|
mNativeProximityInfo = setProximityInfoNative("", MAX_PROXIMITY_CHARS_SIZE,
|
||||||
keyboardWidth, keyboardHeight, mGridWidth, mGridHeight, mMostCommonKeyWidth,
|
keyboardWidth, keyboardHeight, mGridWidth, mGridHeight, mMostCommonKeyWidth,
|
||||||
proximityCharsArray,
|
proximityCharsArray,
|
||||||
keyCount, keyXCoordinates, keyYCoordinates, keyWidths, keyHeights, keyCharCodes,
|
keyCount, keyXCoordinates, keyYCoordinates, keyWidths, keyHeights, keyCharCodes,
|
||||||
|
|
|
@ -30,6 +30,7 @@ LATIN_IME_JNI_SRC_FILES := \
|
||||||
jni_common.cpp
|
jni_common.cpp
|
||||||
|
|
||||||
LATIN_IME_CORE_SRC_FILES := \
|
LATIN_IME_CORE_SRC_FILES := \
|
||||||
|
additional_proximity_chars.cpp \
|
||||||
basechars.cpp \
|
basechars.cpp \
|
||||||
bigram_dictionary.cpp \
|
bigram_dictionary.cpp \
|
||||||
char_utils.cpp \
|
char_utils.cpp \
|
||||||
|
|
|
@ -25,16 +25,19 @@
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
namespace latinime {
|
namespace latinime {
|
||||||
|
|
||||||
static jlong latinime_Keyboard_setProximityInfo(JNIEnv *env, jobject object,
|
static jlong latinime_Keyboard_setProximityInfo(JNIEnv *env, jobject object,
|
||||||
jint maxProximityCharsSize, jint displayWidth, jint displayHeight, jint gridWidth,
|
jstring localejStr, jint maxProximityCharsSize, jint displayWidth, jint displayHeight,
|
||||||
jint gridHeight, jint mostCommonkeyWidth, jintArray proximityCharsArray, jint keyCount,
|
jint gridWidth, jint gridHeight, jint mostCommonkeyWidth, jintArray proximityCharsArray,
|
||||||
jintArray keyXCoordinateArray, jintArray keyYCoordinateArray, jintArray keyWidthArray,
|
jint keyCount, jintArray keyXCoordinateArray, jintArray keyYCoordinateArray,
|
||||||
jintArray keyHeightArray, jintArray keyCharCodeArray,
|
jintArray keyWidthArray, jintArray keyHeightArray, jintArray keyCharCodeArray,
|
||||||
jfloatArray sweetSpotCenterXArray, jfloatArray sweetSpotCenterYArray,
|
jfloatArray sweetSpotCenterXArray, jfloatArray sweetSpotCenterYArray,
|
||||||
jfloatArray sweetSpotRadiusArray) {
|
jfloatArray sweetSpotRadiusArray) {
|
||||||
|
const char *localeStrPtr = env->GetStringUTFChars(localejStr, 0);
|
||||||
|
const std::string localeStr(localeStrPtr);
|
||||||
jint *proximityChars = env->GetIntArrayElements(proximityCharsArray, 0);
|
jint *proximityChars = env->GetIntArrayElements(proximityCharsArray, 0);
|
||||||
jint *keyXCoordinates = safeGetIntArrayElements(env, keyXCoordinateArray);
|
jint *keyXCoordinates = safeGetIntArrayElements(env, keyXCoordinateArray);
|
||||||
jint *keyYCoordinates = safeGetIntArrayElements(env, keyYCoordinateArray);
|
jint *keyYCoordinates = safeGetIntArrayElements(env, keyYCoordinateArray);
|
||||||
|
@ -44,7 +47,7 @@ static jlong latinime_Keyboard_setProximityInfo(JNIEnv *env, jobject object,
|
||||||
jfloat *sweetSpotCenterXs = safeGetFloatArrayElements(env, sweetSpotCenterXArray);
|
jfloat *sweetSpotCenterXs = safeGetFloatArrayElements(env, sweetSpotCenterXArray);
|
||||||
jfloat *sweetSpotCenterYs = safeGetFloatArrayElements(env, sweetSpotCenterYArray);
|
jfloat *sweetSpotCenterYs = safeGetFloatArrayElements(env, sweetSpotCenterYArray);
|
||||||
jfloat *sweetSpotRadii = safeGetFloatArrayElements(env, sweetSpotRadiusArray);
|
jfloat *sweetSpotRadii = safeGetFloatArrayElements(env, sweetSpotRadiusArray);
|
||||||
ProximityInfo *proximityInfo = new ProximityInfo(maxProximityCharsSize, displayWidth,
|
ProximityInfo *proximityInfo = new ProximityInfo(localeStr, maxProximityCharsSize, displayWidth,
|
||||||
displayHeight, gridWidth, gridHeight, mostCommonkeyWidth,
|
displayHeight, gridWidth, gridHeight, mostCommonkeyWidth,
|
||||||
(const uint32_t*)proximityChars,
|
(const uint32_t*)proximityChars,
|
||||||
keyCount, (const int32_t*)keyXCoordinates, (const int32_t*)keyYCoordinates,
|
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, keyYCoordinateArray, keyYCoordinates);
|
||||||
safeReleaseIntArrayElements(env, keyXCoordinateArray, keyXCoordinates);
|
safeReleaseIntArrayElements(env, keyXCoordinateArray, keyXCoordinates);
|
||||||
env->ReleaseIntArrayElements(proximityCharsArray, proximityChars, 0);
|
env->ReleaseIntArrayElements(proximityCharsArray, proximityChars, 0);
|
||||||
|
env->ReleaseStringUTFChars(localejStr, localeStrPtr);
|
||||||
return (jlong)proximityInfo;
|
return (jlong)proximityInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,7 +74,7 @@ static void latinime_Keyboard_release(JNIEnv *env, jobject object, jlong proximi
|
||||||
}
|
}
|
||||||
|
|
||||||
static JNINativeMethod sKeyboardMethods[] = {
|
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},
|
(void*)latinime_Keyboard_setProximityInfo},
|
||||||
{"releaseProximityInfoNative", "(J)V", (void*)latinime_Keyboard_release}
|
{"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 <assert.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string>
|
||||||
|
|
||||||
#define LOG_TAG "LatinIME: proximity_info.cpp"
|
#define LOG_TAG "LatinIME: proximity_info.cpp"
|
||||||
|
|
||||||
|
#include "additional_proximity_chars.h"
|
||||||
#include "dictionary.h"
|
#include "dictionary.h"
|
||||||
#include "proximity_info.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,
|
ProximityInfo::ProximityInfo(const std::string localeStr, const int maxProximityCharsSize,
|
||||||
const int keyboardHeight, const int gridWidth, const int gridHeight,
|
const int keyboardWidth, const int keyboardHeight, const int gridWidth,
|
||||||
const int mostCommonKeyWidth,
|
const int gridHeight, const int mostCommonKeyWidth,
|
||||||
const uint32_t *proximityCharsArray, const int keyCount, const int32_t *keyXCoordinates,
|
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 *keyYCoordinates, const int32_t *keyWidths, const int32_t *keyHeights,
|
||||||
const int32_t *keyCharCodes, const float *sweetSpotCenterXs, const float *sweetSpotCenterYs,
|
const int32_t *keyCharCodes, const float *sweetSpotCenterXs, const float *sweetSpotCenterYs,
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#define LATINIME_PROXIMITY_INFO_H
|
#define LATINIME_PROXIMITY_INFO_H
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
#include "defines.h"
|
#include "defines.h"
|
||||||
|
|
||||||
|
@ -43,9 +44,9 @@ class ProximityInfo {
|
||||||
ADDITIONAL_PROXIMITY_CHAR
|
ADDITIONAL_PROXIMITY_CHAR
|
||||||
} ProximityType;
|
} ProximityType;
|
||||||
|
|
||||||
ProximityInfo(const int maxProximityCharsSize, const int keyboardWidth,
|
ProximityInfo(const std::string localeStr, const int maxProximityCharsSize,
|
||||||
const int keybaordHeight, const int gridWidth, const int gridHeight,
|
const int keyboardWidth, const int keybaordHeight, const int gridWidth,
|
||||||
const int mostCommonkeyWidth,
|
const int gridHeight, const int mostCommonkeyWidth,
|
||||||
const uint32_t *proximityCharsArray, const int keyCount, const int32_t *keyXCoordinates,
|
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 *keyYCoordinates, const int32_t *keyWidths, const int32_t *keyHeights,
|
||||||
const int32_t *keyCharCodes, const float *sweetSpotCenterXs,
|
const int32_t *keyCharCodes, const float *sweetSpotCenterXs,
|
||||||
|
|
Loading…
Reference in New Issue