diff options
Diffstat (limited to 'java/src/com/android/inputmethod/latin/inputlogic')
-rw-r--r-- | java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java | 36 | ||||
-rw-r--r-- | java/src/com/android/inputmethod/latin/inputlogic/InputLogicHandler.java | 49 |
2 files changed, 63 insertions, 22 deletions
diff --git a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java index df34687e3..4a4abd7d2 100644 --- a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java +++ b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java @@ -44,12 +44,10 @@ import com.android.inputmethod.latin.SuggestedWords; import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo; import com.android.inputmethod.latin.WordComposer; import com.android.inputmethod.latin.define.ProductionFlag; -import com.android.inputmethod.latin.personalization.UserHistoryDictionary; import com.android.inputmethod.latin.settings.Settings; import com.android.inputmethod.latin.settings.SettingsValues; import com.android.inputmethod.latin.suggestions.SuggestionStripView; import com.android.inputmethod.latin.utils.AsyncResultHolder; -import com.android.inputmethod.latin.utils.AutoCorrectionUtils; import com.android.inputmethod.latin.utils.CollectionUtils; import com.android.inputmethod.latin.utils.InputTypeUtils; import com.android.inputmethod.latin.utils.LatinImeLoggerUtils; @@ -60,7 +58,6 @@ import com.android.inputmethod.research.ResearchLogger; import java.util.ArrayList; import java.util.TreeSet; -import java.util.concurrent.TimeUnit; /** * This class manages the input logic. @@ -71,6 +68,8 @@ public final class InputLogic { // TODO : Remove this member when we can. private final LatinIME mLatinIME; + private InputLogicHandler mInputLogicHandler; + // TODO : make all these fields private as soon as possible. // Current space state of the input method. This can be any of the above constants. public int mSpaceState; @@ -105,6 +104,7 @@ public final class InputLogic { mWordComposer = new WordComposer(); mEventInterpreter = new EventInterpreter(latinIME); mConnection = new RichInputConnection(latinIME); + mInputLogicHandler = null; } /** @@ -119,12 +119,15 @@ public final class InputLogic { * @param restarting whether input is starting in the same field as before. */ public void startInput(final boolean restarting) { + mInputLogicHandler = new InputLogicHandler(); } /** * Clean up the input logic after input is finished. */ public void finishInput() { + mInputLogicHandler.destroy(); + mInputLogicHandler = null; } /** @@ -300,6 +303,8 @@ public final class InputLogic { final KeyboardSwitcher keyboardSwitcher, final LatinIME.UIHandler handler, final LatinIME.InputUpdater inputUpdater) { inputUpdater.onStartBatchInput(); + handler.showGesturePreviewAndSuggestionStrip( + SuggestedWords.EMPTY, false /* dismissGestureFloatingPreviewText */); handler.cancelUpdateSuggestionStrip(); mConnection.beginBatchEdit(); if (mWordComposer.isComposingWord()) { @@ -400,9 +405,12 @@ public final class InputLogic { inputUpdater.onEndBatchInput(batchPointers); } - // TODO: remove this argument - public void onCancelBatchInput(final LatinIME.InputUpdater inputUpdater) { + // TODO: remove these arguments + public void onCancelBatchInput(final LatinIME.UIHandler handler, + final LatinIME.InputUpdater inputUpdater) { inputUpdater.onCancelBatchInput(); + handler.showGesturePreviewAndSuggestionStrip( + SuggestedWords.EMPTY, true /* dismissGestureFloatingPreviewText */); } /** @@ -977,24 +985,8 @@ public final class InputLogic { final Suggest suggest = mSuggest; if (suggest == null) return null; - final UserHistoryDictionary userHistoryDictionary = suggest.getUserHistoryDictionary(); - if (userHistoryDictionary == null) return null; - final String prevWord = mConnection.getNthPreviousWord(settingsValues, 2); - final String secondWord; - if (mWordComposer.wasAutoCapitalized() && !mWordComposer.isMostlyCaps()) { - secondWord = suggestion.toLowerCase(settingsValues.mLocale); - } else { - secondWord = suggestion; - } - // We demote unrecognized words (frequency < 0, below) by specifying them as "invalid". - // We don't add words with 0-frequency (assuming they would be profanity etc.). - final int maxFreq = AutoCorrectionUtils.getMaxFrequency( - suggest.getUnigramDictionaries(), suggestion); - if (maxFreq == 0) return null; - userHistoryDictionary.addToDictionary(prevWord, secondWord, maxFreq > 0, - (int)TimeUnit.MILLISECONDS.toSeconds((System.currentTimeMillis()))); - return prevWord; + return suggest.addToUserHistory(mWordComposer, prevWord, suggestion); } public void performUpdateSuggestionStripSync(final SettingsValues settingsValues, diff --git a/java/src/com/android/inputmethod/latin/inputlogic/InputLogicHandler.java b/java/src/com/android/inputmethod/latin/inputlogic/InputLogicHandler.java new file mode 100644 index 000000000..d611e4bf8 --- /dev/null +++ b/java/src/com/android/inputmethod/latin/inputlogic/InputLogicHandler.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2013 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.inputlogic; + +import android.os.Handler; +import android.os.HandlerThread; +import android.os.Message; + +/** + * A helper to manage deferred tasks for the input logic. + */ +// TODO: Make this package private +public class InputLogicHandler implements Handler.Callback { + final Handler mNonUIThreadHandler; + + public InputLogicHandler() { + final HandlerThread handlerThread = new HandlerThread( + InputLogicHandler.class.getSimpleName()); + handlerThread.start(); + mNonUIThreadHandler = new Handler(handlerThread.getLooper(), this); + } + + public void destroy() { + mNonUIThreadHandler.getLooper().quit(); + } + + /** + * Handle a message. + * @see android.os.Handler.Callback#handleMessage(android.os.Message) + */ + @Override + public boolean handleMessage(final Message msg) { + return true; + } +} |