Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5eec574c authored by satok's avatar satok
Browse files

Use additional proximity chars in the native code

Bug: 4343280

Change-Id: Ida690fe246cea80a82fcdb3ad0c28e2907b882ac
parent 552c3c27
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -47,7 +47,8 @@ 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(localeStr, 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,
+5 −5
Original line number Diff line number Diff line
@@ -19,23 +19,23 @@
namespace latinime {
const std::string AdditionalProximityChars::LOCALE_EN_US("en");

const uint16_t AdditionalProximityChars::EN_US_ADDITIONAL_A[EN_US_ADDITIONAL_A_SIZE] = {
const uint32_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] = {
const uint32_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] = {
const uint32_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] = {
const uint32_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] = {
const uint32_t AdditionalProximityChars::EN_US_ADDITIONAL_U[EN_US_ADDITIONAL_U_SIZE] = {
    'a', 'e', 'i', 'o'
};
}
+9 −9
Original line number Diff line number Diff line
@@ -26,23 +26,23 @@ 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 uint32_t EN_US_ADDITIONAL_A[];
    static const int EN_US_ADDITIONAL_E_SIZE = 4;
    static const uint16_t EN_US_ADDITIONAL_E[];
    static const uint32_t EN_US_ADDITIONAL_E[];
    static const int EN_US_ADDITIONAL_I_SIZE = 4;
    static const uint16_t EN_US_ADDITIONAL_I[];
    static const uint32_t EN_US_ADDITIONAL_I[];
    static const int EN_US_ADDITIONAL_O_SIZE = 4;
    static const uint16_t EN_US_ADDITIONAL_O[];
    static const uint32_t EN_US_ADDITIONAL_O[];
    static const int EN_US_ADDITIONAL_U_SIZE = 4;
    static const uint16_t EN_US_ADDITIONAL_U[];
    static const uint32_t EN_US_ADDITIONAL_U[];

    static bool isEnLocale(std::string* locale_str) {
    static bool isEnLocale(const 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) {
    static int getAdditionalCharsSize(const std::string* locale_str, const uint16_t c) {
        if (!isEnLocale(locale_str)) {
            return 0;
        }
@@ -62,7 +62,7 @@ class AdditionalProximityChars {
        }
    }

    static const uint16_t* getAdditionalChars(std::string* locale_str, uint16_t c) {
    static const uint32_t* getAdditionalChars(const std::string* locale_str, const uint32_t c) {
        if (!isEnLocale(locale_str)) {
            return 0;
        }
@@ -82,7 +82,7 @@ class AdditionalProximityChars {
        }
    }

    static bool hasAdditionalChars(std::string* locale_str, uint16_t c) {
    static bool hasAdditionalChars(const std::string* locale_str, const uint32_t c) {
        return getAdditionalCharsSize(locale_str, c) > 0;
    }
};
+25 −0
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ ProximityInfo::ProximityInfo(const std::string localeStr, const int maxProximity
          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 @@ void ProximityInfo::calculateNearbyKeyCodes(
            }
        }
    }
    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
}

+1 −0
Original line number Diff line number Diff line
@@ -104,6 +104,7 @@ class ProximityInfo {
    const int CELL_HEIGHT;
    const int KEY_COUNT;
    const bool HAS_TOUCH_POSITION_CORRECTION_DATA;
    const std::string mLocaleStr;
    const int *mInputCodes;
    const int *mInputXCoordinates;
    const int *mInputYCoordinates;