Loading java/src/com/android/inputmethod/keyboard/MainKeyboardView.java +12 −27 Original line number Diff line number Diff line Loading @@ -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<TextView> mFreeKeyPreviewTextViews = CollectionUtils.newArrayDeque(); // Map from {@link Key} to {@link TextView} that is currently being displayed as key preview. private final HashMap<Key,TextView> 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; Loading Loading @@ -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( Loading Loading @@ -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() { Loading Loading @@ -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) { Loading @@ -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); } Loading Loading @@ -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; } Loading Loading @@ -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 Loading @@ -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) { Loading Loading @@ -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 Loading @@ -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() { Loading Loading @@ -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(); Loading java/src/com/android/inputmethod/keyboard/internal/KeyPreviewDrawParams.java +35 −6 Original line number Diff line number Diff line Loading @@ -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-> Loading Loading @@ -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) { Loading @@ -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() Loading @@ -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() { Loading @@ -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; } } Loading
java/src/com/android/inputmethod/keyboard/MainKeyboardView.java +12 −27 Original line number Diff line number Diff line Loading @@ -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<TextView> mFreeKeyPreviewTextViews = CollectionUtils.newArrayDeque(); // Map from {@link Key} to {@link TextView} that is currently being displayed as key preview. private final HashMap<Key,TextView> 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; Loading Loading @@ -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( Loading Loading @@ -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() { Loading Loading @@ -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) { Loading @@ -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); } Loading Loading @@ -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; } Loading Loading @@ -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 Loading @@ -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) { Loading Loading @@ -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 Loading @@ -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() { Loading Loading @@ -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(); Loading
java/src/com/android/inputmethod/keyboard/internal/KeyPreviewDrawParams.java +35 −6 Original line number Diff line number Diff line Loading @@ -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-> Loading Loading @@ -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) { Loading @@ -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() Loading @@ -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() { Loading @@ -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; } }