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

Commit 5e02930a authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka
Browse files

Reduce delay before mini popup keyboard is shown

Before this change, the delay was 500 ms that came from
ViewConfiguration.getLongPressTimeout().  This change reduces the
delay to 400 ms.

Bug: 3074984
Change-Id: Ia5af5e877a3c4bb29211ef4040c728ac09a9fe85
parent e13a3013
Loading
Loading
Loading
Loading

java/res/layout/input_trans.xml

deleted100644 → 0
+0 −32
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!--
/* 
**
** Copyright 2010, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License"); 
** you may not use this file except in compliance with the License. 
** You may obtain a copy of the License at 
**
**     http://www.apache.org/licenses/LICENSE-2.0 
**
** Unless required by applicable law or agreed to in writing, software 
** distributed under the License is distributed on an "AS IS" BASIS, 
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
** See the License for the specific language governing permissions and 
** limitations under the License.
*/
-->

<com.android.inputmethod.latin.LatinKeyboardView
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
        android:id="@android:id/keyboardView"
        android:layout_alignParentBottom="true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/latinkeyboard_extension_background"
        android:verticalCorrection="0dip"

        latin:keyBackground="@drawable/btn_keyboard_key_fulltrans"
        />
+4 −0
Original line number Diff line number Diff line
@@ -25,4 +25,8 @@
    <integer name="config_preview_fadeout_anim_time">90</integer>
    <integer name="config_mini_keyboard_fadein_anim_time">0</integer>
    <integer name="config_mini_keyboard_fadeout_anim_time">100</integer>
    <integer name="config_delay_before_key_repeat_start">400</integer>
    <integer name="config_key_repeat_interval">50</integer>
    <integer name="config_long_press_key_timeout">400</integer>
    <integer name="config_multi_tap_key_timeout">800</integer>
</resources>
+4 −3
Original line number Diff line number Diff line
@@ -154,7 +154,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx
    }

    // Timing constants
    private static final int REPEAT_INTERVAL = PointerTracker.REPEAT_INTERVAL;
    private final int mKeyRepeatInterval;

    // Miscellaneous constants
    /* package */ static final int NOT_A_KEY = -1;
@@ -261,7 +261,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx
                case MSG_REPEAT_KEY: {
                    final PointerTracker tracker = (PointerTracker)msg.obj;
                    tracker.repeatKey(msg.arg1);
                    startKeyRepeatTimer(REPEAT_INTERVAL, msg.arg1, tracker);
                    startKeyRepeatTimer(mKeyRepeatInterval, msg.arg1, tracker);
                    break;
                }
                case MSG_LONGPRESS_KEY: {
@@ -542,6 +542,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx

        mHasDistinctMultitouch = context.getPackageManager()
                .hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT);
        mKeyRepeatInterval = res.getInteger(R.integer.config_key_repeat_interval);
    }

    public void setOnKeyboardActionListener(OnKeyboardActionListener listener) {
@@ -1218,7 +1219,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx
        // Create pointer trackers until we can get 'id+1'-th tracker, if needed.
        for (int i = pointers.size(); i <= id; i++) {
            final PointerTracker tracker =
                new PointerTracker(i, mHandler, mKeyDetector, this, mHasDistinctMultitouch);
                new PointerTracker(i, mHandler, mKeyDetector, this, getResources());
            if (keys != null)
                tracker.setKeyboard(keys, mKeyHysteresisDistance);
            if (listener != null)
+15 −12
Original line number Diff line number Diff line
@@ -19,11 +19,11 @@ package com.android.inputmethod.latin;
import com.android.inputmethod.latin.LatinKeyboardBaseView.OnKeyboardActionListener;
import com.android.inputmethod.latin.LatinKeyboardBaseView.UIHandler;

import android.content.res.Resources;
import android.inputmethodservice.Keyboard;
import android.inputmethodservice.Keyboard.Key;
import android.util.Log;
import android.view.MotionEvent;
import android.view.ViewConfiguration;

public class PointerTracker {
    private static final String TAG = "PointerTracker";
@@ -33,15 +33,15 @@ public class PointerTracker {
    public interface UIProxy {
        public void invalidateKey(Key key);
        public void showPreview(int keyIndex, PointerTracker tracker);
        public boolean hasDistinctMultitouch();
    }

    public final int mPointerId;

    // Timing constants
    private static final int REPEAT_START_DELAY = 400;
    /* package */  static final int REPEAT_INTERVAL = 50; // ~20 keys per second
    private static final int LONGPRESS_TIMEOUT = ViewConfiguration.getLongPressTimeout();
    private static final int MULTITAP_INTERVAL = 800; // milliseconds
    private final int mDelayBeforeKeyRepeatStart;
    private final int mLongPressKeyTimeout;
    private final int mMultiTapKeyTimeout;

    // Miscellaneous constants
    private static final int NOT_A_KEY = LatinKeyboardBaseView.NOT_A_KEY;
@@ -164,7 +164,7 @@ public class PointerTracker {
    }

    public PointerTracker(int id, UIHandler handler, KeyDetector keyDetector, UIProxy proxy,
            boolean hasDistinctMultitouch) {
            Resources res) {
        if (proxy == null || handler == null || keyDetector == null)
            throw new NullPointerException();
        mPointerId = id;
@@ -172,7 +172,10 @@ public class PointerTracker {
        mHandler = handler;
        mKeyDetector = keyDetector;
        mKeyState = new KeyState(keyDetector);
        mHasDistinctMultitouch = hasDistinctMultitouch;
        mHasDistinctMultitouch = proxy.hasDistinctMultitouch();
        mDelayBeforeKeyRepeatStart = res.getInteger(R.integer.config_delay_before_key_repeat_start);
        mLongPressKeyTimeout = res.getInteger(R.integer.config_long_press_key_timeout);
        mMultiTapKeyTimeout = res.getInteger(R.integer.config_multi_tap_key_timeout);
        resetMultiTap();
    }

@@ -278,10 +281,10 @@ public class PointerTracker {
        if (isValidKeyIndex(keyIndex)) {
            if (mKeys[keyIndex].repeatable) {
                repeatKey(keyIndex);
                mHandler.startKeyRepeatTimer(REPEAT_START_DELAY, keyIndex, this);
                mHandler.startKeyRepeatTimer(mDelayBeforeKeyRepeatStart, keyIndex, this);
                mIsRepeatableKey = true;
            }
            mHandler.startLongPressTimer(LONGPRESS_TIMEOUT, keyIndex, this);
            mHandler.startLongPressTimer(mLongPressKeyTimeout, keyIndex, this);
        }
        showKeyPreviewAndUpdateKey(keyIndex);
    }
@@ -296,11 +299,11 @@ public class PointerTracker {
        if (isValidKeyIndex(keyIndex)) {
            if (keyState.getKeyIndex() == NOT_A_KEY) {
                keyState.onMoveToNewKey(keyIndex, x, y);
                mHandler.startLongPressTimer(LONGPRESS_TIMEOUT, keyIndex, this);
                mHandler.startLongPressTimer(mLongPressKeyTimeout, keyIndex, this);
            } else if (!isMinorMoveBounce(x, y, keyIndex)) {
                resetMultiTap();
                keyState.onMoveToNewKey(keyIndex, x, y);
                mHandler.startLongPressTimer(LONGPRESS_TIMEOUT, keyIndex, this);
                mHandler.startLongPressTimer(mLongPressKeyTimeout, keyIndex, this);
            }
        } else {
            if (keyState.getKeyIndex() != NOT_A_KEY) {
@@ -489,7 +492,7 @@ public class PointerTracker {
            return;

        final boolean isMultiTap =
                (eventTime < mLastTapTime + MULTITAP_INTERVAL && keyIndex == mLastSentIndex);
                (eventTime < mLastTapTime + mMultiTapKeyTimeout && keyIndex == mLastSentIndex);
        if (key.codes.length > 1) {
            mInMultiTap = true;
            if (isMultiTap) {