Use additional proximity chars in the native code
Bug: 4343280
Change-Id: Ida690fe246cea80a82fcdb3ad0c28e2907b882ac
diff --git a/native/src/proximity_info.cpp b/native/src/proximity_info.cpp
index 561fffa..e590740 100644
--- a/native/src/proximity_info.cpp
+++ b/native/src/proximity_info.cpp
@@ -50,6 +50,7 @@
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 @@
}
}
}
+ 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
}