am da498229: Merge "Plumbing for ProductionFlag.USES_CURSOR_ANCHOR_MONITOR"

* commit 'da498229f41b828209765774a6f7f8f1ad5f30c3':
  Plumbing for ProductionFlag.USES_CURSOR_ANCHOR_MONITOR
main
Yohei Yukawa 2014-04-13 12:58:46 +00:00 committed by Android Git Automerger
commit f83d443d8d
2 changed files with 42 additions and 1 deletions

View File

@ -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);
}
}
} }

View File

@ -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