diff options
Diffstat (limited to 'java/src')
5 files changed, 39 insertions, 26 deletions
diff --git a/java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java b/java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java index 876bd65f6..2766cc3f1 100644 --- a/java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java +++ b/java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java @@ -69,7 +69,8 @@ public class SuggestionSpanUtils { Log.w(TAG, "Suggestion span was not created."); return text; } - spannable.setSpan(ss, 0, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + spannable.setSpan(ss, 0, text.length(), + Spanned.SPAN_EXCLUSIVE_EXCLUSIVE | Spanned.SPAN_COMPOSING); return spannable; } diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java index 6af4123c9..04e672590 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( @@ -974,5 +980,9 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy { if (mPreviewPlacer != null) { mPreviewPlacer.removeAllViews(); } + if (mBuffer != null) { + mBuffer.recycle(); + mBuffer = null; + } } } diff --git a/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java b/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java index 345272044..c51f1849b 100644 --- a/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java +++ b/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java @@ -59,8 +59,8 @@ public class LatinKeyboard extends Keyboard { private final int mSpacebarTextColor; private final int mSpacebarTextShadowColor; private float mSpacebarTextFadeFactor = 0.0f; - private final HashMap<Integer, SoftReference<BitmapDrawable>> mSpaceDrawableCache = - new HashMap<Integer, SoftReference<BitmapDrawable>>(); + private final HashMap<Integer, BitmapDrawable> mSpaceDrawableCache = + new HashMap<Integer, BitmapDrawable>(); private final boolean mIsSpacebarTriggeringPopupByLongPress; /* Shortcut key and its icons if available */ @@ -249,13 +249,13 @@ public class LatinKeyboard extends Keyboard { private BitmapDrawable getSpaceDrawable(Locale locale, boolean isAutoCorrection) { final Integer hashCode = Arrays.hashCode( new Object[] { locale, isAutoCorrection, mSpacebarTextFadeFactor }); - final SoftReference<BitmapDrawable> ref = mSpaceDrawableCache.get(hashCode); - BitmapDrawable drawable = (ref == null) ? null : ref.get(); - if (drawable == null) { - drawable = new BitmapDrawable(mRes, drawSpacebar( - locale, isAutoCorrection, mSpacebarTextFadeFactor)); - mSpaceDrawableCache.put(hashCode, new SoftReference<BitmapDrawable>(drawable)); + final BitmapDrawable cached = mSpaceDrawableCache.get(hashCode); + if (cached != null) { + return cached; } + final BitmapDrawable drawable = new BitmapDrawable(mRes, drawSpacebar( + locale, isAutoCorrection, mSpacebarTextFadeFactor)); + mSpaceDrawableCache.put(hashCode, drawable); return drawable; } 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, diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 70e37a9f3..517385cf3 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -1038,17 +1038,8 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar @Override public boolean onEvaluateFullscreenMode() { - if (!super.onEvaluateFullscreenMode()) return false; - - final EditorInfo ei = getCurrentInputEditorInfo(); - if (ei != null) { - final int imeOptions = ei.imeOptions; - if ((imeOptions & EditorInfo.IME_FLAG_NO_EXTRACT_UI) != 0) { - return false; - } - } - - return mResources.getBoolean(R.bool.config_use_fullscreen_mode); + return super.onEvaluateFullscreenMode() + && mResources.getBoolean(R.bool.config_use_fullscreen_mode); } @Override |