summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsatok <satok@google.com>2011-11-09 21:26:46 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-11-09 21:26:46 -0800
commit114c4d3843758a2a1ffb32eb2719d65cdee637f8 (patch)
treec3ff7f7838686a857149334e67a4b3d20e339c14
parentbca520a170f84c8be840e629841d0dc7d7cb273b (diff)
parentb4aff97c85e730857893742f73a082f6b8d139ca (diff)
downloadframeworks_base-114c4d3843758a2a1ffb32eb2719d65cdee637f8.zip
frameworks_base-114c4d3843758a2a1ffb32eb2719d65cdee637f8.tar.gz
frameworks_base-114c4d3843758a2a1ffb32eb2719d65cdee637f8.tar.bz2
Merge "Introduce an API to cancel pending/running spell check tasks" into ics-mr1
-rw-r--r--api/current.txt1
-rw-r--r--core/java/android/view/textservice/SpellCheckerSession.java28
2 files changed, 29 insertions, 0 deletions
diff --git a/api/current.txt b/api/current.txt
index daf1036..f07e66b 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -24830,6 +24830,7 @@ package android.view.textservice {
}
public class SpellCheckerSession {
+ method public void cancel();
method public void close();
method public android.view.textservice.SpellCheckerInfo getSpellChecker();
method public void getSuggestions(android.view.textservice.TextInfo, int);
diff --git a/core/java/android/view/textservice/SpellCheckerSession.java b/core/java/android/view/textservice/SpellCheckerSession.java
index 01b114c..0eb6e27 100644
--- a/core/java/android/view/textservice/SpellCheckerSession.java
+++ b/core/java/android/view/textservice/SpellCheckerSession.java
@@ -146,6 +146,13 @@ public class SpellCheckerSession {
}
/**
+ * Cancel pending and running spell check tasks
+ */
+ public void cancel() {
+ mSpellCheckerSessionListenerImpl.cancel();
+ }
+
+ /**
* Finish this session and allow TextServicesManagerService to disconnect the bound spell
* checker.
*/
@@ -242,6 +249,13 @@ public class SpellCheckerSession {
}
}
+ public void cancel() {
+ if (DBG) {
+ Log.w(TAG, "cancel");
+ }
+ processOrEnqueueTask(new SpellCheckerParams(TASK_CANCEL, null, 0, false));
+ }
+
public void getSuggestionsMultiple(
TextInfo[] textInfos, int suggestionsLimit, boolean sequentialWords) {
if (DBG) {
@@ -275,8 +289,22 @@ public class SpellCheckerSession {
if (DBG) {
Log.d(TAG, "process or enqueue task: " + mISpellCheckerSession);
}
+ SpellCheckerParams closeTask = null;
if (mISpellCheckerSession == null) {
+ if (scp.mWhat == TASK_CANCEL) {
+ while (!mPendingTasks.isEmpty()) {
+ final SpellCheckerParams tmp = mPendingTasks.poll();
+ if (tmp.mWhat == TASK_CLOSE) {
+ // Only one close task should be processed, while we need to remove all
+ // close tasks from the queue
+ closeTask = tmp;
+ }
+ }
+ }
mPendingTasks.offer(scp);
+ if (closeTask != null) {
+ mPendingTasks.offer(closeTask);
+ }
} else {
processTask(scp);
}