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

Commit 50e1073e authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka
Browse files

More suggestions view can be modal

Bug: 5241105
Change-Id: Ib430ee129b9f3cad0bdb1ae083b1068c51a5f2ea
parent 4269a7ce
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -80,7 +80,8 @@
    <dimen name="more_suggestions_key_horizontal_padding">12dip</dimen>
    <dimen name="more_suggestions_row_height">40dip</dimen>
    <dimen name="more_suggestions_bottom_gap">6dip</dimen>
    <dimen name="more_suggestions_slide_allowance">0.2in</dimen>
    <dimen name="more_suggestions_modal_tolerance">0.05in</dimen>
    <dimen name="more_suggestions_slide_allowance">0.1in</dimen>
    <integer name="max_more_suggestions_row">6</integer>
    <fraction name="min_more_suggestions_width">90%</fraction>
    <fraction name="more_suggestions_info_ratio">18%</fraction>
+0 −2
Original line number Diff line number Diff line
@@ -438,8 +438,6 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
            mMoreKeysWindow = new PopupWindow(getContext());
            mMoreKeysWindow.setBackgroundDrawable(null);
            mMoreKeysWindow.setAnimationStyle(R.style.MiniKeyboardAnimation);
            // Allow popup window to be drawn off the screen.
            mMoreKeysWindow.setClippingEnabled(false);
        }
        mMoreKeysPanel = moreKeysPanel;
        mMoreKeysPanelPointerTrackerId = tracker.mPointerId;
+2 −4
Original line number Diff line number Diff line
@@ -79,10 +79,8 @@ public class MiniKeyboardView extends KeyboardView implements MoreKeysPanel {
        super(context, attrs, defStyle);

        final Resources res = context.getResources();
        // Override default ProximityKeyDetector.
        mKeyDetector = new MoreKeysDetector(res.getDimension(
                R.dimen.mini_keyboard_slide_allowance));
        // Remove gesture detector on mini-keyboard
        mKeyDetector = new MoreKeysDetector(
                res.getDimension(R.dimen.mini_keyboard_slide_allowance));
        setKeyPreviewPopupEnabled(false, 0);
    }

+46 −7
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.content.Context;
import android.content.res.Resources;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.widget.PopupWindow;

@@ -29,7 +30,9 @@ import com.android.inputmethod.keyboard.KeyboardActionListener;
import com.android.inputmethod.keyboard.KeyboardView;
import com.android.inputmethod.keyboard.MoreKeysDetector;
import com.android.inputmethod.keyboard.MoreKeysPanel;
import com.android.inputmethod.keyboard.PointerTracker;
import com.android.inputmethod.keyboard.PointerTracker.DrawingProxy;
import com.android.inputmethod.keyboard.PointerTracker.KeyEventHandler;
import com.android.inputmethod.keyboard.PointerTracker.TimerProxy;


@@ -40,7 +43,8 @@ import com.android.inputmethod.keyboard.PointerTracker.TimerProxy;
public class MoreSuggestionsView extends KeyboardView implements MoreKeysPanel {
    private final int[] mCoordinates = new int[2];

    private final KeyDetector mKeyDetector;
    private final KeyDetector mModalPanelKeyDetector;
    private final KeyDetector mSlidingPanelKeyDetector;

    private Controller mController;
    private KeyboardActionListener mListener;
@@ -80,10 +84,9 @@ public class MoreSuggestionsView extends KeyboardView implements MoreKeysPanel {
        super(context, attrs, defStyle);

        final Resources res = context.getResources();
        // Override default ProximityKeyDetector.
        mKeyDetector = new MoreKeysDetector(res.getDimension(
                R.dimen.more_suggestions_slide_allowance));
        // Remove gesture detector on suggestions pane
        mModalPanelKeyDetector = new KeyDetector(/* keyHysteresisDistance */ 0);
        mSlidingPanelKeyDetector = new MoreKeysDetector(
                res.getDimension(R.dimen.more_suggestions_slide_allowance));
        setKeyPreviewPopupEnabled(false, 0);
    }

@@ -102,13 +105,14 @@ public class MoreSuggestionsView extends KeyboardView implements MoreKeysPanel {
    @Override
    public void setKeyboard(Keyboard keyboard) {
        super.setKeyboard(keyboard);
        mKeyDetector.setKeyboard(keyboard, -getPaddingLeft(),
        mModalPanelKeyDetector.setKeyboard(keyboard, -getPaddingLeft(), -getPaddingTop());
        mSlidingPanelKeyDetector.setKeyboard(keyboard, -getPaddingLeft(),
                -getPaddingTop() + mVerticalCorrection);
    }

    @Override
    public KeyDetector getKeyDetector() {
        return mKeyDetector;
        return mSlidingPanelKeyDetector;
    }

    @Override
@@ -187,4 +191,39 @@ public class MoreSuggestionsView extends KeyboardView implements MoreKeysPanel {
    public int translateY(int y) {
        return y - mOriginY;
    }

    private final KeyEventHandler mModalPanelKeyEventHandler = new KeyEventHandler() {
        @Override
        public KeyDetector getKeyDetector() {
            return mModalPanelKeyDetector;
        }

        @Override
        public KeyboardActionListener getKeyboardActionListener() {
            return mSuggestionsPaneListener;
        }

        @Override
        public DrawingProxy getDrawingProxy() {
            return MoreSuggestionsView.this;
        }

        @Override
        public TimerProxy getTimerProxy() {
            return EMPTY_TIMER_PROXY;
        }
    };

    @Override
    public boolean onTouchEvent(MotionEvent me) {
        final int action = me.getAction();
        final long eventTime = me.getEventTime();
        final int index = me.getActionIndex();
        final int id = me.getPointerId(index);
        final PointerTracker tracker = PointerTracker.getPointerTracker(id, this);
        final int x = (int)me.getX(index);
        final int y = (int)me.getY(index);
        tracker.processMotionEvent(action, x, y, eventTime, mModalPanelKeyEventHandler);
        return true;
    }
}
+33 −6
Original line number Diff line number Diff line
@@ -503,6 +503,9 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,
        mMoreSuggestionsWindow.setWindowLayoutMode(
                ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        mMoreSuggestionsWindow.setBackgroundDrawable(null);
        final Resources res = context.getResources();
        mMoreSuggestionsModalTolerance = res.getDimensionPixelOffset(
                R.dimen.more_suggestions_modal_tolerance);
    }

    /**
@@ -747,12 +750,9 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,
            moreKeysPanel.showMoreKeysPanel(
                    this, mMoreSuggestionsController, pointX, pointY,
                    mMoreSuggestionsWindow, mMoreSuggestionsListener);
            // TODO: Should figure out how to select the pointer tracker correctly.
            final PointerTracker tracker = PointerTracker.getPointerTracker(0, moreKeysPanel);
            final int translatedX = moreKeysPanel.translateX(tracker.getLastX());
            final int translatedY = moreKeysPanel.translateY(tracker.getLastY());
            tracker.onShowMoreKeysPanel(
                    translatedX, translatedY, SystemClock.uptimeMillis(), moreKeysPanel);
            mCheckingIfModalOrSlidingMode = true;
            mOriginX = mLastX;
            mOriginY = mLastY;
            view.setPressed(false);
            mKeyboardView.dimEntireKeyboard(true);
            return true;
@@ -760,9 +760,19 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,
        return false;
    }

    // Working variables for onLongClick and dispatchTouchEvent.
    private boolean mCheckingIfModalOrSlidingMode;
    private int mLastX;
    private int mLastY;
    private int mOriginX;
    private int mOriginY;
    private final int mMoreSuggestionsModalTolerance;

    @Override
    public boolean dispatchTouchEvent(MotionEvent me) {
        if (!mMoreSuggestionsWindow.isShowing()) {
            mLastX = (int)me.getX();
            mLastY = (int)me.getY();
            return super.dispatchTouchEvent(me);
        }

@@ -777,6 +787,23 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,
        final int translatedX = moreKeysPanel.translateX(x);
        final int translatedY = moreKeysPanel.translateY(y);

        if (mCheckingIfModalOrSlidingMode) {
            final int deltaX = Math.abs(x - mOriginX);
            final int deltaY = Math.abs(y - mOriginY);
            if (deltaX >= mMoreSuggestionsModalTolerance
                    || deltaY >= mMoreSuggestionsModalTolerance) {
                // Decided to be in the sliding input mode
                mCheckingIfModalOrSlidingMode = false;
                tracker.onShowMoreKeysPanel(
                        translatedX, translatedY, SystemClock.uptimeMillis(), moreKeysPanel);
            } else if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_POINTER_UP) {
                // Decided to be in the modal input mode
                mCheckingIfModalOrSlidingMode = false;
            }
            return true;
        }

        // Process sliding motion events
        tracker.processMotionEvent(action, translatedX, translatedY, eventTime, moreKeysPanel);
        return true;
    }