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

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

Merge "Distinguish key press in repeat key"

parents 06aa3d02 6455172a
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -26,9 +26,10 @@ public interface KeyboardActionListener {
     *
     * @param primaryCode the unicode of the key being pressed. If the touch is not on a valid key,
     *            the value will be zero.
     * @param isRepeatKey true if pressing has occurred while key repeat input.
     * @param isSinglePointer true if pressing has occurred while no other key is being pressed.
     */
    public void onPressKey(int primaryCode, boolean isSinglePointer);
    public void onPressKey(int primaryCode, boolean isRepeatKey, boolean isSinglePointer);

    /**
     * Called when the user releases a key. This is sent after the {@link #onCodeInput} is called.
@@ -102,7 +103,7 @@ public interface KeyboardActionListener {

    public static class Adapter implements KeyboardActionListener {
        @Override
        public void onPressKey(int primaryCode, boolean isSinglePointer) {}
        public void onPressKey(int primaryCode, boolean isRepeatKey, boolean isSinglePointer) {}
        @Override
        public void onReleaseKey(int primaryCode, boolean withSliding) {}
        @Override
+2 −2
Original line number Diff line number Diff line
@@ -246,7 +246,7 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
                    startTypingStateTimer(currentKey);
                    final KeyboardActionListener listener =
                            keyboardView.getKeyboardActionListener();
                    listener.onPressKey(code, true /* isSinglePointer */);
                    listener.onPressKey(code, true /* isRepeatKey */, true /* isSinglePointer */);
                    listener.onCodeInput(code,
                            Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE);
                }
@@ -987,7 +987,7 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
        if (key.hasNoPanelAutoMoreKey()) {
            final int moreKeyCode = key.mMoreKeys[0].mCode;
            tracker.onLongPressed();
            listener.onPressKey(moreKeyCode, true /* isSinglePointer */);
            listener.onPressKey(moreKeyCode, false /* isRepeatKey */, true /* isSinglePointer */);
            listener.onCodeInput(moreKeyCode,
                    Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE);
            listener.onReleaseKey(moreKeyCode, false /* withSliding */);
+2 −1
Original line number Diff line number Diff line
@@ -456,7 +456,8 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
            return false;
        }
        if (key.isEnabled()) {
            mListener.onPressKey(key.mCode, getActivePointerTrackerCount() == 1);
            mListener.onPressKey(key.mCode, false /* isRepeatKey */,
                    getActivePointerTrackerCount() == 1);
            final boolean keyboardLayoutHasBeenChanged = mKeyboardLayoutHasBeenChanged;
            mKeyboardLayoutHasBeenChanged = false;
            mTimerProxy.startTypingStateTimer(key);
+17 −9
Original line number Diff line number Diff line
@@ -2677,22 +2677,30 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
        }
    }

    private void hapticAndAudioFeedback(final int code, final boolean isRepeatKey) {
        final MainKeyboardView keyboardView = mKeyboardSwitcher.getMainKeyboardView();
        if (keyboardView != null && keyboardView.isInSlidingKeyInput()) {
            // No need to feedback while sliding input.
            return;
        }
        if (isRepeatKey && code == Constants.CODE_DELETE && !mConnection.canDeleteCharacters()) {
            // No need to feedback when repeating delete key will have no effect.
            return;
        }
        AudioAndHapticFeedbackManager.getInstance().hapticAndAudioFeedback(code, keyboardView);
    }

    // Callback of the {@link KeyboardActionListener}. This is called when a key is depressed;
    // release matching call is {@link #onReleaseKey(int,boolean)} below.
    @Override
    public void onPressKey(final int primaryCode, final boolean isSinglePointer) {
    public void onPressKey(final int primaryCode, final boolean isRepeatKey,
            final boolean isSinglePointer) {
        mKeyboardSwitcher.onPressKey(primaryCode, isSinglePointer);
        final MainKeyboardView mKeyboardView = mKeyboardSwitcher.getMainKeyboardView();
        final boolean noFeedback = (mKeyboardView != null && mKeyboardView.isInSlidingKeyInput())
                || (primaryCode == Constants.CODE_DELETE && !mConnection.canDeleteCharacters());
        if (!noFeedback) {
            AudioAndHapticFeedbackManager.getInstance().hapticAndAudioFeedback(
                    primaryCode, mKeyboardView);
        }
        hapticAndAudioFeedback(primaryCode, isRepeatKey);
    }

    // Callback of the {@link KeyboardActionListener}. This is called when a key is released;
    // press matching call is {@link #onPressKey(int,boolean)} above.
    // press matching call is {@link #onPressKey(int,boolean,boolean)} above.
    @Override
    public void onReleaseKey(final int primaryCode, final boolean withSliding) {
        mKeyboardSwitcher.onReleaseKey(primaryCode, withSliding);