diff --git a/java/res/layout/input_trans.xml b/java/res/layout/input_trans.xml
deleted file mode 100644
index 4c0979c04..000000000
--- a/java/res/layout/input_trans.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
diff --git a/java/res/values/config.xml b/java/res/values/config.xml
index 5b5656d84..1c351e86f 100644
--- a/java/res/values/config.xml
+++ b/java/res/values/config.xml
@@ -25,6 +25,10 @@
90
0
100
+ 400
+ 50
+ 400
+ 800
diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java
index 05b29b9b5..d319d4020 100644
--- a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java
+++ b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java
@@ -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) {
@@ -1221,7 +1222,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(mKeyboard, keys, mKeyHysteresisDistance);
if (listener != null)
diff --git a/java/src/com/android/inputmethod/latin/PointerTracker.java b/java/src/com/android/inputmethod/latin/PointerTracker.java
index 6517a206e..a1cc8090e 100644
--- a/java/src/com/android/inputmethod/latin/PointerTracker.java
+++ b/java/src/com/android/inputmethod/latin/PointerTracker.java
@@ -20,9 +20,11 @@ import com.android.inputmethod.latin.BaseKeyboard.Key;
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";
@@ -32,15 +34,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 +166,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 +174,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();
}
@@ -279,10 +284,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;
}
- startLongPressTimer(keyIndex);
+ mHandler.startLongPressTimer(mLongPressKeyTimeout, keyIndex, this);
}
showKeyPreviewAndUpdateKey(keyIndex);
}
@@ -298,11 +303,11 @@ public class PointerTracker {
if (key != null) {
if (keyState.getKeyIndex() == NOT_A_KEY) {
keyState.onMoveToNewKey(keyIndex, x, y);
- startLongPressTimer(keyIndex);
+ mHandler.startLongPressTimer(mLongPressKeyTimeout, keyIndex, this);
} else if (!isMinorMoveBounce(x, y, keyIndex)) {
resetMultiTap();
keyState.onMoveToNewKey(keyIndex, x, y);
- startLongPressTimer(keyIndex);
+ mHandler.startLongPressTimer(mLongPressKeyTimeout, keyIndex, this);
}
} else {
if (keyState.getKeyIndex() != NOT_A_KEY) {
@@ -513,7 +518,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) {