diff --git a/CleanSpec.mk b/CleanSpec.mk
index 9b498f449be2a53ebc5c7c231211a5bee3f12508..505e41b49da23ca2704da4f4100a01d7d9e80f1e 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -47,6 +47,7 @@
 $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/LatinIME*)
 $(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/app/LatinIME.apk)
 
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/libjni_latinime_intermediates)
 $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/libjni_latinime_intermediates)
 $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/libjni_latinime_intermediates)
 # ************************************************
diff --git a/java/src/com/android/inputmethod/keyboard/ProximityInfo.java b/java/src/com/android/inputmethod/keyboard/ProximityInfo.java
index 0e2d2802452fd78c8a160f315ea00b71976873ef..71b46d6462a3065d75bcdd3a4d4f152440d6215c 100644
--- a/java/src/com/android/inputmethod/keyboard/ProximityInfo.java
+++ b/java/src/com/android/inputmethod/keyboard/ProximityInfo.java
@@ -27,6 +27,7 @@ public class ProximityInfo {
     public static final int MAX_PROXIMITY_CHARS_SIZE = 16;
     /** Number of key widths from current touch point to search for nearest keys. */
     private static float SEARCH_DISTANCE = 1.2f;
+    private static final int UNKNOWN_THEME = -1;
     private static final int[] EMPTY_INT_ARRAY = new int[0];
 
     private final int mGridWidth;
@@ -66,7 +67,7 @@ public class ProximityInfo {
                 spellCheckerProximityInfo.setProximityInfoNative(
                         SpellCheckerProximityInfo.ROW_SIZE,
                         480, 300, 10, 3, SpellCheckerProximityInfo.PROXIMITY,
-                        0, null, null, null, null, null);
+                        0, null, null, null, null, null, UNKNOWN_THEME);
         return spellCheckerProximityInfo;
     }
 
@@ -77,7 +78,7 @@ public class ProximityInfo {
     private native int setProximityInfoNative(int maxProximityCharsSize, int displayWidth,
             int displayHeight, int gridWidth, int gridHeight, int[] proximityCharsArray,
             int keyCount, int[] keyXCoordinates, int[] keyYCoordinates,
-            int[] keyWidths, int[] keyHeights, int[] keyCharCodes);
+            int[] keyWidths, int[] keyHeights, int[] keyCharCodes, int themeId);
     private native void releaseProximityInfoNative(int nativeProximityInfo);
 
     private final void setProximityInfo(int[][] gridNeighborKeyIndexes, int keyboardWidth,
@@ -97,6 +98,7 @@ public class ProximityInfo {
         int[] keyWidths = new int[keyCount];
         int[] keyHeights = new int[keyCount];
         int[] keyCharCodes = new int[keyCount];
+        final int themeId = 5;    // TODO: Use real theme id.
         for (int i = 0; i < keyCount; ++i) {
             final Key key = keys.get(i);
             keyXCoordinates[i] = key.mX;
@@ -107,7 +109,8 @@ public class ProximityInfo {
         }
         mNativeProximityInfo = setProximityInfoNative(MAX_PROXIMITY_CHARS_SIZE,
                 keyboardWidth, keyboardHeight, mGridWidth, mGridHeight, proximityCharsArray,
-                keyCount, keyXCoordinates, keyYCoordinates, keyWidths, keyHeights, keyCharCodes);
+                keyCount, keyXCoordinates, keyYCoordinates, keyWidths, keyHeights, keyCharCodes,
+                themeId);
     }
 
     public int getNativeProximityInfo() {
diff --git a/native/jni/com_android_inputmethod_keyboard_ProximityInfo.cpp b/native/jni/com_android_inputmethod_keyboard_ProximityInfo.cpp
index 7647a08ebc8cdd458041ec6f3005b32075f3604a..07cee405345fb5af64fd17b4fedae71c38b3a4a7 100644
--- a/native/jni/com_android_inputmethod_keyboard_ProximityInfo.cpp
+++ b/native/jni/com_android_inputmethod_keyboard_ProximityInfo.cpp
@@ -32,7 +32,7 @@ static jint latinime_Keyboard_setProximityInfo(JNIEnv *env, jobject object,
         jint maxProximityCharsSize, jint displayWidth, jint displayHeight, jint gridWidth,
         jint gridHeight, jintArray proximityCharsArray, jint keyCount,
         jintArray keyXCoordinateArray, jintArray keyYCoordinateArray, jintArray keyWidthArray,
-        jintArray keyHeightArray, jintArray keyCharCodeArray) {
+        jintArray keyHeightArray, jintArray keyCharCodeArray, jint themeId) {
     jint *proximityChars = env->GetIntArrayElements(proximityCharsArray, NULL);
     jint *keyXCoordinates = safeGetIntArrayElements(env, keyXCoordinateArray);
     jint *keyYCoordinates = safeGetIntArrayElements(env, keyYCoordinateArray);
@@ -42,7 +42,8 @@ static jint latinime_Keyboard_setProximityInfo(JNIEnv *env, jobject object,
     ProximityInfo *proximityInfo = new ProximityInfo(maxProximityCharsSize, displayWidth,
             displayHeight, gridWidth, gridHeight, (const uint32_t*)proximityChars,
             keyCount, (const int32_t*)keyXCoordinates, (const int32_t*)keyYCoordinates,
-            (const int32_t*)keyWidths, (const int32_t*)keyHeights, (const int32_t*)keyCharCodes);
+            (const int32_t*)keyWidths, (const int32_t*)keyHeights, (const int32_t*)keyCharCodes,
+            themeId);
     safeReleaseIntArrayElements(env, keyCharCodeArray, keyCharCodes);
     safeReleaseIntArrayElements(env, keyHeightArray, keyHeights);
     safeReleaseIntArrayElements(env, keyWidthArray, keyWidths);
@@ -59,7 +60,7 @@ static void latinime_Keyboard_release(JNIEnv *env, jobject object, jint proximit
 }
 
 static JNINativeMethod sKeyboardMethods[] = {
-    {"setProximityInfoNative", "(IIIII[II[I[I[I[I[I)I", (void*)latinime_Keyboard_setProximityInfo},
+    {"setProximityInfoNative", "(IIIII[II[I[I[I[I[II)I", (void*)latinime_Keyboard_setProximityInfo},
     {"releaseProximityInfoNative", "(I)V", (void*)latinime_Keyboard_release}
 };
 
diff --git a/native/src/proximity_info.cpp b/native/src/proximity_info.cpp
index 87cacd9383e78017b784399059edd360aa261c40..58842b92faf4645b7bb0093fdcbc2af5b2078ffc 100644
--- a/native/src/proximity_info.cpp
+++ b/native/src/proximity_info.cpp
@@ -38,12 +38,12 @@ ProximityInfo::ProximityInfo(const int maxProximityCharsSize, const int keyboard
         const int keyboardHeight, const int gridWidth, const int gridHeight,
         const uint32_t *proximityCharsArray, const int keyCount, const int32_t *keyXCoordinates,
         const int32_t *keyYCoordinates, const int32_t *keyWidths, const int32_t *keyHeights,
-        const int32_t *keyCharCodes)
+        const int32_t *keyCharCodes, int themeId)
         : MAX_PROXIMITY_CHARS_SIZE(maxProximityCharsSize), KEYBOARD_WIDTH(keyboardWidth),
           KEYBOARD_HEIGHT(keyboardHeight), GRID_WIDTH(gridWidth), GRID_HEIGHT(gridHeight),
           CELL_WIDTH((keyboardWidth + gridWidth - 1) / gridWidth),
           CELL_HEIGHT((keyboardHeight + gridHeight - 1) / gridHeight),
-          KEY_COUNT(min(keyCount, MAX_KEY_COUNT_IN_A_KEYBOARD)) {
+          KEY_COUNT(min(keyCount, MAX_KEY_COUNT_IN_A_KEYBOARD)), THEME_ID(themeId) {
     const int len = GRID_WIDTH * GRID_HEIGHT * MAX_PROXIMITY_CHARS_SIZE;
     mProximityCharsArray = new uint32_t[len];
     if (DEBUG_PROXIMITY_INFO) {
diff --git a/native/src/proximity_info.h b/native/src/proximity_info.h
index 834997fb95253d3d74d44b421b3c79ad6db9d2ba..3190e73efcbc17d5105b3b7e06515c839dab857a 100644
--- a/native/src/proximity_info.h
+++ b/native/src/proximity_info.h
@@ -37,7 +37,7 @@ public:
             const int keybaordHeight, const int gridWidth, const int gridHeight,
             const uint32_t *proximityCharsArray, const int keyCount, const int32_t *keyXCoordinates,
             const int32_t *keyYCoordinates, const int32_t *keyWidths, const int32_t *keyHeights,
-            const int32_t *keyCharCodes);
+            const int32_t *keyCharCodes, int themeId);
     ~ProximityInfo();
     bool hasSpaceProximity(const int x, const int y) const;
     void setInputParams(const int* inputCodes, const int inputLength);
@@ -69,6 +69,7 @@ private:
     const int CELL_WIDTH;
     const int CELL_HEIGHT;
     const int KEY_COUNT;
+    const int THEME_ID;
     const int *mInputCodes;
     uint32_t *mProximityCharsArray;
     int32_t mKeyXCoordinates[MAX_KEY_COUNT_IN_A_KEYBOARD];