diff options
Diffstat (limited to 'java')
-rw-r--r-- | java/res/values/strings.xml | 18 | ||||
-rw-r--r-- | java/res/xml-sw600dp-land/kbd_number.xml | 2 | ||||
-rw-r--r-- | java/res/xml-sw600dp-land/kbd_phone.xml | 2 | ||||
-rw-r--r-- | java/res/xml-sw600dp-land/kbd_phone_symbols.xml | 2 | ||||
-rw-r--r-- | java/res/xml-sw600dp/kbd_number.xml | 2 | ||||
-rw-r--r-- | java/res/xml-sw600dp/kbd_phone.xml | 2 | ||||
-rw-r--r-- | java/res/xml-sw600dp/kbd_phone_symbols.xml | 2 | ||||
-rw-r--r-- | java/res/xml-sw600dp/rows_number_normal.xml | 51 | ||||
-rw-r--r-- | java/res/xml-sw600dp/rows_number_password.xml | 21 | ||||
-rw-r--r-- | java/res/xml-sw600dp/rows_phone.xml | 48 | ||||
-rw-r--r-- | java/src/com/android/inputmethod/keyboard/Key.java | 15 | ||||
-rw-r--r-- | java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java | 88 |
12 files changed, 108 insertions, 145 deletions
diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml index e258f3bff..69fdea79f 100644 --- a/java/res/values/strings.xml +++ b/java/res/values/strings.xml @@ -248,23 +248,23 @@ <!-- Title of the item to change the keyboard theme [CHAR LIMIT=20]--> <string name="keyboard_layout">Keyboard theme</string> - <!-- Description for English (United Kingdom) keyboard subtype [CHAR LIMIT=22] --> + <!-- Description for English (United Kingdom) keyboard subtype [CHAR LIMIT=25] --> <string name="subtype_en_GB">English (UK)</string> - <!-- Description for English (United States) keyboard subtype [CHAR LIMIT=22] --> + <!-- Description for English (United States) keyboard subtype [CHAR LIMIT=25] --> <string name="subtype_en_US">English (US)</string> - <!-- Description for language agnostic keyboard subtype [CHAR LIMIT=22] --> + <!-- Description for language agnostic keyboard subtype [CHAR LIMIT=25] --> <string name="subtype_no_language">No language</string> - <!-- Description for language agnostic QWERTY keyboard subtype [CHAR LIMIT=22] --> + <!-- Description for language agnostic QWERTY keyboard subtype [CHAR LIMIT=25] --> <string name="subtype_no_language_qwerty">No language (QWERTY)</string> - <!-- Description for language agnostic QWERTZ keyboard subtype [CHAR LIMIT=22] --> + <!-- Description for language agnostic QWERTZ keyboard subtype [CHAR LIMIT=25] --> <string name="subtype_no_language_qwertz">No language (QWERTZ)</string> - <!-- Description for language agnostic AZERTY keyboard subtype [CHAR LIMIT=22] --> + <!-- Description for language agnostic AZERTY keyboard subtype [CHAR LIMIT=25] --> <string name="subtype_no_language_azerty">No language (AZERTY)</string> - <!-- Description for language agnostic Dvorak keyboard subtype [CHAR LIMIT=22] --> + <!-- Description for language agnostic Dvorak keyboard subtype [CHAR LIMIT=25] --> <string name="subtype_no_language_dvorak">No language (Dvorak)</string> - <!-- Description for language agnostic Colemak keyboard subtype [CHAR LIMIT=22] --> + <!-- Description for language agnostic Colemak keyboard subtype [CHAR LIMIT=25] --> <string name="subtype_no_language_colemak">No language (Colemak)</string> - <!-- Description for language agnostic PC QWERTY keyboard subtype [CHAR LIMIT=22] --> + <!-- Description for language agnostic PC QWERTY keyboard subtype [CHAR LIMIT=25] --> <string name="subtype_no_language_pcqwerty">No language (PC)</string> <!-- Title of the preference settings for custom input styles (language and keyboard layout pairs) [CHAR LIMIT=35]--> diff --git a/java/res/xml-sw600dp-land/kbd_number.xml b/java/res/xml-sw600dp-land/kbd_number.xml index 9d358b678..cb86b3b2f 100644 --- a/java/res/xml-sw600dp-land/kbd_number.xml +++ b/java/res/xml-sw600dp-land/kbd_number.xml @@ -21,7 +21,7 @@ <Keyboard xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyboardHorizontalEdgesPadding="10%p" - latin:keyWidth="15.00%p" + latin:keyWidth="18%p" > <include latin:keyboardLayout="@xml/rows_number" /> diff --git a/java/res/xml-sw600dp-land/kbd_phone.xml b/java/res/xml-sw600dp-land/kbd_phone.xml index abac6bd4f..71c7c04a1 100644 --- a/java/res/xml-sw600dp-land/kbd_phone.xml +++ b/java/res/xml-sw600dp-land/kbd_phone.xml @@ -21,7 +21,7 @@ <Keyboard xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyboardHorizontalEdgesPadding="10%p" - latin:keyWidth="15.00%p" + latin:keyWidth="18%p" > <include latin:keyboardLayout="@xml/rows_phone" /> diff --git a/java/res/xml-sw600dp-land/kbd_phone_symbols.xml b/java/res/xml-sw600dp-land/kbd_phone_symbols.xml index e3f56bce7..39bdae3c7 100644 --- a/java/res/xml-sw600dp-land/kbd_phone_symbols.xml +++ b/java/res/xml-sw600dp-land/kbd_phone_symbols.xml @@ -21,7 +21,7 @@ <Keyboard xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyboardHorizontalEdgesPadding="10%p" - latin:keyWidth="15.00%p" + latin:keyWidth="18%p" > <!-- Tablet doesn't have phone symbols keyboard --> <include diff --git a/java/res/xml-sw600dp/kbd_number.xml b/java/res/xml-sw600dp/kbd_number.xml index 70cf6a2ca..4a8b08c2a 100644 --- a/java/res/xml-sw600dp/kbd_number.xml +++ b/java/res/xml-sw600dp/kbd_number.xml @@ -20,7 +20,7 @@ <Keyboard xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" - latin:keyWidth="15.00%p" + latin:keyWidth="18%p" > <include latin:keyboardLayout="@xml/rows_number" /> diff --git a/java/res/xml-sw600dp/kbd_phone.xml b/java/res/xml-sw600dp/kbd_phone.xml index 72acef21c..f63f1c648 100644 --- a/java/res/xml-sw600dp/kbd_phone.xml +++ b/java/res/xml-sw600dp/kbd_phone.xml @@ -20,7 +20,7 @@ <Keyboard xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" - latin:keyWidth="15.00%p" + latin:keyWidth="18%p" > <include latin:keyboardLayout="@xml/rows_phone" /> diff --git a/java/res/xml-sw600dp/kbd_phone_symbols.xml b/java/res/xml-sw600dp/kbd_phone_symbols.xml index 9faeaf4e0..a0f55b732 100644 --- a/java/res/xml-sw600dp/kbd_phone_symbols.xml +++ b/java/res/xml-sw600dp/kbd_phone_symbols.xml @@ -20,7 +20,7 @@ <Keyboard xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" - latin:keyWidth="15.00%p" + latin:keyWidth="18%p" > <!-- Tablet doesn't have phone symbols keyboard --> <include diff --git a/java/res/xml-sw600dp/rows_number_normal.xml b/java/res/xml-sw600dp/rows_number_normal.xml index 04d295336..3954b000e 100644 --- a/java/res/xml-sw600dp/rows_number_normal.xml +++ b/java/res/xml-sw600dp/rows_number_normal.xml @@ -22,25 +22,22 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" > <Row> - <!-- Note: This Spacer prevents the below key from being marked as a left edge key. --> - <Spacer - latin:keyWidth="12.75%p" /> <Key latin:keyLabel="-" latin:keyStyle="numKeyStyle" - latin:keyWidth="9.25%p" /> + latin:keyWidth="10%p" /> <Key latin:keyLabel="+" latin:keyStyle="numKeyStyle" - latin:keyWidth="9.25%p" /> + latin:keyWidth="10%p" /> <Key latin:keyLabel="." latin:keyStyle="numKeyStyle" - latin:keyWidth="9.25%p" /> + latin:keyWidth="10%p" /> <Key latin:keyLabel="1" latin:keyStyle="numKeyStyle" - latin:keyXPos="42.25%p" /> + latin:keyXPos="31%p" /> <Key latin:keyLabel="2" latin:keyStyle="numKeyStyle" /> @@ -49,20 +46,17 @@ latin:keyStyle="numKeyStyle" /> <Key latin:keyStyle="deleteKeyStyle" - latin:keyXPos="-11.00%p" + latin:keyXPos="-14%p" latin:keyWidth="fillRight" /> </Row> <Row> - <!-- Note: This Spacer prevents the below key from being marked as a left edge key. --> - <Spacer - latin:keyWidth="12.75%p" /> <Key latin:keyStyle="numStarKeyStyle" - latin:keyWidth="9.25%p" /> + latin:keyWidth="10%p" /> <Key latin:keyLabel="/" latin:keyStyle="numKeyStyle" - latin:keyWidth="9.25%p" /> + latin:keyWidth="10%p" /> <switch> <case latin:mode="time|datetime" @@ -72,19 +66,19 @@ latin:keyLabelFlags="hasPopupHint" latin:moreKeys="!text/more_keys_for_am_pm" latin:keyStyle="numKeyStyle" - latin:keyWidth="9.25%p" /> + latin:keyWidth="10%p" /> </case> <default> <Key latin:keyLabel="," latin:keyStyle="numKeyStyle" - latin:keyWidth="9.25%p" /> + latin:keyWidth="10%p" /> </default> </switch> <Key latin:keyLabel="4" latin:keyStyle="numKeyStyle" - latin:keyXPos="42.25%p" /> + latin:keyXPos="31%p" /> <Key latin:keyLabel="5" latin:keyStyle="numKeyStyle" /> @@ -93,21 +87,18 @@ latin:keyStyle="numKeyStyle" /> <Key latin:keyStyle="enterKeyStyle" - latin:keyXPos="-11.00%p" + latin:keyXPos="-14%p" latin:keyWidth="fillRight" /> </Row> <Row> - <!-- Note: This Spacer prevents the below key from being marked as a left edge key. --> - <Spacer - latin:keyWidth="12.75%p" /> <Key latin:keyLabel="(" latin:keyStyle="numKeyStyle" - latin:keyWidth="9.25%p" /> + latin:keyWidth="10%p" /> <Key latin:keyLabel=")" latin:keyStyle="numKeyStyle" - latin:keyWidth="9.25%p" /> + latin:keyWidth="10%p" /> <switch> <case latin:mode="time|datetime" @@ -115,19 +106,19 @@ <Key latin:keyLabel=":" latin:keyStyle="numKeyStyle" - latin:keyWidth="9.25%p" /> + latin:keyWidth="10%p" /> </case> <default> <Key latin:keyLabel="=" latin:keyStyle="numKeyStyle" - latin:keyWidth="9.25%p" /> + latin:keyWidth="10%p" /> </default> </switch> <Key latin:keyLabel="7" latin:keyStyle="numKeyStyle" - latin:keyXPos="42.25%p" /> + latin:keyXPos="31%p" /> <Key latin:keyLabel="8" latin:keyStyle="numKeyStyle" /> @@ -139,15 +130,11 @@ </Row> <Row> <Key - latin:keyStyle="numTabKeyStyle" - latin:keyWidth="11.00%p" /> - <Key latin:keyStyle="spaceKeyStyle" - latin:keyWidth="27.75%p" - latin:keyXPos="12.75%p" /> + latin:keyWidth="30%p" /> <Key latin:keyStyle="numStarKeyStyle" - latin:keyXPos="42.25%p" /> + latin:keyXPos="31%p" /> <Key latin:keyLabel="0" latin:keyStyle="numKeyStyle" /> @@ -155,7 +142,7 @@ latin:keyLabel="#" latin:keyStyle="numKeyStyle" /> <include - latin:keyXPos="-11.0%p" + latin:keyXPos="-10%p" latin:keyWidth="fillRight" latin:keyboardLayout="@xml/key_shortcut" /> </Row> diff --git a/java/res/xml-sw600dp/rows_number_password.xml b/java/res/xml-sw600dp/rows_number_password.xml index 2a2c33d93..36f4bba46 100644 --- a/java/res/xml-sw600dp/rows_number_password.xml +++ b/java/res/xml-sw600dp/rows_number_password.xml @@ -24,7 +24,7 @@ <Row> <!-- Note: This Spacer prevents the below key from being marked as a left edge key. --> <Spacer - latin:keyWidth="27.50%p" /> + latin:keyWidth="23%p" /> <Key latin:keyStyle="num1KeyStyle" /> <Key @@ -33,13 +33,13 @@ latin:keyStyle="num3KeyStyle" /> <Key latin:keyStyle="deleteKeyStyle" - latin:keyXPos="-11.00%p" + latin:keyXPos="-16%p" latin:keyWidth="fillRight" /> </Row> <Row> <!-- Note: This Spacer prevents the below key from being marked as a left edge key. --> <Spacer - latin:keyWidth="27.50%p" /> + latin:keyWidth="23%p" /> <Key latin:keyStyle="num4KeyStyle" /> <Key @@ -48,13 +48,13 @@ latin:keyStyle="num6KeyStyle" /> <Key latin:keyStyle="enterKeyStyle" - latin:keyXPos="-11.00%p" + latin:keyXPos="-16%p" latin:keyWidth="fillRight" /> </Row> <Row> <!-- Note: This Spacer prevents the below key from being marked as a left edge key. --> <Spacer - latin:keyWidth="27.50%p" /> + latin:keyWidth="23%p" /> <Key latin:keyStyle="num7KeyStyle" /> <Key @@ -65,14 +65,13 @@ <Spacer /> </Row> <Row> + <!-- Note: This Spacer prevents the below key from being marked as a left edge key. --> + <Spacer + latin:keyWidth="41%p" /> <Key - latin:keyStyle="tabKeyStyle" - latin:keyWidth="11.00%p" /> - <Key - latin:keyStyle="num0KeyStyle" - latin:keyXPos="42.50%p"/> + latin:keyStyle="num0KeyStyle" /> <include - latin:keyXPos="-11.00%p" + latin:keyXPos="-10%p" latin:keyWidth="fillRight" latin:keyboardLayout="@xml/key_shortcut" /> </Row> diff --git a/java/res/xml-sw600dp/rows_phone.xml b/java/res/xml-sw600dp/rows_phone.xml index 687cadb87..113ce1fa6 100644 --- a/java/res/xml-sw600dp/rows_phone.xml +++ b/java/res/xml-sw600dp/rows_phone.xml @@ -26,79 +26,69 @@ <include latin:keyboardLayout="@xml/key_styles_number" /> <Row> - <!-- Note: This Spacer prevents the below key from being marked as a left edge key. --> - <Spacer - latin:keyWidth="12.75%p" /> <Key latin:keyLabel="-" latin:keyStyle="numKeyStyle" - latin:keyWidth="9.25%p" /> + latin:keyWidth="10%p" /> <Key latin:keyLabel="+" latin:keyStyle="numKeyStyle" - latin:keyWidth="9.25%p" /> + latin:keyWidth="10%p" /> <Key latin:keyStyle="numPauseKeyStyle" - latin:keyWidth="9.25%p" /> + latin:keyWidth="10%p" /> <Key latin:keyStyle="num1KeyStyle" - latin:keyXPos="42.25%p" /> + latin:keyXPos="31%p" /> <Key latin:keyStyle="num2KeyStyle" /> <Key latin:keyStyle="num3KeyStyle" /> <Key latin:keyStyle="deleteKeyStyle" - latin:keyXPos="-11.00%p" + latin:keyXPos="-14%p" latin:keyWidth="fillRight" /> </Row> <Row> - <!-- Note: This Spacer prevents the below key from being marked as a left edge key. --> - <Spacer - latin:keyWidth="12.75%p" /> <Key latin:keyLabel="," latin:keyStyle="numKeyStyle" - latin:keyWidth="9.25%p" /> + latin:keyWidth="10%p" /> <Key latin:keyLabel="." latin:keyStyle="numKeyStyle" - latin:keyWidth="9.25%p" /> + latin:keyWidth="10%p" /> <Key latin:keyStyle="numWaitKeyStyle" - latin:keyWidth="9.25%p" /> + latin:keyWidth="10%p" /> <Key latin:keyStyle="num4KeyStyle" - latin:keyXPos="42.25%p" /> + latin:keyXPos="31%p" /> <Key latin:keyStyle="num5KeyStyle" /> <Key latin:keyStyle="num6KeyStyle" /> <Key latin:keyStyle="enterKeyStyle" - latin:keyXPos="-11.00%p" + latin:keyXPos="-14%p" latin:keyWidth="fillRight" /> </Row> <Row> - <!-- Note: This Spacer prevents the below key from being marked as a left edge key. --> - <Spacer - latin:keyWidth="12.75%p" /> <Key latin:keyLabel="(" latin:keyStyle="numKeyStyle" - latin:keyWidth="9.25%p" - latin:keyXPos="12.75%p" /> + latin:keyWidth="10%p" /> <Key latin:keyLabel=")" latin:keyStyle="numKeyStyle" - latin:keyWidth="9.25%p" /> + latin:keyWidth="10%p" /> <Key latin:keyLabel="N" latin:keyStyle="numKeyStyle" - latin:keyWidth="9.25%p" /> + latin:keyWidth="10%p" /> <Key latin:keyStyle="num7KeyStyle" - latin:keyXPos="42.25%p" /> + latin:keyXPos="31%p" /> <Key latin:keyStyle="num8KeyStyle" /> <Key @@ -108,22 +98,18 @@ </Row> <Row> <Key - latin:keyStyle="numTabKeyStyle" - latin:keyWidth="11.00%p" /> - <Key latin:keyStyle="spaceKeyStyle" - latin:keyWidth="27.75%p" - latin:keyXPos="12.75%p" /> + latin:keyWidth="30%p" /> <Key latin:keyStyle="numStarKeyStyle" - latin:keyXPos="42.25%p" /> + latin:keyXPos="31%p" /> <Key latin:keyStyle="num0KeyStyle" /> <Key latin:keyLabel="#" latin:keyStyle="numKeyStyle" /> <include - latin:keyXPos="-11.0%p" + latin:keyXPos="-10%p" latin:keyWidth="fillRight" latin:keyboardLayout="@xml/key_shortcut" /> </Row> diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java index 0d78c39f2..4d7fe3d8e 100644 --- a/java/src/com/android/inputmethod/keyboard/Key.java +++ b/java/src/com/android/inputmethod/keyboard/Key.java @@ -33,12 +33,10 @@ import android.util.Xml; import com.android.inputmethod.keyboard.internal.KeySpecParser; import com.android.inputmethod.keyboard.internal.KeySpecParser.MoreKeySpec; -import com.android.inputmethod.keyboard.internal.KeyStyles; import com.android.inputmethod.keyboard.internal.KeyStyles.KeyStyle; import com.android.inputmethod.keyboard.internal.KeyboardIconsSet; import com.android.inputmethod.latin.R; import com.android.inputmethod.latin.StringUtils; -import com.android.inputmethod.latin.XmlParseUtils; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; @@ -201,7 +199,6 @@ public class Key { */ public Key(Resources res, Keyboard.Params params, Keyboard.Builder.Row row, XmlPullParser parser) throws XmlPullParserException { - final KeyStyles keyStyles = params.mKeyStyles; final float horizontalGap = isSpacer() ? 0 : params.mHorizontalGap; final int keyHeight = row.mRowHeight; mVerticalGap = params.mVerticalGap; @@ -210,17 +207,7 @@ public class Key { final TypedArray keyAttr = res.obtainAttributes(Xml.asAttributeSet(parser), R.styleable.Keyboard_Key); - final KeyStyle style; - if (keyAttr.hasValue(R.styleable.Keyboard_Key_keyStyle)) { - String styleName = keyAttr.getString(R.styleable.Keyboard_Key_keyStyle); - style = keyStyles.getKeyStyle(styleName); - if (style == null) { - throw new XmlParseUtils.ParseException("Unknown key style: " + styleName, parser); - } - } else { - style = keyStyles.getEmptyKeyStyle(); - } - + final KeyStyle style = params.mKeyStyles.getKeyStyle(keyAttr, parser); final float keyXPos = row.getKeyX(keyAttr); final float keyWidth = row.getKeyWidth(keyAttr, keyXPos); final int keyYPos = row.getKeyY(); diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java b/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java index b32172ebe..80f4f259b 100644 --- a/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java +++ b/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java @@ -32,24 +32,19 @@ public class KeyStyles { private static final String TAG = KeyStyles.class.getSimpleName(); private static final boolean DEBUG = false; - private final HashMap<String, DeclaredKeyStyle> mStyles = - new HashMap<String, DeclaredKeyStyle>(); + final HashMap<String, KeyStyle> mStyles = new HashMap<String, KeyStyle>(); - private final KeyboardTextsSet mTextsSet; + final KeyboardTextsSet mTextsSet; private final KeyStyle mEmptyKeyStyle; + private static final String EMPTY_STYLE_NAME = "<empty>"; public KeyStyles(KeyboardTextsSet textsSet) { mTextsSet = textsSet; - mEmptyKeyStyle = new EmptyKeyStyle(textsSet); + mEmptyKeyStyle = new EmptyKeyStyle(); + mStyles.put(EMPTY_STYLE_NAME, mEmptyKeyStyle); } - public static abstract class KeyStyle { - protected final KeyboardTextsSet mTextsSet; - - public KeyStyle(KeyboardTextsSet textsSet) { - mTextsSet = textsSet; - } - + public abstract class KeyStyle { public abstract String[] getStringArray(TypedArray a, int index); public abstract String getString(TypedArray a, int index); public abstract int getInt(TypedArray a, int index, int defaultValue); @@ -70,11 +65,7 @@ public class KeyStyles { } } - private static class EmptyKeyStyle extends KeyStyle { - public EmptyKeyStyle(KeyboardTextsSet textsSet) { - super(textsSet); - } - + class EmptyKeyStyle extends KeyStyle { @Override public String[] getStringArray(TypedArray a, int index) { return parseStringArray(a, index); @@ -96,11 +87,12 @@ public class KeyStyles { } } - private static class DeclaredKeyStyle extends KeyStyle { + private class DeclaredKeyStyle extends KeyStyle { + private final String mParentStyleName; private final HashMap<Integer, Object> mStyleAttributes = new HashMap<Integer, Object>(); - public DeclaredKeyStyle(KeyboardTextsSet textsSet) { - super(textsSet); + public DeclaredKeyStyle(String parentStyleName) { + mParentStyleName = parentStyleName; } @Override @@ -108,7 +100,11 @@ public class KeyStyles { if (a.hasValue(index)) { return parseStringArray(a, index); } - return (String[])mStyleAttributes.get(index); + if (mStyleAttributes.containsKey(index)) { + return (String[])mStyleAttributes.get(index); + } + final KeyStyle parentStyle = mStyles.get(mParentStyleName); + return parentStyle.getStringArray(a, index); } @Override @@ -116,7 +112,11 @@ public class KeyStyles { if (a.hasValue(index)) { return parseString(a, index); } - return (String)mStyleAttributes.get(index); + if (mStyleAttributes.containsKey(index)) { + return (String)mStyleAttributes.get(index); + } + final KeyStyle parentStyle = mStyles.get(mParentStyleName); + return parentStyle.getString(a, index); } @Override @@ -124,15 +124,21 @@ public class KeyStyles { if (a.hasValue(index)) { return a.getInt(index, defaultValue); } - final Integer styleValue = (Integer)mStyleAttributes.get(index); - return styleValue != null ? styleValue : defaultValue; + if (mStyleAttributes.containsKey(index)) { + return (Integer)mStyleAttributes.get(index); + } + final KeyStyle parentStyle = mStyles.get(mParentStyleName); + return parentStyle.getInt(a, index, defaultValue); } @Override public int getFlag(TypedArray a, int index) { - final int value = a.getInt(index, 0); - final Integer styleValue = (Integer)mStyleAttributes.get(index); - return (styleValue != null ? styleValue : 0) | value; + int value = a.getInt(index, 0); + if (mStyleAttributes.containsKey(index)) { + value |= (Integer)mStyleAttributes.get(index); + } + final KeyStyle parentStyle = mStyles.get(mParentStyleName); + return value | parentStyle.getFlag(a, index); } void readKeyAttributes(TypedArray keyAttr) { @@ -177,10 +183,6 @@ public class KeyStyles { mStyleAttributes.put(index, parseStringArray(a, index)); } } - - void addParentStyleAttributes(DeclaredKeyStyle parentStyle) { - mStyleAttributes.putAll(parentStyle.mStyleAttributes); - } } public void parseKeyStyleAttributes(TypedArray keyStyleAttr, TypedArray keyAttrs, @@ -195,26 +197,28 @@ public class KeyStyles { } } - final DeclaredKeyStyle style = new DeclaredKeyStyle(mTextsSet); + String parentStyleName = EMPTY_STYLE_NAME; if (keyStyleAttr.hasValue(R.styleable.Keyboard_KeyStyle_parentStyle)) { - final String parentStyle = keyStyleAttr.getString( - R.styleable.Keyboard_KeyStyle_parentStyle); - final DeclaredKeyStyle parent = mStyles.get(parentStyle); - if (parent == null) { + parentStyleName = keyStyleAttr.getString(R.styleable.Keyboard_KeyStyle_parentStyle); + if (!mStyles.containsKey(parentStyleName)) { throw new XmlParseUtils.ParseException( - "Unknown parentStyle " + parentStyle, parser); + "Unknown parentStyle " + parentStyleName, parser); } - style.addParentStyleAttributes(parent); } + final DeclaredKeyStyle style = new DeclaredKeyStyle(parentStyleName); style.readKeyAttributes(keyAttrs); mStyles.put(styleName, style); } - public KeyStyle getKeyStyle(String styleName) { + public KeyStyle getKeyStyle(TypedArray keyAttr, XmlPullParser parser) + throws XmlParseUtils.ParseException { + if (!keyAttr.hasValue(R.styleable.Keyboard_Key_keyStyle)) { + return mEmptyKeyStyle; + } + final String styleName = keyAttr.getString(R.styleable.Keyboard_Key_keyStyle); + if (!mStyles.containsKey(styleName)) { + throw new XmlParseUtils.ParseException("Unknown key style: " + styleName, parser); + } return mStyles.get(styleName); } - - public KeyStyle getEmptyKeyStyle() { - return mEmptyKeyStyle; - } } |