Move themeId and touch correction data to Keyboard style

Change-Id: I13b9997e013b704734b6fa94131b1f7fec7a152d
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index 34ce527..4dfa5ab 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -16,7 +16,6 @@
 
 <resources>
     <declare-styleable name="KeyboardTheme">
-        <attr name="themeId" format="integer" />
         <!-- Keyboard style -->
         <attr name="keyboardStyle" format="reference" />
         <!-- LatinKeyboard style -->
@@ -34,8 +33,6 @@
         <attr name="moreSuggestionsViewStyle" format="reference" />
         <attr name="suggestionBackgroundStyle" format="reference" />
         <attr name="suggestionPreviewBackgroundStyle" format="reference" />
-        <!-- Touch position correction -->
-        <attr name="touchPositionCorrectionData" format="reference" />
     </declare-styleable>
 
     <declare-styleable name="KeyboardView">
@@ -140,6 +137,9 @@
     </declare-styleable>
 
     <declare-styleable name="Keyboard">
+        <attr name="themeId" format="integer" />
+        <!-- Touch position correction -->
+        <attr name="touchPositionCorrectionData" format="reference" />
         <!-- Default keyboard height -->
         <attr name="keyboardHeight" format="dimension|fraction" />
         <!-- Maximum keyboard height, in pixels or percentage of display height -->
diff --git a/java/res/values/styles.xml b/java/res/values/styles.xml
index c6ea2a5..30c0e5a 100644
--- a/java/res/values/styles.xml
+++ b/java/res/values/styles.xml
@@ -17,6 +17,8 @@
 <resources>
     <!-- Theme "Basic" -->
     <style name="Keyboard">
+        <item name="themeId">0</item>
+        <item name="touchPositionCorrectionData">@array/touch_position_correction_data_empty</item>
         <item name="rowHeight">25%p</item>
         <item name="keyboardHeight">@dimen/keyboardHeight</item>
         <item name="maxKeyboardHeight">@fraction/maxKeyboardHeight</item>
@@ -119,6 +121,12 @@
     </style>
     <!-- Theme "Basic high contrast" -->
     <style
+        name="Keyboard.HighContrast"
+        parent="Keyboard"
+    >
+        <item name="themeId">1</item>
+    </style>
+    <style
         name="KeyboardView.HighContrast"
         parent="KeyboardView"
     >
@@ -130,6 +138,7 @@
         name="Keyboard.Stone"
         parent="Keyboard"
     >
+        <item name="themeId">6</item>
         <item name="keyboardHeight">@dimen/keyboardHeight_stone</item>
         <item name="keyboardTopPadding">@fraction/keyboard_top_padding_stone</item>
         <item name="keyboardBottomPadding">@fraction/keyboard_bottom_padding_stone</item>
@@ -174,6 +183,12 @@
     </style>
     <!-- Theme "Stone bold" -->
     <style
+        name="Keyboard.Stone.Bold"
+        parent="Keyboard.Stone"
+    >
+        <item name="themeId">7</item>
+    </style>
+    <style
         name="KeyboardView.Stone.Bold"
         parent="KeyboardView.Stone"
     >
@@ -184,6 +199,8 @@
         name="Keyboard.Gingerbread"
         parent="Keyboard"
     >
+        <item name="themeId">8</item>
+        <item name="touchPositionCorrectionData">@array/touch_position_correction_data_gingerbread</item>
         <item name="horizontalGap">@fraction/key_horizontal_gap_gb</item>
         <item name="verticalGap">@fraction/key_bottom_gap_gb</item>
     </style>
@@ -214,10 +231,12 @@
         name="Keyboard.IceCreamSandwich"
         parent="Keyboard"
     >
+        <item name="themeId">5</item>
         <item name="keyboardTopPadding">@fraction/keyboard_top_padding_ics</item>
         <item name="keyboardBottomPadding">@fraction/keyboard_bottom_padding_ics</item>
         <item name="horizontalGap">@fraction/key_horizontal_gap_ics</item>
         <item name="verticalGap">@fraction/key_bottom_gap_ics</item>
+        <item name="touchPositionCorrectionData">@array/touch_position_correction_data_ice_cream_sandwich</item>
     </style>
     <style
         name="LatinKeyboard.IceCreamSandwich"
diff --git a/java/res/values/themes-basic-highcontrast.xml b/java/res/values/themes-basic-highcontrast.xml
index bc3c847..abb7c80 100644
--- a/java/res/values/themes-basic-highcontrast.xml
+++ b/java/res/values/themes-basic-highcontrast.xml
@@ -16,8 +16,7 @@
 
 <resources>
     <style name="KeyboardTheme.HighContrast" parent="KeyboardIcons">
-        <item name="themeId">1</item>
-        <item name="keyboardStyle">@style/Keyboard</item>
+        <item name="keyboardStyle">@style/Keyboard.HighContrast</item>
         <item name="latinKeyboardStyle">@style/LatinKeyboard</item>
         <item name="keyboardViewStyle">@style/KeyboardView.HighContrast</item>
         <item name="miniKeyboardStyle">@style/MiniKeyboard</item>
@@ -28,6 +27,5 @@
         <item name="moreSuggestionsViewStyle">@style/MoreSuggestionsViewStyle</item>
         <item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle</item>
         <item name="suggestionPreviewBackgroundStyle">@style/SuggestionPreviewBackgroundStyle</item>
-        <item name="touchPositionCorrectionData">@array/touch_position_correction_data_empty</item>
     </style>
 </resources>
diff --git a/java/res/values/themes-basic.xml b/java/res/values/themes-basic.xml
index 29cb9cc..ff9fed5 100644
--- a/java/res/values/themes-basic.xml
+++ b/java/res/values/themes-basic.xml
@@ -16,7 +16,6 @@
 
 <resources>
     <style name="KeyboardTheme" parent="KeyboardIcons">
-        <item name="themeId">0</item>
         <item name="keyboardStyle">@style/Keyboard</item>
         <item name="latinKeyboardStyle">@style/LatinKeyboard</item>
         <item name="keyboardViewStyle">@style/KeyboardView</item>
@@ -28,6 +27,5 @@
         <item name="moreSuggestionsViewStyle">@style/MoreSuggestionsViewStyle</item>
         <item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle</item>
         <item name="suggestionPreviewBackgroundStyle">@style/SuggestionPreviewBackgroundStyle</item>
-        <item name="touchPositionCorrectionData">@array/touch_position_correction_data_empty</item>
     </style>
 </resources>
diff --git a/java/res/values/themes-gingerbread.xml b/java/res/values/themes-gingerbread.xml
index c4a0f80..be853eb 100644
--- a/java/res/values/themes-gingerbread.xml
+++ b/java/res/values/themes-gingerbread.xml
@@ -16,7 +16,6 @@
 
 <resources>
     <style name="KeyboardTheme.Gingerbread" parent="KeyboardIcons">
-        <item name="themeId">8</item>
         <item name="keyboardStyle">@style/Keyboard.Gingerbread</item>
         <item name="latinKeyboardStyle">@style/LatinKeyboard</item>
         <item name="keyboardViewStyle">@style/KeyboardView.Gingerbread</item>
@@ -28,6 +27,5 @@
         <item name="moreSuggestionsViewStyle">@style/MoreSuggestionsViewStyle</item>
         <item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle</item>
         <item name="suggestionPreviewBackgroundStyle">@style/SuggestionPreviewBackgroundStyle</item>
-        <item name="touchPositionCorrectionData">@array/touch_position_correction_data_gingerbread</item>
     </style>
 </resources>
diff --git a/java/res/values/themes-ics.xml b/java/res/values/themes-ics.xml
index dd2b6a3..618aaed 100644
--- a/java/res/values/themes-ics.xml
+++ b/java/res/values/themes-ics.xml
@@ -16,7 +16,6 @@
 
 <resources>
     <style name="KeyboardTheme.IceCreamSandwich" parent="KeyboardIcons.IceCreamSandwich">
-        <item name="themeId">5</item>
         <item name="keyboardStyle">@style/Keyboard.IceCreamSandwich</item>
         <item name="latinKeyboardStyle">@style/LatinKeyboard.IceCreamSandwich</item>
         <item name="keyboardViewStyle">@style/KeyboardView.IceCreamSandwich</item>
@@ -28,6 +27,5 @@
         <item name="moreSuggestionsViewStyle">@style/MoreSuggestionsViewStyle.IceCreamSandwich</item>
         <item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle.IceCreamSandwich</item>
         <item name="suggestionPreviewBackgroundStyle">@style/SuggestionPreviewBackgroundStyle.IceCreamSandwich</item>
-        <item name="touchPositionCorrectionData">@array/touch_position_correction_data_ice_cream_sandwich</item>
     </style>
 </resources>
diff --git a/java/res/values/themes-stone-bold.xml b/java/res/values/themes-stone-bold.xml
index 6e864be..fdf9c51 100644
--- a/java/res/values/themes-stone-bold.xml
+++ b/java/res/values/themes-stone-bold.xml
@@ -16,7 +16,6 @@
 
 <resources>
     <style name="KeyboardTheme.Stone.Bold" parent="KeyboardIcons.Black">
-        <item name="themeId">7</item>
         <item name="keyboardStyle">@style/Keyboard.Stone</item>
         <item name="latinKeyboardStyle">@style/LatinKeyboard.Stone</item>
         <item name="keyboardViewStyle">@style/KeyboardView.Stone.Bold</item>
@@ -28,6 +27,5 @@
         <item name="moreSuggestionsViewStyle">@style/MoreSuggestionsViewStyle</item>
         <item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle</item>
         <item name="suggestionPreviewBackgroundStyle">@style/SuggestionPreviewBackgroundStyle</item>
-        <item name="touchPositionCorrectionData">@array/touch_position_correction_data_empty</item>
     </style>
 </resources>
diff --git a/java/res/values/themes-stone.xml b/java/res/values/themes-stone.xml
index 64c5570..cb3edc5 100644
--- a/java/res/values/themes-stone.xml
+++ b/java/res/values/themes-stone.xml
@@ -16,7 +16,6 @@
 
 <resources>
     <style name="KeyboardTheme.Stone" parent="KeyboardIcons.Black">
-        <item name="themeId">6</item>
         <item name="keyboardStyle">@style/Keyboard.Stone</item>
         <item name="latinKeyboardStyle">@style/LatinKeyboard.Stone</item>
         <item name="keyboardViewStyle">@style/KeyboardView.Stone</item>
@@ -28,6 +27,5 @@
         <item name="moreSuggestionsViewStyle">@style/MoreSuggestionsViewStyle</item>
         <item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle</item>
         <item name="suggestionPreviewBackgroundStyle">@style/SuggestionPreviewBackgroundStyle</item>
-        <item name="touchPositionCorrectionData">@array/touch_position_correction_data_empty</item>
     </style>
 </resources>
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java
index 46836da..3cdde09 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java
@@ -247,54 +247,50 @@
 
         mParams = params;
 
-        final TypedArray a = context.obtainStyledAttributes(R.styleable.KeyboardTheme);
-        mParams.mThemeId = a.getInt(R.styleable.KeyboardTheme_themeId, 0);
-        a.recycle();
+        setTouchPositionCorrectionData(context, params);
 
-        if (!setTouchPositionCorrectionData(context)) {
-            // In the regression test, setTouchPositionCorrectionData() fails
-            mParams.mTouchPositionCorrectionXs = null;
-            mParams.mTouchPositionCorrectionYs = null;
-            mParams.mTouchPositionCorrectionRadii = null;
-        }
-
-        mParams.GRID_WIDTH = res.getInteger(R.integer.config_keyboard_grid_width);
-        mParams.GRID_HEIGHT = res.getInteger(R.integer.config_keyboard_grid_height);
+        params.GRID_WIDTH = res.getInteger(R.integer.config_keyboard_grid_width);
+        params.GRID_HEIGHT = res.getInteger(R.integer.config_keyboard_grid_height);
     }
 
-    private boolean setTouchPositionCorrectionData(Context context) {
-        final TypedArray a = context.obtainStyledAttributes(R.styleable.KeyboardTheme);
-        final int resourceId = a.getResourceId(
-                R.styleable.KeyboardTheme_touchPositionCorrectionData, 0);
+    private static void setTouchPositionCorrectionData(Context context, KeyboardParams params) {
+        params.mTouchPositionCorrectionXs = null;
+        params.mTouchPositionCorrectionYs = null;
+        params.mTouchPositionCorrectionRadii = null;
+
+        final TypedArray a = context.obtainStyledAttributes(R.styleable.Keyboard);
+        params.mThemeId = a.getInt(R.styleable.Keyboard_themeId, 0);
+        final int resourceId = a.getResourceId(R.styleable.Keyboard_touchPositionCorrectionData, 0);
         if (resourceId == 0) {
-            // In the regression test, we cannot use theme resources
-            // TODO: Fix this
-            return false;
+            if (LatinImeLogger.sDBG)
+                throw new RuntimeException("touchPositionCorrectionData is not defined");
+            return;
         }
+
         final String[] data = context.getResources().getStringArray(resourceId);
         a.recycle();
         final int dataLength = data.length;
         if (dataLength % TOUCH_POSITION_CORRECTION_RECORD_SIZE != 0) {
-            if (LatinImeLogger.sDBG) {
+            if (LatinImeLogger.sDBG)
                 throw new RuntimeException("the size of touch position correction data is invalid");
-            }
-            return false;
+            return;
         }
+
         final int length = dataLength / TOUCH_POSITION_CORRECTION_RECORD_SIZE;
-        mParams.mTouchPositionCorrectionXs = new float[length];
-        mParams.mTouchPositionCorrectionYs = new float[length];
-        mParams.mTouchPositionCorrectionRadii = new float[length];
+        params.mTouchPositionCorrectionXs = new float[length];
+        params.mTouchPositionCorrectionYs = new float[length];
+        params.mTouchPositionCorrectionRadii = new float[length];
         try {
             for (int i = 0; i < dataLength; ++i) {
                 final int type = i % TOUCH_POSITION_CORRECTION_RECORD_SIZE;
                 final int index = i / TOUCH_POSITION_CORRECTION_RECORD_SIZE;
                 final float value = Float.parseFloat(data[i]);
                 if (type == 0) {
-                    mParams.mTouchPositionCorrectionXs[index] = value;
+                    params.mTouchPositionCorrectionXs[index] = value;
                 } else if (type == 1) {
-                    mParams.mTouchPositionCorrectionYs[index] = value;
+                    params.mTouchPositionCorrectionYs[index] = value;
                 } else {
-                    mParams.mTouchPositionCorrectionRadii[index] = value;
+                    params.mTouchPositionCorrectionRadii[index] = value;
                 }
             }
         } catch (NumberFormatException e) {
@@ -302,9 +298,10 @@
                 throw new RuntimeException(
                         "the number format for touch position correction data is invalid");
             }
-            return false;
+            params.mTouchPositionCorrectionXs = null;
+            params.mTouchPositionCorrectionYs = null;
+            params.mTouchPositionCorrectionRadii = null;
         }
-        return true;
     }
 
     public KeyboardBuilder<KP> load(KeyboardId id) {