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
 }