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

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

Merge "Add input pointers"

parents f2af726f 71538b08
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -199,10 +199,12 @@ public class BinaryDictionary extends Dictionary {
        //final int commitPoint = codes.getCommitPoint();
        //codes.clearCommitPoint();

        final InputPointers ips = codes.getInputPointers();

        return getSuggestionsNative(mNativeDict, proximityInfo.getNativeProximityInfo(),
            codes.getXCoordinates(), codes.getYCoordinates(), emptyArray, emptyArray, mInputCodes,
            codesSize, 0 /* unused */, false, prevWordCodePointArray, mUseFullEditDistance,
            outputChars, scores, spaceIndices);
            ips.getXCoordinates(), ips.getYCoordinates(), ips.getTimes(), ips.getPointerIds(),
            mInputCodes, codesSize, 0 /* unused */, false, prevWordCodePointArray,
            mUseFullEditDistance, outputChars, scores, spaceIndices);
    }

    public static float calcNormalizedScore(String before, String after, int score) {
+3 −2
Original line number Diff line number Diff line
@@ -268,8 +268,9 @@ public class ExpandableDictionary extends Dictionary {
        final ArrayList<SuggestedWordInfo> suggestions = new ArrayList<SuggestedWordInfo>();
        mInputLength = codes.size();
        if (mCodes.length < mInputLength) mCodes = new int[mInputLength][];
        final int[] xCoordinates = codes.getXCoordinates();
        final int[] yCoordinates = codes.getYCoordinates();
        final InputPointers ips = codes.getInputPointers();
        final int[] xCoordinates = ips.getXCoordinates();
        final int[] yCoordinates = ips.getYCoordinates();
        // Cache the codes so that we don't have to lookup an array list
        for (int i = 0; i < mInputLength; i++) {
            // TODO: Calculate proximity info here.
+131 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2012 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

package com.android.inputmethod.latin;

import java.util.Arrays;

public class InputPointers {
    private final ScalableIntArray mXCoordinates = new ScalableIntArray();
    private final ScalableIntArray mYCoordinates = new ScalableIntArray();
    private final ScalableIntArray mPointerIds = new ScalableIntArray();
    private final ScalableIntArray mTimes = new ScalableIntArray();

    public void addPointer(int index, int x, int y, int pointerId, int time) {
        mXCoordinates.add(index, x);
        mYCoordinates.add(index, y);
        mPointerIds.add(index, pointerId);
        mTimes.add(index, time);
    }

    public void addPointer(int x, int y, int pointerId, int time) {
        mXCoordinates.add(x);
        mYCoordinates.add(y);
        mPointerIds.add(pointerId);
        mTimes.add(time);
    }

    public void set(InputPointers ip) {
        mXCoordinates.set(ip.mXCoordinates);
        mYCoordinates.set(ip.mYCoordinates);
        mPointerIds.set(ip.mPointerIds);
        mTimes.set(ip.mTimes);
    }

    public void copy(InputPointers ip) {
        mXCoordinates.copy(ip.mXCoordinates);
        mYCoordinates.copy(ip.mYCoordinates);
        mPointerIds.copy(ip.mPointerIds);
        mTimes.copy(ip.mTimes);
    }

    public void reset() {
        mXCoordinates.reset();
        mYCoordinates.reset();
        mPointerIds.reset();
        mTimes.reset();
    }

    public int getPointerSize() {
        return mXCoordinates.getLength();
    }

    public int[] getXCoordinates() {
        return mXCoordinates.mArray;
    }

    public int[] getYCoordinates() {
        return mYCoordinates.mArray;
    }

    public int[] getPointerIds() {
        return mPointerIds.mArray;
    }

    public int[] getTimes() {
        return mTimes.mArray;
    }

    private static class ScalableIntArray {
        private static final int DEFAULT_SIZE = BinaryDictionary.MAX_WORD_LENGTH;
        private int[] mArray;
        private int mLength;

        public ScalableIntArray() {
            reset();
        }

        public void add(int index, int val) {
            if (mLength < index + 1) {
                mLength = index;
                add(val);
            } else {
                mArray[index] = val;
            }
        }

        public void add(int val) {
            if (mLength >= mArray.length) {
                final int[] newArray = new int[mLength * 2];
                System.arraycopy(mArray, 0, newArray, 0, mLength);
            }
            mArray[mLength] = val;
            ++mLength;
        }

        public int getLength() {
            return mLength;
        }

        public void reset() {
            mArray = new int[DEFAULT_SIZE];
            mLength = 0;
        }

        public int[] getPrimitiveArray() {
            return mArray;
        }

        public void copy(ScalableIntArray ip) {
            mArray = Arrays.copyOf(ip.mArray, ip.mArray.length);
        }

        public void set(ScalableIntArray ip) {
            mArray = ip.mArray;
            mLength = ip.mLength;
        }
    }
}
+7 −7
Original line number Diff line number Diff line
@@ -41,26 +41,26 @@ public class LastComposedWord {
    public static final int NOT_A_SEPARATOR = -1;

    public final int[] mPrimaryKeyCodes;
    public final int[] mXCoordinates;
    public final int[] mYCoordinates;
    public final String mTypedWord;
    public final String mCommittedWord;
    public final int mSeparatorCode;
    public final CharSequence mPrevWord;
    public final InputPointers mInputPointers = new InputPointers();

    private boolean mActive;

    public static final LastComposedWord NOT_A_COMPOSED_WORD =
            new LastComposedWord(null, null, null, "", "", NOT_A_SEPARATOR, null);
            new LastComposedWord(null, null, "", "", NOT_A_SEPARATOR, null);

    // Warning: this is using the passed objects as is and fully expects them to be
    // immutable. Do not fiddle with their contents after you passed them to this constructor.
    public LastComposedWord(final int[] primaryKeyCodes, final int[] xCoordinates,
            final int[] yCoordinates, final String typedWord, final String committedWord,
    public LastComposedWord(final int[] primaryKeyCodes, final InputPointers inputPointers,
            final String typedWord, final String committedWord,
            final int separatorCode, final CharSequence prevWord) {
        mPrimaryKeyCodes = primaryKeyCodes;
        mXCoordinates = xCoordinates;
        mYCoordinates = yCoordinates;
        if (inputPointers != null) {
            mInputPointers.copy(inputPointers);
        }
        mTypedWord = typedWord;
        mCommittedWord = committedWord;
        mSeparatorCode = separatorCode;
+9 −21
Original line number Diff line number Diff line
@@ -34,8 +34,7 @@ public class WordComposer {
    private static final int N = BinaryDictionary.MAX_WORD_LENGTH;

    private int[] mPrimaryKeyCodes;
    private int[] mXCoordinates;
    private int[] mYCoordinates;
    private final InputPointers mInputPointers = new InputPointers();
    private StringBuilder mTypedWord;
    private CharSequence mAutoCorrection;
    private boolean mIsResumed;
@@ -54,8 +53,6 @@ public class WordComposer {
    public WordComposer() {
        mPrimaryKeyCodes = new int[N];
        mTypedWord = new StringBuilder(N);
        mXCoordinates = new int[N];
        mYCoordinates = new int[N];
        mAutoCorrection = null;
        mTrailingSingleQuotesCount = 0;
        mIsResumed = false;
@@ -69,8 +66,7 @@ public class WordComposer {
    public void init(WordComposer source) {
        mPrimaryKeyCodes = Arrays.copyOf(source.mPrimaryKeyCodes, source.mPrimaryKeyCodes.length);
        mTypedWord = new StringBuilder(source.mTypedWord);
        mXCoordinates = Arrays.copyOf(source.mXCoordinates, source.mXCoordinates.length);
        mYCoordinates = Arrays.copyOf(source.mYCoordinates, source.mYCoordinates.length);
        mInputPointers.copy(source.mInputPointers);
        mCapsCount = source.mCapsCount;
        mIsFirstCharCapitalized = source.mIsFirstCharCapitalized;
        mAutoCapitalized = source.mAutoCapitalized;
@@ -116,12 +112,8 @@ public class WordComposer {
        return mPrimaryKeyCodes[index];
    }

    public int[] getXCoordinates() {
        return mXCoordinates;
    }

    public int[] getYCoordinates() {
        return mYCoordinates;
    public InputPointers getInputPointers() {
        return mInputPointers;
    }

    private static boolean isFirstCharCapitalized(int index, int codePoint, boolean previous) {
@@ -157,8 +149,8 @@ public class WordComposer {
        if (newIndex < BinaryDictionary.MAX_WORD_LENGTH) {
            mPrimaryKeyCodes[newIndex] = primaryCode >= Keyboard.CODE_SPACE
                    ? Character.toLowerCase(primaryCode) : primaryCode;
            mXCoordinates[newIndex] = keyX;
            mYCoordinates[newIndex] = keyY;
            // TODO: Set correct pointer id and time
            mInputPointers.addPointer(newIndex, keyX, keyY, 0, 0);
        }
        mIsFirstCharCapitalized = isFirstCharCapitalized(
                newIndex, primaryCode, mIsFirstCharCapitalized);
@@ -318,14 +310,11 @@ public class WordComposer {
        // or a DECIDED_WORD we may cancel the commit later; otherwise, we should deactivate
        // the last composed word to ensure this does not happen.
        final int[] primaryKeyCodes = mPrimaryKeyCodes;
        final int[] xCoordinates = mXCoordinates;
        final int[] yCoordinates = mYCoordinates;
        mPrimaryKeyCodes = new int[N];
        mXCoordinates = new int[N];
        mYCoordinates = new int[N];
        final LastComposedWord lastComposedWord = new LastComposedWord(primaryKeyCodes,
                xCoordinates, yCoordinates, mTypedWord.toString(), committedWord, separatorCode,
                mInputPointers, mTypedWord.toString(), committedWord, separatorCode,
                prevWord);
        mInputPointers.reset();
        if (type != LastComposedWord.COMMIT_TYPE_DECIDED_WORD
                && type != LastComposedWord.COMMIT_TYPE_MANUAL_PICK) {
            lastComposedWord.deactivate();
@@ -339,8 +328,7 @@ public class WordComposer {

    public void resumeSuggestionOnLastComposedWord(final LastComposedWord lastComposedWord) {
        mPrimaryKeyCodes = lastComposedWord.mPrimaryKeyCodes;
        mXCoordinates = lastComposedWord.mXCoordinates;
        mYCoordinates = lastComposedWord.mYCoordinates;
        mInputPointers.set(lastComposedWord.mInputPointers);
        mTypedWord.setLength(0);
        mTypedWord.append(lastComposedWord.mTypedWord);
        refreshSize();