aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
diff options
context:
space:
mode:
authorMohammadinamul Sheik <inamul@google.com>2015-05-04 11:57:31 -0700
committerMohammadinamul Sheik <inamul@google.com>2015-05-04 11:57:31 -0700
commita0d9c82921022347e44d416bb57810331e35e446 (patch)
tree77974631941ea26edc47a73c0afdd64e6664980e /java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
parent459b4f353e6138b644c1f06de68e93532ee0d856 (diff)
downloadlatinime-a0d9c82921022347e44d416bb57810331e35e446.tar.gz
latinime-a0d9c82921022347e44d416bb57810331e35e446.tar.xz
latinime-a0d9c82921022347e44d416bb57810331e35e446.zip
Make the DictionaryService stage the downloaded files
Bug: 20641948 Change-Id: I6639c995b12c033bc30241cd219201dd483ee516
Diffstat (limited to 'java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java')
-rw-r--r--java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java39
1 files changed, 26 insertions, 13 deletions
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
index bc62f3ae3..4b242c5f5 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
@@ -29,6 +29,7 @@ import android.util.Log;
import com.android.inputmethod.dictionarypack.DictionaryPackConstants;
import com.android.inputmethod.dictionarypack.MD5Calculator;
+import com.android.inputmethod.latin.common.FileUtils;
import com.android.inputmethod.latin.define.DecoderSpecificConstants;
import com.android.inputmethod.latin.utils.DictionaryInfoUtils;
import com.android.inputmethod.latin.utils.DictionaryInfoUtils.DictionaryInfo;
@@ -220,11 +221,11 @@ public final class BinaryDictionaryFileDumper {
}
/**
- * Caches a word list the id of which is passed as an argument. This will write the file
+ * Stages a word list the id of which is passed as an argument. This will write the file
* to the cache file name designated by its id and locale, overwriting it if already present
* and creating it (and its containing directory) if necessary.
*/
- private static void cacheWordList(final String wordlistId, final String locale,
+ private static void installWordListToStaging(final String wordlistId, final String locale,
final String rawChecksum, final ContentProviderClient providerClient,
final Context context) {
final int COMPRESSED_CRYPTED_COMPRESSED = 0;
@@ -246,7 +247,7 @@ public final class BinaryDictionaryFileDumper {
return;
}
final String finalFileName =
- DictionaryInfoUtils.getCacheFileName(wordlistId, locale, context);
+ DictionaryInfoUtils.getStagingFileName(wordlistId, locale, context);
String tempFileName;
try {
tempFileName = BinaryDictionaryGetter.getTempFileName(wordlistId, context);
@@ -320,23 +321,21 @@ public final class BinaryDictionaryFileDumper {
}
}
+ // move the output file to the final staging file.
final File finalFile = new File(finalFileName);
- finalFile.delete();
- if (!outputFile.renameTo(finalFile)) {
- throw new IOException("Can't move the file to its final name");
- }
+ FileUtils.renameTo(outputFile, finalFile);
+
wordListUriBuilder.appendQueryParameter(QUERY_PARAMETER_DELETE_RESULT,
QUERY_PARAMETER_SUCCESS);
if (0 >= providerClient.delete(wordListUriBuilder.build(), null, null)) {
Log.e(TAG, "Could not have the dictionary pack delete a word list");
}
- BinaryDictionaryGetter.removeFilesWithIdExcept(context, wordlistId, finalFile);
- Log.e(TAG, "Successfully copied file for wordlist ID " + wordlistId);
+ Log.d(TAG, "Successfully copied file for wordlist ID " + wordlistId);
// Success! Close files (through the finally{} clause) and return.
return;
} catch (Exception e) {
if (DEBUG) {
- Log.i(TAG, "Can't open word list in mode " + mode, e);
+ Log.e(TAG, "Can't open word list in mode " + mode, e);
}
if (null != outputFile) {
// This may or may not fail. The file may not have been created if the
@@ -403,7 +402,7 @@ public final class BinaryDictionaryFileDumper {
}
/**
- * Queries a content provider for word list data for some locale and cache the returned files
+ * Queries a content provider for word list data for some locale and stage the returned files
*
* This will query a content provider for word list data for a given locale, and copy the
* files locally so that they can be mmap'ed. This may overwrite previously cached word lists
@@ -411,7 +410,7 @@ public final class BinaryDictionaryFileDumper {
* @throw FileNotFoundException if the provider returns non-existent data.
* @throw IOException if the provider-returned data could not be read.
*/
- public static void cacheWordListsFromContentProvider(final Locale locale,
+ public static void installDictToStagingFromContentProvider(final Locale locale,
final Context context, final boolean hasDefaultWordList) {
final ContentProviderClient providerClient;
try {
@@ -429,7 +428,8 @@ public final class BinaryDictionaryFileDumper {
final List<WordListInfo> idList = getWordListWordListInfos(locale, context,
hasDefaultWordList);
for (WordListInfo id : idList) {
- cacheWordList(id.mId, id.mLocale, id.mRawChecksum, providerClient, context);
+ installWordListToStaging(id.mId, id.mLocale, id.mRawChecksum, providerClient,
+ context);
}
} finally {
providerClient.release();
@@ -437,6 +437,19 @@ public final class BinaryDictionaryFileDumper {
}
/**
+ * Downloads the dictionary if it was never requested/used.
+ *
+ * @param locale locale to download
+ * @param context the context for resources and providers.
+ * @param hasDefaultWordList whether the default wordlist exists in the resources.
+ */
+ public static void downloadDictIfNeverRequested(final Locale locale,
+ final Context context, final boolean hasDefaultWordList) {
+ Log.d("inamul_tag", "BinaryDictionaryFileDumper.downloadDictIfNeverRequested()");
+ getWordListWordListInfos(locale, context, hasDefaultWordList);
+ }
+
+ /**
* Copies the data in an input stream to a target file if the magic number matches.
*
* If the magic number does not match the expected value, this method throws an