summaryrefslogtreecommitdiff
path: root/src/ui
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@gmail.com>2014-03-12 10:54:29 +0000
committerkr.angelov <kr.angelov@gmail.com>2014-03-12 10:54:29 +0000
commit23f603dabcdd6519b9cb85f27906590ad4ed1d8a (patch)
tree9d6e509703b81a5eccd0048286d8d626011f2a24 /src/ui
parentccc43b28f0fe8a4d2cec23fe3e1e73ee4cb829fa (diff)
fixes in the word completion
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/android/src/org/grammaticalframework/ui/android/CompletionsView.java29
-rw-r--r--src/ui/android/src/org/grammaticalframework/ui/android/Translator.java24
-rw-r--r--src/ui/android/src/org/grammaticalframework/ui/android/TranslatorInputMethodService.java41
3 files changed, 44 insertions, 50 deletions
diff --git a/src/ui/android/src/org/grammaticalframework/ui/android/CompletionsView.java b/src/ui/android/src/org/grammaticalframework/ui/android/CompletionsView.java
index ec3b208c8..5aa1a5936 100644
--- a/src/ui/android/src/org/grammaticalframework/ui/android/CompletionsView.java
+++ b/src/ui/android/src/org/grammaticalframework/ui/android/CompletionsView.java
@@ -10,6 +10,7 @@ import android.graphics.drawable.Drawable;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
+import android.view.inputmethod.CompletionInfo;
import java.util.ArrayList;
import java.util.List;
@@ -19,7 +20,7 @@ public class CompletionsView extends View {
private static final int OUT_OF_BOUNDS = -1;
private TranslatorInputMethodService mService;
- private List<String> mSuggestions;
+ private CompletionInfo[] mSuggestions;
private int mSelectedIndex;
private int mTouchX = OUT_OF_BOUNDS;
private Drawable mSelectionHighlight;
@@ -153,7 +154,7 @@ public class CompletionsView extends View {
}
}
int x = 0;
- final int count = mSuggestions.size();
+ final int count = mSuggestions.length;
final int height = getHeight();
final Rect bgPadding = mBgPadding;
final Paint paint = mPaint;
@@ -164,7 +165,7 @@ public class CompletionsView extends View {
final int y = (int) (((height - mPaint.getTextSize()) / 2) - mPaint.ascent());
for (int i = 0; i < count; i++) {
- String suggestion = mSuggestions.get(i);
+ String suggestion = mSuggestions[i].getText().toString();
float textWidth = paint.measureText(suggestion);
final int wordWidth = (int) textWidth + X_GAP * 2;
@@ -222,11 +223,11 @@ public class CompletionsView extends View {
}
@SuppressLint("WrongCall")
- public void setSuggestions(List<String> suggestions, boolean completions,
+ public void setSuggestions(CompletionInfo[] suggestions, boolean completions,
boolean typedWordValid) {
clear();
if (suggestions != null) {
- mSuggestions = new ArrayList<String>(suggestions);
+ mSuggestions = suggestions;
}
mTypedWordValid = typedWordValid;
scrollTo(0, 0);
@@ -238,7 +239,7 @@ public class CompletionsView extends View {
}
public void clear() {
- mSuggestions = EMPTY_LIST;
+ mSuggestions = new CompletionInfo[0];
mTouchX = OUT_OF_BOUNDS;
mSelectedIndex = -1;
invalidate();
@@ -284,22 +285,6 @@ public class CompletionsView extends View {
}
return true;
}
-
- /**
- * For flick through from keyboard, call this method with the x coordinate of the flick
- * gesture.
- * @param x
- */
- @SuppressLint("WrongCall")
- public void takeSuggestionAt(float x) {
- mTouchX = (int) x;
- // To detect candidate
- onDraw(null);
- if (mSelectedIndex >= 0) {
- mService.pickSuggestionManually(mSelectedIndex);
- }
- invalidate();
- }
private void removeHighlight() {
mTouchX = OUT_OF_BOUNDS;
diff --git a/src/ui/android/src/org/grammaticalframework/ui/android/Translator.java b/src/ui/android/src/org/grammaticalframework/ui/android/Translator.java
index b7bb53199..c407718a1 100644
--- a/src/ui/android/src/org/grammaticalframework/ui/android/Translator.java
+++ b/src/ui/android/src/org/grammaticalframework/ui/android/Translator.java
@@ -5,6 +5,7 @@ import android.content.SharedPreferences;
import android.content.res.XmlResourceParser;
import android.text.TextUtils;
import android.util.Log;
+import android.view.inputmethod.CompletionInfo;
import org.grammaticalframework.pgf.Concr;
import org.grammaticalframework.pgf.Expr;
@@ -20,6 +21,7 @@ import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
+import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -332,7 +334,7 @@ public class Translator {
}
}
- public List<String> lookupWordPrefix(String prefix) {
+ public CompletionInfo[] lookupWordPrefix(String prefix) {
PriorityQueue<WordProb> queue = new PriorityQueue<WordProb>();
for (FullFormEntry entry : getSourceConcr().lookupWordPrefix(prefix)) {
WordProb wp = new WordProb();
@@ -348,13 +350,23 @@ public class Translator {
break;
}
- List<String> list = new ArrayList<String>();
- while (list.size() < 5 && queue.size() > 0) {
- list.add(queue.poll().word);
+ CompletionInfo[] completions = new CompletionInfo[Math.min(queue.size(), 5)+1];
+ completions[0] = new CompletionInfo(0, 0, prefix);
+ for (int i = 1; i < completions.length; i++) {
+ completions[i] = new CompletionInfo(i,i,queue.poll().word);
}
- Collections.sort(list);
- return list;
+ if (completions.length > 1) {
+ Arrays.sort(completions, 1, completions.length-1, new Comparator<CompletionInfo>() {
+ @Override
+ public int compare(CompletionInfo arg0, CompletionInfo arg1) {
+ // TODO Auto-generated method stub
+ return ((String) arg0.getText()).compareTo((String) arg1.getText());
+ }
+ });
+ }
+
+ return completions;
}
private PGF getGrammar() {
diff --git a/src/ui/android/src/org/grammaticalframework/ui/android/TranslatorInputMethodService.java b/src/ui/android/src/org/grammaticalframework/ui/android/TranslatorInputMethodService.java
index d88215008..932cba928 100644
--- a/src/ui/android/src/org/grammaticalframework/ui/android/TranslatorInputMethodService.java
+++ b/src/ui/android/src/org/grammaticalframework/ui/android/TranslatorInputMethodService.java
@@ -241,12 +241,7 @@ public class TranslatorInputMethodService extends InputMethodService
return;
}
- List<String> stringList = new ArrayList<String>();
- for (int i = 0; i < completions.length; i++) {
- CompletionInfo ci = completions[i];
- if (ci != null) stringList.add(ci.getText().toString());
- }
- setSuggestions(stringList, true, true);
+ setSuggestions(completions, true, true);
}
}
@@ -438,11 +433,10 @@ public class TranslatorInputMethodService extends InputMethodService
*/
private void updateCandidates() {
if (!mCompletionOn) {
- if (mComposing.length() > 0) {
- List<String> list =
+ if (mComposing.length() > 1) {
+ mCompletions =
mTranslator.lookupWordPrefix(mComposing.toString());
- list.add(0, mComposing.toString());
- setSuggestions(list, true, true);
+ setSuggestions(mCompletions, true, true);
Log.d("KEYBOARD", mComposing.toString());
} else {
setSuggestions(null, false, false);
@@ -450,15 +444,15 @@ public class TranslatorInputMethodService extends InputMethodService
}
}
- public void setSuggestions(List<String> suggestions, boolean completions,
+ public void setSuggestions(CompletionInfo[] completions, boolean isCompletions,
boolean typedWordValid) {
- if (suggestions != null && suggestions.size() > 0) {
+ if (completions != null && completions.length > 0) {
setCandidatesViewShown(true);
} else if (isExtractViewShown()) {
setCandidatesViewShown(true);
}
if (mCandidateView != null) {
- mCandidateView.setSuggestions(suggestions, completions, typedWordValid);
+ mCandidateView.setSuggestions(completions, isCompletions, typedWordValid);
}
}
@@ -590,19 +584,22 @@ public class TranslatorInputMethodService extends InputMethodService
}
public void pickSuggestionManually(int index) {
- if (mCompletionOn && mCompletions != null && index >= 0
- && index < mCompletions.length) {
- CompletionInfo ci = mCompletions[index];
- getCurrentInputConnection().commitCompletion(ci);
+ if (mCompletions != null &&
+ index >= 0 && index < mCompletions.length) {
+ CompletionInfo ci = mCompletions[index];
+
+ if (mCompletionOn)
+ getCurrentInputConnection().commitCompletion(ci);
+ else {
+ mComposing.setLength(0);
+ mComposing.append(ci.getText());
+ commitTyped(getCurrentInputConnection());
+ }
+
if (mCandidateView != null) {
mCandidateView.clear();
}
updateShiftKeyState(getCurrentInputEditorInfo());
- } else if (mComposing.length() > 0) {
- // If we were generating candidate suggestions for the current
- // text, we would commit one of them here. But for this sample,
- // we will just commit the current text.
- commitTyped(getCurrentInputConnection());
}
}