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

Commit 6ca50d99 authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka
Browse files

Fix touch position correction data passing

Bug: 7225811
Change-Id: I3dcc0385ed633585d6810fdb742e0f88c2efbbd2
parent 0d4d1096
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -96,7 +96,7 @@ public class KeyboardLayoutSet {
        String mKeyboardLayoutSetName;
        int mMode;
        EditorInfo mEditorInfo;
        boolean mTouchPositionCorrectionEnabled;
        boolean mDisableTouchPositionCorrectionDataForTest;
        boolean mVoiceKeyEnabled;
        boolean mVoiceKeyOnMain;
        boolean mNoSettingsKey;
@@ -167,7 +167,9 @@ public class KeyboardLayoutSet {
            }
            final int keyboardXmlId = elementParams.mKeyboardXmlId;
            builder.load(keyboardXmlId, id);
            builder.setTouchPositionCorrectionEnabled(mParams.mTouchPositionCorrectionEnabled);
            if (mParams.mDisableTouchPositionCorrectionDataForTest) {
                builder.disableTouchPositionCorrectionDataForTest();
            }
            builder.setProximityCharsCorrectionEnabled(
                    elementParams.mProximityCharsCorrectionEnabled);
            keyboard = builder.build();
@@ -264,8 +266,9 @@ public class KeyboardLayoutSet {
            return this;
        }

        public void setTouchPositionCorrectionEnabled(final boolean enabled) {
            mParams.mTouchPositionCorrectionEnabled = enabled;
        // For test only
        public void disableTouchPositionCorrectionDataForTest() {
            mParams.mDisableTouchPositionCorrectionDataForTest = true;
        }

        public KeyboardLayoutSet build() {
+7 −9
Original line number Diff line number Diff line
@@ -44,7 +44,6 @@ public class ProximityInfo {
    private final int mKeyboardHeight;
    private final int mMostCommonKeyWidth;
    private final Key[] mKeys;
    private final TouchPositionCorrection mTouchPositionCorrection;
    private final Key[][] mGridNeighbors;
    private final String mLocaleStr;

@@ -67,14 +66,13 @@ public class ProximityInfo {
        mKeyHeight = mostCommonKeyHeight;
        mMostCommonKeyWidth = mostCommonKeyWidth;
        mKeys = keys;
        mTouchPositionCorrection = touchPositionCorrection;
        mGridNeighbors = new Key[mGridSize][];
        if (minWidth == 0 || height == 0) {
            // No proximity required. Keyboard might be more keys keyboard.
            return;
        }
        computeNearestNeighbors();
        mNativeProximityInfo = createNativeProximityInfo();
        mNativeProximityInfo = createNativeProximityInfo(touchPositionCorrection);
    }

    public static ProximityInfo createDummyProximityInfo() {
@@ -106,12 +104,12 @@ public class ProximityInfo {

    private native void releaseProximityInfoNative(long nativeProximityInfo);

    private final long createNativeProximityInfo() {
    private final long createNativeProximityInfo(
            final TouchPositionCorrection touchPositionCorrection) {
        final Key[][] gridNeighborKeys = mGridNeighbors;
        final int keyboardWidth = mKeyboardMinWidth;
        final int keyboardHeight = mKeyboardHeight;
        final Key[] keys = mKeys;
        final TouchPositionCorrection touchPositionCorrection = mTouchPositionCorrection;
        final int[] proximityCharsArray = new int[mGridSize * MAX_PROXIMITY_CHARS_SIZE];
        Arrays.fill(proximityCharsArray, Constants.NOT_A_CODE);
        for (int i = 0; i < mGridSize; ++i) {
@@ -148,12 +146,12 @@ public class ProximityInfo {
                final Key key = keys[i];
                final Rect hitBox = key.mHitBox;
                final int row = hitBox.top / mKeyHeight;
                if (row < touchPositionCorrection.mRadii.length) {
                if (row < touchPositionCorrection.getRows()) {
                    final int hitBoxWidth = hitBox.width();
                    final int hitBoxHeight = hitBox.height();
                    final float x = touchPositionCorrection.mXs[row];
                    final float y = touchPositionCorrection.mYs[row];
                    final float radius = touchPositionCorrection.mRadii[row];
                    final float x = touchPositionCorrection.getX(row);
                    final float y = touchPositionCorrection.getY(row);
                    final float radius = touchPositionCorrection.getRadius(row);
                    sweetSpotCenterXs[i] = hitBox.exactCenterX() + x * hitBoxWidth;
                    sweetSpotCenterYs[i] = hitBox.exactCenterY() + y * hitBoxHeight;
                    // Note that, in recent versions of Android, FloatMath is actually slower than
+3 −4
Original line number Diff line number Diff line
@@ -177,9 +177,9 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
        return this;
    }

    // TODO: Remove this method.
    public void setTouchPositionCorrectionEnabled(final boolean enabled) {
        mParams.mTouchPositionCorrection.setEnabled(enabled);
    // For test only
    public void disableTouchPositionCorrectionDataForTest() {
        mParams.mTouchPositionCorrection.setEnabled(false);
    }

    public void setProximityCharsCorrectionEnabled(final boolean enabled) {
@@ -314,7 +314,6 @@ public class KeyboardBuilder<KP extends KeyboardParams> {

            final int resourceId = keyboardAttr.getResourceId(
                    R.styleable.Keyboard_touchPositionCorrectionData, 0);
            params.mTouchPositionCorrection.setEnabled(resourceId != 0);
            if (resourceId != 0) {
                final String[] data = mResources.getStringArray(resourceId);
                params.mTouchPositionCorrection.load(data);
+24 −7
Original line number Diff line number Diff line
@@ -21,10 +21,10 @@ import com.android.inputmethod.latin.LatinImeLogger;
public class TouchPositionCorrection {
    private static final int TOUCH_POSITION_CORRECTION_RECORD_SIZE = 3;

    public boolean mEnabled;
    public float[] mXs;
    public float[] mYs;
    public float[] mRadii;
    private boolean mEnabled;
    private float[] mXs;
    private float[] mYs;
    private float[] mRadii;

    public void load(final String[] data) {
        final int dataLength = data.length;
@@ -53,24 +53,41 @@ public class TouchPositionCorrection {
                    mRadii[index] = value;
                }
            }
            mEnabled = dataLength > 0;
        } catch (NumberFormatException e) {
            if (LatinImeLogger.sDBG) {
                throw new RuntimeException(
                        "the number format for touch position correction data is invalid");
            }
            mEnabled = false;
            mXs = null;
            mYs = null;
            mRadii = null;
        }
    }

    // TODO: Remove this method.
    // For test only
    public void setEnabled(final boolean enabled) {
        mEnabled = enabled;
    }

    public boolean isValid() {
        return mEnabled && mXs != null && mYs != null && mRadii != null
                && mXs.length > 0 && mYs.length > 0 && mRadii.length > 0;
        return mEnabled;
    }

    public int getRows() {
        return mRadii.length;
    }

    public float getX(final int row) {
        return mXs[row];
    }

    public float getY(final int row) {
        return mYs[row];
    }

    public float getRadius(final int row) {
        return mRadii[row];
    }
}