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

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

Merge "Make PopupPanel decoupled with LatinKeyboardView and Keyboard"

parents 94051498 f44a01b4
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -81,6 +81,7 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
    private int mOldPointerCount = 1;
    private int mOldKeyIndex;

    private final boolean mConfigShowMiniKeyboardAtTouchedPoint;
    protected KeyDetector mKeyDetector;

    // To detect double tap.
@@ -225,6 +226,8 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
        a.recycle();

        final Resources res = getResources();
        mConfigShowMiniKeyboardAtTouchedPoint = res.getBoolean(
                R.bool.config_show_mini_keyboard_at_touched_point);
        final float keyHysteresisDistance = res.getDimension(R.dimen.key_hysteresis_distance);
        mKeyDetector = new KeyDetector(keyHysteresisDistance);

@@ -459,7 +462,13 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
        mPopupPanel = popupPanel;
        mPopupPanelPointerTrackerId = tracker.mPointerId;

        popupPanel.showPopupPanel(this, parentKey, tracker, mPopupWindow);
        final Keyboard keyboard = getKeyboard();
        mPopupPanel.setShifted(keyboard.isShiftedOrShiftLocked());
        final int pointX = (mConfigShowMiniKeyboardAtTouchedPoint) ? tracker.getLastX()
                : parentKey.mX + parentKey.mWidth / 2;
        final int pointY = parentKey.mY - keyboard.mVerticalGap;
        popupPanel.showPopupPanel(
                this, this, pointX, pointY, mPopupWindow, getKeyboardActionListener());
        final int translatedX = popupPanel.translateX(tracker.getLastX());
        final int translatedY = popupPanel.translateY(tracker.getLastY());
        tracker.onShowPopupPanel(translatedX, translatedY, SystemClock.uptimeMillis(), popupPanel);
+1 −2
Original line number Diff line number Diff line
@@ -63,13 +63,12 @@ public class PointerTracker {
        public TimerProxy getTimerProxy();
    }

    public interface DrawingProxy {
    public interface DrawingProxy extends PopupPanel.Controller {
        public void invalidateKey(Key key);
        public TextView inflateKeyPreviewText();
        public void showKeyPreview(int keyIndex, PointerTracker tracker);
        public void cancelShowKeyPreview(PointerTracker tracker);
        public void dismissKeyPreview(PointerTracker tracker);
        public boolean dismissPopupPanel();
    }

    public interface TimerProxy {
+29 −30
Original line number Diff line number Diff line
@@ -36,12 +36,12 @@ import java.util.List;
 */
public class PopupMiniKeyboardView extends KeyboardView implements PopupPanel {
    private final int[] mCoordinates = new int[2];
    private final boolean mConfigShowMiniKeyboardAtTouchedPoint;

    private final KeyDetector mKeyDetector;
    private final int mVerticalCorrection;

    private LatinKeyboardView mParentKeyboardView;
    private Controller mController;
    private KeyboardActionListener mListener;
    private int mOriginX;
    private int mOriginY;

@@ -101,30 +101,29 @@ public class PopupMiniKeyboardView extends KeyboardView implements PopupPanel {
        public void cancelKeyTimers() {}
    };

    private final KeyboardActionListener mListner = new KeyboardActionListener() {
    private final KeyboardActionListener mMiniKeyboardListener = new KeyboardActionListener() {
        @Override
        public void onCodeInput(int primaryCode, int[] keyCodes, int x, int y) {
            mParentKeyboardView.getKeyboardActionListener()
                    .onCodeInput(primaryCode, keyCodes, x, y);
            mListener.onCodeInput(primaryCode, keyCodes, x, y);
        }

        @Override
        public void onTextInput(CharSequence text) {
            mParentKeyboardView.getKeyboardActionListener().onTextInput(text);
            mListener.onTextInput(text);
        }

        @Override
        public void onCancelInput() {
            mParentKeyboardView.getKeyboardActionListener().onCancelInput();
            mListener.onCancelInput();
        }

        @Override
        public void onPress(int primaryCode, boolean withSliding) {
            mParentKeyboardView.getKeyboardActionListener().onPress(primaryCode, withSliding);
            mListener.onPress(primaryCode, withSliding);
        }
        @Override
        public void onRelease(int primaryCode, boolean withSliding) {
            mParentKeyboardView.getKeyboardActionListener().onRelease(primaryCode, withSliding);
            mListener.onRelease(primaryCode, withSliding);
        }
        @Override
        public boolean onCustomRequest(int requestCode) { return false; }
@@ -144,8 +143,6 @@ public class PopupMiniKeyboardView extends KeyboardView implements PopupPanel {
        a.recycle();

        final Resources res = context.getResources();
        mConfigShowMiniKeyboardAtTouchedPoint = res.getBoolean(
                R.bool.config_show_mini_keyboard_at_touched_point);
        // Override default ProximityKeyDetector.
        mKeyDetector = new MiniKeyboardKeyDetector(res.getDimension(
                R.dimen.mini_keyboard_slide_allowance));
@@ -179,7 +176,7 @@ public class PopupMiniKeyboardView extends KeyboardView implements PopupPanel {

    @Override
    public KeyboardActionListener getKeyboardActionListener() {
        return mListner;
        return mMiniKeyboardListener;
    }

    @Override
@@ -200,34 +197,36 @@ public class PopupMiniKeyboardView extends KeyboardView implements PopupPanel {
    }

    @Override
    public void showPopupPanel(LatinKeyboardView parentKeyboardView, Key parentKey,
            PointerTracker tracker, PopupWindow window) {
        mParentKeyboardView = parentKeyboardView;
    public void setShifted(boolean shifted) {
        final MiniKeyboard miniKeyboard = (MiniKeyboard)getKeyboard();
        if (miniKeyboard.setShifted(shifted)) {
            invalidateAllKeys();
        }
    }

    @Override
    public void showPopupPanel(View parentView, Controller controller, int pointX, int pointY,
            PopupWindow window, KeyboardActionListener listener) {
        mController = controller;
        mListener = listener;
        final View container = (View)getParent();
        final MiniKeyboard miniKeyboard = (MiniKeyboard)getKeyboard();
        final Keyboard parentKeyboard = parentKeyboardView.getKeyboard();

        parentKeyboardView.getLocationInWindow(mCoordinates);
        final int pointX = (mConfigShowMiniKeyboardAtTouchedPoint) ? tracker.getLastX()
                : parentKey.mX + parentKey.mWidth / 2;
        final int pointY = parentKey.mY;
        parentView.getLocationInWindow(mCoordinates);
        final int miniKeyboardLeft = pointX - miniKeyboard.getDefaultCoordX()
                + parentKeyboardView.getPaddingLeft();
                + parentView.getPaddingLeft();
        final int x = wrapUp(Math.max(0, Math.min(miniKeyboardLeft,
                parentKeyboardView.getWidth() - miniKeyboard.mOccupiedWidth))
                parentView.getWidth() - miniKeyboard.mOccupiedWidth))
                - container.getPaddingLeft() + mCoordinates[0],
                container.getMeasuredWidth(), 0, parentKeyboardView.getWidth());
        final int y = pointY - parentKeyboard.mVerticalGap
                container.getMeasuredWidth(), 0, parentView.getWidth());
        final int y = pointY
                - (container.getMeasuredHeight() - container.getPaddingBottom())
                + parentKeyboardView.getPaddingTop() + mCoordinates[1];
                + parentView.getPaddingTop() + mCoordinates[1];

        if (miniKeyboard.setShifted(parentKeyboard.isShiftedOrShiftLocked())) {
            invalidateAllKeys();
        }
        window.setContentView(container);
        window.setWidth(container.getMeasuredWidth());
        window.setHeight(container.getMeasuredHeight());
        window.showAtLocation(parentKeyboardView, Gravity.NO_GRAVITY, x, y);
        window.showAtLocation(parentView, Gravity.NO_GRAVITY, x, y);

        mOriginX = x + container.getPaddingLeft() - mCoordinates[0];
        mOriginY = y + container.getPaddingTop() - mCoordinates[1];
@@ -243,7 +242,7 @@ public class PopupMiniKeyboardView extends KeyboardView implements PopupPanel {

    @Override
    public boolean dismissPopupPanel() {
        return mParentKeyboardView.dismissPopupPanel();
        return mController.dismissPopupPanel();
    }

    @Override
+14 −5
Original line number Diff line number Diff line
@@ -16,18 +16,27 @@

package com.android.inputmethod.keyboard;

import android.view.View;
import android.widget.PopupWindow;

public interface PopupPanel extends PointerTracker.KeyEventHandler {
    public interface Controller {
        public boolean dismissPopupPanel();
    }

    public void setShifted(boolean shifted);

    /**
     * Show popup panel.
     * @param parentKeyboardView the parent KeyboardView that has the parent key.
     * @param parentKey the parent key that is the source of this popup panel
     * @param tracker the pointer tracker that pressesd the parent key
     * @param parentView the parent view of this popup panel
     * @param controller the controller that can dismiss this popup panel
     * @param pointX x coordinate of this popup panel
     * @param pointY y coordinate of this popup panel
     * @param window PopupWindow to be used to show this popup panel
     * @param listener the listener that will receive keyboard action from this popup panel.
     */
    public void showPopupPanel(LatinKeyboardView parentKeyboardView, Key parentKey,
            PointerTracker tracker, PopupWindow window);
    public void showPopupPanel(View parentView, Controller controller, int pointX, int pointY,
            PopupWindow window, KeyboardActionListener listener);

    /**
     * Translate X-coordinate of touch event to the local X-coordinate of this PopupPanel.