[RF4] Actually remove ver4 dicts

And fix a couple bugs.

Bug: 11281748
Change-Id: If07953a4b1ff9eb1165af03fdb332d7e47cd8f32
This commit is contained in:
Jean Chalard 2013-12-06 15:05:52 +09:00
parent a72e8f1ede
commit c5db41a9d5
4 changed files with 62 additions and 15 deletions

View file

@ -16,6 +16,8 @@
package com.android.inputmethod.latin;
import com.android.inputmethod.latin.utils.FileUtils;
import java.io.File;
/**
@ -58,6 +60,6 @@ public final class AssetFileAddress {
}
public void deleteUnderlyingFile() {
new File(mFilename).delete();
FileUtils.deleteRecursively(new File(mFilename));
}
}

View file

@ -27,6 +27,7 @@ import com.android.inputmethod.latin.makedict.FormatSpec;
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.FileUtils;
import com.android.inputmethod.latin.utils.PrioritizedSerialExecutor;
import java.io.File;
@ -568,7 +569,9 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
|| !matchesExpectedBinaryDictFormatVersionForThisType(
mBinaryDictionary.getFormatVersion())) {
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(),
DICTIONARY_FORMAT_VERSION, getHeaderAttributeMap());
} else {
@ -664,17 +667,26 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
// load the shared dictionary.
loadBinaryDictionary();
}
// If we just loaded the binary dictionary, then mBinaryDictionary is not
// up-to-date yet so it's useless to test it right away. Schedule the check
// for right after it's loaded instead.
getExecutor(mFilename).executePrioritized(new Runnable() {
@Override
public void run() {
if (mBinaryDictionary != null && !(isValidDictionary()
// TODO: remove the check below
&& matchesExpectedBinaryDictFormatVersionForThisType(
mBinaryDictionary.getFormatVersion()))) {
// Binary dictionary or its format version is not valid. Regenerate the
// dictionary file.
// 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 {
mFilenameDictionaryUpdateController.mProcessingLargeTask.set(false);
}

View 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();
}
}

View file

@ -116,10 +116,10 @@ const char *const HeaderReadWriteUtils::REQUIRES_FRENCH_LIGATURE_PROCESSING_KEY
// Version 2 dictionary writing is not supported.
return false;
case FormatUtils::VERSION_3:
return buffer->writeUintAndAdvancePosition(3 /* data */,
return buffer->writeUintAndAdvancePosition(FormatUtils::VERSION_3 /* data */,
HEADER_DICTIONARY_VERSION_SIZE, writingPos);
case FormatUtils::VERSION_4:
return buffer->writeUintAndAdvancePosition(4 /* data */,
return buffer->writeUintAndAdvancePosition(FormatUtils::VERSION_4 /* data */,
HEADER_DICTIONARY_VERSION_SIZE, writingPos);
default:
return false;