86 lines
3.5 KiB
Java
86 lines
3.5 KiB
Java
|
/*
|
||
|
* Copyright (C) 2014 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 com.android.inputmethod.annotations.UsedForTesting;
|
||
|
import com.android.inputmethod.latin.personalization.PersonalizationHelper;
|
||
|
|
||
|
import java.util.Locale;
|
||
|
import java.util.Map;
|
||
|
|
||
|
public final class BinaryDictionaryUtils {
|
||
|
private static final String TAG = BinaryDictionaryUtils.class.getSimpleName();
|
||
|
|
||
|
private BinaryDictionaryUtils() {
|
||
|
// This utility class is not publicly instantiable.
|
||
|
}
|
||
|
|
||
|
static {
|
||
|
JniUtils.loadNativeLibrary();
|
||
|
}
|
||
|
|
||
|
private static native boolean createEmptyDictFileNative(String filePath, long dictVersion,
|
||
|
String locale, String[] attributeKeyStringArray, String[] attributeValueStringArray);
|
||
|
private static native float calcNormalizedScoreNative(int[] before, int[] after, int score);
|
||
|
private static native int editDistanceNative(int[] before, int[] after);
|
||
|
private static native int setCurrentTimeForTestNative(int currentTime);
|
||
|
|
||
|
public static boolean createEmptyDictFile(final String filePath, final long dictVersion,
|
||
|
final Locale locale, final Map<String, String> attributeMap) {
|
||
|
final String[] keyArray = new String[attributeMap.size()];
|
||
|
final String[] valueArray = new String[attributeMap.size()];
|
||
|
int index = 0;
|
||
|
for (final String key : attributeMap.keySet()) {
|
||
|
keyArray[index] = key;
|
||
|
valueArray[index] = attributeMap.get(key);
|
||
|
index++;
|
||
|
}
|
||
|
return createEmptyDictFileNative(filePath, dictVersion, locale.toString(), keyArray,
|
||
|
valueArray);
|
||
|
}
|
||
|
|
||
|
public static float calcNormalizedScore(final String before, final String after,
|
||
|
final int score) {
|
||
|
return calcNormalizedScoreNative(StringUtils.toCodePointArray(before),
|
||
|
StringUtils.toCodePointArray(after), score);
|
||
|
}
|
||
|
|
||
|
public static int editDistance(final String before, final String after) {
|
||
|
if (before == null || after == null) {
|
||
|
throw new IllegalArgumentException();
|
||
|
}
|
||
|
return editDistanceNative(StringUtils.toCodePointArray(before),
|
||
|
StringUtils.toCodePointArray(after));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Control the current time to be used in the native code. If currentTime >= 0, this method sets
|
||
|
* the current time and gets into test mode.
|
||
|
* In test mode, set timestamp is used as the current time in the native code.
|
||
|
* If currentTime < 0, quit the test mode and returns to using time() to get the current time.
|
||
|
*
|
||
|
* @param currentTime seconds since the unix epoch
|
||
|
* @return current time got in the native code.
|
||
|
*/
|
||
|
@UsedForTesting
|
||
|
public static int setCurrentTimeForTest(final int currentTime) {
|
||
|
final int currentNativeTimestamp = setCurrentTimeForTestNative(currentTime);
|
||
|
PersonalizationHelper.currentTimeChangedForTesting(currentNativeTimestamp);
|
||
|
return currentNativeTimestamp;
|
||
|
}
|
||
|
}
|