aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMohammadinamul Sheik <inamul@google.com>2015-04-02 17:50:48 -0700
committerMohammadinamul Sheik <inamul@google.com>2015-04-02 17:50:48 -0700
commit9a3598b0ee8ab5d8b90e35d65190ecea1aef7828 (patch)
tree021cfbf7c37c2765e8fd009009c5f1d610f19c9f
parenta0a66638947b5b26e7e1e5cd263a070d9ba50074 (diff)
downloadlatinime-9a3598b0ee8ab5d8b90e35d65190ecea1aef7828.tar.gz
latinime-9a3598b0ee8ab5d8b90e35d65190ecea1aef7828.tar.xz
latinime-9a3598b0ee8ab5d8b90e35d65190ecea1aef7828.zip
Do not throw NPE if the dictionary info is not available on db
Bug: 20035793 Change-Id: Idc13af405eab5457954a93db3dddcd81f6eb6435
-rw-r--r--java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java3
-rw-r--r--java/src/com/android/inputmethod/dictionarypack/MetadataHandler.java14
-rw-r--r--java/src/com/android/inputmethod/dictionarypack/UpdateHandler.java3
-rw-r--r--java/src/com/android/inputmethod/dictionarypack/WordListMetadata.java4
4 files changed, 22 insertions, 2 deletions
diff --git a/java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java b/java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java
index a2789cc1a..fbc899192 100644
--- a/java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java
+++ b/java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java
@@ -34,6 +34,8 @@ import java.util.LinkedList;
import java.util.List;
import java.util.TreeMap;
+import javax.annotation.Nullable;
+
/**
* Various helper functions for the state database
*/
@@ -705,6 +707,7 @@ public class MetadataDbHelper extends SQLiteOpenHelper {
* @param version the word list version.
* @return the metadata about this word list.
*/
+ @Nullable
public static ContentValues getContentValuesByWordListId(final SQLiteDatabase db,
final String id, final int version) {
final Cursor cursor = db.query(METADATA_TABLE_NAME,
diff --git a/java/src/com/android/inputmethod/dictionarypack/MetadataHandler.java b/java/src/com/android/inputmethod/dictionarypack/MetadataHandler.java
index 329b9f62e..e5d632fbe 100644
--- a/java/src/com/android/inputmethod/dictionarypack/MetadataHandler.java
+++ b/java/src/com/android/inputmethod/dictionarypack/MetadataHandler.java
@@ -19,6 +19,7 @@ package com.android.inputmethod.dictionarypack;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
+import android.util.Log;
import java.io.IOException;
import java.io.InputStreamReader;
@@ -30,10 +31,13 @@ import java.util.List;
* Helper class to easy up manipulation of dictionary pack metadata.
*/
public class MetadataHandler {
+
+ public static final String TAG = MetadataHandler.class.getSimpleName();
+
// The canonical file name for metadata. This is not the name of a real file on the
// device, but a symbolic name used in the database and in metadata handling. It is never
// tested against, only used for human-readability as the file name for the metadata.
- public final static String METADATA_FILENAME = "metadata.json";
+ public static final String METADATA_FILENAME = "metadata.json";
/**
* Reads the data from the cursor and store it in metadata objects.
@@ -114,6 +118,14 @@ public class MetadataHandler {
final String clientId, final String wordListId, final int version) {
final ContentValues contentValues = MetadataDbHelper.getContentValuesByWordListId(
MetadataDbHelper.getDb(context, clientId), wordListId, version);
+ if (contentValues == null) {
+ // TODO: Figure out why this would happen.
+ // Check if this happens when the metadata gets updated in the background.
+ Log.e(TAG, String.format( "Unable to find the current metadata for wordlist "
+ + "(clientId=%s, wordListId=%s, version=%d) on the database",
+ clientId, wordListId, version));
+ return null;
+ }
return WordListMetadata.createFromContentValues(contentValues);
}
diff --git a/java/src/com/android/inputmethod/dictionarypack/UpdateHandler.java b/java/src/com/android/inputmethod/dictionarypack/UpdateHandler.java
index 30ff0b8ee..e720f3cd0 100644
--- a/java/src/com/android/inputmethod/dictionarypack/UpdateHandler.java
+++ b/java/src/com/android/inputmethod/dictionarypack/UpdateHandler.java
@@ -1143,6 +1143,9 @@ public final class UpdateHandler {
}
final WordListMetadata wordListMetaData = MetadataHandler.getCurrentMetadataForWordList(
context, clientId, wordlistId, version);
+ if (wordListMetaData == null) {
+ return;
+ }
final ActionBatch actions = new ActionBatch();
actions.add(new ActionBatch.StartDownloadAction(
diff --git a/java/src/com/android/inputmethod/dictionarypack/WordListMetadata.java b/java/src/com/android/inputmethod/dictionarypack/WordListMetadata.java
index 59f75e4ed..99cffb816 100644
--- a/java/src/com/android/inputmethod/dictionarypack/WordListMetadata.java
+++ b/java/src/com/android/inputmethod/dictionarypack/WordListMetadata.java
@@ -18,6 +18,8 @@ package com.android.inputmethod.dictionarypack;
import android.content.ContentValues;
+import javax.annotation.Nonnull;
+
/**
* The metadata for a single word list.
*
@@ -77,7 +79,7 @@ public class WordListMetadata {
*
* If this lacks any required field, IllegalArgumentException is thrown.
*/
- public static WordListMetadata createFromContentValues(final ContentValues values) {
+ public static WordListMetadata createFromContentValues(@Nonnull final ContentValues values) {
final String id = values.getAsString(MetadataDbHelper.WORDLISTID_COLUMN);
final Integer type = values.getAsInteger(MetadataDbHelper.TYPE_COLUMN);
final String description = values.getAsString(MetadataDbHelper.DESCRIPTION_COLUMN);