aboutsummaryrefslogtreecommitdiffstats
path: root/java/src
diff options
context:
space:
mode:
authorTadashi G. Takaoka <takaoka@google.com>2011-09-08 01:44:24 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-09-08 01:44:24 -0700
commit236928c555d630ac03cde10f46374a0751c44852 (patch)
tree6c17f254ae68f426ad48711c6750d88bfa9d59ee /java/src
parent293db0873fd89b5c2bd077ffa5091321b3ab8149 (diff)
parent18453d69e0ef7631500826bf4e0b6f684c948cb3 (diff)
downloadlatinime-236928c555d630ac03cde10f46374a0751c44852.tar.gz
latinime-236928c555d630ac03cde10f46374a0751c44852.tar.xz
latinime-236928c555d630ac03cde10f46374a0751c44852.zip
Merge "Make Spacer as extended Key class"
Diffstat (limited to 'java/src')
-rw-r--r--java/src/com/android/inputmethod/keyboard/Key.java35
-rw-r--r--java/src/com/android/inputmethod/keyboard/KeyboardView.java36
-rw-r--r--java/src/com/android/inputmethod/keyboard/ProximityInfo.java1
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java46
4 files changed, 65 insertions, 53 deletions
diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java
index 15ec80b6e..735caaebb 100644
--- a/java/src/com/android/inputmethod/keyboard/Key.java
+++ b/java/src/com/android/inputmethod/keyboard/Key.java
@@ -115,9 +115,10 @@ public class Key {
/** Whether this key needs to show the "..." popup hint for special purposes */
private boolean mNeedsSpecialPopupHint;
- // keyWidth constants
- private static final int KEYWIDTH_FILL_RIGHT = 0;
- private static final int KEYWIDTH_FILL_BOTH = -1;
+ // keyWidth enum constants
+ private static final int KEYWIDTH_NOT_ENUM = 0;
+ private static final int KEYWIDTH_FILL_RIGHT = -1;
+ private static final int KEYWIDTH_FILL_BOTH = -2;
private final static int[] KEY_STATE_NORMAL_ON = {
android.R.attr.state_checkable,
@@ -249,15 +250,17 @@ public class Key {
*/
public Key(Resources res, KeyboardParams params, KeyboardBuilder.Row row,
XmlResourceParser parser, KeyStyles keyStyles) {
-
final TypedArray keyboardAttr = res.obtainAttributes(Xml.asAttributeSet(parser),
R.styleable.Keyboard);
mHeight = (int)KeyboardBuilder.getDimensionOrFraction(keyboardAttr,
R.styleable.Keyboard_rowHeight, params.mHeight, row.mRowHeight)
- params.mVerticalGap;
- final float horizontalGap = KeyboardBuilder.getDimensionOrFraction(keyboardAttr,
- R.styleable.Keyboard_horizontalGap, params.mWidth, params.mHorizontalGap);
+ final float horizontalGap = isSpacer() ? 0
+ : KeyboardBuilder.getDimensionOrFraction(keyboardAttr,
+ R.styleable.Keyboard_horizontalGap, params.mWidth, params.mHorizontalGap);
mVerticalGap = params.mVerticalGap;
+ final int widthType = KeyboardBuilder.getEnumValue(keyboardAttr,
+ R.styleable.Keyboard_keyWidth, KEYWIDTH_NOT_ENUM);
float keyWidth = KeyboardBuilder.getDimensionOrFraction(keyboardAttr,
R.styleable.Keyboard_keyWidth, params.mWidth, row.mDefaultKeyWidth);
keyboardAttr.recycle();
@@ -288,11 +291,11 @@ public class Key {
keyXPos = x;
}
}
- if (keyWidth == KEYWIDTH_FILL_RIGHT) {
+ if (widthType == KEYWIDTH_FILL_RIGHT) {
// If keyWidth is zero, the actual key width will be determined to fill out the
// area up to the right edge of the keyboard.
keyWidth = keyboardWidth - keyXPos;
- } else if (keyWidth <= KEYWIDTH_FILL_BOTH) {
+ } else if (widthType == KEYWIDTH_FILL_BOTH) {
// If keyWidth is negative, the actual key width will be determined to fill out the
// area between the nearest key on the left hand side and the right edge of the
// keyboard.
@@ -367,6 +370,10 @@ public class Key {
mEdgeFlags |= flags;
}
+ public boolean isSpacer() {
+ return false;
+ }
+
public Typeface selectTypeface(Typeface defaultTypeface) {
// TODO: Handle "bold" here too?
if ((mLabelOption & LABEL_OPTION_FONT_NORMAL) != 0) {
@@ -559,4 +566,16 @@ public class Key {
}
return states;
}
+
+ public static class Spacer extends Key {
+ public Spacer(Resources res, KeyboardParams params, KeyboardBuilder.Row row,
+ XmlResourceParser parser, KeyStyles keyStyles) {
+ super(res, params, row, parser, keyStyles);
+ }
+
+ @Override
+ public boolean isSpacer() {
+ return true;
+ }
+ }
}
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
index f45fd3046..acb76cc78 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
@@ -510,24 +510,26 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
Paint paint, KeyDrawParams params, boolean isManualTemporaryUpperCase) {
final boolean debugShowAlign = LatinImeLogger.sVISUALDEBUG;
// Draw key background.
- final int bgWidth = key.mWidth - key.mVisualInsetsLeft - key.mVisualInsetsRight
- + params.mPadding.left + params.mPadding.right;
- final int bgHeight = key.mHeight + params.mPadding.top + params.mPadding.bottom;
- final int bgX = -params.mPadding.left;
- final int bgY = -params.mPadding.top;
- final int[] drawableState = key.getCurrentDrawableState();
- final Drawable background = params.mKeyBackground;
- background.setState(drawableState);
- final Rect bounds = background.getBounds();
- if (bgWidth != bounds.right || bgHeight != bounds.bottom) {
- background.setBounds(0, 0, bgWidth, bgHeight);
- }
- canvas.translate(bgX, bgY);
- background.draw(canvas);
- if (debugShowAlign) {
- drawRectangle(canvas, 0, 0, bgWidth, bgHeight, 0x80c00000, new Paint());
+ if (!key.isSpacer()) {
+ final int bgWidth = key.mWidth - key.mVisualInsetsLeft - key.mVisualInsetsRight
+ + params.mPadding.left + params.mPadding.right;
+ final int bgHeight = key.mHeight + params.mPadding.top + params.mPadding.bottom;
+ final int bgX = -params.mPadding.left;
+ final int bgY = -params.mPadding.top;
+ final int[] drawableState = key.getCurrentDrawableState();
+ final Drawable background = params.mKeyBackground;
+ background.setState(drawableState);
+ final Rect bounds = background.getBounds();
+ if (bgWidth != bounds.right || bgHeight != bounds.bottom) {
+ background.setBounds(0, 0, bgWidth, bgHeight);
+ }
+ canvas.translate(bgX, bgY);
+ background.draw(canvas);
+ if (debugShowAlign) {
+ drawRectangle(canvas, 0, 0, bgWidth, bgHeight, 0x80c00000, new Paint());
+ }
+ canvas.translate(-bgX, -bgY);
}
- canvas.translate(-bgX, -bgY);
// Draw key top visuals.
final int keyWidth = key.mWidth - key.mVisualInsetsLeft - key.mVisualInsetsRight;
diff --git a/java/src/com/android/inputmethod/keyboard/ProximityInfo.java b/java/src/com/android/inputmethod/keyboard/ProximityInfo.java
index 7190b051d..a82bcbed0 100644
--- a/java/src/com/android/inputmethod/keyboard/ProximityInfo.java
+++ b/java/src/com/android/inputmethod/keyboard/ProximityInfo.java
@@ -122,6 +122,7 @@ public class ProximityInfo {
int count = 0;
for (int i = 0; i < keys.size(); i++) {
final Key key = keys.get(i);
+ if (key.isSpacer()) continue;
if (key.squaredDistanceToEdge(centerX, centerY) < threshold)
indices[count++] = i;
}
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java
index fb1c06175..e39548e9c 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java
@@ -394,12 +394,11 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
if (skip) {
checkEndTag(TAG_KEY, parser);
} else {
- Key key = new Key(mResources, mParams, row, parser, mKeyStyles);
+ final Key key = new Key(mResources, mParams, row, parser, mKeyStyles);
if (DEBUG) Log.d(TAG, String.format("<%s%s keyLabel=%s code=%d moreKeys=%s />",
TAG_KEY, (key.isEnabled() ? "" : " disabled"), key.mLabel, key.mCode,
Arrays.toString(key.mMoreKeys)));
checkEndTag(TAG_KEY, parser);
- mParams.onAddKey(key);
endKey(key);
}
}
@@ -409,27 +408,10 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
if (skip) {
checkEndTag(TAG_SPACER, parser);
} else {
+ final Key.Spacer spacer = new Key.Spacer(mResources, mParams, row, parser, mKeyStyles);
if (DEBUG) Log.d(TAG, String.format("<%s />", TAG_SPACER));
- final TypedArray keyboardAttr = mResources.obtainAttributes(Xml.asAttributeSet(parser),
- R.styleable.Keyboard);
- if (keyboardAttr.hasValue(R.styleable.Keyboard_horizontalGap))
- throw new IllegalAttribute(parser, "horizontalGap");
- final int keyboardWidth = mParams.mWidth;
- final float keyWidth = getDimensionOrFraction(keyboardAttr,
- R.styleable.Keyboard_keyWidth, keyboardWidth, row.mDefaultKeyWidth);
- keyboardAttr.recycle();
-
- final TypedArray keyAttr = mResources.obtainAttributes(Xml.asAttributeSet(parser),
- R.styleable.Keyboard_Key);
- float keyXPos = getDimensionOrFraction(keyAttr,
- R.styleable.Keyboard_Key_keyXPos, keyboardWidth, row.mCurrentX);
- if (keyXPos < 0) {
- // If keyXPos is negative, the actual x-coordinate will be display_width + keyXPos.
- keyXPos += keyboardWidth;
- }
-
checkEndTag(TAG_SPACER, parser);
- setSpacer(keyXPos, keyWidth, row);
+ endKey(spacer);
}
}
@@ -686,7 +668,7 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
private void startRow(Row row) {
row.mCurrentX = 0;
- setSpacer(row.mCurrentX, mParams.mHorizontalEdgesPadding, row);
+ addEdgeSpace(mParams.mHorizontalEdgesPadding, row);
mCurrentRow = row;
mLeftEdge = true;
mRightEdgeKey = null;
@@ -699,13 +681,14 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
mRightEdgeKey.addEdgeFlags(Keyboard.EDGE_RIGHT);
mRightEdgeKey = null;
}
- setSpacer(row.mCurrentX, mParams.mHorizontalEdgesPadding, row);
+ addEdgeSpace(mParams.mHorizontalEdgesPadding, row);
mCurrentY += mCurrentRow.mRowHeight;
mCurrentRow = null;
mTopEdge = false;
}
private void endKey(Key key) {
+ mParams.onAddKey(key);
if (mLeftEdge) {
key.addEdgeFlags(Keyboard.EDGE_LEFT);
mLeftEdge = false;
@@ -719,8 +702,8 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
private void endKeyboard() {
}
- private void setSpacer(float keyXPos, float width, Row row) {
- row.mCurrentX = keyXPos + width;
+ private void addEdgeSpace(float width, Row row) {
+ row.mCurrentX += width;
mLeftEdge = false;
mRightEdgeKey = null;
}
@@ -733,9 +716,16 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
return a.getFraction(index, base, base, defValue);
} else if (isDimensionValue(value)) {
return a.getDimension(index, defValue);
- } else if (isIntegerValue(value)) {
- // For enum value.
- return a.getInt(index, 0);
+ }
+ return defValue;
+ }
+
+ public static int getEnumValue(TypedArray a, int index, int defValue) {
+ final TypedValue value = a.peekValue(index);
+ if (value == null)
+ return defValue;
+ if (isIntegerValue(value)) {
+ return a.getInt(index, defValue);
}
return defValue;
}