aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod/latin/BinaryDictionary.java
diff options
context:
space:
mode:
authorSatoshi Kataoka <satok@google.com>2012-08-14 22:49:59 +0900
committerSatoshi Kataoka <satok@google.com>2012-08-15 15:44:45 +0900
commit3979f060f0650cbc117eee0307d05fb0be78c6f2 (patch)
tree67dc373f51dc85b43aa633c6cbf5328de163a404 /java/src/com/android/inputmethod/latin/BinaryDictionary.java
parent05384933097c1e9c35e8be5c03757d072e5ffa46 (diff)
downloadlatinime-3979f060f0650cbc117eee0307d05fb0be78c6f2.tar.gz
latinime-3979f060f0650cbc117eee0307d05fb0be78c6f2.tar.xz
latinime-3979f060f0650cbc117eee0307d05fb0be78c6f2.zip
Step 28-A Introduce the session Id to getSuggestion
Change-Id: I39d9bf1a7c272eb16d6ed4698f52457579b40f10
Diffstat (limited to 'java/src/com/android/inputmethod/latin/BinaryDictionary.java')
-rw-r--r--java/src/com/android/inputmethod/latin/BinaryDictionary.java39
1 files changed, 34 insertions, 5 deletions
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionary.java b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
index f0f5cd320..cdaffa655 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
@@ -18,6 +18,7 @@ package com.android.inputmethod.latin;
import android.content.Context;
import android.text.TextUtils;
+import android.util.SparseArray;
import com.android.inputmethod.keyboard.ProximityInfo;
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
@@ -51,6 +52,7 @@ public class BinaryDictionary extends Dictionary {
private static final int TYPED_LETTER_MULTIPLIER = 2;
private long mNativeDict;
+ private final Locale mLocale;
private final int[] mInputCodePoints = new int[MAX_WORD_LENGTH];
// TODO: The below should be int[] mOutputCodePoints
private final char[] mOutputChars = new char[MAX_WORD_LENGTH * MAX_RESULTS];
@@ -59,7 +61,22 @@ public class BinaryDictionary extends Dictionary {
private final int[] mOutputTypes = new int[MAX_RESULTS];
private final boolean mUseFullEditDistance;
- private final DicTraverseSession mDicTraverseSession;
+
+ private final SparseArray<DicTraverseSession> mDicTraverseSessions =
+ new SparseArray<DicTraverseSession>();
+ private DicTraverseSession getTraverseSession(int traverseSessionId) {
+ DicTraverseSession traverseSession = mDicTraverseSessions.get(traverseSessionId);
+ if (traverseSession == null) {
+ synchronized(mDicTraverseSessions) {
+ traverseSession = mDicTraverseSessions.get(traverseSessionId);
+ if (traverseSession == null) {
+ traverseSession = new DicTraverseSession(mLocale, mNativeDict);
+ mDicTraverseSessions.put(traverseSessionId, traverseSession);
+ }
+ }
+ }
+ return traverseSession;
+ }
/**
* Constructor for the binary dictionary. This is supposed to be called from the
@@ -76,10 +93,9 @@ public class BinaryDictionary extends Dictionary {
final String filename, final long offset, final long length,
final boolean useFullEditDistance, final Locale locale, final String dictType) {
super(dictType);
+ mLocale = locale;
mUseFullEditDistance = useFullEditDistance;
loadDictionary(filename, offset, length);
- mDicTraverseSession = new DicTraverseSession(locale);
- mDicTraverseSession.initSession(mNativeDict);
}
static {
@@ -109,7 +125,14 @@ public class BinaryDictionary extends Dictionary {
@Override
public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer,
final CharSequence prevWord, final ProximityInfo proximityInfo) {
+ return getSuggestionsWithSessionId(composer, prevWord, proximityInfo, 0);
+ }
+
+ @Override
+ public ArrayList<SuggestedWordInfo> getSuggestionsWithSessionId(final WordComposer composer,
+ final CharSequence prevWord, final ProximityInfo proximityInfo, int sessionId) {
if (!isValidDictionary()) return null;
+
Arrays.fill(mInputCodePoints, WordComposer.NOT_A_CODE);
// TODO: toLowerCase in the native code
final int[] prevWordCodePointArray = (null == prevWord)
@@ -128,7 +151,7 @@ public class BinaryDictionary extends Dictionary {
final int codesSize = isGesture ? ips.getPointerSize() : composerSize;
// proximityInfo and/or prevWordForBigrams may not be null.
final int tmpCount = getSuggestionsNative(mNativeDict,
- proximityInfo.getNativeProximityInfo(), mDicTraverseSession.getSession(),
+ proximityInfo.getNativeProximityInfo(), getTraverseSession(sessionId).getSession(),
ips.getXCoordinates(), ips.getYCoordinates(), ips.getTimes(), ips.getPointerIds(),
mInputCodePoints, codesSize, 0 /* commitPoint */, isGesture, prevWordCodePointArray,
mUseFullEditDistance, mOutputChars, mOutputScores, mSpaceIndices, mOutputTypes);
@@ -187,7 +210,13 @@ public class BinaryDictionary extends Dictionary {
@Override
public synchronized void close() {
- mDicTraverseSession.close();
+ for (int i = 0; i < mDicTraverseSessions.size(); ++i) {
+ final int key = mDicTraverseSessions.keyAt(i);
+ final DicTraverseSession traverseSession = mDicTraverseSessions.get(key);
+ if (traverseSession != null) {
+ traverseSession.close();
+ }
+ }
closeInternal();
}