aboutsummaryrefslogtreecommitdiffstats
path: root/java/src
diff options
context:
space:
mode:
authorTadashi G. Takaoka <takaoka@google.com>2011-10-17 19:11:12 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-10-17 19:11:12 -0700
commitbf7d8ecb48b1d47d6555d508d0c6a56e0a06efd2 (patch)
tree81bb29f112262e841caf8231db4476076755ab17 /java/src
parentc5d51a40a444c65bbca2a8bdcf0b4d6a05f59e77 (diff)
parentddd759aa9e61cd09fa28e36baf946f15427ace8c (diff)
downloadlatinime-bf7d8ecb48b1d47d6555d508d0c6a56e0a06efd2.tar.gz
latinime-bf7d8ecb48b1d47d6555d508d0c6a56e0a06efd2.tar.xz
latinime-bf7d8ecb48b1d47d6555d508d0c6a56e0a06efd2.zip
Merge "Close XmlResourceParser when finish parsing"
Diffstat (limited to 'java/src')
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java17
1 files changed, 13 insertions, 4 deletions
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java
index dd31d17c8..613ce587b 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java
@@ -19,6 +19,7 @@ package com.android.inputmethod.keyboard.internal;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.TypedArray;
+import android.content.res.XmlResourceParser;
import android.util.DisplayMetrics;
import android.util.Log;
import android.util.TypedValue;
@@ -268,14 +269,17 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
public KeyboardBuilder<KP> load(KeyboardId id) {
mParams.mId = id;
+ final XmlResourceParser parser = mResources.getXml(id.getXmlId());
try {
- parseKeyboard(id.getXmlId());
+ parseKeyboard(parser);
} catch (XmlPullParserException e) {
Log.w(TAG, "keyboard XML parse error: " + e);
throw new IllegalArgumentException(e);
} catch (IOException e) {
Log.w(TAG, "keyboard XML parse error: " + e);
throw new RuntimeException(e);
+ } finally {
+ parser.close();
}
return this;
}
@@ -288,9 +292,9 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
return new Keyboard(mParams);
}
- private void parseKeyboard(int resId) throws XmlPullParserException, IOException {
+ private void parseKeyboard(XmlResourceParser parser)
+ throws XmlPullParserException, IOException {
if (DEBUG) Log.d(TAG, String.format("<%s> %s", TAG_KEYBOARD, mParams.mId));
- final XmlPullParser parser = mResources.getXml(resId);
int event;
while ((event = parser.next()) != XmlPullParser.END_DOCUMENT) {
if (event == XmlPullParser.START_TAG) {
@@ -535,7 +539,12 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
throw new ParseException("No keyboardLayout attribute in <include/>", parser);
if (DEBUG) Log.d(TAG, String.format("<%s keyboardLayout=%s />",
TAG_INCLUDE, mResources.getResourceEntryName(keyboardLayout)));
- parseMerge(mResources.getLayout(keyboardLayout), row, skip);
+ final XmlResourceParser parserForInclude = mResources.getXml(keyboardLayout);
+ try {
+ parseMerge(parserForInclude, row, skip);
+ } finally {
+ parserForInclude.close();
+ }
}
}