am e2ceff04: am 3f513f10: Enable InputMethodService#onUpdateCursor behind the flag
* commit 'e2ceff04582791af2d25facfa5124b44ea95de3b': Enable InputMethodService#onUpdateCursor behind the flagmain
commit
ec626d4bfe
|
@ -17,7 +17,6 @@
|
||||||
package com.android.inputmethod.compat;
|
package com.android.inputmethod.compat;
|
||||||
|
|
||||||
import android.inputmethodservice.InputMethodService;
|
import android.inputmethodservice.InputMethodService;
|
||||||
import com.android.inputmethod.latin.define.ProductionFlags;
|
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
|
@ -35,30 +34,4 @@ public final class InputMethodServiceCompatUtils {
|
||||||
return (Boolean)CompatUtils.invoke(ims, false /* defaultValue */,
|
return (Boolean)CompatUtils.invoke(ims, false /* defaultValue */,
|
||||||
METHOD_enableHardwareAcceleration);
|
METHOD_enableHardwareAcceleration);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setCursorAnchorMonitorMode(final InputMethodService ims, final int mode) {
|
|
||||||
if (ProductionFlags.USES_CURSOR_ANCHOR_MONITOR) {
|
|
||||||
ExperimentalAPIUtils.setCursorAnchorMonitorMode(ims, mode);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* For unreleased APIs. ProGuard will strip this class entirely, unless used explicitly.
|
|
||||||
*/
|
|
||||||
private static final class ExperimentalAPIUtils {
|
|
||||||
// Note that {@link InputMethodManager#setCursorAnchorMonitorMode} is not yet available as
|
|
||||||
// an official API as of API level 19 (Build.VERSION_CODES.KITKAT).
|
|
||||||
private static final Method METHOD_setCursorAnchorMonitorMode = CompatUtils.getMethod(
|
|
||||||
InputMethodService.class, "setCursorAnchorMonitorMode", int.class);
|
|
||||||
|
|
||||||
private ExperimentalAPIUtils() {
|
|
||||||
// This utility class is not publicly instantiable.
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setCursorAnchorMonitorMode(final InputMethodService ims,
|
|
||||||
final int mode) {
|
|
||||||
CompatUtils.invoke(ims, null /* defaultValue */,
|
|
||||||
METHOD_setCursorAnchorMonitorMode, mode);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,6 +55,7 @@ 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.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;
|
||||||
|
@ -413,11 +414,14 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
||||||
if (latinIme != null) {
|
if (latinIme != null) {
|
||||||
executePendingImsCallback(latinIme, editorInfo, restarting);
|
executePendingImsCallback(latinIme, editorInfo, restarting);
|
||||||
latinIme.onStartInputInternal(editorInfo, restarting);
|
latinIme.onStartInputInternal(editorInfo, restarting);
|
||||||
if (ProductionFlags.USES_CURSOR_ANCHOR_MONITOR) {
|
if (ProductionFlags.ENABLE_CURSOR_RECT_CALLBACK) {
|
||||||
// Currently we need to call this every time when the IME is attached to
|
InputConnectionCompatUtils.requestCursorRect(
|
||||||
// new application.
|
latinIme.getCurrentInputConnection(), true /* enableMonitor */);
|
||||||
// TODO: Consider if we can do this automatically in the framework.
|
}
|
||||||
InputMethodServiceCompatUtils.setCursorAnchorMonitorMode(latinIme, 1);
|
if (ProductionFlags.ENABLE_CURSOR_ANCHOR_INFO_CALLBACK) {
|
||||||
|
InputConnectionCompatUtils.requestCursorAnchorInfo(
|
||||||
|
latinIme.getCurrentInputConnection(), true /* enableMonitor */,
|
||||||
|
true /* requestImmediateCallback */);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,15 +23,30 @@ public final class ProductionFlags {
|
||||||
|
|
||||||
public static final boolean IS_HARDWARE_KEYBOARD_SUPPORTED = false;
|
public static final boolean IS_HARDWARE_KEYBOARD_SUPPORTED = false;
|
||||||
|
|
||||||
// When true, enable {@link InputMethodService#onUpdateCursor} callback with
|
/**
|
||||||
// {@link InputMethodService#setCursorAnchorMonitorMode}, which is not yet available in
|
* When true, enable {@link InputMethodService#onUpdateCursorAnchorInfo} callback via
|
||||||
// API level 19. Do not turn this on in production until the new API becomes publicly
|
* {@link InputConnection#requestCursorAnchorInfo}. This flag has no effect in API Level 20
|
||||||
// available.
|
* and prior. In general, this callback provides more detailed positional information,
|
||||||
public static final boolean USES_CURSOR_ANCHOR_MONITOR = false;
|
* even though an explicit support is required by the editor.
|
||||||
|
*/
|
||||||
|
public static final boolean ENABLE_CURSOR_ANCHOR_INFO_CALLBACK = false;
|
||||||
|
|
||||||
// Include all suggestions from all dictionaries in {@link SuggestedWords#mRawSuggestions}.
|
/**
|
||||||
|
* When true, enable {@link InputMethodService#onUpdateCursor} callback via
|
||||||
|
* {@link InputConnection#requestCursorAnchorInfo}. Although this callback has been available
|
||||||
|
* since API Level 3, the callback has never been used until API Level 20. Thus it may or may
|
||||||
|
* not work well as expected. Should rely on {@link InputMethodService#onUpdateCursorAnchorInfo}
|
||||||
|
* whenever possible since it is supposed to be more reliable and accurate.
|
||||||
|
*/
|
||||||
|
public static final boolean ENABLE_CURSOR_RECT_CALLBACK = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Include all suggestions from all dictionaries in {@link SuggestedWords#mRawSuggestions}.
|
||||||
|
*/
|
||||||
public static final boolean INCLUDE_RAW_SUGGESTIONS = false;
|
public static final boolean INCLUDE_RAW_SUGGESTIONS = false;
|
||||||
|
|
||||||
// When false, the metrics logging is not yet ready to be enabled.
|
/**
|
||||||
|
* When false, the metrics logging is not yet ready to be enabled.
|
||||||
|
*/
|
||||||
public static final boolean IS_METRICS_LOGGING_SUPPORTED = false;
|
public static final boolean IS_METRICS_LOGGING_SUPPORTED = false;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue