[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; 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));
} }
} }

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.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);
} }

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. // 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;