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;
+    }
 }
