[RF4] Actually remove ver4 dicts
And fix a couple bugs. Bug: 11281748 Change-Id: If07953a4b1ff9eb1165af03fdb332d7e47cd8f32
This commit is contained in:
parent
a72e8f1ede
commit
c5db41a9d5
4 changed files with 62 additions and 15 deletions
|
@ -16,6 +16,8 @@
|
||||||
|
|
||||||
package com.android.inputmethod.latin;
|
package com.android.inputmethod.latin;
|
||||||
|
|
||||||
|
import com.android.inputmethod.latin.utils.FileUtils;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -58,6 +60,6 @@ public final class AssetFileAddress {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void deleteUnderlyingFile() {
|
public void deleteUnderlyingFile() {
|
||||||
new File(mFilename).delete();
|
FileUtils.deleteRecursively(new File(mFilename));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,7 @@ import com.android.inputmethod.latin.makedict.FormatSpec;
|
||||||
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
|
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
|
||||||
import com.android.inputmethod.latin.utils.AsyncResultHolder;
|
import com.android.inputmethod.latin.utils.AsyncResultHolder;
|
||||||
import com.android.inputmethod.latin.utils.CollectionUtils;
|
import com.android.inputmethod.latin.utils.CollectionUtils;
|
||||||
|
import com.android.inputmethod.latin.utils.FileUtils;
|
||||||
import com.android.inputmethod.latin.utils.PrioritizedSerialExecutor;
|
import com.android.inputmethod.latin.utils.PrioritizedSerialExecutor;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
@ -568,7 +569,9 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
|
||||||
|| !matchesExpectedBinaryDictFormatVersionForThisType(
|
|| !matchesExpectedBinaryDictFormatVersionForThisType(
|
||||||
mBinaryDictionary.getFormatVersion())) {
|
mBinaryDictionary.getFormatVersion())) {
|
||||||
final File file = new File(mContext.getFilesDir(), mFilename);
|
final File file = new File(mContext.getFilesDir(), mFilename);
|
||||||
file.delete();
|
if (!FileUtils.deleteRecursively(file)) {
|
||||||
|
Log.e(TAG, "Can't remove a file: " + file.getName());
|
||||||
|
}
|
||||||
BinaryDictionary.createEmptyDictFile(file.getAbsolutePath(),
|
BinaryDictionary.createEmptyDictFile(file.getAbsolutePath(),
|
||||||
DICTIONARY_FORMAT_VERSION, getHeaderAttributeMap());
|
DICTIONARY_FORMAT_VERSION, getHeaderAttributeMap());
|
||||||
} else {
|
} else {
|
||||||
|
@ -664,17 +667,26 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
|
||||||
// load the shared dictionary.
|
// load the shared dictionary.
|
||||||
loadBinaryDictionary();
|
loadBinaryDictionary();
|
||||||
}
|
}
|
||||||
if (mBinaryDictionary != null && !(isValidDictionary()
|
// If we just loaded the binary dictionary, then mBinaryDictionary is not
|
||||||
// TODO: remove the check below
|
// up-to-date yet so it's useless to test it right away. Schedule the check
|
||||||
&& matchesExpectedBinaryDictFormatVersionForThisType(
|
// for right after it's loaded instead.
|
||||||
mBinaryDictionary.getFormatVersion()))) {
|
getExecutor(mFilename).executePrioritized(new Runnable() {
|
||||||
// Binary dictionary or its format version is not valid. Regenerate the
|
@Override
|
||||||
// dictionary file.
|
public void run() {
|
||||||
mFilenameDictionaryUpdateController.mLastUpdateTime = time;
|
if (mBinaryDictionary != null && !(isValidDictionary()
|
||||||
writeBinaryDictionary();
|
// TODO: remove the check below
|
||||||
loadBinaryDictionary();
|
&& matchesExpectedBinaryDictFormatVersionForThisType(
|
||||||
}
|
mBinaryDictionary.getFormatVersion()))) {
|
||||||
mPerInstanceDictionaryUpdateController.mLastUpdateTime = time;
|
// Binary dictionary or its format version is not valid. Regenerate
|
||||||
|
// the dictionary file. writeBinaryDictionary will remove the
|
||||||
|
// existing files if appropriate.
|
||||||
|
mFilenameDictionaryUpdateController.mLastUpdateTime = time;
|
||||||
|
writeBinaryDictionary();
|
||||||
|
loadBinaryDictionary();
|
||||||
|
}
|
||||||
|
mPerInstanceDictionaryUpdateController.mLastUpdateTime = time;
|
||||||
|
}
|
||||||
|
});
|
||||||
} finally {
|
} finally {
|
||||||
mFilenameDictionaryUpdateController.mProcessingLargeTask.set(false);
|
mFilenameDictionaryUpdateController.mProcessingLargeTask.set(false);
|
||||||
}
|
}
|
||||||
|
|
33
java/src/com/android/inputmethod/latin/utils/FileUtils.java
Normal file
33
java/src/com/android/inputmethod/latin/utils/FileUtils.java
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2013 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||||||
|
* use this file except in compliance with the License. You may obtain a copy of
|
||||||
|
* the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations under
|
||||||
|
* the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.inputmethod.latin.utils;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A simple class to help with removing directories recursively.
|
||||||
|
*/
|
||||||
|
public class FileUtils {
|
||||||
|
public static boolean deleteRecursively(final File path) {
|
||||||
|
if (path.isDirectory()) {
|
||||||
|
for (final File child : path.listFiles()) {
|
||||||
|
deleteRecursively(child);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return path.delete();
|
||||||
|
}
|
||||||
|
}
|
|
@ -116,10 +116,10 @@ const char *const HeaderReadWriteUtils::REQUIRES_FRENCH_LIGATURE_PROCESSING_KEY
|
||||||
// Version 2 dictionary writing is not supported.
|
// Version 2 dictionary writing is not supported.
|
||||||
return false;
|
return false;
|
||||||
case FormatUtils::VERSION_3:
|
case FormatUtils::VERSION_3:
|
||||||
return buffer->writeUintAndAdvancePosition(3 /* data */,
|
return buffer->writeUintAndAdvancePosition(FormatUtils::VERSION_3 /* data */,
|
||||||
HEADER_DICTIONARY_VERSION_SIZE, writingPos);
|
HEADER_DICTIONARY_VERSION_SIZE, writingPos);
|
||||||
case FormatUtils::VERSION_4:
|
case FormatUtils::VERSION_4:
|
||||||
return buffer->writeUintAndAdvancePosition(4 /* data */,
|
return buffer->writeUintAndAdvancePosition(FormatUtils::VERSION_4 /* data */,
|
||||||
HEADER_DICTIONARY_VERSION_SIZE, writingPos);
|
HEADER_DICTIONARY_VERSION_SIZE, writingPos);
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in a new issue