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

Commit 7324052a authored by Satoshi Kataoka's avatar Satoshi Kataoka Committed by Android (Google) Code Review
Browse files

Merge "Refactor proximity info"

parents ef43cc9d 9d18c6dd
Loading
Loading
Loading
Loading
+4 −35
Original line number Diff line number Diff line
@@ -33,8 +33,10 @@ void ProximityInfoState::initInputParams(const int pointerId, const float maxPoi
        const ProximityInfo *proximityInfo, const int *const inputCodes, const int inputSize,
        const int *const xCoordinates, const int *const yCoordinates, const int *const times,
        const int *const pointerIds, const bool isGeometric) {
    mIsContinuationPossible = checkAndReturnIsContinuationPossible(
            inputSize, xCoordinates, yCoordinates, times, isGeometric);
    ASSERT(isGeometric || (inputSize < MAX_WORD_LENGTH));
    mIsContinuationPossible = ProximityInfoStateUtils::checkAndReturnIsContinuationPossible(
            inputSize, xCoordinates, yCoordinates, times, mSampledInputSize, &mSampledInputXs,
            &mSampledInputYs, &mSampledTimes, &mSampledInputIndice);

    mProximityInfo = proximityInfo;
    mHasTouchPositionCorrectionData = proximityInfo->hasTouchPositionCorrectionData();
@@ -149,39 +151,6 @@ void ProximityInfoState::initInputParams(const int pointerId, const float maxPoi
    }
}

bool ProximityInfoState::checkAndReturnIsContinuationPossible(const int inputSize,
        const int *const xCoordinates, const int *const yCoordinates, const int *const times,
        const bool isGeometric) const {
    if (isGeometric) {
        for (int i = 0; i < mSampledInputSize; ++i) {
            const int index = mSampledInputIndice[i];
            if (index > inputSize || xCoordinates[index] != mSampledInputXs[i] ||
                    yCoordinates[index] != mSampledInputYs[i] || times[index] != mSampledTimes[i]) {
                return false;
            }
        }
    } else {
        if (inputSize < mSampledInputSize) {
            // Assuming the cache is invalid if the previous input size is larger than the new one.
            return false;
        }
        for (int i = 0; i < mSampledInputSize && i < MAX_WORD_LENGTH; ++i) {
            if (xCoordinates[i] != mSampledInputXs[i]
                    || yCoordinates[i] != mSampledInputYs[i]) {
                return false;
            }
        }
    }
    return true;
}

int ProximityInfoState::getDuration(const int index) const {
    if (index >= 0 && index < mSampledInputSize - 1) {
        return mSampledTimes[index + 1] - mSampledTimes[index];
    }
    return 0;
}

// TODO: Remove the "scale" parameter
// This function basically converts from a length to an edit distance. Accordingly, it's obviously
// wrong to compare with mMaxPointToKeyLength.
+0 −4
Original line number Diff line number Diff line
@@ -122,8 +122,6 @@ class ProximityInfoState {
        return true;
    }

    int getDuration(const int index) const;

    bool isUsed() const {
        return mSampledInputSize > 0;
    }
@@ -217,8 +215,6 @@ class ProximityInfoState {
    inline const int *getProximityCodePointsAt(const int index) const {
        return ProximityInfoStateUtils::getProximityCodePointsAt(mInputProximities, index);
    }
    bool checkAndReturnIsContinuationPossible(const int inputSize, const int *const xCoordinates,
            const int *const yCoordinates, const int *const times, const bool isGeometric) const;
    void popInputData();

    // const
+28 −0
Original line number Diff line number Diff line
@@ -983,6 +983,34 @@ namespace latinime {
    return true;
}

/* static */ bool ProximityInfoStateUtils::checkAndReturnIsContinuationPossible(const int inputSize,
        const int *const xCoordinates, const int *const yCoordinates, const int *const times,
        const int sampledInputSize, const std::vector<int> *const sampledInputXs,
        const std::vector<int> *const sampledInputYs,
        const std::vector<int> *const sampledTimes,
        const std::vector<int> *const sampledInputIndices) {
    if (inputSize < sampledInputSize) {
        return false;
    }
    for (int i = 0; i < sampledInputSize; ++i) {
        const int index = (*sampledInputIndices)[i];
        if (index >= inputSize) {
            return false;
        }
        if (xCoordinates[index] != (*sampledInputXs)[i]
                || yCoordinates[index] != (*sampledInputYs)[i]) {
            return false;
        }
        if (!times) {
            continue;
        }
        if (times[index] != (*sampledTimes)[i]) {
            return false;
        }
    }
    return true;
}

/* static */ void ProximityInfoStateUtils::dump(const bool isGeometric, const int inputSize,
        const int *const inputXCoordinates, const int *const inputYCoordinates,
        const int sampledInputSize, const std::vector<int> *const sampledInputXs,
+6 −0
Original line number Diff line number Diff line
@@ -107,6 +107,12 @@ class ProximityInfoStateUtils {
            const std::vector<int> *const sampledTimes,
            const std::vector<float> *const sampledSpeedRates,
            const std::vector<int> *const sampledBeelineSpeedPercentiles);
    static bool checkAndReturnIsContinuationPossible(const int inputSize,
            const int *const xCoordinates, const int *const yCoordinates, const int *const times,
            const int sampledInputSize, const std::vector<int> *const sampledInputXs,
            const std::vector<int> *const sampledInputYs,
            const std::vector<int> *const sampledTimes,
            const std::vector<int> *const sampledInputIndices);
 private:
    DISALLOW_IMPLICIT_CONSTRUCTORS(ProximityInfoStateUtils);