Merge "[RF2] Some refactoring and some cleanup"

main
Jean Chalard 2013-12-06 04:30:24 +00:00 committed by Android (Google) Code Review
commit cb27d955f3
5 changed files with 28 additions and 36 deletions

View File

@ -27,15 +27,13 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.Map; import java.util.Map;
// TODO: Quit extending Dictionary after implementing dynamic binary dictionary. abstract public class AbstractDictionaryWriter {
abstract public class AbstractDictionaryWriter extends Dictionary {
/** Used for Log actions from this class */ /** Used for Log actions from this class */
private static final String TAG = AbstractDictionaryWriter.class.getSimpleName(); private static final String TAG = AbstractDictionaryWriter.class.getSimpleName();
private final Context mContext; private final Context mContext;
public AbstractDictionaryWriter(final Context context, final String dictType) { public AbstractDictionaryWriter(final Context context) {
super(dictType);
mContext = context; mContext = context;
} }

View File

@ -43,8 +43,8 @@ public class DictionaryWriter extends AbstractDictionaryWriter {
private FusionDictionary mFusionDictionary; private FusionDictionary mFusionDictionary;
public DictionaryWriter(final Context context, final String dictType) { public DictionaryWriter(final Context context) {
super(context, dictType); super(context);
clear(); clear();
} }
@ -92,18 +92,4 @@ public class DictionaryWriter extends AbstractDictionaryWriter {
} }
dictEncoder.writeDictionary(mFusionDictionary, FORMAT_OPTIONS); dictEncoder.writeDictionary(mFusionDictionary, FORMAT_OPTIONS);
} }
@Override
public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer,
final String prevWord, final ProximityInfo proximityInfo,
boolean blockOffensiveWords, final int[] additionalFeaturesOptions) {
// This class doesn't support suggestion.
return null;
}
@Override
public boolean isValidWord(String word) {
// This class doesn't support dictionary retrieval.
return false;
}
} }

View File

@ -28,7 +28,6 @@ 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.PrioritizedSerialExecutor; import com.android.inputmethod.latin.utils.PrioritizedSerialExecutor;
import com.android.inputmethod.latin.utils.StringUtils;
import java.io.File; import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
@ -66,9 +65,6 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
private static final int DICTIONARY_FORMAT_VERSION = 4; private static final int DICTIONARY_FORMAT_VERSION = 4;
private static final String SUPPORTS_DYNAMIC_UPDATE =
FormatSpec.FileHeader.ATTRIBUTE_VALUE_TRUE;
/** /**
* A static map of update controllers, each of which records the time of accesses to a single * A static map of update controllers, each of which records the time of accesses to a single
* binary dictionary file and tracks whether the file is regenerating. The key for this map is * binary dictionary file and tracks whether the file is regenerating. The key for this map is
@ -135,11 +131,18 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
*/ */
protected abstract boolean hasContentChanged(); protected abstract boolean hasContentChanged();
protected boolean isValidBinaryDictFormatVersion(final int formatVersion) { protected boolean matchesExpectedBinaryDictFormatVersionForThisType(final int formatVersion) {
// TODO: Use ver4 format. // This class is using format 2 because it's used by the User and Contacts dictionary
// only, which right now use format 2 (dicts using format 4 use Decaying*, which overrides
// this method).
// TODO: Migrate these dicts to ver4 format, and remove this function.
return formatVersion == 2; return formatVersion == 2;
} }
public boolean hasValidContents() {
return mBinaryDictionary.hasValidContents();
}
protected String getFileNameExtentionToOpenDict() { protected String getFileNameExtentionToOpenDict() {
return ""; return "";
} }
@ -174,11 +177,11 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
} }
private static AbstractDictionaryWriter getDictionaryWriter(final Context context, private static AbstractDictionaryWriter getDictionaryWriter(final Context context,
final String dictType, final boolean isDynamicPersonalizationDictionary) { final boolean isDynamicPersonalizationDictionary) {
if (isDynamicPersonalizationDictionary) { if (isDynamicPersonalizationDictionary) {
return null; return null;
} else { } else {
return new DictionaryWriter(context, dictType); return new DictionaryWriter(context);
} }
} }
@ -203,7 +206,7 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
mBinaryDictionary = null; mBinaryDictionary = null;
mFilenameDictionaryUpdateController = getDictionaryUpdateController(filename); mFilenameDictionaryUpdateController = getDictionaryUpdateController(filename);
// Currently, only dynamic personalization dictionary is updatable. // Currently, only dynamic personalization dictionary is updatable.
mDictionaryWriter = getDictionaryWriter(context, dictType, isUpdatable); mDictionaryWriter = getDictionaryWriter(context, isUpdatable);
} }
protected static String getFilenameWithLocale(final String name, final Locale locale) { protected static String getFilenameWithLocale(final String name, final Locale locale) {
@ -222,9 +225,6 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
mBinaryDictionary.close(); mBinaryDictionary.close();
mBinaryDictionary = null; mBinaryDictionary = null;
} }
if (mDictionaryWriter != null) {
mDictionaryWriter.close();
}
} }
}); });
} }
@ -564,7 +564,10 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
mDictionaryWriter.write(mFilename, getHeaderAttributeMap()); mDictionaryWriter.write(mFilename, getHeaderAttributeMap());
} else { } else {
if (mBinaryDictionary == null || !mBinaryDictionary.isValidDictionary() if (mBinaryDictionary == null || !mBinaryDictionary.isValidDictionary()
|| !isValidBinaryDictFormatVersion(mBinaryDictionary.getFormatVersion())) { || !hasValidContents()
// TODO: remove the check below
|| !matchesExpectedBinaryDictFormatVersionForThisType(
mBinaryDictionary.getFormatVersion())) {
final File file = new File(mContext.getFilesDir(), mFilename); final File file = new File(mContext.getFilesDir(), mFilename);
file.delete(); file.delete();
BinaryDictionary.createEmptyDictFile(file.getAbsolutePath(), BinaryDictionary.createEmptyDictFile(file.getAbsolutePath(),
@ -663,7 +666,9 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
loadBinaryDictionary(); loadBinaryDictionary();
} }
if (mBinaryDictionary != null && !(mBinaryDictionary.isValidDictionary() if (mBinaryDictionary != null && !(mBinaryDictionary.isValidDictionary()
&& isValidBinaryDictFormatVersion( && hasValidContents()
// TODO: remove the check below
&& matchesExpectedBinaryDictFormatVersionForThisType(
mBinaryDictionary.getFormatVersion()))) { mBinaryDictionary.getFormatVersion()))) {
// Binary dictionary or its format version is not valid. Regenerate the // Binary dictionary or its format version is not valid. Regenerate the
// dictionary file. // dictionary file.

View File

@ -114,8 +114,10 @@ public abstract class DecayingExpandableBinaryDictionaryBase extends ExpandableB
} }
@Override @Override
protected boolean isValidBinaryDictFormatVersion(final int formatVersion) { protected boolean matchesExpectedBinaryDictFormatVersionForThisType(final int formatVersion) {
return formatVersion >= REQUIRED_BINARY_DICTIONARY_VERSION; // This class is using format 4 because it's used by all version 4 dictionaries.
// TODO: remove this when all dynamically generated dicts use version 4.
return formatVersion == REQUIRED_BINARY_DICTIONARY_VERSION;
} }
@Override @Override

View File

@ -49,6 +49,7 @@ public final class DictionaryPool extends LinkedBlockingQueue<DictAndKeyboard> {
final static ArrayList<SuggestedWordInfo> noSuggestions = CollectionUtils.newArrayList(); final static ArrayList<SuggestedWordInfo> noSuggestions = CollectionUtils.newArrayList();
private final static DictAndKeyboard dummyDict = new DictAndKeyboard( private final static DictAndKeyboard dummyDict = new DictAndKeyboard(
new Dictionary(Dictionary.TYPE_MAIN) { new Dictionary(Dictionary.TYPE_MAIN) {
// TODO: this dummy dictionary should be a singleton in the Dictionary class.
@Override @Override
public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer, public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer,
final String prevWord, final ProximityInfo proximityInfo, final String prevWord, final ProximityInfo proximityInfo,