diff options
Diffstat (limited to 'java/src')
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); |