diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardId.java b/java/src/com/android/inputmethod/keyboard/KeyboardId.java
index 2fe0819216c4c1d376aa16804a36649520936b29..1dc3c6a4ca3a71eda0f51ae652813baa7c7965c6 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardId.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardId.java
@@ -18,7 +18,6 @@ package com.android.inputmethod.keyboard;
 
 import static com.android.inputmethod.latin.Constants.Subtype.ExtraValue.KEYBOARD_LAYOUT_SET;
 
-import android.content.res.Configuration;
 import android.text.InputType;
 import android.text.TextUtils;
 import android.view.inputmethod.EditorInfo;
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardLayoutSet.java b/java/src/com/android/inputmethod/keyboard/KeyboardLayoutSet.java
index 00b096c171e46b9b76366a9c675b52536cb7e39f..2d53482516397ec48097a4f7b1a0526a16788f61 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardLayoutSet.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardLayoutSet.java
@@ -23,13 +23,10 @@ import static com.android.inputmethod.latin.Constants.ImeOption.NO_SETTINGS_KEY;
 import static com.android.inputmethod.latin.Constants.Subtype.ExtraValue.ASCII_CAPABLE;
 
 import android.content.Context;
-import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.content.res.XmlResourceParser;
 import android.text.InputType;
-import android.text.TextUtils;
-import android.util.DisplayMetrics;
 import android.util.Log;
 import android.util.SparseArray;
 import android.util.Xml;
@@ -75,7 +72,7 @@ public final class KeyboardLayoutSet {
 
     private static final String KEYBOARD_LAYOUT_SET_RESOURCE_PREFIX = "keyboard_layout_set_";
     private static final int SPELLCHECKER_DUMMY_KEYBOARD_WIDTH = 480;
-    private static final int SPELLCHECKER_DUMMY_KEYBOARD_HEIGHT = 800;
+    private static final int SPELLCHECKER_DUMMY_KEYBOARD_HEIGHT = 368;
 
     private final Context mContext;
     private final Params mParams;
@@ -240,38 +237,12 @@ public final class KeyboardLayoutSet {
                     mPackageName, NO_SETTINGS_KEY, mEditorInfo);
         }
 
-        public Builder setScreenGeometry(final int widthPixels, final int heightPixels) {
-            setDefaultKeyboardSize(widthPixels, heightPixels);
+        public Builder setKeyboardGeometry(final int keyboardWidth, final int keyboardHeight) {
+            mParams.mKeyboardWidth = keyboardWidth;
+            mParams.mKeyboardHeight = keyboardHeight;
             return this;
         }
 
-        private void setDefaultKeyboardSize(final int widthPixels, final int heightPixels) {
-            final String keyboardHeightString = ResourceUtils.getDeviceOverrideValue(
-                    mResources, R.array.keyboard_heights);
-            final float keyboardHeight;
-            if (TextUtils.isEmpty(keyboardHeightString)) {
-                keyboardHeight = mResources.getDimension(R.dimen.keyboardHeight);
-            } else {
-                keyboardHeight = Float.parseFloat(keyboardHeightString)
-                        * mResources.getDisplayMetrics().density;
-            }
-            final float maxKeyboardHeight = mResources.getFraction(
-                    R.fraction.maxKeyboardHeight, heightPixels, heightPixels);
-            float minKeyboardHeight = mResources.getFraction(
-                    R.fraction.minKeyboardHeight, heightPixels, heightPixels);
-            if (minKeyboardHeight < 0.0f) {
-                // Specified fraction was negative, so it should be calculated against display
-                // width.
-                minKeyboardHeight = -mResources.getFraction(
-                        R.fraction.minKeyboardHeight, widthPixels, widthPixels);
-            }
-            // Keyboard height will not exceed maxKeyboardHeight and will not be less than
-            // minKeyboardHeight.
-            mParams.mKeyboardHeight = (int)Math.max(
-                    Math.min(keyboardHeight, maxKeyboardHeight), minKeyboardHeight);
-            mParams.mKeyboardWidth = widthPixels;
-        }
-
         public Builder setSubtype(final InputMethodSubtype subtype) {
             final boolean asciiCapable = subtype.containsExtraValueKey(ASCII_CAPABLE);
             @SuppressWarnings("deprecation")
@@ -450,31 +421,21 @@ public final class KeyboardLayoutSet {
     public static KeyboardLayoutSet createKeyboardSetForTest(final Context context,
             final InputMethodSubtype subtype, final int orientation,
             final boolean testCasesHaveTouchCoordinates) {
-        final DisplayMetrics dm = context.getResources().getDisplayMetrics();
-        final int width;
-        final int height;
-        if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
-            width = Math.max(dm.widthPixels, dm.heightPixels);
-            height = Math.min(dm.widthPixels, dm.heightPixels);
-        } else if (orientation == Configuration.ORIENTATION_PORTRAIT) {
-            width = Math.min(dm.widthPixels, dm.heightPixels);
-            height = Math.max(dm.widthPixels, dm.heightPixels);
-        } else {
-            throw new RuntimeException("Orientation should be ORIENTATION_LANDSCAPE or "
-                    + "ORIENTATION_PORTRAIT: orientation=" + orientation);
-        }
-        return createKeyboardSet(context, subtype, width, height, testCasesHaveTouchCoordinates,
-                false /* isSpellChecker */);
+        final Resources res = context.getResources();
+        final int keyboardWidth = ResourceUtils.getDefaultKeyboardWidth(res);
+        final int keyboardHeight = ResourceUtils.getDefaultKeyboardHeight(res);
+        return createKeyboardSet(context, subtype, keyboardWidth, keyboardHeight,
+                testCasesHaveTouchCoordinates, false /* isSpellChecker */);
     }
 
     private static KeyboardLayoutSet createKeyboardSet(final Context context,
-            final InputMethodSubtype subtype, final int width, final int height,
+            final InputMethodSubtype subtype, final int keyboardWidth, final int keyboardHeight,
             final boolean testCasesHaveTouchCoordinates, final boolean isSpellChecker) {
         final EditorInfo editorInfo = new EditorInfo();
         editorInfo.inputType = InputType.TYPE_CLASS_TEXT;
         final KeyboardLayoutSet.Builder builder = new KeyboardLayoutSet.Builder(
                 context, editorInfo);
-        builder.setScreenGeometry(width, height);
+        builder.setKeyboardGeometry(keyboardWidth, keyboardHeight);
         builder.setSubtype(subtype);
         builder.setIsSpellChecker(isSpellChecker);
         if (!testCasesHaveTouchCoordinates) {
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
index 8880af48cf7360da9f21dfa0a88ef3af1e608580..1ea0f8b965b926aaa2b805d8b674100ed9305fe8 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
@@ -20,7 +20,6 @@ import android.content.Context;
 import android.content.SharedPreferences;
 import android.content.res.Resources;
 import android.preference.PreferenceManager;
-import android.util.DisplayMetrics;
 import android.util.Log;
 import android.view.ContextThemeWrapper;
 import android.view.LayoutInflater;
@@ -39,6 +38,7 @@ import com.android.inputmethod.latin.SubtypeSwitcher;
 import com.android.inputmethod.latin.WordComposer;
 import com.android.inputmethod.latin.settings.Settings;
 import com.android.inputmethod.latin.settings.SettingsValues;
+import com.android.inputmethod.latin.utils.ResourceUtils;
 
 public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
     private static final String TAG = KeyboardSwitcher.class.getSimpleName();
@@ -137,8 +137,9 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
         final KeyboardLayoutSet.Builder builder = new KeyboardLayoutSet.Builder(
                 mThemeContext, editorInfo);
         final Resources res = mThemeContext.getResources();
-        final DisplayMetrics dm = res.getDisplayMetrics();
-        builder.setScreenGeometry(dm.widthPixels, dm.heightPixels);
+        final int keyboardWidth = ResourceUtils.getDefaultKeyboardWidth(res);
+        final int keyboardHeight = ResourceUtils.getDefaultKeyboardHeight(res);
+        builder.setKeyboardGeometry(keyboardWidth, keyboardHeight);
         builder.setSubtype(mSubtypeSwitcher.getCurrentSubtype());
         builder.setOptions(
                 settingsValues.isVoiceKeyEnabled(editorInfo),
diff --git a/java/src/com/android/inputmethod/latin/utils/ResourceUtils.java b/java/src/com/android/inputmethod/latin/utils/ResourceUtils.java
index ffec57548af8b28ddfd493dd93cb92d9c92483bf..22c92446ad625c1bccebdbdc15b2fd9b0ef4b700 100644
--- a/java/src/com/android/inputmethod/latin/utils/ResourceUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/ResourceUtils.java
@@ -20,10 +20,12 @@ import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.os.Build;
 import android.text.TextUtils;
+import android.util.DisplayMetrics;
 import android.util.Log;
 import android.util.TypedValue;
 
 import com.android.inputmethod.annotations.UsedForTesting;
+import com.android.inputmethod.latin.R;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -215,6 +217,35 @@ public final class ResourceUtils {
         return null;
     }
 
+    public static int getDefaultKeyboardWidth(final Resources res) {
+        final DisplayMetrics dm = res.getDisplayMetrics();
+        return dm.widthPixels;
+    }
+
+    public static int getDefaultKeyboardHeight(final Resources res) {
+        final DisplayMetrics dm = res.getDisplayMetrics();
+        final String keyboardHeightString = getDeviceOverrideValue(res, R.array.keyboard_heights);
+        final float keyboardHeight;
+        if (TextUtils.isEmpty(keyboardHeightString)) {
+            keyboardHeight = res.getDimension(R.dimen.keyboardHeight);
+        } else {
+            keyboardHeight = Float.parseFloat(keyboardHeightString) * dm.density;
+        }
+        final float maxKeyboardHeight = res.getFraction(
+                R.fraction.maxKeyboardHeight, dm.heightPixels, dm.heightPixels);
+        float minKeyboardHeight = res.getFraction(
+                R.fraction.minKeyboardHeight, dm.heightPixels, dm.heightPixels);
+        if (minKeyboardHeight < 0.0f) {
+            // Specified fraction was negative, so it should be calculated against display
+            // width.
+            minKeyboardHeight = -res.getFraction(
+                    R.fraction.minKeyboardHeight, dm.widthPixels, dm.widthPixels);
+        }
+        // Keyboard height will not exceed maxKeyboardHeight and will not be less than
+        // minKeyboardHeight.
+        return (int)Math.max(Math.min(keyboardHeight, maxKeyboardHeight), minKeyboardHeight);
+    }
+
     public static boolean isValidFraction(final float fraction) {
         return fraction >= 0.0f;
     }