aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
diff options
context:
space:
mode:
authorKeisuke Kuroyanagi <ksk@google.com>2013-11-28 20:40:26 +0900
committerKeisuke Kuroyanagi <ksk@google.com>2013-11-28 20:40:26 +0900
commit8ac3c65b00d0470218264784da77c378750d347c (patch)
tree0ed0f1ed16c8ce18571f4403fdf16f0e81ee1ce3 /java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
parentc7dd2eb7ad6499178a2f1fa600bf21a2e6cb8ba3 (diff)
downloadlatinime-8ac3c65b00d0470218264784da77c378750d347c.tar.gz
latinime-8ac3c65b00d0470218264784da77c378750d347c.tar.xz
latinime-8ac3c65b00d0470218264784da77c378750d347c.zip
Add version check to open binary dictionary.
Bug: 11073222 Change-Id: Iabae12b8f14a9da3cdc804dcc6af443cedeb3f99
Diffstat (limited to 'java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java')
-rw-r--r--java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java36
1 files changed, 28 insertions, 8 deletions
diff --git a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
index 7041df598..7107076cc 100644
--- a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
@@ -28,6 +28,7 @@ import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
import com.android.inputmethod.latin.utils.AsyncResultHolder;
import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.PrioritizedSerialExecutor;
+import com.android.inputmethod.latin.utils.StringUtils;
import java.io.File;
import java.util.ArrayList;
@@ -128,6 +129,14 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
*/
protected abstract boolean hasContentChanged();
+ protected boolean isValidBinaryDictFormatVersion(final int formatVersion) {
+ return true;
+ }
+
+ protected String getFileNameExtentionToOpenDict() {
+ return "";
+ }
+
/**
* Gets the dictionary update controller for the given filename.
*/
@@ -238,12 +247,18 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
public void run() {
if (mDictionaryWriter == null) {
mBinaryDictionary.close();
- final File file = new File(mContext.getFilesDir(), mFilename + "/"
- + FormatSpec.TRIE_FILE_EXTENSION);
+ final File file = new File(mContext.getFilesDir(), mFilename);
+ file.delete();
BinaryDictionary.createEmptyDictFile(file.getAbsolutePath(),
DICTIONARY_FORMAT_VERSION, getHeaderAttributeMap());
+ // We have 'fileToOpen' in addition to 'file' for the v4 dictionary format
+ // where 'file' is a directory, and 'fileToOpen' is a normal file.
+ final File fileToOpen = new File(mContext.getFilesDir(), mFilename
+ + getFileNameExtentionToOpenDict());
+ // TODO: Make BinaryDictionary's constructor be able to accept filename
+ // without extension.
mBinaryDictionary = new BinaryDictionary(
- file.getAbsolutePath(), 0 /* offset */, file.length(),
+ fileToOpen.getAbsolutePath(), 0 /* offset */, fileToOpen.length(),
true /* useFullEditDistance */, null, mDictType, mIsUpdatable);
} else {
mDictionaryWriter.clear();
@@ -482,8 +497,8 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
+ mFilenameDictionaryUpdateController.mLastUpdateTime);
}
- final File file = new File(mContext.getFilesDir(), mFilename + "/"
- + FormatSpec.TRIE_FILE_EXTENSION);
+ final File file = new File(mContext.getFilesDir(), mFilename
+ + getFileNameExtentionToOpenDict());
final String filename = file.getAbsolutePath();
final long length = file.length();
@@ -526,8 +541,10 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
loadDictionaryAsync();
mDictionaryWriter.write(mFilename, getHeaderAttributeMap());
} else {
- if (mBinaryDictionary == null || !mBinaryDictionary.isValidDictionary()) {
+ if (mBinaryDictionary == null || !mBinaryDictionary.isValidDictionary()
+ || !isValidBinaryDictFormatVersion(mBinaryDictionary.getFormatVersion())) {
final File file = new File(mContext.getFilesDir(), mFilename);
+ file.delete();
BinaryDictionary.createEmptyDictFile(file.getAbsolutePath(),
DICTIONARY_FORMAT_VERSION, getHeaderAttributeMap());
} else {
@@ -623,8 +640,11 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
// load the shared dictionary.
loadBinaryDictionary();
}
- if (mBinaryDictionary != null && !mBinaryDictionary.isValidDictionary()) {
- // Binary dictionary is not valid. Regenerate the dictionary file.
+ if (mBinaryDictionary != null && !(mBinaryDictionary.isValidDictionary()
+ && isValidBinaryDictFormatVersion(
+ mBinaryDictionary.getFormatVersion()))) {
+ // Binary dictionary or its format version is not valid. Regenerate the
+ // dictionary file.
mFilenameDictionaryUpdateController.mLastUpdateTime = time;
writeBinaryDictionary();
loadBinaryDictionary();