From a0e4f40994f779ad98268921c63d6535ad04224f Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Wed, 12 Oct 2011 18:50:04 +0900 Subject: [PATCH] Special handling of one key mini-keyboard to mitigate visual flicker Use pre-computed width and height of mini keyboard if * Popup key preview is enabled * The mini keyboard has only one key * Pre-computed width and height are specified Bug: 5248783 Change-Id: I53475698e87d5bd67d36e63323c25a9e9f18fbb1 --- .../keyboard_key_feedback_background_holo.xml | 24 +++++++++++++++++++ .../keyboard_key_feedback_background_holo.xml | 24 +++++++++++++++++++ .../keyboard_key_feedback_background_holo.xml | 24 +++++++++++++++++++ java/res/values/attrs.xml | 4 ++++ java/res/values/styles.xml | 2 ++ .../inputmethod/keyboard/KeyboardView.java | 10 ++++++-- .../inputmethod/keyboard/MiniKeyboard.java | 19 +++++++++++---- 7 files changed, 101 insertions(+), 6 deletions(-) create mode 100644 java/res/values-hdpi/keyboard_key_feedback_background_holo.xml create mode 100644 java/res/values-mdpi/keyboard_key_feedback_background_holo.xml create mode 100644 java/res/values-xhdpi/keyboard_key_feedback_background_holo.xml diff --git a/java/res/values-hdpi/keyboard_key_feedback_background_holo.xml b/java/res/values-hdpi/keyboard_key_feedback_background_holo.xml new file mode 100644 index 000000000..8ab32269d --- /dev/null +++ b/java/res/values-hdpi/keyboard_key_feedback_background_holo.xml @@ -0,0 +1,24 @@ + + + + + 46.67dp + 58.67dp + diff --git a/java/res/values-mdpi/keyboard_key_feedback_background_holo.xml b/java/res/values-mdpi/keyboard_key_feedback_background_holo.xml new file mode 100644 index 000000000..10fef3d48 --- /dev/null +++ b/java/res/values-mdpi/keyboard_key_feedback_background_holo.xml @@ -0,0 +1,24 @@ + + + + + 46dp + 58dp + diff --git a/java/res/values-xhdpi/keyboard_key_feedback_background_holo.xml b/java/res/values-xhdpi/keyboard_key_feedback_background_holo.xml new file mode 100644 index 000000000..fba602626 --- /dev/null +++ b/java/res/values-xhdpi/keyboard_key_feedback_background_holo.xml @@ -0,0 +1,24 @@ + + + + + 47dp + 57dp + diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml index 4dfa5ab97..e569e83b1 100644 --- a/java/res/values/attrs.xml +++ b/java/res/values/attrs.xml @@ -88,6 +88,10 @@ + + + + diff --git a/java/res/values/styles.xml b/java/res/values/styles.xml index 30c0e5a38..43aa58388 100644 --- a/java/res/values/styles.xml +++ b/java/res/values/styles.xml @@ -259,6 +259,8 @@ @drawable/keyboard_key_feedback_ics @drawable/keyboard_key_feedback_left_ics @drawable/keyboard_key_feedback_right_ics + @dimen/keyboard_key_feedback_background_holo_width + @dimen/keyboard_key_feedback_background_holo_height #FFFFFFFF @dimen/key_preview_height_ics @dimen/key_preview_offset_ics diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java index 6af4123c9..6492c00fa 100644 --- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java +++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java @@ -100,7 +100,7 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy { // Key preview private final int mKeyPreviewLayoutId; - private final KeyPreviewDrawParams mKeyPreviewDrawParams; + protected final KeyPreviewDrawParams mKeyPreviewDrawParams; private boolean mShowKeyPreviewPopup = true; private final int mDelayBeforePreview; private int mDelayAfterPreview; @@ -284,11 +284,13 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy { } } - private static class KeyPreviewDrawParams { + protected static class KeyPreviewDrawParams { // XML attributes. public final Drawable mPreviewBackground; public final Drawable mPreviewLeftBackground; public final Drawable mPreviewRightBackground; + public final int mPreviewBackgroundWidth; + public final int mPreviewBackgroundHeight; public final int mPreviewTextColor; public final int mPreviewOffset; public final int mPreviewHeight; @@ -312,6 +314,10 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy { setAlpha(mPreviewBackground, PREVIEW_ALPHA); setAlpha(mPreviewLeftBackground, PREVIEW_ALPHA); setAlpha(mPreviewRightBackground, PREVIEW_ALPHA); + mPreviewBackgroundWidth = a.getDimensionPixelSize( + R.styleable.KeyboardView_keyPreviewBackgroundWidth, 0); + mPreviewBackgroundHeight = a.getDimensionPixelSize( + R.styleable.KeyboardView_keyPreviewBackgroundHeight, 0); mPreviewOffset = a.getDimensionPixelOffset( R.styleable.KeyboardView_keyPreviewOffset, 0); mPreviewHeight = a.getDimensionPixelSize( diff --git a/java/src/com/android/inputmethod/keyboard/MiniKeyboard.java b/java/src/com/android/inputmethod/keyboard/MiniKeyboard.java index d4b35a556..ac9290bfd 100644 --- a/java/src/com/android/inputmethod/keyboard/MiniKeyboard.java +++ b/java/src/com/android/inputmethod/keyboard/MiniKeyboard.java @@ -215,10 +215,21 @@ public class MiniKeyboard extends Keyboard { mParams.mIsRtlKeyboard = parentKeyboard.mIsRtlKeyboard; mMoreKeys = parentKey.mMoreKeys; - final int keyWidth = getMaxKeyWidth(view, mMoreKeys, mParams.mDefaultKeyWidth); - mParams.setParameters(mMoreKeys.length, parentKey.mMaxMoreKeysColumn, - keyWidth, parentKeyboard.mMostCommonKeyHeight, parentKey.mX - + (mParams.mDefaultKeyWidth - keyWidth) / 2, view.getMeasuredWidth()); + final int previewWidth = view.mKeyPreviewDrawParams.mPreviewBackgroundWidth; + final int previewHeight = view.mKeyPreviewDrawParams.mPreviewBackgroundHeight; + final int width, height; + // Use pre-computed width and height if these values are available and mini keyboard + // has only one key to mitigate visual flicker between key preview and mini keyboard. + if (view.isKeyPreviewPopupEnabled() && mMoreKeys.length == 1 && previewWidth > 0 + && previewHeight > 0) { + width = previewWidth; + height = previewHeight + mParams.mVerticalGap; + } else { + width = getMaxKeyWidth(view, parentKey.mMoreKeys, mParams.mDefaultKeyWidth); + height = parentKeyboard.mMostCommonKeyHeight; + } + mParams.setParameters(mMoreKeys.length, parentKey.mMaxMoreKeysColumn, width, height, + parentKey.mX + (mParams.mDefaultKeyWidth - width) / 2, view.getMeasuredWidth()); } private static int getMaxKeyWidth(KeyboardView view, CharSequence[] moreKeys,