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

Commit abaff8d0 authored by satok's avatar satok Committed by Android (Google) Code Review
Browse files

Merge "Use additional proximity chars in the native code"

parents d6662ecd 5eec574c
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;