aboutsummaryrefslogtreecommitdiffstats
path: root/java/src
diff options
context:
space:
mode:
Diffstat (limited to 'java/src')
-rw-r--r--java/src/com/android/inputmethod/keyboard/Key.java26
-rw-r--r--java/src/com/android/inputmethod/keyboard/Keyboard.java19
-rw-r--r--java/src/com/android/inputmethod/keyboard/KeyboardParser.java20
-rw-r--r--java/src/com/android/inputmethod/keyboard/Row.java6
-rw-r--r--java/src/com/android/inputmethod/latin/CandidateView.java35
5 files changed, 69 insertions, 37 deletions
diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java
index cd426690b..e74c968ff 100644
--- a/java/src/com/android/inputmethod/keyboard/Key.java
+++ b/java/src/com/android/inputmethod/keyboard/Key.java
@@ -139,7 +139,7 @@ public class Key {
/** Create an empty key with no attributes. */
public Key(Row row, char letter, int x, int y) {
mKeyboard = row.getKeyboard();
- mHeight = row.mDefaultHeight;
+ mHeight = row.mDefaultHeight - row.mVerticalGap;
mGap = row.mDefaultHorizontalGap;
mWidth = row.mDefaultWidth - mGap;
mEdgeFlags = row.mRowEdgeFlags;
@@ -176,14 +176,14 @@ public class Key {
TypedArray a = res.obtainAttributes(Xml.asAttributeSet(parser),
R.styleable.Keyboard);
mHeight = KeyboardParser.getDimensionOrFraction(a,
- R.styleable.Keyboard_keyHeight,
- mKeyboard.getKeyboardHeight(), row.mDefaultHeight);
+ R.styleable.Keyboard_rowHeight,
+ mKeyboard.getKeyboardHeight(), row.mDefaultHeight) - row.mVerticalGap;
mGap = KeyboardParser.getDimensionOrFraction(a,
R.styleable.Keyboard_horizontalGap,
- mKeyboard.getKeyboardWidth(), row.mDefaultHorizontalGap);
+ mKeyboard.getDisplayWidth(), row.mDefaultHorizontalGap);
mWidth = KeyboardParser.getDimensionOrFraction(a,
R.styleable.Keyboard_keyWidth,
- mKeyboard.getKeyboardWidth(), row.mDefaultWidth) - mGap;
+ mKeyboard.getDisplayWidth(), row.mDefaultWidth) - mGap;
a.recycle();
a = res.obtainAttributes(Xml.asAttributeSet(parser), R.styleable.Keyboard_Key);
@@ -202,25 +202,27 @@ public class Key {
this.mX = x + mGap / 2;
this.mY = y;
- mPreviewIcon = style.getDrawable(a, R.styleable.Keyboard_Key_iconPreview);
- Keyboard.setDefaultBounds(mPreviewIcon);
final CharSequence popupCharacters = style.getText(a,
R.styleable.Keyboard_Key_popupCharacters);
final int popupResId = style.getResourceId(a, R.styleable.Keyboard_Key_popupKeyboard, 0);
- // Set popup keyboard resource and characters only when both are specified.
- if (popupResId != 0 && !TextUtils.isEmpty(popupCharacters)) {
- mPopupResId = popupResId;
- mPopupCharacters = popupCharacters;
- } else {
+ // We should not display mini keyboard when both popupResId and popupCharacters are
+ // specified but popupCharacters is empty string.
+ if (popupResId != 0 && popupCharacters != null && popupCharacters.length() == 0) {
mPopupResId = 0;
mPopupCharacters = null;
+ } else {
+ mPopupResId = popupResId;
+ mPopupCharacters = popupCharacters;
}
+
mRepeatable = style.getBoolean(a, R.styleable.Keyboard_Key_isRepeatable, false);
mModifier = style.getBoolean(a, R.styleable.Keyboard_Key_isModifier, false);
mSticky = style.getBoolean(a, R.styleable.Keyboard_Key_isSticky, false);
mEdgeFlags = style.getFlag(a, R.styleable.Keyboard_Key_keyEdgeFlags, 0)
| row.mRowEdgeFlags;
+ mPreviewIcon = style.getDrawable(a, R.styleable.Keyboard_Key_iconPreview);
+ Keyboard.setDefaultBounds(mPreviewIcon);
mIcon = style.getDrawable(a, R.styleable.Keyboard_Key_keyIcon);
Keyboard.setDefaultBounds(mIcon);
mHintIcon = style.getDrawable(a, R.styleable.Keyboard_Key_keyHintIcon);
diff --git a/java/src/com/android/inputmethod/keyboard/Keyboard.java b/java/src/com/android/inputmethod/keyboard/Keyboard.java
index 6a1d62efe..7641b4d7a 100644
--- a/java/src/com/android/inputmethod/keyboard/Keyboard.java
+++ b/java/src/com/android/inputmethod/keyboard/Keyboard.java
@@ -122,6 +122,9 @@ public class Keyboard {
/** Height of the screen */
private final int mDisplayHeight;
+ /** Height of keyboard */
+ private int mKeyboardHeight;
+
public final KeyboardId mId;
// Variables for pre-computing nearest keys.
@@ -248,11 +251,11 @@ public class Keyboard {
mDefaultVerticalGap = gap;
}
- public int getKeyHeight() {
+ public int getRowHeight() {
return mDefaultHeight;
}
- public void setKeyHeight(int height) {
+ public void setRowHeight(int height) {
mDefaultHeight = height;
}
@@ -278,14 +281,22 @@ public class Keyboard {
return mTotalWidth;
}
- public int getKeyboardHeight() {
+ public int getDisplayHeight() {
return mDisplayHeight;
}
- public int getKeyboardWidth() {
+ public int getDisplayWidth() {
return mDisplayWidth;
}
+ public int getKeyboardHeight() {
+ return mKeyboardHeight;
+ }
+
+ public void setKeyboardHeight(int height) {
+ mKeyboardHeight = height;
+ }
+
public List<Key> getShiftKeys() {
return mShiftKeys;
}
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardParser.java b/java/src/com/android/inputmethod/keyboard/KeyboardParser.java
index dd80f0ed0..213eac567 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardParser.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardParser.java
@@ -161,12 +161,20 @@ public class KeyboardParser {
final Keyboard keyboard = mKeyboard;
final TypedArray a = mResources.obtainAttributes(Xml.asAttributeSet(parser),
R.styleable.Keyboard);
- final int width = keyboard.getKeyboardWidth();
- final int height = keyboard.getKeyboardHeight();
+ final int displayHeight = keyboard.getDisplayHeight();
+ final int keyboardHeight = (int)a.getDimension(
+ R.styleable.Keyboard_keyboardHeight, displayHeight / 2);
+ final int maxKeyboardHeight = getDimensionOrFraction(a,
+ R.styleable.Keyboard_maxKeyboardHeight, displayHeight, displayHeight / 2);
+ // Keyboard height will not exceed maxKeyboardHeight.
+ final int height = Math.min(keyboardHeight, maxKeyboardHeight);
+ final int width = keyboard.getDisplayWidth();
+
+ keyboard.setKeyboardHeight(height);
keyboard.setKeyWidth(getDimensionOrFraction(a,
R.styleable.Keyboard_keyWidth, width, width / 10));
- keyboard.setKeyHeight(getDimensionOrFraction(a,
- R.styleable.Keyboard_keyHeight, height, 50));
+ keyboard.setRowHeight(getDimensionOrFraction(a,
+ R.styleable.Keyboard_rowHeight, height, 50));
keyboard.setHorizontalGap(getDimensionOrFraction(a,
R.styleable.Keyboard_horizontalGap, width, 0));
keyboard.setVerticalGap(getDimensionOrFraction(a,
@@ -280,7 +288,7 @@ public class KeyboardParser {
final TypedArray a = mResources.obtainAttributes(Xml.asAttributeSet(parser),
R.styleable.Keyboard);
final int gap = getDimensionOrFraction(a, R.styleable.Keyboard_horizontalGap,
- mKeyboard.getKeyboardWidth(), 0);
+ mKeyboard.getDisplayWidth(), 0);
a.recycle();
checkEndTag(TAG_SPACER, parser);
setSpacer(gap);
@@ -494,7 +502,7 @@ public class KeyboardParser {
private void endRow() {
if (mCurrentRow == null)
throw new InflateException("orphant end row tag");
- mCurrentY += mCurrentRow.mVerticalGap + mCurrentRow.mDefaultHeight;
+ mCurrentY += mCurrentRow.mDefaultHeight;
mCurrentRow = null;
}
diff --git a/java/src/com/android/inputmethod/keyboard/Row.java b/java/src/com/android/inputmethod/keyboard/Row.java
index 37fa4e39e..7c158bca0 100644
--- a/java/src/com/android/inputmethod/keyboard/Row.java
+++ b/java/src/com/android/inputmethod/keyboard/Row.java
@@ -47,7 +47,7 @@ public class Row {
public Row(Keyboard keyboard) {
this.mKeyboard = keyboard;
- mDefaultHeight = keyboard.getKeyHeight();
+ mDefaultHeight = keyboard.getRowHeight();
mDefaultWidth = keyboard.getKeyWidth();
mDefaultHorizontalGap = keyboard.getHorizontalGap();
mVerticalGap = keyboard.getVerticalGap();
@@ -56,14 +56,14 @@ public class Row {
public Row(Resources res, Keyboard keyboard, XmlResourceParser parser) {
this.mKeyboard = keyboard;
- final int keyboardWidth = keyboard.getKeyboardWidth();
+ final int keyboardWidth = keyboard.getDisplayWidth();
final int keyboardHeight = keyboard.getKeyboardHeight();
TypedArray a = res.obtainAttributes(Xml.asAttributeSet(parser),
R.styleable.Keyboard);
mDefaultWidth = KeyboardParser.getDimensionOrFraction(a,
R.styleable.Keyboard_keyWidth, keyboardWidth, keyboard.getKeyWidth());
mDefaultHeight = KeyboardParser.getDimensionOrFraction(a,
- R.styleable.Keyboard_keyHeight, keyboardHeight, keyboard.getKeyHeight());
+ R.styleable.Keyboard_rowHeight, keyboardHeight, keyboard.getRowHeight());
mDefaultHorizontalGap = KeyboardParser.getDimensionOrFraction(a,
R.styleable.Keyboard_horizontalGap, keyboardWidth, keyboard.getHorizontalGap());
mVerticalGap = KeyboardParser.getDimensionOrFraction(a,
diff --git a/java/src/com/android/inputmethod/latin/CandidateView.java b/java/src/com/android/inputmethod/latin/CandidateView.java
index 460ef8650..bb3c09d60 100644
--- a/java/src/com/android/inputmethod/latin/CandidateView.java
+++ b/java/src/com/android/inputmethod/latin/CandidateView.java
@@ -21,7 +21,12 @@ import android.content.res.Resources;
import android.graphics.Typeface;
import android.os.Handler;
import android.os.Message;
+import android.text.Spannable;
+import android.text.SpannableString;
import android.text.TextUtils;
+import android.text.style.CharacterStyle;
+import android.text.style.StyleSpan;
+import android.text.style.UnderlineSpan;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.LayoutInflater;
@@ -50,6 +55,8 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
private final int mColorNormal;
private final int mColorRecommended;
private final int mColorOther;
+ private static final StyleSpan BOLD_SPAN = new StyleSpan(Typeface.BOLD);
+ private static final CharacterStyle UNDERLINE_SPAN = new UnderlineSpan();
private boolean mShowingCompletions;
@@ -136,21 +143,25 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo
View v = mWords.get(i);
TextView tv = (TextView)v.findViewById(R.id.candidate_word);
- tv.setTypeface(Typeface.DEFAULT);
tv.setTextColor(mColorNormal);
- if (mConfigCandidateHighlightFontColorEnabled) {
- if (haveMinimalSuggestion
- && ((i == 1 && !typedWordValid) || (i == 0 && typedWordValid))) {
- tv.setTypeface(Typeface.DEFAULT_BOLD);
+ if (haveMinimalSuggestion
+ && ((i == 1 && !typedWordValid) || (i == 0 && typedWordValid))) {
+ final Spannable word = new SpannableString(suggestion);
+ if (mConfigCandidateHighlightFontColorEnabled) {
+ word.setSpan(BOLD_SPAN, 0, wordLength, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
tv.setTextColor(mColorRecommended);
- existsAutoCompletion = true;
- } else if (i != 0 || (wordLength == 1 && count > 1)) {
- // HACK: even if i == 0, we use mColorOther when this suggestion's length is 1
- // and there are multiple suggestions, such as the default punctuation list.
- tv.setTextColor(mColorOther);
+ } else {
+ word.setSpan(UNDERLINE_SPAN, 0, wordLength, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
}
- } else {
- // TODO: Display underline for the auto-correction word
+ suggestion = word;
+ existsAutoCompletion = true;
+ } else if (i != 0 || (wordLength == 1 && count > 1)) {
+ // HACK: even if i == 0, we use mColorOther when this
+ // suggestion's length is 1
+ // and there are multiple suggestions, such as the default
+ // punctuation list.
+ if (mConfigCandidateHighlightFontColorEnabled)
+ tv.setTextColor(mColorOther);
}
tv.setText(suggestion);
tv.setClickable(true);