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

Commit 77947c9c authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka Committed by Android (Google) Code Review
Browse files

Merge "Consolidate TimerHandler.Callbacks with PointerTracker.DrawingProxy"

parents 52860735 be708c4e
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -41,6 +41,8 @@ import com.android.inputmethod.latin.utils.TypefaceUtils;

import java.util.HashSet;

import javax.annotation.Nullable;

/**
 * A view that renders a virtual {@link Keyboard}.
 *
@@ -557,9 +559,10 @@ public class KeyboardView extends View {
     * @param key key in the attached {@link Keyboard}.
     * @see #invalidateAllKeys
     */
    public void invalidateKey(final Key key) {
        if (mInvalidateAllKeys) return;
        if (key == null) return;
    public void invalidateKey(@Nullable final Key key) {
        if (key == null || mInvalidateAllKeys) {
            return;
        }
        mInvalidatedKeys.add(key);
        final int x = key.getX() + getPaddingLeft();
        final int y = key.getY() + getPaddingTop();
+22 −18
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ import android.view.ViewGroup;
import com.android.inputmethod.accessibility.AccessibilityUtils;
import com.android.inputmethod.accessibility.MainKeyboardAccessibilityDelegate;
import com.android.inputmethod.annotations.ExternallyReferenced;
import com.android.inputmethod.keyboard.PointerTracker.DrawingProxy;
import com.android.inputmethod.keyboard.internal.DrawingPreviewPlacerView;
import com.android.inputmethod.keyboard.internal.GestureFloatingTextDrawingPreview;
import com.android.inputmethod.keyboard.internal.GestureTrailsDrawingPreview;
@@ -110,7 +111,7 @@ import javax.annotation.Nullable;
 * @attr ref R.styleable#MainKeyboardView_suppressKeyPreviewAfterBatchInputDuration
 */
public final class MainKeyboardView extends KeyboardView implements PointerTracker.DrawingProxy,
        MoreKeysPanel.Controller, TimerHandler.Callbacks {
        MoreKeysPanel.Controller {
    private static final String TAG = MainKeyboardView.class.getSimpleName();

    /** Listener for {@link KeyboardActionListener}. */
@@ -178,7 +179,8 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
    public MainKeyboardView(final Context context, final AttributeSet attrs, final int defStyle) {
        super(context, attrs, defStyle);

        mDrawingPreviewPlacerView = new DrawingPreviewPlacerView(context, attrs);
        final DrawingPreviewPlacerView drawingPreviewPlacerView =
                new DrawingPreviewPlacerView(context, attrs);

        final TypedArray mainKeyboardViewAttr = context.obtainStyledAttributes(
                attrs, R.styleable.MainKeyboardView, defStyle, R.style.MainKeyboardView);
@@ -246,15 +248,17 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack

        mGestureFloatingTextDrawingPreview = new GestureFloatingTextDrawingPreview(
                mainKeyboardViewAttr);
        mGestureFloatingTextDrawingPreview.setDrawingView(mDrawingPreviewPlacerView);
        mGestureFloatingTextDrawingPreview.setDrawingView(drawingPreviewPlacerView);

        mGestureTrailsDrawingPreview = new GestureTrailsDrawingPreview(mainKeyboardViewAttr);
        mGestureTrailsDrawingPreview.setDrawingView(mDrawingPreviewPlacerView);
        mGestureTrailsDrawingPreview.setDrawingView(drawingPreviewPlacerView);

        mSlidingKeyInputDrawingPreview = new SlidingKeyInputDrawingPreview(mainKeyboardViewAttr);
        mSlidingKeyInputDrawingPreview.setDrawingView(mDrawingPreviewPlacerView);
        mSlidingKeyInputDrawingPreview.setDrawingView(drawingPreviewPlacerView);
        mainKeyboardViewAttr.recycle();

        mDrawingPreviewPlacerView = drawingPreviewPlacerView;

        final LayoutInflater inflater = LayoutInflater.from(getContext());
        mMoreKeysKeyboardContainer = inflater.inflate(moreKeysKeyboardLayoutId, null);
        mMoreKeysKeyboardForActionContainer = inflater.inflate(
@@ -307,20 +311,20 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
        animatorToStart.setCurrentPlayTime(startTime);
    }

    // Implements {@link TimerHander.Callbacks#startWhileTypingAnimation(int)}.
    // Implements {@link DrawingProxy#startWhileTypingAnimation(int)}.
    /**
     * Called when a while-typing-animation should be started.
     * @param fadeInOrOut {@link TimerHandler.Callbacks#FADE_IN} starts while-typing-fade-in
     * animation. {@link TimerHandler.Callbacks#FADE_OUT} starts while-typing-fade-out animation.
     * @param fadeInOrOut {@link DrawingProxy#FADE_IN} starts while-typing-fade-in animation.
     * {@link DrawingProxy#FADE_OUT} starts while-typing-fade-out animation.
     */
    @Override
    public void startWhileTypingAnimation(final int fadeInOrOut) {
        switch (fadeInOrOut) {
        case TimerHandler.Callbacks.FADE_IN:
        case DrawingProxy.FADE_IN:
            cancelAndStartAnimators(
                    mAltCodeKeyWhileTypingFadeoutAnimator, mAltCodeKeyWhileTypingFadeinAnimator);
            break;
        case TimerHandler.Callbacks.FADE_OUT:
        case DrawingProxy.FADE_OUT:
            cancelAndStartAnimators(
                    mAltCodeKeyWhileTypingFadeinAnimator, mAltCodeKeyWhileTypingFadeoutAnimator);
            break;
@@ -459,9 +463,9 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
    }

    @Override
    public void showKeyPreview(final Key key) {
    public void showKeyPreview(@Nonnull final Key key) {
        // If the key is invalid or has no key preview, we must not show key preview.
        if (key == null || key.noKeyPreview()) {
        if (key.noKeyPreview()) {
            return;
        }
        final Keyboard keyboard = getKeyboard();
@@ -480,7 +484,7 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
                getWidth(), mOriginCoords, mDrawingPreviewPlacerView, isHardwareAccelerated());
    }

    // Implements {@link TimerHandler.Callbacks#dismissKeyPreviewWithoutDelay(Key)}.
    // Implements {@link DrawingProxy#dismissKeyPreviewWithoutDelay(Key)}.
    @Override
    public void dismissKeyPreviewWithoutDelay(@Nonnull final Key key) {
        mKeyPreviewChoreographer.dismissKeyPreview(key, false /* withAnimation */);
@@ -488,7 +492,7 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
    }

    @Override
    public void dismissKeyPreview(final Key key) {
    public void dismissKeyPreview(@Nonnull final Key key) {
        if (isHardwareAccelerated()) {
            mKeyPreviewChoreographer.dismissKeyPreview(key, true /* withAnimation */);
            return;
@@ -502,7 +506,7 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
    }

    @Override
    public void showSlidingKeyInputPreview(final PointerTracker tracker) {
    public void showSlidingKeyInputPreview(@Nullable final PointerTracker tracker) {
        locatePreviewPlacerView();
        if (tracker != null) {
            mSlidingKeyInputDrawingPreview.setPreviewPosition(tracker);
@@ -529,14 +533,14 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
        }
    }

    // Implements {@link TimerHandler.Callbacks#dismissGestureFloatingPreviewTextWithoutDelay()}.
    // Implements {@link DrawingProxy#dismissGestureFloatingPreviewTextWithoutDelay()}.
    @Override
    public void dismissGestureFloatingPreviewTextWithoutDelay() {
        mGestureFloatingTextDrawingPreview.dismissGestureFloatingPreviewText();
    }

    @Override
    public void showGestureTrail(final PointerTracker tracker,
    public void showGestureTrail(@Nonnull final PointerTracker tracker,
            final boolean showsFloatingPreviewText) {
        locatePreviewPlacerView();
        if (showsFloatingPreviewText) {
@@ -603,7 +607,7 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
        return moreKeysKeyboardView;
    }

    // Implements {@link TimerHandler.Callbacks#onLongPress(PointerTracker)}.
    // Implements {@link DrawingProxy@onLongPress(PointerTracker)}.
    /**
     * Called when a key is long pressed.
     * @param tracker the pointer tracker which pressed the parent key
+14 −7
Original line number Diff line number Diff line
@@ -53,12 +53,18 @@ public final class PointerTracker implements PointerTrackerQueue.Element,
    private static boolean DEBUG_MODE = DebugFlags.DEBUG_ENABLED || DEBUG_EVENT;

    public interface DrawingProxy {
        public void invalidateKey(Key key);
        public void showKeyPreview(Key key);
        public void dismissKeyPreview(Key key);
        public void invalidateKey(@Nullable Key key);
        public void showKeyPreview(@Nonnull Key key);
        public void dismissKeyPreview(@Nonnull Key key);
        public void dismissKeyPreviewWithoutDelay(@Nonnull Key key);
        public void onLongPress(@Nonnull PointerTracker tracker);
        public static final int FADE_IN = 0;
        public static final int FADE_OUT = 1;
        public void startWhileTypingAnimation(final int fadeInOrOut);
        public void showSlidingKeyInputPreview(@Nullable PointerTracker tracker);
        public void showGestureTrail(@Nonnull PointerTracker tracker,
                boolean showsFloatingPreviewText);
        public void dismissGestureFloatingPreviewTextWithoutDelay();
    }

    public interface TimerProxy {
@@ -166,6 +172,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element,

    // The position and time at which first down event occurred.
    private long mDownTime;
    @Nonnull
    private int[] mDownCoordinates = CoordinateUtils.newInstance();
    private long mUpTime;

@@ -433,12 +440,12 @@ public final class PointerTracker implements PointerTrackerQueue.Element,
        return mKeyDetector.detectHitKey(x, y);
    }

    private void setReleasedKeyGraphics(final Key key) {
        sDrawingProxy.dismissKeyPreview(key);
    private void setReleasedKeyGraphics(@Nullable final Key key) {
        if (key == null) {
            return;
        }

        sDrawingProxy.dismissKeyPreview(key);
        // Even if the key is disabled, update the key release graphics just in case.
        updateReleaseKeyGraphics(key);

@@ -522,7 +529,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element,
        return mGestureStrokeDrawingPoints;
    }

    public void getLastCoordinates(final int[] outCoords) {
    public void getLastCoordinates(@Nonnull final int[] outCoords) {
        CoordinateUtils.set(outCoords, mLastX, mLastY);
    }

@@ -530,7 +537,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element,
        return mDownTime;
    }

    public void getDownCoordinates(final int[] outCoords) {
    public void getDownCoordinates(@Nonnull final int[] outCoords) {
        CoordinateUtils.copy(outCoords, mDownCoordinates);
    }

+15 −24
Original line number Diff line number Diff line
@@ -22,24 +22,15 @@ import android.view.ViewConfiguration;

import com.android.inputmethod.keyboard.Key;
import com.android.inputmethod.keyboard.PointerTracker;
import com.android.inputmethod.keyboard.PointerTracker.DrawingProxy;
import com.android.inputmethod.keyboard.PointerTracker.TimerProxy;
import com.android.inputmethod.keyboard.internal.TimerHandler.Callbacks;
import com.android.inputmethod.latin.common.Constants;
import com.android.inputmethod.latin.utils.LeakGuardHandlerWrapper;

import javax.annotation.Nonnull;

// TODO: Separate this class into KeyTimerHandler and BatchInputTimerHandler or so.
public final class TimerHandler extends LeakGuardHandlerWrapper<Callbacks> implements TimerProxy {
    public interface Callbacks {
        public static final int FADE_IN = 0;
        public static final int FADE_OUT = 1;
        public void startWhileTypingAnimation(final int fadeInOrOut);
        public void onLongPress(@Nonnull PointerTracker tracker);
        public void dismissKeyPreviewWithoutDelay(@Nonnull Key key);
        public void dismissGestureFloatingPreviewTextWithoutDelay();
    }

public final class TimerHandler extends LeakGuardHandlerWrapper<DrawingProxy>
        implements TimerProxy {
    private static final int MSG_TYPING_STATE_EXPIRED = 0;
    private static final int MSG_REPEAT_KEY = 1;
    private static final int MSG_LONGPRESS_KEY = 2;
@@ -52,8 +43,8 @@ public final class TimerHandler extends LeakGuardHandlerWrapper<Callbacks> imple
    private final int mIgnoreAltCodeKeyTimeout;
    private final int mGestureRecognitionUpdateTime;

    public TimerHandler(@Nonnull final Callbacks ownerInstance, final int ignoreAltCodeKeyTimeout,
            final int gestureRecognitionUpdateTime) {
    public TimerHandler(@Nonnull final DrawingProxy ownerInstance,
            final int ignoreAltCodeKeyTimeout, final int gestureRecognitionUpdateTime) {
        super(ownerInstance);
        mIgnoreAltCodeKeyTimeout = ignoreAltCodeKeyTimeout;
        mGestureRecognitionUpdateTime = gestureRecognitionUpdateTime;
@@ -61,13 +52,13 @@ public final class TimerHandler extends LeakGuardHandlerWrapper<Callbacks> imple

    @Override
    public void handleMessage(final Message msg) {
        final Callbacks callbacks = getOwnerInstance();
        if (callbacks == null) {
        final DrawingProxy drawingProxy = getOwnerInstance();
        if (drawingProxy == null) {
            return;
        }
        switch (msg.what) {
        case MSG_TYPING_STATE_EXPIRED:
            callbacks.startWhileTypingAnimation(Callbacks.FADE_IN);
            drawingProxy.startWhileTypingAnimation(DrawingProxy.FADE_IN);
            break;
        case MSG_REPEAT_KEY:
            final PointerTracker tracker1 = (PointerTracker) msg.obj;
@@ -77,7 +68,7 @@ public final class TimerHandler extends LeakGuardHandlerWrapper<Callbacks> imple
        case MSG_LONGPRESS_SHIFT_KEY:
            cancelLongPressTimers();
            final PointerTracker tracker2 = (PointerTracker) msg.obj;
            callbacks.onLongPress(tracker2);
            drawingProxy.onLongPress(tracker2);
            break;
        case MSG_UPDATE_BATCH_INPUT:
            final PointerTracker tracker3 = (PointerTracker) msg.obj;
@@ -86,10 +77,10 @@ public final class TimerHandler extends LeakGuardHandlerWrapper<Callbacks> imple
            break;
        case MSG_DISMISS_KEY_PREVIEW:
            final Key key = (Key) msg.obj;
            callbacks.dismissKeyPreviewWithoutDelay(key);
            drawingProxy.dismissKeyPreviewWithoutDelay(key);
            break;
        case MSG_DISMISS_GESTURE_FLOATING_PREVIEW_TEXT:
            callbacks.dismissGestureFloatingPreviewTextWithoutDelay();
            drawingProxy.dismissGestureFloatingPreviewTextWithoutDelay();
            break;
        }
    }
@@ -155,8 +146,8 @@ public final class TimerHandler extends LeakGuardHandlerWrapper<Callbacks> imple

        final boolean isTyping = isTypingState();
        removeMessages(MSG_TYPING_STATE_EXPIRED);
        final Callbacks callbacks = getOwnerInstance();
        if (callbacks == null) {
        final DrawingProxy drawingProxy = getOwnerInstance();
        if (drawingProxy == null) {
            return;
        }

@@ -164,7 +155,7 @@ public final class TimerHandler extends LeakGuardHandlerWrapper<Callbacks> imple
        final int typedCode = typedKey.getCode();
        if (typedCode == Constants.CODE_SPACE || typedCode == Constants.CODE_ENTER) {
            if (isTyping) {
                callbacks.startWhileTypingAnimation(Callbacks.FADE_IN);
                drawingProxy.startWhileTypingAnimation(DrawingProxy.FADE_IN);
            }
            return;
        }
@@ -174,7 +165,7 @@ public final class TimerHandler extends LeakGuardHandlerWrapper<Callbacks> imple
        if (isTyping) {
            return;
        }
        callbacks.startWhileTypingAnimation(Callbacks.FADE_OUT);
        drawingProxy.startWhileTypingAnimation(DrawingProxy.FADE_OUT);
    }

    @Override