am da498229: Merge "Plumbing for ProductionFlag.USES_CURSOR_ANCHOR_MONITOR"
* commit 'da498229f41b828209765774a6f7f8f1ad5f30c3': Plumbing for ProductionFlag.USES_CURSOR_ANCHOR_MONITORmain
commit
f83d443d8d
|
@ -17,11 +17,12 @@
|
||||||
package com.android.inputmethod.compat;
|
package com.android.inputmethod.compat;
|
||||||
|
|
||||||
import android.inputmethodservice.InputMethodService;
|
import android.inputmethodservice.InputMethodService;
|
||||||
|
import com.android.inputmethod.latin.define.ProductionFlag;
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
public final class InputMethodServiceCompatUtils {
|
public final class InputMethodServiceCompatUtils {
|
||||||
// Note that InputMethodService.enableHardwareAcceleration() has been introduced
|
// Note that {@link InputMethodService#enableHardwareAcceleration} has been introduced
|
||||||
// in API level 17 (Build.VERSION_CODES.JELLY_BEAN_MR1).
|
// in API level 17 (Build.VERSION_CODES.JELLY_BEAN_MR1).
|
||||||
private static final Method METHOD_enableHardwareAcceleration =
|
private static final Method METHOD_enableHardwareAcceleration =
|
||||||
CompatUtils.getMethod(InputMethodService.class, "enableHardwareAcceleration");
|
CompatUtils.getMethod(InputMethodService.class, "enableHardwareAcceleration");
|
||||||
|
@ -34,4 +35,30 @@ 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 (ProductionFlag.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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -367,6 +367,12 @@ 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 (ProductionFlag.USES_CURSOR_ANCHOR_MONITOR) {
|
||||||
|
// Currently we need to call this every time when the IME is attached to
|
||||||
|
// new application.
|
||||||
|
// TODO: Consider if we can do this automatically in the framework.
|
||||||
|
InputMethodServiceCompatUtils.setCursorAnchorMonitorMode(latinIme, 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -931,6 +937,14 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
||||||
mSubtypeState.currentSubtypeUsed();
|
mSubtypeState.currentSubtypeUsed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onUpdateCursor(Rect rect) {
|
||||||
|
if (DEBUG) {
|
||||||
|
Log.i(TAG, "onUpdateCursor:" + rect.toShortString());
|
||||||
|
}
|
||||||
|
super.onUpdateCursor(rect);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is called when the user has clicked on the extracted text view,
|
* This is called when the user has clicked on the extracted text view,
|
||||||
* when running in fullscreen mode. The default implementation hides
|
* when running in fullscreen mode. The default implementation hides
|
||||||
|
|
Loading…
Reference in New Issue