am 29200b0a: Set the text bgcolor only when CursorAnchorInfo is available

* commit '29200b0abe1d65aa2f9ddefd247ab91563d666f8':
  Set the text bgcolor only when CursorAnchorInfo is available
main
Yohei Yukawa 2014-08-27 09:18:49 +00:00 committed by Android Git Automerger
commit 8159336ba1
3 changed files with 53 additions and 14 deletions

View File

@ -57,7 +57,6 @@ import android.view.inputmethod.InputMethodSubtype;
import com.android.inputmethod.accessibility.AccessibilityUtils; import com.android.inputmethod.accessibility.AccessibilityUtils;
import com.android.inputmethod.annotations.UsedForTesting; import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.compat.CursorAnchorInfoCompatWrapper; import com.android.inputmethod.compat.CursorAnchorInfoCompatWrapper;
import com.android.inputmethod.compat.InputConnectionCompatUtils;
import com.android.inputmethod.compat.InputMethodServiceCompatUtils; import com.android.inputmethod.compat.InputMethodServiceCompatUtils;
import com.android.inputmethod.dictionarypack.DictionaryPackConstants; import com.android.inputmethod.dictionarypack.DictionaryPackConstants;
import com.android.inputmethod.event.Event; import com.android.inputmethod.event.Event;
@ -777,20 +776,13 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
// Note that the calling sequence of onCreate() and onCurrentInputMethodSubtypeChanged() // Note that the calling sequence of onCreate() and onCurrentInputMethodSubtypeChanged()
// is not guaranteed. It may even be called at the same time on a different thread. // is not guaranteed. It may even be called at the same time on a different thread.
mSubtypeSwitcher.onSubtypeChanged(subtype); mSubtypeSwitcher.onSubtypeChanged(subtype);
mInputLogic.onSubtypeChanged(SubtypeLocaleUtils.getCombiningRulesExtraValue(subtype)); mInputLogic.onSubtypeChanged(SubtypeLocaleUtils.getCombiningRulesExtraValue(subtype),
mSettings.getCurrent());
loadKeyboard(); loadKeyboard();
} }
private void onStartInputInternal(final EditorInfo editorInfo, final boolean restarting) { private void onStartInputInternal(final EditorInfo editorInfo, final boolean restarting) {
super.onStartInput(editorInfo, restarting); super.onStartInput(editorInfo, restarting);
if (ProductionFlags.ENABLE_CURSOR_ANCHOR_INFO_CALLBACK) {
// AcceptTypedWord feature relies on CursorAnchorInfo.
if (mSettings.getCurrent().mShouldShowUiToAcceptTypedWord) {
InputConnectionCompatUtils.requestUpdateCursorAnchorInfo(
getCurrentInputConnection(), true /* enableMonitor */,
true /* requestImmediateCallback */);
}
}
} }
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
@ -859,7 +851,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
// span, so we should reset our state unconditionally, even if restarting is true. // span, so we should reset our state unconditionally, even if restarting is true.
// We also tell the input logic about the combining rules for the current subtype, so // We also tell the input logic about the combining rules for the current subtype, so
// it can adjust its combiners if needed. // it can adjust its combiners if needed.
mInputLogic.startInput(mSubtypeSwitcher.getCombiningRulesExtraValueOfCurrentSubtype()); mInputLogic.startInput(mSubtypeSwitcher.getCombiningRulesExtraValueOfCurrentSubtype(),
currentSettingsValues);
// Note: the following does a round-trip IPC on the main thread: be careful // Note: the following does a round-trip IPC on the main thread: be careful
final Locale currentLocale = mSubtypeSwitcher.getCurrentSubtypeLocale(); final Locale currentLocale = mSubtypeSwitcher.getCurrentSubtypeLocale();

View File

@ -30,7 +30,9 @@ import android.view.inputmethod.CorrectionInfo;
import android.view.inputmethod.ExtractedText; import android.view.inputmethod.ExtractedText;
import android.view.inputmethod.ExtractedTextRequest; import android.view.inputmethod.ExtractedTextRequest;
import android.view.inputmethod.InputConnection; import android.view.inputmethod.InputConnection;
import android.view.inputmethod.InputMethodManager;
import com.android.inputmethod.compat.InputConnectionCompatUtils;
import com.android.inputmethod.latin.settings.SpacingAndPunctuations; import com.android.inputmethod.latin.settings.SpacingAndPunctuations;
import com.android.inputmethod.latin.utils.CapsModeUtils; import com.android.inputmethod.latin.utils.CapsModeUtils;
import com.android.inputmethod.latin.utils.DebugLogUtils; import com.android.inputmethod.latin.utils.DebugLogUtils;
@ -906,4 +908,33 @@ public final class RichInputConnection {
mIC.setSelection(mExpectedSelStart, mExpectedSelEnd); mIC.setSelection(mExpectedSelStart, mExpectedSelEnd);
} }
} }
private boolean mCursorAnchorInfoMonitorEnabled = false;
/**
* Requests the editor to call back {@link InputMethodManager#updateCursorAnchorInfo}.
* @param enableMonitor {@code true} to request the editor to call back the method whenever the
* cursor/anchor position is changed.
* @param requestImmediateCallback {@code true} to request the editor to call back the method
* as soon as possible to notify the current cursor/anchor position to the input method.
* @return {@code true} if the request is accepted. Returns {@code false} otherwise, which
* includes "not implemented" or "rejected" or "temporarily unavailable" or whatever which
* prevents the application from fulfilling the request. (TODO: Improve the API when it turns
* out that we actually need more detailed error codes)
*/
public boolean requestUpdateCursorAnchorInfo(final boolean enableMonitor,
final boolean requestImmediateCallback) {
final boolean scheduled = InputConnectionCompatUtils.requestUpdateCursorAnchorInfo(mIC,
enableMonitor, requestImmediateCallback);
mCursorAnchorInfoMonitorEnabled = (scheduled && enableMonitor);
return scheduled;
}
/**
* @return {@code true} if the application reported that the monitor mode of
* {@link InputMethodService#onUpdateCursorAnchorInfo(CursorAnchorInfo)} is currently enabled.
*/
public boolean isCursorAnchorInfoMonitorEnabled() {
return mCursorAnchorInfoMonitorEnabled;
}
} }

View File

@ -50,6 +50,7 @@ import com.android.inputmethod.latin.SuggestedWords;
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo; import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
import com.android.inputmethod.latin.WordComposer; import com.android.inputmethod.latin.WordComposer;
import com.android.inputmethod.latin.define.DebugFlags; import com.android.inputmethod.latin.define.DebugFlags;
import com.android.inputmethod.latin.define.ProductionFlags;
import com.android.inputmethod.latin.settings.SettingsValues; import com.android.inputmethod.latin.settings.SettingsValues;
import com.android.inputmethod.latin.settings.SettingsValuesForSuggestion; import com.android.inputmethod.latin.settings.SettingsValuesForSuggestion;
import com.android.inputmethod.latin.settings.SpacingAndPunctuations; import com.android.inputmethod.latin.settings.SpacingAndPunctuations;
@ -140,8 +141,9 @@ public final class InputLogic {
* Call this when input starts or restarts in some editor (typically, in onStartInputView). * Call this when input starts or restarts in some editor (typically, in onStartInputView).
* *
* @param combiningSpec the combining spec string for this subtype * @param combiningSpec the combining spec string for this subtype
* @param settingsValues the current settings values
*/ */
public void startInput(final String combiningSpec) { public void startInput(final String combiningSpec, final SettingsValues settingsValues) {
mEnteredText = null; mEnteredText = null;
mWordComposer.restartCombining(combiningSpec); mWordComposer.restartCombining(combiningSpec);
resetComposingState(true /* alsoResetLastComposedWord */); resetComposingState(true /* alsoResetLastComposedWord */);
@ -159,15 +161,24 @@ public final class InputLogic {
} else { } else {
mInputLogicHandler.reset(); mInputLogicHandler.reset();
} }
if (ProductionFlags.ENABLE_CURSOR_ANCHOR_INFO_CALLBACK) {
// AcceptTypedWord feature relies on CursorAnchorInfo.
if (settingsValues.mShouldShowUiToAcceptTypedWord) {
mConnection.requestUpdateCursorAnchorInfo(true /* enableMonitor */,
true /* requestImmediateCallback */);
}
}
} }
/** /**
* Call this when the subtype changes. * Call this when the subtype changes.
* @param combiningSpec the spec string for the combining rules * @param combiningSpec the spec string for the combining rules
* @param settingsValues the current settings values
*/ */
public void onSubtypeChanged(final String combiningSpec) { public void onSubtypeChanged(final String combiningSpec, final SettingsValues settingsValues) {
finishInput(); finishInput();
startInput(combiningSpec); startInput(combiningSpec, settingsValues);
} }
/** /**
@ -2238,6 +2249,10 @@ public final class InputLogic {
*/ */
private boolean shouldShowCommitIndicator(final SuggestedWords suggestedWords, private boolean shouldShowCommitIndicator(final SuggestedWords suggestedWords,
final SettingsValues settingsValues) { final SettingsValues settingsValues) {
if (!mConnection.isCursorAnchorInfoMonitorEnabled()) {
// We cannot help in this case because we are heavily relying on this new API.
return false;
}
if (!settingsValues.mShouldShowUiToAcceptTypedWord) { if (!settingsValues.mShouldShowUiToAcceptTypedWord) {
return false; return false;
} }