Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3f513f10 authored by Yohei Yukawa's avatar Yohei Yukawa
Browse files

Enable InputMethodService#onUpdateCursor behind the flag

With this CL, InputMethodService#onUpdateCursor and
InputMethodService#onUpdateCursorAnchorInfo can be enabled
on L when ENABLE_CURSOR_ANCHOR_INFO_CALLBACK and
ENABLE_CURSOR_RECT_CALLBACK are specified, respectively.

BUG: 16382260
Change-Id: I29924128f6bd2f08cbd91cc4e82c9c4a6ecce3ff
parent 6b14bbf1
Loading
Loading
Loading
Loading
+0 −27
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@
package com.android.inputmethod.compat;

import android.inputmethodservice.InputMethodService;
import com.android.inputmethod.latin.define.ProductionFlags;

import java.lang.reflect.Method;

@@ -35,30 +34,4 @@ public final class InputMethodServiceCompatUtils {
        return (Boolean)CompatUtils.invoke(ims, false /* defaultValue */,
                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);
        }
    }
}
+9 −5
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@ import android.view.inputmethod.InputMethodSubtype;

import com.android.inputmethod.accessibility.AccessibilityUtils;
import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.compat.InputConnectionCompatUtils;
import com.android.inputmethod.compat.InputMethodServiceCompatUtils;
import com.android.inputmethod.dictionarypack.DictionaryPackConstants;
import com.android.inputmethod.event.Event;
@@ -413,11 +414,14 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
                if (latinIme != null) {
                    executePendingImsCallback(latinIme, editorInfo, restarting);
                    latinIme.onStartInputInternal(editorInfo, restarting);
                    if (ProductionFlags.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);
                    if (ProductionFlags.ENABLE_CURSOR_RECT_CALLBACK) {
                        InputConnectionCompatUtils.requestCursorRect(
                                latinIme.getCurrentInputConnection(), true /* enableMonitor */);
                    }
                    if (ProductionFlags.ENABLE_CURSOR_ANCHOR_INFO_CALLBACK) {
                        InputConnectionCompatUtils.requestCursorAnchorInfo(
                                latinIme.getCurrentInputConnection(), true /* enableMonitor */,
                                true /* requestImmediateCallback */);
                    }
                }
            }
+22 −7
Original line number Diff line number Diff line
@@ -23,15 +23,30 @@ public final class ProductionFlags {

    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
    // API level 19. Do not turn this on in production until the new API becomes publicly
    // available.
    public static final boolean USES_CURSOR_ANCHOR_MONITOR = false;
    /**
     *  When true, enable {@link InputMethodService#onUpdateCursorAnchorInfo} callback via
     *  {@link InputConnection#requestCursorAnchorInfo}. This flag has no effect in API Level 20
     *  and prior. In general, this callback provides more detailed positional information,
     *  even though an explicit support is required by the editor.
     */
    public static final boolean ENABLE_CURSOR_ANCHOR_INFO_CALLBACK = false;

    /**
     * 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}.
    /**
     * Include all suggestions from all dictionaries in {@link SuggestedWords#mRawSuggestions}.
     */
    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;
}