Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b4aff97c authored by satok's avatar satok
Browse files

Introduce an API to cancel pending/running spell check tasks

Bug: 5554629

Change-Id: Ifd840ea13976813639a2ee259124a21d9bb56893
parent 76bb11ca
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -24825,6 +24825,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);
+28 −0
Original line number Diff line number Diff line
@@ -145,6 +145,13 @@ public class SpellCheckerSession {
        return mSpellCheckerInfo;
    }

    /**
     * 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);
            }