Use touch position correction in the geometric input

bug: 7108161

Change-Id: I72d51bcfa26f241bec8fa907d64384e7eebe5c5e
diff --git a/native/jni/src/proximity_info.cpp b/native/jni/src/proximity_info.cpp
index c9f83b6..d699032 100644
--- a/native/jni/src/proximity_info.cpp
+++ b/native/jni/src/proximity_info.cpp
@@ -134,10 +134,22 @@
     return (SQUARE_FLOAT(deltaX) + SQUARE_FLOAT(deltaY)) / SQUARE_FLOAT(scale);
 }
 
-float ProximityInfo::getNormalizedSquaredDistanceFromCenterFloat(
+float ProximityInfo::getNormalizedSquaredDistanceFromCenterFloatG(
         const int keyId, const int x, const int y) const {
-    const float centerX = static_cast<float>(getKeyCenterXOfKeyIdG(keyId));
-    const float centerY = static_cast<float>(getKeyCenterYOfKeyIdG(keyId));
+    const static float verticalSweetSpotScaleForGeometric = 1.1f;
+    const bool correctTouchPosition = hasTouchPositionCorrectionData();
+    const float centerX = static_cast<float>(correctTouchPosition
+            ? getSweetSpotCenterXAt(keyId)
+            : getKeyCenterXOfKeyIdG(keyId));
+    const float visualKeyCenterY = static_cast<float>(getKeyCenterYOfKeyIdG(keyId));
+    float centerY;
+    if (correctTouchPosition) {
+        const float sweetSpotCenterY = static_cast<float>(getSweetSpotCenterYAt(keyId));
+        const float gapY = sweetSpotCenterY - visualKeyCenterY;
+        centerY = visualKeyCenterY + gapY * verticalSweetSpotScaleForGeometric;
+    } else {
+        centerY = visualKeyCenterY;
+    }
     const float touchX = static_cast<float>(x);
     const float touchY = static_cast<float>(y);
     const float keyWidth = static_cast<float>(getMostCommonKeyWidth());