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

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

Change more key specification type to String from CharSequence

Change-Id: I5e910f8225a248fc6403771836dec4c0b7294caa
parent 2010130e
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -101,7 +101,7 @@ public class Key {
    /** Text to output when pressed. This can be multiple characters, like ".com" */
    public final CharSequence mOutputText;
    /** More keys */
    public final CharSequence[] mMoreKeys;
    public final String[] mMoreKeys;
    /** More keys maximum column number */
    public final int mMaxMoreKeysColumn;

@@ -255,7 +255,7 @@ public class Key {
        // Update row to have current x coordinate.
        row.setXPos(keyXPos + keyWidth);

        final CharSequence[] moreKeys = style.getTextArray(keyAttr,
        final String[] moreKeys = style.getTextArray(keyAttr,
                R.styleable.Keyboard_Key_moreKeys);
        // In Arabic symbol layouts, we'd like to keep digits in more keys regardless of
        // config_digit_more_keys_enabled.
+6 −8
Original line number Diff line number Diff line
@@ -34,7 +34,7 @@ public class MiniKeyboard extends Keyboard {
    }

    public static class Builder extends Keyboard.Builder<Builder.MiniKeyboardParams> {
        private final CharSequence[] mMoreKeys;
        private final String[] mMoreKeys;

        public static class MiniKeyboardParams extends Keyboard.Params {
            /* package */int mTopRowAdjustment;
@@ -230,16 +230,14 @@ public class MiniKeyboard extends Keyboard {
                    parentKey.mX + (mParams.mDefaultKeyWidth - width) / 2, view.getMeasuredWidth());
        }

        private static int getMaxKeyWidth(KeyboardView view, CharSequence[] moreKeys,
                int minKeyWidth) {
        private static int getMaxKeyWidth(KeyboardView view, String[] moreKeys, int minKeyWidth) {
            final int padding = (int) view.getContext().getResources()
                    .getDimension(R.dimen.mini_keyboard_key_horizontal_padding);
            Paint paint = null;
            int maxWidth = minKeyWidth;
            for (CharSequence moreKeySpec : moreKeys) {
                final CharSequence label = MoreKeySpecParser.getLabel(moreKeySpec.toString());
                // If the label is single letter, minKeyWidth is enough to hold
                // the label.
            for (String moreKeySpec : moreKeys) {
                final String label = MoreKeySpecParser.getLabel(moreKeySpec);
                // If the label is single letter, minKeyWidth is enough to hold the label.
                if (label != null && label.length() > 1) {
                    if (paint == null) {
                        paint = new Paint();
@@ -258,7 +256,7 @@ public class MiniKeyboard extends Keyboard {
        public MiniKeyboard build() {
            final MiniKeyboardParams params = mParams;
            for (int n = 0; n < mMoreKeys.length; n++) {
                final String moreKeySpec = mMoreKeys[n].toString();
                final String moreKeySpec = mMoreKeys[n];
                final int row = n / params.mNumColumns;
                final Key key = new Key(mResources, params, moreKeySpec, params.getX(n, row),
                        params.getY(row), params.mDefaultKeyWidth, params.mDefaultRowHeight);
+53 −49
Original line number Diff line number Diff line
@@ -37,20 +37,22 @@ public class KeyStyles {
            new HashMap<String, DeclaredKeyStyle>();
    private static final KeyStyle EMPTY_KEY_STYLE = new EmptyKeyStyle();

    private static final char ESCAPE_CHAR = '\\';

    public interface KeyStyle {
        public CharSequence[] getTextArray(TypedArray a, int index);
        public String[] getTextArray(TypedArray a, int index);
        public CharSequence getText(TypedArray a, int index);
        public int getInt(TypedArray a, int index, int defaultValue);
        public int getFlag(TypedArray a, int index, int defaultValue);
    }

    /* package */ static class EmptyKeyStyle implements KeyStyle {
    private static class EmptyKeyStyle implements KeyStyle {
        EmptyKeyStyle() {
            // Nothing to do.
        }

        @Override
        public CharSequence[] getTextArray(TypedArray a, int index) {
        public String[] getTextArray(TypedArray a, int index) {
            return parseTextArray(a, index);
        }

@@ -69,33 +71,36 @@ public class KeyStyles {
            return a.getInt(index, defaultValue);
        }

        protected static CharSequence[] parseTextArray(TypedArray a, int index) {
        protected static String[] parseTextArray(TypedArray a, int index) {
            if (!a.hasValue(index))
                return null;
            final CharSequence text = a.getText(index);
            return parseCsvText(text);
            return parseCsvText(text.toString());
        }

    }

        /* package */ static CharSequence[] parseCsvText(CharSequence text) {
    /* package for test */
    static String[] parseCsvText(String text) {
        final int size = text.length();
        if (size == 0) return null;
            if (size == 1) return new CharSequence[] { text };
        if (size == 1) return new String[] { text };
        final StringBuilder sb = new StringBuilder();
            ArrayList<CharSequence> list = null;
        ArrayList<String> list = null;
        int start = 0;
        for (int pos = 0; pos < size; pos++) {
            final char c = text.charAt(pos);
            if (c == ',') {
                    if (list == null) list = new ArrayList<CharSequence>();
                if (list == null) list = new ArrayList<String>();
                if (sb.length() == 0) {
                        list.add(text.subSequence(start, pos));
                    list.add(text.substring(start, pos));
                } else {
                    list.add(sb.toString());
                    sb.setLength(0);
                }
                start = pos + 1;
                continue;
                } else if (c == '\\') {
            } else if (c == ESCAPE_CHAR) {
                if (start == pos) {
                    // Skip escape character at the beginning of the value.
                    start++;
@@ -112,21 +117,20 @@ public class KeyStyles {
            }
        }
        if (list == null) {
                return new CharSequence[] { sb.length() > 0 ? sb : text.subSequence(start, size) };
            return new String[] { sb.length() > 0 ? sb.toString() : text.substring(start) };
        } else {
                list.add(sb.length() > 0 ? sb : text.subSequence(start, size));
                return list.toArray(new CharSequence[list.size()]);
            }
            list.add(sb.length() > 0 ? sb.toString() : text.substring(start));
            return list.toArray(new String[list.size()]);
        }
    }

    /* package */ static class DeclaredKeyStyle extends EmptyKeyStyle {
    private static class DeclaredKeyStyle extends EmptyKeyStyle {
        private final HashMap<Integer, Object> mAttributes = new HashMap<Integer, Object>();

        @Override
        public CharSequence[] getTextArray(TypedArray a, int index) {
        public String[] getTextArray(TypedArray a, int index) {
            return a.hasValue(index)
                    ? super.getTextArray(a, index) : (CharSequence[])mAttributes.get(index);
                    ? super.getTextArray(a, index) : (String[])mAttributes.get(index);
        }

        @Override
+12 −14
Original line number Diff line number Diff line
@@ -40,7 +40,7 @@ import java.util.ArrayList;
public class MoreKeySpecParser {
    private static final String TAG = MoreKeySpecParser.class.getSimpleName();

    private static final char ESCAPE = '\\';
    private static final char ESCAPE_CHAR = '\\';
    private static final String LABEL_END = "|";
    private static final String PREFIX_AT = "@";
    private static final String PREFIX_ICON = PREFIX_AT + "icon/";
@@ -71,14 +71,14 @@ public class MoreKeySpecParser {
    }

    private static String parseEscape(String text) {
        if (text.indexOf(ESCAPE) < 0) {
        if (text.indexOf(ESCAPE_CHAR) < 0) {
            return text;
        }
        final int length = text.length();
        final StringBuilder sb = new StringBuilder();
        for (int pos = 0; pos < length; pos++) {
            final char c = text.charAt(pos);
            if (c == ESCAPE && pos + 1 < length) {
            if (c == ESCAPE_CHAR && pos + 1 < length) {
                sb.append(text.charAt(++pos));
            } else {
                sb.append(c);
@@ -88,7 +88,7 @@ public class MoreKeySpecParser {
    }

    private static int indexOfLabelEnd(String moreKeySpec, int start) {
        if (moreKeySpec.indexOf(ESCAPE, start) < 0) {
        if (moreKeySpec.indexOf(ESCAPE_CHAR, start) < 0) {
            final int end = moreKeySpec.indexOf(LABEL_END, start);
            if (end == 0) {
                throw new MoreKeySpecParserError(LABEL_END + " at " + start + ": " + moreKeySpec);
@@ -98,7 +98,7 @@ public class MoreKeySpecParser {
        final int length = moreKeySpec.length();
        for (int pos = start; pos < length; pos++) {
            final char c = moreKeySpec.charAt(pos);
            if (c == ESCAPE && pos + 1 < length) {
            if (c == ESCAPE_CHAR && pos + 1 < length) {
                pos++;
            } else if (moreKeySpec.startsWith(LABEL_END, pos)) {
                return pos;
@@ -207,21 +207,19 @@ public class MoreKeySpecParser {
        }
    };

    public static CharSequence[] filterOut(Resources res, CharSequence[] moreKeys,
            CodeFilter filter) {
    public static String[] filterOut(Resources res, String[] moreKeys, CodeFilter filter) {
        if (moreKeys == null || moreKeys.length < 1) {
            return null;
        }
        if (moreKeys.length == 1
                && filter.shouldFilterOut(getCode(res, moreKeys[0].toString()))) {
        if (moreKeys.length == 1 && filter.shouldFilterOut(getCode(res, moreKeys[0]))) {
            return null;
        }
        ArrayList<CharSequence> filtered = null;
        ArrayList<String> filtered = null;
        for (int i = 0; i < moreKeys.length; i++) {
            final CharSequence moreKeySpec = moreKeys[i];
            if (filter.shouldFilterOut(getCode(res, moreKeySpec.toString()))) {
            final String moreKeySpec = moreKeys[i];
            if (filter.shouldFilterOut(getCode(res, moreKeySpec))) {
                if (filtered == null) {
                    filtered = new ArrayList<CharSequence>();
                    filtered = new ArrayList<String>();
                    for (int j = 0; j < i; j++) {
                        filtered.add(moreKeys[j]);
                    }
@@ -236,6 +234,6 @@ public class MoreKeySpecParser {
        if (filtered.size() == 0) {
            return null;
        }
        return filtered.toArray(new CharSequence[filtered.size()]);
        return filtered.toArray(new String[filtered.size()]);
    }
}
+2 −5
Original line number Diff line number Diff line
@@ -16,8 +16,6 @@

package com.android.inputmethod.keyboard.internal;

import com.android.inputmethod.keyboard.internal.KeyStyles.EmptyKeyStyle;

import android.test.AndroidTestCase;
import android.text.TextUtils;

@@ -26,9 +24,8 @@ public class KeyStylesTests extends AndroidTestCase {
        return message + " expected:<" + expected + "> but was:<" + actual + ">";
    }

    private static void assertTextArray(String message, CharSequence value,
            CharSequence ... expected) {
        final CharSequence actual[] = EmptyKeyStyle.parseCsvText(value);
    private static void assertTextArray(String message, String value, String ... expected) {
        final String actual[] = KeyStyles.parseCsvText(value);
        if (expected.length == 0) {
            assertNull(message, actual);
            return;