Refresh editor info when the text field attributes changes.

For some reason we get a "restarting" flag from the browser
some times when the input field is different. The attributes
however are not the same, so we can detect that and reload
appropriately.

Bug: 6946793
Change-Id: I6762dae6f41db690497b026a707d9cc89c840b34
main
Jean Chalard 2012-08-15 17:57:38 +09:00
parent 0538493309
commit e234aed428
3 changed files with 17 additions and 5 deletions

View File

@ -29,10 +29,12 @@ public class InputAttributes {
final public boolean mInputTypeNoAutoCorrect; final public boolean mInputTypeNoAutoCorrect;
final public boolean mIsSettingsSuggestionStripOn; final public boolean mIsSettingsSuggestionStripOn;
final public boolean mApplicationSpecifiedCompletionOn; final public boolean mApplicationSpecifiedCompletionOn;
final private int mInputType;
public InputAttributes(final EditorInfo editorInfo, final boolean isFullscreenMode) { public InputAttributes(final EditorInfo editorInfo, final boolean isFullscreenMode) {
final int inputType = null != editorInfo ? editorInfo.inputType : 0; final int inputType = null != editorInfo ? editorInfo.inputType : 0;
final int inputClass = inputType & InputType.TYPE_MASK_CLASS; final int inputClass = inputType & InputType.TYPE_MASK_CLASS;
mInputType = inputType;
if (inputClass != InputType.TYPE_CLASS_TEXT) { if (inputClass != InputType.TYPE_CLASS_TEXT) {
// If we are not looking at a TYPE_CLASS_TEXT field, the following strange // If we are not looking at a TYPE_CLASS_TEXT field, the following strange
// cases may arise, so we do a couple sanity checks for them. If it's a // cases may arise, so we do a couple sanity checks for them. If it's a
@ -93,6 +95,10 @@ public class InputAttributes {
} }
} }
public boolean isSameInputType(final EditorInfo editorInfo) {
return editorInfo.inputType == mInputType;
}
@SuppressWarnings("unused") @SuppressWarnings("unused")
private void dumpFlags(final int inputType) { private void dumpFlags(final int inputType) {
Log.i(TAG, "Input class:"); Log.i(TAG, "Input class:");

View File

@ -670,7 +670,11 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
accessUtils.onStartInputViewInternal(mainKeyboardView, editorInfo, restarting); accessUtils.onStartInputViewInternal(mainKeyboardView, editorInfo, restarting);
} }
if (!restarting) { final boolean selectionChanged = mLastSelectionStart != editorInfo.initialSelStart
|| mLastSelectionEnd != editorInfo.initialSelEnd;
final boolean inputTypeChanged = !mCurrentSettings.isSameInputType(editorInfo);
final boolean isDifferentTextField = !restarting || inputTypeChanged;
if (isDifferentTextField) {
mSubtypeSwitcher.updateParametersOnStartInputView(); mSubtypeSwitcher.updateParametersOnStartInputView();
} }
@ -679,9 +683,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
updateFullscreenMode(); updateFullscreenMode();
mApplicationSpecifiedCompletions = null; mApplicationSpecifiedCompletions = null;
final boolean selectionChanged = mLastSelectionStart != editorInfo.initialSelStart if (isDifferentTextField || selectionChanged) {
|| mLastSelectionEnd != editorInfo.initialSelEnd;
if (!restarting || selectionChanged) {
// If the selection changed, we reset the input state. Essentially, we come here with // If the selection changed, we reset the input state. Essentially, we come here with
// restarting == true when the app called setText() or similar. We should reset the // restarting == true when the app called setText() or similar. We should reset the
// state if the app set the text to something else, but keep it if it set a suggestion // state if the app set the text to something else, but keep it if it set a suggestion
@ -696,7 +698,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
} }
} }
if (!restarting) { if (isDifferentTextField) {
mainKeyboardView.closing(); mainKeyboardView.closing();
loadSettings(); loadSettings();

View File

@ -417,6 +417,10 @@ public class SettingsValues {
prefs.edit().putString(Settings.PREF_LAST_USER_DICTIONARY_WRITE_TIME, newStr).apply(); prefs.edit().putString(Settings.PREF_LAST_USER_DICTIONARY_WRITE_TIME, newStr).apply();
} }
public boolean isSameInputType(final EditorInfo editorInfo) {
return mInputAttributes.isSameInputType(editorInfo);
}
// For debug. // For debug.
public String getInputAttributesDebugString() { public String getInputAttributesDebugString() {
return mInputAttributes.toString(); return mInputAttributes.toString();