resolved conflicts for merge of d711426a
to mnc-dev-plus-aosp
Change-Id: I3d92549eb41e4f28d141bb1c218e56a8075edb1fmain
commit
c96aef2283
|
@ -51,4 +51,9 @@ public class FileUtils {
|
||||||
}
|
}
|
||||||
return hasDeletedAllFiles;
|
return hasDeletedAllFiles;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean renameTo(final File fromFile, final File toFile) {
|
||||||
|
toFile.delete();
|
||||||
|
return fromFile.renameTo(toFile);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,7 @@ import android.os.RemoteException;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.android.inputmethod.latin.common.FileUtils;
|
||||||
import com.android.inputmethod.dictionarypack.DictionaryPackConstants;
|
import com.android.inputmethod.dictionarypack.DictionaryPackConstants;
|
||||||
import com.android.inputmethod.dictionarypack.MD5Calculator;
|
import com.android.inputmethod.dictionarypack.MD5Calculator;
|
||||||
import com.android.inputmethod.latin.define.DecoderSpecificConstants;
|
import com.android.inputmethod.latin.define.DecoderSpecificConstants;
|
||||||
|
@ -321,10 +322,11 @@ public final class BinaryDictionaryFileDumper {
|
||||||
}
|
}
|
||||||
|
|
||||||
final File finalFile = new File(finalFileName);
|
final File finalFile = new File(finalFileName);
|
||||||
finalFile.delete();
|
if (!FileUtils.renameTo(outputFile, finalFile)) {
|
||||||
if (!outputFile.renameTo(finalFile)) {
|
Log.e(TAG, String.format("Failed to rename from %s to %s.",
|
||||||
throw new IOException("Can't move the file to its final name");
|
outputFile.getAbsoluteFile(), finalFile.getAbsoluteFile()));
|
||||||
}
|
}
|
||||||
|
|
||||||
wordListUriBuilder.appendQueryParameter(QUERY_PARAMETER_DELETE_RESULT,
|
wordListUriBuilder.appendQueryParameter(QUERY_PARAMETER_DELETE_RESULT,
|
||||||
QUERY_PARAMETER_SUCCESS);
|
QUERY_PARAMETER_SUCCESS);
|
||||||
if (0 >= providerClient.delete(wordListUriBuilder.build(), null, null)) {
|
if (0 >= providerClient.delete(wordListUriBuilder.build(), null, null)) {
|
||||||
|
|
|
@ -30,6 +30,7 @@ import com.android.inputmethod.latin.AssetFileAddress;
|
||||||
import com.android.inputmethod.latin.BinaryDictionaryGetter;
|
import com.android.inputmethod.latin.BinaryDictionaryGetter;
|
||||||
import com.android.inputmethod.latin.R;
|
import com.android.inputmethod.latin.R;
|
||||||
import com.android.inputmethod.latin.RichInputMethodManager;
|
import com.android.inputmethod.latin.RichInputMethodManager;
|
||||||
|
import com.android.inputmethod.latin.common.FileUtils;
|
||||||
import com.android.inputmethod.latin.common.LocaleUtils;
|
import com.android.inputmethod.latin.common.LocaleUtils;
|
||||||
import com.android.inputmethod.latin.define.DecoderSpecificConstants;
|
import com.android.inputmethod.latin.define.DecoderSpecificConstants;
|
||||||
import com.android.inputmethod.latin.makedict.DictionaryHeader;
|
import com.android.inputmethod.latin.makedict.DictionaryHeader;
|
||||||
|
@ -102,6 +103,13 @@ public class DictionaryInfoUtils {
|
||||||
values.put(VERSION_COLUMN, mVersion);
|
values.put(VERSION_COLUMN, mVersion);
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "DictionaryInfo : Id = '" + mId
|
||||||
|
+ "' : Locale=" + mLocale
|
||||||
|
+ " : Version=" + mVersion;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private DictionaryInfoUtils() {
|
private DictionaryInfoUtils() {
|
||||||
|
@ -152,6 +160,13 @@ public class DictionaryInfoUtils {
|
||||||
return context.getFilesDir() + File.separator + "dicts";
|
return context.getFilesDir() + File.separator + "dicts";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper method to get the top level cache directory.
|
||||||
|
*/
|
||||||
|
public static String getWordListStagingDirectory(final Context context) {
|
||||||
|
return context.getFilesDir() + File.separator + "staging";
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper method to get the top level temp directory.
|
* Helper method to get the top level temp directory.
|
||||||
*/
|
*/
|
||||||
|
@ -188,6 +203,10 @@ public class DictionaryInfoUtils {
|
||||||
return new File(DictionaryInfoUtils.getWordListCacheDirectory(context)).listFiles();
|
return new File(DictionaryInfoUtils.getWordListCacheDirectory(context)).listFiles();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static File[] getStagingDirectoryList(final Context context) {
|
||||||
|
return new File(DictionaryInfoUtils.getWordListStagingDirectory(context)).listFiles();
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public static File[] getUnusedDictionaryList(final Context context) {
|
public static File[] getUnusedDictionaryList(final Context context) {
|
||||||
return context.getFilesDir().listFiles(new FilenameFilter() {
|
return context.getFilesDir().listFiles(new FilenameFilter() {
|
||||||
|
@ -254,6 +273,55 @@ public class DictionaryInfoUtils {
|
||||||
return getCacheDirectoryForLocale(locale, context) + File.separator + fileName;
|
return getCacheDirectoryForLocale(locale, context) + File.separator + fileName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getStagingFileName(String id, String locale, Context context) {
|
||||||
|
final String stagingDirectory = getWordListStagingDirectory(context);
|
||||||
|
// create the directory if it does not exist.
|
||||||
|
final File directory = new File(stagingDirectory);
|
||||||
|
if (!directory.exists()) {
|
||||||
|
if (!directory.mkdirs()) {
|
||||||
|
Log.e(TAG, "Could not create the staging directory.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// e.g. id="main:en_in", locale ="en_IN"
|
||||||
|
final String fileName = replaceFileNameDangerousCharacters(
|
||||||
|
locale + TEMP_DICT_FILE_SUB + id);
|
||||||
|
return stagingDirectory + File.separator + fileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void moveStagingFilesIfExists(Context context) {
|
||||||
|
final File[] stagingFiles = DictionaryInfoUtils.getStagingDirectoryList(context);
|
||||||
|
if (stagingFiles != null && stagingFiles.length > 0) {
|
||||||
|
for (final File stagingFile : stagingFiles) {
|
||||||
|
final String fileName = stagingFile.getName();
|
||||||
|
final int index = fileName.indexOf(TEMP_DICT_FILE_SUB);
|
||||||
|
if (index == -1) {
|
||||||
|
// This should never happen.
|
||||||
|
Log.e(TAG, "Staging file does not have ___ substring.");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
final String[] localeAndFileId = fileName.split(TEMP_DICT_FILE_SUB);
|
||||||
|
if (localeAndFileId.length != 2) {
|
||||||
|
Log.e(TAG, String.format("malformed staging file %s. Deleting.",
|
||||||
|
stagingFile.getAbsoluteFile()));
|
||||||
|
stagingFile.delete();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
final String locale = localeAndFileId[0];
|
||||||
|
// already escaped while moving to staging.
|
||||||
|
final String fileId = localeAndFileId[1];
|
||||||
|
final String cacheDirectoryForLocale = getCacheDirectoryForLocale(locale, context);
|
||||||
|
final String cacheFilename = cacheDirectoryForLocale + File.separator + fileId;
|
||||||
|
final File cacheFile = new File(cacheFilename);
|
||||||
|
// move the staging file to cache file.
|
||||||
|
if (!FileUtils.renameTo(stagingFile, cacheFile)) {
|
||||||
|
Log.e(TAG, String.format("Failed to rename from %s to %s.",
|
||||||
|
stagingFile.getAbsoluteFile(), cacheFile.getAbsoluteFile()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean isMainWordListId(final String id) {
|
public static boolean isMainWordListId(final String id) {
|
||||||
final String[] idArray = id.split(BinaryDictionaryGetter.ID_CATEGORY_SEPARATOR);
|
final String[] idArray = id.split(BinaryDictionaryGetter.ID_CATEGORY_SEPARATOR);
|
||||||
// An id is supposed to be in format category:locale, so splitting on the separator
|
// An id is supposed to be in format category:locale, so splitting on the separator
|
||||||
|
|
Loading…
Reference in New Issue