Move some XML attributes to KeyPreviewDrawParams

Change-Id: I0e040b3aed63f8da983fcc51d55b55ac9294a16a
diff --git a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
index 54cff37..c6dae32 100644
--- a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
@@ -161,16 +161,11 @@
 
     // 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;
@@ -266,17 +261,6 @@
                 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 @@
      * @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 @@
      * @see #setKeyPreviewPopupEnabled(boolean, int)
      */
     public boolean isKeyPreviewPopupEnabled() {
-        return mShowKeyPreviewPopup;
+        return mKeyPreviewDrawParams.isPopupEnabled();
     }
 
     private TextView getKeyPreviewTextView(final Key key) {
@@ -504,9 +487,10 @@
             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 @@
 
         final KeyPreviewDrawParams previewParams = mKeyPreviewDrawParams;
         final Keyboard keyboard = getKeyboard();
-        if (!mShowKeyPreviewPopup) {
+        if (!previewParams.isPopupEnabled()) {
             previewParams.setVisibleOffset(-keyboard.mVerticalGap);
             return;
         }
@@ -586,7 +570,7 @@
                 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 @@
         }
         // 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 @@
         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 @@
         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 @@
         }
         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 d7518ee..d1899af 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 @@
 
 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 @@
     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 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 @@
                 - 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 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;
+    }
 }