Merge "add logPoint for manual correction (inc touch pos)"

main
Kurt Partridge 2012-04-16 20:36:24 -07:00 committed by Android (Google) Code Review
commit 40edd14c15
7 changed files with 77 additions and 30 deletions

View File

@ -1817,7 +1817,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
} }
@Override @Override
public void pickSuggestionManually(final int index, final CharSequence suggestion) { public void pickSuggestionManually(final int index, final CharSequence suggestion,
int x, int y) {
final SuggestedWords suggestedWords = mSuggestionsView.getSuggestions(); final SuggestedWords suggestedWords = mSuggestionsView.getSuggestions();
if (SPACE_STATE_PHANTOM == mSpaceState && suggestion.length() > 0) { if (SPACE_STATE_PHANTOM == mSpaceState && suggestion.length() > 0) {
@ -1840,6 +1841,10 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
if (ic != null) { if (ic != null) {
final CompletionInfo completionInfo = mApplicationSpecifiedCompletions[index]; final CompletionInfo completionInfo = mApplicationSpecifiedCompletions[index];
ic.commitCompletion(completionInfo); ic.commitCompletion(completionInfo);
if (ProductionFlag.IS_EXPERIMENTAL) {
ResearchLogger.latinIME_pickApplicationSpecifiedCompletion(index,
completionInfo.getText(), x, y);
}
} }
return; return;
} }
@ -1850,6 +1855,9 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
// So, LatinImeLogger logs "" as a user's input. // So, LatinImeLogger logs "" as a user's input.
LatinImeLogger.logOnManualSuggestion("", suggestion.toString(), index, suggestedWords); LatinImeLogger.logOnManualSuggestion("", suggestion.toString(), index, suggestedWords);
// Rely on onCodeInput to do the complicated swapping/stripping logic consistently. // Rely on onCodeInput to do the complicated swapping/stripping logic consistently.
if (ProductionFlag.IS_EXPERIMENTAL) {
ResearchLogger.latinIME_punctuationSuggestion(index, suggestion, x, y);
}
final int primaryCode = suggestion.charAt(0); final int primaryCode = suggestion.charAt(0);
onCodeInput(primaryCode, onCodeInput(primaryCode,
KeyboardActionListener.SUGGESTION_STRIP_COORDINATE, KeyboardActionListener.SUGGESTION_STRIP_COORDINATE,
@ -1858,8 +1866,12 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
} }
// We need to log before we commit, because the word composer will store away the user // We need to log before we commit, because the word composer will store away the user
// typed word. // typed word.
LatinImeLogger.logOnManualSuggestion(mWordComposer.getTypedWord().toString(), final String replacedWord = mWordComposer.getTypedWord().toString();
LatinImeLogger.logOnManualSuggestion(replacedWord,
suggestion.toString(), index, suggestedWords); suggestion.toString(), index, suggestedWords);
if (ProductionFlag.IS_EXPERIMENTAL) {
ResearchLogger.latinIME_pickSuggestionManually(replacedWord, index, suggestion, x, y);
}
mExpectingUpdateSelection = true; mExpectingUpdateSelection = true;
commitChosenWord(suggestion, LastComposedWord.COMMIT_TYPE_MANUAL_PICK, commitChosenWord(suggestion, LastComposedWord.COMMIT_TYPE_MANUAL_PICK,
LastComposedWord.NOT_A_SEPARATOR); LastComposedWord.NOT_A_SEPARATOR);

View File

@ -375,6 +375,10 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
private static final boolean SUDDENJUMPINGTOUCHEVENTHANDLER_ONTOUCHEVENT_ENABLED private static final boolean SUDDENJUMPINGTOUCHEVENTHANDLER_ONTOUCHEVENT_ENABLED
= DEFAULT_ENABLED; = DEFAULT_ENABLED;
private static final boolean SUGGESTIONSVIEW_SETSUGGESTIONS_ENABLED = DEFAULT_ENABLED; private static final boolean SUGGESTIONSVIEW_SETSUGGESTIONS_ENABLED = DEFAULT_ENABLED;
private static final boolean LATINIME_PICKAPPLICATIONSPECIFIEDCOMPLETION_ENABLED
= DEFAULT_ENABLED;
private static final boolean LATINIME_PICKPUNCTUATIONSUGGESTION_ENABLED = DEFAULT_ENABLED;
private static final boolean LATINIME_PICKSUGGESTIONMANUALLY_ENABLED = DEFAULT_ENABLED;
} }
public static void logUnstructured(String logGroup, final String details) { public static void logUnstructured(String logGroup, final String details) {
@ -633,6 +637,30 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
} }
} }
public static void latinIME_pickApplicationSpecifiedCompletion(final int index,
final CharSequence text, int x, int y) {
if (UnsLogGroup.LATINIME_PICKAPPLICATIONSPECIFIEDCOMPLETION_ENABLED) {
final String s = String.valueOf(index) + '\t' + text + '\t' + x + '\t' + y;
logUnstructured("latinIME_pickApplicationSpecifiedCompletion", s);
}
}
public static void latinIME_pickSuggestionManually(final String replacedWord,
final int index, CharSequence suggestion, int x, int y) {
if (UnsLogGroup.LATINIME_PICKSUGGESTIONMANUALLY_ENABLED) {
final String s = String.valueOf(index) + '\t' + suggestion + '\t' + x + '\t' + y;
logUnstructured("latinIME_pickSuggestionManually", s);
}
}
public static void latinIME_punctuationSuggestion(final int index,
final CharSequence suggestion, int x, int y) {
if (UnsLogGroup.LATINIME_PICKPUNCTUATIONSUGGESTION_ENABLED) {
final String s = String.valueOf(index) + '\t' + suggestion + '\t' + x + '\t' + y;
logUnstructured("latinIME_pickPunctuationSuggestion", s);
}
}
public static void latinIME_switchToKeyboardView() { public static void latinIME_switchToKeyboardView() {
if (UnsLogGroup.LATINIME_SWITCHTOKEYBOARDVIEW_ENABLED) { if (UnsLogGroup.LATINIME_SWITCHTOKEYBOARDVIEW_ENABLED) {
final String s = "Switch to keyboard view."; final String s = "Switch to keyboard view.";

View File

@ -72,7 +72,7 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,
OnLongClickListener { OnLongClickListener {
public interface Listener { public interface Listener {
public boolean addWordToDictionary(String word); public boolean addWordToDictionary(String word);
public void pickSuggestionManually(int index, CharSequence word); public void pickSuggestionManually(int index, CharSequence word, int x, int y);
} }
// The maximum number of suggestions available. See {@link Suggest#mPrefMaxSuggestions}. // The maximum number of suggestions available. See {@link Suggest#mPrefMaxSuggestions}.
@ -717,7 +717,9 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,
public boolean onCustomRequest(int requestCode) { public boolean onCustomRequest(int requestCode) {
final int index = requestCode; final int index = requestCode;
final CharSequence word = mSuggestedWords.getWord(index); final CharSequence word = mSuggestedWords.getWord(index);
mListener.pickSuggestionManually(index, word); // TODO: change caller path so coordinates are passed through here
mListener.pickSuggestionManually(index, word, NOT_A_TOUCH_COORDINATE,
NOT_A_TOUCH_COORDINATE);
dismissMoreSuggestions(); dismissMoreSuggestions();
return true; return true;
} }
@ -867,7 +869,7 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,
return; return;
final CharSequence word = mSuggestedWords.getWord(index); final CharSequence word = mSuggestedWords.getWord(index);
mListener.pickSuggestionManually(index, word); mListener.pickSuggestionManually(index, word, mLastX, mLastY);
} }
@Override @Override

View File

@ -30,7 +30,7 @@ public class InputLogicTests extends InputTestsBase {
final String WORD_TO_TYPE = "this"; final String WORD_TO_TYPE = "this";
final String EXPECTED_RESULT = "this"; final String EXPECTED_RESULT = "this";
type(WORD_TO_TYPE); type(WORD_TO_TYPE);
mLatinIME.pickSuggestionManually(0, WORD_TO_TYPE); pickSuggestionManually(0, WORD_TO_TYPE);
mLatinIME.onUpdateSelection(0, 0, WORD_TO_TYPE.length(), WORD_TO_TYPE.length(), -1, -1); mLatinIME.onUpdateSelection(0, 0, WORD_TO_TYPE.length(), WORD_TO_TYPE.length(), -1, -1);
type(Keyboard.CODE_DELETE); type(Keyboard.CODE_DELETE);
assertEquals("press suggestion then backspace", EXPECTED_RESULT, assertEquals("press suggestion then backspace", EXPECTED_RESULT,
@ -44,7 +44,7 @@ public class InputLogicTests extends InputTestsBase {
type(WORD_TO_TYPE); type(WORD_TO_TYPE);
// Choose the auto-correction, which is always in position 0. For "tgis", the // Choose the auto-correction, which is always in position 0. For "tgis", the
// auto-correction should be "this". // auto-correction should be "this".
mLatinIME.pickSuggestionManually(0, WORD_TO_PICK); pickSuggestionManually(0, WORD_TO_PICK);
mLatinIME.onUpdateSelection(0, 0, WORD_TO_TYPE.length(), WORD_TO_TYPE.length(), -1, -1); mLatinIME.onUpdateSelection(0, 0, WORD_TO_TYPE.length(), WORD_TO_TYPE.length(), -1, -1);
assertEquals("pick typed word over auto-correction then backspace", WORD_TO_PICK, assertEquals("pick typed word over auto-correction then backspace", WORD_TO_PICK,
mTextView.getText().toString()); mTextView.getText().toString());
@ -59,7 +59,7 @@ public class InputLogicTests extends InputTestsBase {
type(WORD_TO_TYPE); type(WORD_TO_TYPE);
// Choose the typed word, which should be in position 1 (because position 0 should // Choose the typed word, which should be in position 1 (because position 0 should
// be occupied by the "this" auto-correction, as checked by testAutoCorrect()) // be occupied by the "this" auto-correction, as checked by testAutoCorrect())
mLatinIME.pickSuggestionManually(1, WORD_TO_TYPE); pickSuggestionManually(1, WORD_TO_TYPE);
mLatinIME.onUpdateSelection(0, 0, WORD_TO_TYPE.length(), WORD_TO_TYPE.length(), -1, -1); mLatinIME.onUpdateSelection(0, 0, WORD_TO_TYPE.length(), WORD_TO_TYPE.length(), -1, -1);
assertEquals("pick typed word over auto-correction then backspace", WORD_TO_TYPE, assertEquals("pick typed word over auto-correction then backspace", WORD_TO_TYPE,
mTextView.getText().toString()); mTextView.getText().toString());
@ -75,7 +75,7 @@ public class InputLogicTests extends InputTestsBase {
type(WORD_TO_TYPE); type(WORD_TO_TYPE);
// Choose the second suggestion, which should be in position 2 and should be "thus" // Choose the second suggestion, which should be in position 2 and should be "thus"
// when "tgis is typed. // when "tgis is typed.
mLatinIME.pickSuggestionManually(2, WORD_TO_PICK); pickSuggestionManually(2, WORD_TO_PICK);
mLatinIME.onUpdateSelection(0, 0, WORD_TO_TYPE.length(), WORD_TO_TYPE.length(), -1, -1); mLatinIME.onUpdateSelection(0, 0, WORD_TO_TYPE.length(), WORD_TO_TYPE.length(), -1, -1);
assertEquals("pick different suggestion then backspace", WORD_TO_PICK, assertEquals("pick different suggestion then backspace", WORD_TO_PICK,
mTextView.getText().toString()); mTextView.getText().toString());
@ -171,7 +171,7 @@ public class InputLogicTests extends InputTestsBase {
final String WORD_TO_TYPE = "this"; final String WORD_TO_TYPE = "this";
final String EXPECTED_RESULT = WORD_TO_TYPE; final String EXPECTED_RESULT = WORD_TO_TYPE;
type(WORD_TO_TYPE); type(WORD_TO_TYPE);
mLatinIME.pickSuggestionManually(0, WORD_TO_TYPE); pickSuggestionManually(0, WORD_TO_TYPE);
assertEquals("no space after manual pick", EXPECTED_RESULT, assertEquals("no space after manual pick", EXPECTED_RESULT,
mTextView.getText().toString()); mTextView.getText().toString());
} }
@ -181,7 +181,7 @@ public class InputLogicTests extends InputTestsBase {
final String WORD2_TO_TYPE = "is"; final String WORD2_TO_TYPE = "is";
final String EXPECTED_RESULT = "this is"; final String EXPECTED_RESULT = "this is";
type(WORD1_TO_TYPE); type(WORD1_TO_TYPE);
mLatinIME.pickSuggestionManually(0, WORD1_TO_TYPE); pickSuggestionManually(0, WORD1_TO_TYPE);
type(WORD2_TO_TYPE); type(WORD2_TO_TYPE);
assertEquals("manual pick then type", EXPECTED_RESULT, mTextView.getText().toString()); assertEquals("manual pick then type", EXPECTED_RESULT, mTextView.getText().toString());
} }
@ -191,7 +191,7 @@ public class InputLogicTests extends InputTestsBase {
final String WORD2_TO_TYPE = "!"; final String WORD2_TO_TYPE = "!";
final String EXPECTED_RESULT = "this!"; final String EXPECTED_RESULT = "this!";
type(WORD1_TO_TYPE); type(WORD1_TO_TYPE);
mLatinIME.pickSuggestionManually(0, WORD1_TO_TYPE); pickSuggestionManually(0, WORD1_TO_TYPE);
type(WORD2_TO_TYPE); type(WORD2_TO_TYPE);
assertEquals("manual pick then separator", EXPECTED_RESULT, mTextView.getText().toString()); assertEquals("manual pick then separator", EXPECTED_RESULT, mTextView.getText().toString());
} }
@ -201,7 +201,7 @@ public class InputLogicTests extends InputTestsBase {
final String WORD2_TO_TYPE = " is"; final String WORD2_TO_TYPE = " is";
final String EXPECTED_RESULT = "this is"; final String EXPECTED_RESULT = "this is";
type(WORD1_TO_TYPE); type(WORD1_TO_TYPE);
mLatinIME.pickSuggestionManually(0, WORD1_TO_TYPE); pickSuggestionManually(0, WORD1_TO_TYPE);
type(WORD2_TO_TYPE); type(WORD2_TO_TYPE);
assertEquals("manual pick then space then type", EXPECTED_RESULT, assertEquals("manual pick then space then type", EXPECTED_RESULT,
mTextView.getText().toString()); mTextView.getText().toString());
@ -212,11 +212,11 @@ public class InputLogicTests extends InputTestsBase {
final String WORD2_TO_PICK = "is"; final String WORD2_TO_PICK = "is";
final String EXPECTED_RESULT = "this is"; final String EXPECTED_RESULT = "this is";
type(WORD1_TO_TYPE); type(WORD1_TO_TYPE);
mLatinIME.pickSuggestionManually(0, WORD1_TO_TYPE); pickSuggestionManually(0, WORD1_TO_TYPE);
// Here we fake picking a word through bigram prediction. This test is taking // Here we fake picking a word through bigram prediction. This test is taking
// advantage of the fact that Latin IME blindly trusts the caller of #pickSuggestionManually // advantage of the fact that Latin IME blindly trusts the caller of #pickSuggestionManually
// to actually pass the right string. // to actually pass the right string.
mLatinIME.pickSuggestionManually(1, WORD2_TO_PICK); pickSuggestionManually(1, WORD2_TO_PICK);
assertEquals("manual pick then manual pick", EXPECTED_RESULT, assertEquals("manual pick then manual pick", EXPECTED_RESULT,
mTextView.getText().toString()); mTextView.getText().toString());
} }

View File

@ -33,7 +33,7 @@ public class InputLogicTestsNonEnglish extends InputTestsBase {
final String EXPECTED_RESULT = "test !"; final String EXPECTED_RESULT = "test !";
changeLanguage("fr"); changeLanguage("fr");
type(WORD1_TO_TYPE); type(WORD1_TO_TYPE);
mLatinIME.pickSuggestionManually(0, WORD1_TO_TYPE); pickSuggestionManually(0, WORD1_TO_TYPE);
type(WORD2_TO_TYPE); type(WORD2_TO_TYPE);
assertEquals("manual pick then separator for French", EXPECTED_RESULT, assertEquals("manual pick then separator for French", EXPECTED_RESULT,
mTextView.getText().toString()); mTextView.getText().toString());
@ -49,8 +49,8 @@ public class InputLogicTestsNonEnglish extends InputTestsBase {
runMessages(); runMessages();
assertTrue("type word then type space should display punctuation strip", assertTrue("type word then type space should display punctuation strip",
mLatinIME.isShowingPunctuationList()); mLatinIME.isShowingPunctuationList());
mLatinIME.pickSuggestionManually(0, PUNCTUATION_FROM_STRIP); pickSuggestionManually(0, PUNCTUATION_FROM_STRIP);
mLatinIME.pickSuggestionManually(0, PUNCTUATION_FROM_STRIP); pickSuggestionManually(0, PUNCTUATION_FROM_STRIP);
assertEquals("type word then type space then punctuation from strip twice for French", assertEquals("type word then type space then punctuation from strip twice for French",
EXPECTED_RESULT, mTextView.getText().toString()); EXPECTED_RESULT, mTextView.getText().toString());
} }

View File

@ -278,6 +278,11 @@ public class InputTestsBase extends ServiceTestCase<LatinIME> {
waitForDictionaryToBeLoaded(); waitForDictionaryToBeLoaded();
} }
protected void pickSuggestionManually(final int index, final CharSequence suggestion) {
mLatinIME.pickSuggestionManually(index, suggestion,
KeyboardActionListener.NOT_A_TOUCH_COORDINATE,
KeyboardActionListener.NOT_A_TOUCH_COORDINATE);
}
// Helper to avoid writing the try{}catch block each time // Helper to avoid writing the try{}catch block each time
protected static void sleep(final int milliseconds) { protected static void sleep(final int milliseconds) {

View File

@ -38,8 +38,8 @@ public class PunctuationTests extends InputTestsBase {
runMessages(); runMessages();
assertTrue("type word then type space should display punctuation strip", assertTrue("type word then type space should display punctuation strip",
mLatinIME.isShowingPunctuationList()); mLatinIME.isShowingPunctuationList());
mLatinIME.pickSuggestionManually(0, PUNCTUATION_FROM_STRIP); pickSuggestionManually(0, PUNCTUATION_FROM_STRIP);
mLatinIME.pickSuggestionManually(0, PUNCTUATION_FROM_STRIP); pickSuggestionManually(0, PUNCTUATION_FROM_STRIP);
assertEquals("type word then type space then punctuation from strip twice", assertEquals("type word then type space then punctuation from strip twice",
EXPECTED_RESULT, mTextView.getText().toString()); EXPECTED_RESULT, mTextView.getText().toString());
} finally { } finally {
@ -62,9 +62,9 @@ public class PunctuationTests extends InputTestsBase {
final String PUNCTUATION_FROM_STRIP = "!"; final String PUNCTUATION_FROM_STRIP = "!";
final String EXPECTED_RESULT = "this!! is"; final String EXPECTED_RESULT = "this!! is";
type(WORD1_TO_TYPE); type(WORD1_TO_TYPE);
mLatinIME.pickSuggestionManually(0, WORD1_TO_TYPE); pickSuggestionManually(0, WORD1_TO_TYPE);
mLatinIME.pickSuggestionManually(0, PUNCTUATION_FROM_STRIP); pickSuggestionManually(0, PUNCTUATION_FROM_STRIP);
mLatinIME.pickSuggestionManually(0, PUNCTUATION_FROM_STRIP); pickSuggestionManually(0, PUNCTUATION_FROM_STRIP);
type(WORD2_TO_TYPE); type(WORD2_TO_TYPE);
assertEquals("pick word then pick punctuation twice then type", EXPECTED_RESULT, assertEquals("pick word then pick punctuation twice then type", EXPECTED_RESULT,
mTextView.getText().toString()); mTextView.getText().toString());
@ -75,8 +75,8 @@ public class PunctuationTests extends InputTestsBase {
final String WORD2_TO_PICK = "!is"; final String WORD2_TO_PICK = "!is";
final String EXPECTED_RESULT = "this!is"; final String EXPECTED_RESULT = "this!is";
type(WORD1_TO_TYPE); type(WORD1_TO_TYPE);
mLatinIME.pickSuggestionManually(0, WORD1_TO_TYPE); pickSuggestionManually(0, WORD1_TO_TYPE);
mLatinIME.pickSuggestionManually(1, WORD2_TO_PICK); pickSuggestionManually(1, WORD2_TO_PICK);
assertEquals("manual pick then manual pick a word with punct at start", EXPECTED_RESULT, assertEquals("manual pick then manual pick a word with punct at start", EXPECTED_RESULT,
mTextView.getText().toString()); mTextView.getText().toString());
} }
@ -86,7 +86,7 @@ public class PunctuationTests extends InputTestsBase {
final String PUNCTUATION = ":"; final String PUNCTUATION = ":";
final String EXPECTED_RESULT = "this:"; final String EXPECTED_RESULT = "this:";
type(WORD_TO_TYPE); type(WORD_TO_TYPE);
mLatinIME.pickSuggestionManually(0, WORD_TO_TYPE); pickSuggestionManually(0, WORD_TO_TYPE);
type(PUNCTUATION); type(PUNCTUATION);
assertEquals("manually pick word then colon", assertEquals("manually pick word then colon",
EXPECTED_RESULT, mTextView.getText().toString()); EXPECTED_RESULT, mTextView.getText().toString());
@ -97,7 +97,7 @@ public class PunctuationTests extends InputTestsBase {
final String PUNCTUATION = "("; final String PUNCTUATION = "(";
final String EXPECTED_RESULT = "this ("; final String EXPECTED_RESULT = "this (";
type(WORD_TO_TYPE); type(WORD_TO_TYPE);
mLatinIME.pickSuggestionManually(0, WORD_TO_TYPE); pickSuggestionManually(0, WORD_TO_TYPE);
type(PUNCTUATION); type(PUNCTUATION);
assertEquals("manually pick word then open paren", assertEquals("manually pick word then open paren",
EXPECTED_RESULT, mTextView.getText().toString()); EXPECTED_RESULT, mTextView.getText().toString());
@ -108,7 +108,7 @@ public class PunctuationTests extends InputTestsBase {
final String PUNCTUATION = ")"; final String PUNCTUATION = ")";
final String EXPECTED_RESULT = "this)"; final String EXPECTED_RESULT = "this)";
type(WORD_TO_TYPE); type(WORD_TO_TYPE);
mLatinIME.pickSuggestionManually(0, WORD_TO_TYPE); pickSuggestionManually(0, WORD_TO_TYPE);
type(PUNCTUATION); type(PUNCTUATION);
assertEquals("manually pick word then close paren", assertEquals("manually pick word then close paren",
EXPECTED_RESULT, mTextView.getText().toString()); EXPECTED_RESULT, mTextView.getText().toString());
@ -119,7 +119,7 @@ public class PunctuationTests extends InputTestsBase {
final String SPECIAL_KEY = ":-)"; final String SPECIAL_KEY = ":-)";
final String EXPECTED_RESULT = "this :-)"; final String EXPECTED_RESULT = "this :-)";
type(WORD_TO_TYPE); type(WORD_TO_TYPE);
mLatinIME.pickSuggestionManually(0, WORD_TO_TYPE); pickSuggestionManually(0, WORD_TO_TYPE);
mLatinIME.onTextInput(SPECIAL_KEY); mLatinIME.onTextInput(SPECIAL_KEY);
assertEquals("manually pick word then press the smiley key", assertEquals("manually pick word then press the smiley key",
EXPECTED_RESULT, mTextView.getText().toString()); EXPECTED_RESULT, mTextView.getText().toString());
@ -130,7 +130,7 @@ public class PunctuationTests extends InputTestsBase {
final String SPECIAL_KEY = ".com"; final String SPECIAL_KEY = ".com";
final String EXPECTED_RESULT = "this.com"; final String EXPECTED_RESULT = "this.com";
type(WORD_TO_TYPE); type(WORD_TO_TYPE);
mLatinIME.pickSuggestionManually(0, WORD_TO_TYPE); pickSuggestionManually(0, WORD_TO_TYPE);
mLatinIME.onTextInput(SPECIAL_KEY); mLatinIME.onTextInput(SPECIAL_KEY);
assertEquals("manually pick word then press the .com key", assertEquals("manually pick word then press the .com key",
EXPECTED_RESULT, mTextView.getText().toString()); EXPECTED_RESULT, mTextView.getText().toString());