Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9a3598b0 authored by Mohammadinamul Sheik's avatar Mohammadinamul Sheik
Browse files

Do not throw NPE if the dictionary info is not available on db

Bug: 20035793
Change-Id: Idc13af405eab5457954a93db3dddcd81f6eb6435
parent a0a66638
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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,
+13 −1
Original line number Diff line number Diff line
@@ -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);
    }

+3 −0
Original line number Diff line number Diff line
@@ -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(
+3 −1
Original line number Diff line number Diff line
@@ -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);