Fix a unit test
When switching languages, we need to wait until the dictionary is loaded to compute suggestions. Change-Id: I7c32a900b297cd6302bfdc020842581315f3007f
This commit is contained in:
parent
943e91ffbd
commit
fa4c59f9b6
3 changed files with 52 additions and 14 deletions
|
@ -112,6 +112,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
|||
|
||||
private static final int PENDING_IMS_CALLBACK_DURATION = 800;
|
||||
|
||||
private static final int DELAY_WAIT_FOR_DICTIONARY_LOAD = 2000; // 2s
|
||||
|
||||
private static final int PERIOD_FOR_AUDIO_AND_HAPTIC_FEEDBACK_IN_KEY_REPEAT = 2;
|
||||
|
||||
/**
|
||||
|
@ -171,8 +173,9 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
|||
private static final int MSG_REOPEN_DICTIONARIES = 5;
|
||||
private static final int MSG_UPDATE_TAIL_BATCH_INPUT_COMPLETED = 6;
|
||||
private static final int MSG_RESET_CACHES = 7;
|
||||
private static final int MSG_WAIT_FOR_DICTIONARY_LOAD = 8;
|
||||
// Update this when adding new messages
|
||||
private static final int MSG_LAST = MSG_RESET_CACHES;
|
||||
private static final int MSG_LAST = MSG_WAIT_FOR_DICTIONARY_LOAD;
|
||||
|
||||
private static final int ARG1_NOT_GESTURE_INPUT = 0;
|
||||
private static final int ARG1_DISMISS_GESTURE_FLOATING_PREVIEW_TEXT = 1;
|
||||
|
@ -234,7 +237,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
|||
latinIme.resetSuggest();
|
||||
// We need to re-evaluate the currently composing word in case the script has
|
||||
// changed.
|
||||
postResumeSuggestions(true /* shouldIncludeResumedWordInSuggestions */);
|
||||
postWaitForDictionaryLoad();
|
||||
break;
|
||||
case MSG_UPDATE_TAIL_BATCH_INPUT_COMPLETED:
|
||||
latinIme.mInputLogic.onUpdateTailBatchInputCompleted(
|
||||
|
@ -253,6 +256,9 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
|||
latinIme.getCurrentRecapitalizeState());
|
||||
}
|
||||
break;
|
||||
case MSG_WAIT_FOR_DICTIONARY_LOAD:
|
||||
Log.i(TAG, "Timeout waiting for dictionary load");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -264,7 +270,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
|||
sendMessage(obtainMessage(MSG_REOPEN_DICTIONARIES));
|
||||
}
|
||||
|
||||
public void postResumeSuggestions(final boolean shouldIncludeResumedWordInSuggestions) {
|
||||
public void postResumeSuggestions(final boolean shouldIncludeResumedWordInSuggestions,
|
||||
final boolean shouldDelay) {
|
||||
final LatinIME latinIme = getOwnerInstance();
|
||||
if (latinIme == null) {
|
||||
return;
|
||||
|
@ -274,10 +281,16 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
|||
return;
|
||||
}
|
||||
removeMessages(MSG_RESUME_SUGGESTIONS);
|
||||
if (shouldDelay) {
|
||||
sendMessageDelayed(obtainMessage(MSG_RESUME_SUGGESTIONS,
|
||||
shouldIncludeResumedWordInSuggestions ? ARG1_TRUE : ARG1_FALSE,
|
||||
0 /* ignored */),
|
||||
mDelayUpdateSuggestions);
|
||||
} else {
|
||||
sendMessage(obtainMessage(MSG_RESUME_SUGGESTIONS,
|
||||
shouldIncludeResumedWordInSuggestions ? ARG1_TRUE : ARG1_FALSE,
|
||||
0 /* ignored */));
|
||||
}
|
||||
}
|
||||
|
||||
public void postResetCaches(final boolean tryResumeSuggestions, final int remainingTries) {
|
||||
|
@ -286,6 +299,19 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
|||
remainingTries, null));
|
||||
}
|
||||
|
||||
public void postWaitForDictionaryLoad() {
|
||||
sendMessageDelayed(obtainMessage(MSG_WAIT_FOR_DICTIONARY_LOAD),
|
||||
DELAY_WAIT_FOR_DICTIONARY_LOAD);
|
||||
}
|
||||
|
||||
public void cancelWaitForDictionaryLoad() {
|
||||
removeMessages(MSG_WAIT_FOR_DICTIONARY_LOAD);
|
||||
}
|
||||
|
||||
public boolean hasPendingWaitForDictionaryLoad() {
|
||||
return hasMessages(MSG_WAIT_FOR_DICTIONARY_LOAD);
|
||||
}
|
||||
|
||||
public void cancelUpdateSuggestionStrip() {
|
||||
removeMessages(MSG_UPDATE_SUGGESTION_STRIP);
|
||||
}
|
||||
|
@ -582,6 +608,11 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
|||
if (mainKeyboardView != null) {
|
||||
mainKeyboardView.setMainDictionaryAvailability(isMainDictionaryAvailable);
|
||||
}
|
||||
if (mHandler.hasPendingWaitForDictionaryLoad()) {
|
||||
mHandler.cancelWaitForDictionaryLoad();
|
||||
mHandler.postResumeSuggestions(true /* shouldIncludeResumedWordInSuggestions */,
|
||||
false /* shouldDelay */);
|
||||
}
|
||||
}
|
||||
|
||||
private void resetSuggest() {
|
||||
|
@ -821,7 +852,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
|||
// When rotating, initialSelStart and initialSelEnd sometimes are lying. Make a best
|
||||
// effort to work around this bug.
|
||||
mInputLogic.mConnection.tryFixLyingCursorPosition();
|
||||
mHandler.postResumeSuggestions(true /* shouldIncludeResumedWordInSuggestions */);
|
||||
mHandler.postResumeSuggestions(true /* shouldIncludeResumedWordInSuggestions */,
|
||||
true /* shouldDelay */);
|
||||
canReachInputConnection = true;
|
||||
}
|
||||
|
||||
|
|
|
@ -362,7 +362,8 @@ public final class InputLogic {
|
|||
// The cursor has been moved : we now accept to perform recapitalization
|
||||
mRecapitalizeStatus.enable();
|
||||
// We moved the cursor. If we are touching a word, we need to resume suggestion.
|
||||
mLatinIME.mHandler.postResumeSuggestions(false /* shouldIncludeResumedWordInSuggestions */);
|
||||
mLatinIME.mHandler.postResumeSuggestions(false /* shouldIncludeResumedWordInSuggestions */,
|
||||
true /* shouldDelay */);
|
||||
// Stop the last recapitalization, if started.
|
||||
mRecapitalizeStatus.stop();
|
||||
return true;
|
||||
|
@ -1945,7 +1946,8 @@ public final class InputLogic {
|
|||
if (tryResumeSuggestions) {
|
||||
// This is triggered when starting input anew, so we want to include the resumed
|
||||
// word in suggestions.
|
||||
handler.postResumeSuggestions(true /* shouldIncludeResumedWordInSuggestions */);
|
||||
handler.postResumeSuggestions(true /* shouldIncludeResumedWordInSuggestions */,
|
||||
true /* shouldDelay */);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -631,8 +631,12 @@ public class InputLogicTests extends InputTestsBase {
|
|||
changeLanguage("en");
|
||||
type(WORD_TO_TYPE_FIRST_PART);
|
||||
changeLanguage("fr");
|
||||
runMessages();
|
||||
type(WORD_TO_TYPE_SECOND_PART);
|
||||
assertEquals("Composing continues after switching languages", EXPECTED_RESULT,
|
||||
mEditText.getText().toString());
|
||||
sleep(DELAY_TO_WAIT_FOR_UNDERLINE);
|
||||
runMessages();
|
||||
final SuggestedWords suggestedWords = mLatinIME.getSuggestedWordsForTest();
|
||||
assertEquals("Suggestions updated after switching languages",
|
||||
EXPECTED_RESULT, suggestedWords.size() > 0 ? suggestedWords.getWord(1) : null);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue