diff --git a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java index 54cff3723..c6dae3253 100644 --- a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java +++ b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java @@ -161,16 +161,11 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack // Key preview private static final boolean FADE_OUT_KEY_TOP_LETTER_WHEN_KEY_IS_PRESSED = false; - private final int mKeyPreviewLayoutId; // Free {@link TextView} pool that can be used for key preview. private final ArrayDeque mFreeKeyPreviewTextViews = CollectionUtils.newArrayDeque(); // Map from {@link Key} to {@link TextView} that is currently being displayed as key preview. private final HashMap mShowingKeyPreviewTextViews = CollectionUtils.newHashMap(); private final KeyPreviewDrawParams mKeyPreviewDrawParams; - private boolean mShowKeyPreviewPopup = true; - private int mKeyPreviewLingerTimeout; - private int mKeyPreviewZoomInDuration; - private int mKeyPreviewZoomOutDuration; private static final float KEY_PREVIEW_START_ZOOM_IN_SCALE = 0.7f; private static final float KEY_PREVIEW_END_ZOOM_IN_SCALE = 1.0f; private static final float KEY_PREVIEW_END_ZOOM_OUT_SCALE = 0.7f; @@ -266,17 +261,6 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack R.styleable.MainKeyboardView_altCodeKeyWhileTypingFadeinAnimator, 0); mKeyPreviewDrawParams = new KeyPreviewDrawParams(mainKeyboardViewAttr); - mKeyPreviewLingerTimeout = mainKeyboardViewAttr.getInt( - R.styleable.MainKeyboardView_keyPreviewLingerTimeout, 0); - mKeyPreviewLayoutId = mainKeyboardViewAttr.getResourceId( - R.styleable.MainKeyboardView_keyPreviewLayout, 0); - if (mKeyPreviewLayoutId == 0) { - mShowKeyPreviewPopup = false; - } - mKeyPreviewZoomInDuration = mainKeyboardViewAttr.getInt( - R.styleable.MainKeyboardView_keyPreviewZoomInDuration, 0); - mKeyPreviewZoomOutDuration = mainKeyboardViewAttr.getInt( - R.styleable.MainKeyboardView_keyPreviewZoomOutDuration, 0); final int moreKeysKeyboardLayoutId = mainKeyboardViewAttr.getResourceId( R.styleable.MainKeyboardView_moreKeysKeyboardLayout, 0); mConfigShowMoreKeysKeyboardAtTouchedPoint = mainKeyboardViewAttr.getBoolean( @@ -450,8 +434,7 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack * @see #isKeyPreviewPopupEnabled() */ public void setKeyPreviewPopupEnabled(final boolean previewEnabled, final int delay) { - mShowKeyPreviewPopup = previewEnabled; - mKeyPreviewLingerTimeout = delay; + mKeyPreviewDrawParams.setPopupEnabled(previewEnabled, delay); } private void locatePreviewPlacerView() { @@ -491,7 +474,7 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack * @see #setKeyPreviewPopupEnabled(boolean, int) */ public boolean isKeyPreviewPopupEnabled() { - return mShowKeyPreviewPopup; + return mKeyPreviewDrawParams.isPopupEnabled(); } private TextView getKeyPreviewTextView(final Key key) { @@ -504,9 +487,10 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack return previewTextView; } final Context context = getContext(); - if (mKeyPreviewLayoutId != 0) { + final int previewLayoutId = mKeyPreviewDrawParams.mLayoutId; + if (previewLayoutId != 0) { previewTextView = (TextView)LayoutInflater.from(context) - .inflate(mKeyPreviewLayoutId, null); + .inflate(previewLayoutId, null); } else { previewTextView = new TextView(context); } @@ -558,7 +542,7 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack final KeyPreviewDrawParams previewParams = mKeyPreviewDrawParams; final Keyboard keyboard = getKeyboard(); - if (!mShowKeyPreviewPopup) { + if (!previewParams.isPopupEnabled()) { previewParams.setVisibleOffset(-keyboard.mVerticalGap); return; } @@ -586,7 +570,7 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); final int keyDrawWidth = key.getDrawWidth(); final int previewWidth = previewTextView.getMeasuredWidth(); - final int previewHeight = previewParams.mKeyPreviewHeight; + final int previewHeight = previewParams.mPreviewHeight; previewParams.setGeometry(previewTextView); getLocationInWindow(mOriginCoords); // The key preview is horizontally aligned with the center of the visible part of the @@ -606,7 +590,7 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack } // The key preview is placed vertically above the top edge of the parent key with an // arbitrary offset. - final int previewY = key.getY() - previewHeight + previewParams.mKeyPreviewOffset + final int previewY = key.getY() - previewHeight + previewParams.mPreviewOffset + CoordinateUtils.y(mOriginCoords); if (background != null) { @@ -670,7 +654,7 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack final AnimatorSet zoomInAnimation = new AnimatorSet(); zoomInAnimation.play(scaleXAnimation).with(scaleYAnimation); // TODO: Implement preference option to control key preview animation duration. - zoomInAnimation.setDuration(mKeyPreviewZoomInDuration); + zoomInAnimation.setDuration(mKeyPreviewDrawParams.mZoomInDuration); zoomInAnimation.setInterpolator(DECELERATE_INTERPOLATOR); zoomInAnimation.addListener(new AnimatorListenerAdapter() { @Override @@ -691,7 +675,8 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack final AnimatorSet zoomOutAnimation = new AnimatorSet(); zoomOutAnimation.play(scaleXAnimation).with(scaleYAnimation); // TODO: Implement preference option to control key preview animation duration. - final int zoomOutDuration = Math.min(mKeyPreviewZoomOutDuration, mKeyPreviewLingerTimeout); + final int zoomOutDuration = Math.min(mKeyPreviewDrawParams.mZoomOutDuration, + mKeyPreviewDrawParams.getLingerTimeout()); zoomOutAnimation.setDuration(zoomOutDuration); zoomOutAnimation.setInterpolator(ACCELERATE_INTERPOLATOR); zoomOutAnimation.addListener(new AnimatorListenerAdapter() { @@ -733,7 +718,7 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack } if (!isHardwareAccelerated()) { // TODO: Implement preference option to control key preview method and duration. - mDrawingHandler.dismissKeyPreview(mKeyPreviewLingerTimeout, key); + mDrawingHandler.dismissKeyPreview(mKeyPreviewDrawParams.getLingerTimeout(), key); return; } final Object tag = previewTextView.getTag(); diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyPreviewDrawParams.java b/java/src/com/android/inputmethod/keyboard/internal/KeyPreviewDrawParams.java index d7518ee7c..d1899af28 100644 --- a/java/src/com/android/inputmethod/keyboard/internal/KeyPreviewDrawParams.java +++ b/java/src/com/android/inputmethod/keyboard/internal/KeyPreviewDrawParams.java @@ -23,8 +23,13 @@ import com.android.inputmethod.latin.R; public final class KeyPreviewDrawParams { // XML attributes of {@link MainKeyboardView}. - public final int mKeyPreviewOffset; - public final int mKeyPreviewHeight; + public final int mLayoutId; + public final int mPreviewOffset; + public final int mPreviewHeight; + public final int mZoomInDuration; + public final int mZoomOutDuration; + private int mLingerTimeout; + private boolean mShowPopup = true; // The graphical geometry of the key preview. // <-width-> @@ -52,10 +57,21 @@ public final class KeyPreviewDrawParams { private int mVisibleOffset; public KeyPreviewDrawParams(final TypedArray mainKeyboardViewAttr) { - mKeyPreviewOffset = mainKeyboardViewAttr.getDimensionPixelOffset( + mPreviewOffset = mainKeyboardViewAttr.getDimensionPixelOffset( R.styleable.MainKeyboardView_keyPreviewOffset, 0); - mKeyPreviewHeight = mainKeyboardViewAttr.getDimensionPixelSize( + mPreviewHeight = mainKeyboardViewAttr.getDimensionPixelSize( R.styleable.MainKeyboardView_keyPreviewHeight, 0); + mLingerTimeout = mainKeyboardViewAttr.getInt( + R.styleable.MainKeyboardView_keyPreviewLingerTimeout, 0); + mLayoutId = mainKeyboardViewAttr.getResourceId( + R.styleable.MainKeyboardView_keyPreviewLayout, 0); + if (mLayoutId == 0) { + mShowPopup = false; + } + mZoomInDuration = mainKeyboardViewAttr.getInt( + R.styleable.MainKeyboardView_keyPreviewZoomInDuration, 0); + mZoomOutDuration = mainKeyboardViewAttr.getInt( + R.styleable.MainKeyboardView_keyPreviewZoomOutDuration, 0); } public void setVisibleOffset(final int previewVisibleOffset) { @@ -68,7 +84,7 @@ public final class KeyPreviewDrawParams { public void setGeometry(final View previewTextView) { final int previewWidth = previewTextView.getMeasuredWidth(); - final int previewHeight = mKeyPreviewHeight; + final int previewHeight = mPreviewHeight; // The width and height of visible part of the key preview background. The content marker // of the background 9-patch have to cover the visible part of the background. mVisibleWidth = previewWidth - previewTextView.getPaddingLeft() @@ -77,7 +93,7 @@ public final class KeyPreviewDrawParams { - previewTextView.getPaddingBottom(); // The distance between the top edge of the parent key and the bottom of the visible part // of the key preview background. - setVisibleOffset(mKeyPreviewOffset - previewTextView.getPaddingBottom()); + setVisibleOffset(mPreviewOffset - previewTextView.getPaddingBottom()); } public int getVisibleWidth() { @@ -87,4 +103,17 @@ public final class KeyPreviewDrawParams { public int getVisibleHeight() { return mVisibleHeight; } + + public void setPopupEnabled(final boolean enabled, final int lingerTimeout) { + mShowPopup = enabled; + mLingerTimeout = lingerTimeout; + } + + public boolean isPopupEnabled() { + return mShowPopup; + } + + public int getLingerTimeout() { + return mLingerTimeout; + } }