[Scummvm-git-logs] scummvm master -> cff369a14bc3dc92aad5080c20ffd8fd364b9e31
antoniou79
a.antoniou79 at gmail.com
Sat Oct 24 13:04:28 UTC 2020
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
cff369a14b ANDROID: Handle repeating keys for virtual keyboard
Commit: cff369a14bc3dc92aad5080c20ffd8fd364b9e31
https://github.com/scummvm/scummvm/commit/cff369a14bc3dc92aad5080c20ffd8fd364b9e31
Author: antoniou (a.antoniou79 at gmail.com)
Date: 2020-10-24T16:04:11+03:00
Commit Message:
ANDROID: Handle repeating keys for virtual keyboard
Changed paths:
backends/platform/android/org/scummvm/scummvm/CustomKeyboardView.java
backends/platform/android/org/scummvm/scummvm/ScummVMActivity.java
backends/platform/android/org/scummvm/scummvm/ScummVMEventsBase.java
diff --git a/backends/platform/android/org/scummvm/scummvm/CustomKeyboardView.java b/backends/platform/android/org/scummvm/scummvm/CustomKeyboardView.java
index 6b1c95d337..8b52a4da12 100755
--- a/backends/platform/android/org/scummvm/scummvm/CustomKeyboardView.java
+++ b/backends/platform/android/org/scummvm/scummvm/CustomKeyboardView.java
@@ -467,6 +467,7 @@ public class CustomKeyboardView extends View implements View.OnClickListener {
float deltaY = me2.getY() - me1.getY();
int travelX = getWidth() / 2; // Half the keyboard width
int travelY = getHeight() / 2; // Half the keyboard height
+ //Log.d(ScummVM.LOG_TAG, "mSwipeTracker.computeCurrentVelocity()");
mSwipeTracker.computeCurrentVelocity(1000);
final float endingVelocityX = mSwipeTracker.getXVelocity();
final float endingVelocityY = mSwipeTracker.getYVelocity();
@@ -502,7 +503,8 @@ public class CustomKeyboardView extends View implements View.OnClickListener {
}
if (sendDownKey) {
- detectAndSendKey(mDownKey, mStartX, mStartY, me1.getEventTime());
+ //Log.d(ScummVM.LOG_TAG, "CustomKeyboardView:: initGestureDetector() - sendDownKey");
+ detectAndSendKey(mDownKey, mStartX, mStartY, me1.getEventTime(), false, false);
}
return false;
}
@@ -889,11 +891,12 @@ public class CustomKeyboardView extends View implements View.OnClickListener {
return primaryIndex;
}
- private void detectAndSendKey(int index, int x, int y, long eventTime) {
+ private void detectAndSendKey(int index, int x, int y, long eventTime, boolean isRepeated, boolean isReleaseKey) {
if (index != NOT_A_KEY && index < mKeys.length) {
final CustomKeyboard.CustomKey key = mKeys[index];
if (key.text != null) {
mKeyboardActionListener.onText(key.text);
+ //Log.d(ScummVM.LOG_TAG, "CustomKeyboardView:: detectAndSendKey - (key.text != null)");
mKeyboardActionListener.onRelease(NOT_A_KEY);
} else {
int code = key.codes[0];
@@ -910,8 +913,13 @@ public class CustomKeyboardView extends View implements View.OnClickListener {
}
code = key.codes[mTapCount];
}
- mKeyboardActionListener.onKey(code, codes);
- mKeyboardActionListener.onRelease(code);
+ //Log.d(ScummVM.LOG_TAG, "CustomKeyboardView:: detectAndSendKey - (key.text is null) code = " + code + " x: " + x + " y: " + y);
+ if (!isReleaseKey) {
+ mKeyboardActionListener.onKey(code, codes);
+ }
+ if (!isRepeated || isReleaseKey) {
+ mKeyboardActionListener.onRelease(code);
+ }
}
mLastSentIndex = index;
mLastTapTime = eventTime;
@@ -1394,6 +1402,19 @@ public class CustomKeyboardView extends View implements View.OnClickListener {
mCurrentKeyTime + eventTime - mLastMoveTime;
mCurrentKey = keyIndex;
mCurrentKeyTime = 0;
+ } else {
+ // if (mRepeatKeyIndex != NOT_A_KEY)
+ // New - handle the case where the user holds their finger and moves out of the key button
+ // Unfortunately, we will also get a "release" event on MotionEvent.ACTION_UP but that is safe since it is ignored
+ removeMessages();
+ if (mRepeatKeyIndex >= 0 && !mMiniKeyboardOnScreen && !mAbortKey) {
+ //Log.d(ScummVM.LOG_TAG, "CustomKeyboardView:: onModifiedTouchEvent - MotionEvent.ACTION_MOVE Final Rep");
+ detectAndSendKey(mCurrentKey, touchX, touchY, eventTime, true, true);
+ }
+ showPreview(NOT_A_KEY);
+ Arrays.fill(mKeyIndices, NOT_A_KEY);
+ invalidateKey(keyIndex);
+ mRepeatKeyIndex = NOT_A_KEY;
}
}
}
@@ -1431,7 +1452,11 @@ public class CustomKeyboardView extends View implements View.OnClickListener {
Arrays.fill(mKeyIndices, NOT_A_KEY);
// If we're not on a repeating key (which sends on a DOWN event)
if (mRepeatKeyIndex == NOT_A_KEY && !mMiniKeyboardOnScreen && !mAbortKey) {
- detectAndSendKey(mCurrentKey, touchX, touchY, eventTime);
+ //Log.d(ScummVM.LOG_TAG, "CustomKeyboardView:: onModifiedTouchEvent - MotionEvent.ACTION_UP No Rep");
+ detectAndSendKey(mCurrentKey, touchX, touchY, eventTime, false, true);
+ } else if (mRepeatKeyIndex >= 0 && mRepeatKeyIndex != NOT_A_KEY && !mMiniKeyboardOnScreen && !mAbortKey) {
+ //Log.d(ScummVM.LOG_TAG, "CustomKeyboardView:: onModifiedTouchEvent - MotionEvent.ACTION_UP Final Rep");
+ detectAndSendKey(mCurrentKey, touchX, touchY, eventTime, true, true);
}
invalidateKey(keyIndex);
mRepeatKeyIndex = NOT_A_KEY;
@@ -1452,7 +1477,8 @@ public class CustomKeyboardView extends View implements View.OnClickListener {
// @UnsupportedAppUsage
private boolean repeatKey() {
CustomKeyboard.CustomKey key = mKeys[mRepeatKeyIndex];
- detectAndSendKey(mCurrentKey, key.x, key.y, mLastTapTime);
+ //Log.d(ScummVM.LOG_TAG, "CustomKeyboardView:: repeatKey");
+ detectAndSendKey(mCurrentKey, key.x, key.y, mLastTapTime, true, false);
return true;
}
@@ -1557,6 +1583,7 @@ public class CustomKeyboardView extends View implements View.OnClickListener {
}
public void addMovement(MotionEvent ev) {
+ //Log.d(ScummVM.LOG_TAG, "SwipeTracker - Add Movement");
long time = ev.getEventTime();
final int N = ev.getHistorySize();
for (int i=0; i<N; i++) {
diff --git a/backends/platform/android/org/scummvm/scummvm/ScummVMActivity.java b/backends/platform/android/org/scummvm/scummvm/ScummVMActivity.java
index 3f1e090791..86901e12f0 100644
--- a/backends/platform/android/org/scummvm/scummvm/ScummVMActivity.java
+++ b/backends/platform/android/org/scummvm/scummvm/ScummVMActivity.java
@@ -164,19 +164,20 @@ public class ScummVMActivity extends Activity implements OnKeyboardVisibilityLis
public boolean shift = false;
public boolean alt = false;
public final TreeSet<Integer> stickyKeys = new TreeSet<>();
- public long mEventTime = -1;
+ public long mEventPressTime = -1;
+ public int mKeyRepeatedCount = 0;
public BuiltInKeyboardView(Context context, android.util.AttributeSet attrs) {
super(context, attrs);
}
public boolean onKeyDown(int key, final KeyEvent event) {
- Log.d(ScummVM.LOG_TAG, "SHOW KEYBOARD - 001 - onKeyDown()" );
+ //Log.d(ScummVM.LOG_TAG, "BuiltInKeyboardView- 001 - onKeyDown()" );
return false;
}
public boolean onKeyUp(int key, final KeyEvent event) {
- Log.d(ScummVM.LOG_TAG, "SHOW KEYBOARD - 001 - onKeyUp()" );
+ //Log.d(ScummVM.LOG_TAG, "BuiltInKeyboardView - 001 - onKeyUp()" );
return false;
}
@@ -265,6 +266,12 @@ public class ScummVMActivity extends Activity implements OnKeyboardVisibilityLis
//ScummVMActivity.this._scummvm.displayMessageOnOSD ("NEW KEYBOARD LAYOUT: QWERTY"
// + (alt ? " ALT " : "") + (shift? " SHIFT" : ""));
}
+
+ public void resetEventAndTimestamps() {
+ // clear event timestamps and repetition counts
+ mEventPressTime = -1;
+ mKeyRepeatedCount = -1;
+ }
}
final BuiltInKeyboardView builtinKeyboard = new BuiltInKeyboardView(ScummVMActivity.this, null);
@@ -273,7 +280,9 @@ public class ScummVMActivity extends Activity implements OnKeyboardVisibilityLis
builtinKeyboard.setOnKeyboardActionListener(new CustomKeyboardView.OnKeyboardActionListener() {
public void onPress(int key) {
- //Log.d(ScummVM.LOG_TAG, "SHOW KEYBOARD - 001 - onPress key: " + key ); // CALLED
+ builtinKeyboard.resetEventAndTimestamps();
+
+// Log.d(ScummVM.LOG_TAG, "SHOW KEYBOARD - 001 - onPress key: " + key );
if (key == KeyEvent.KEYCODE_BACK) {
return;
}
@@ -288,35 +297,21 @@ public class ScummVMActivity extends Activity implements OnKeyboardVisibilityLis
}
}
- int compiledMetaState = builtinKeyboard.getCompiledMetaState();
-
- // keys with keyCode greater than 100000, should be submitted with a LEFT_SHIFT_ modifier (and decreased by 100000 to get their proper code)
- if (key > 100000) {
- key -= 100000;
- compiledMetaState |= KeyEvent.META_SHIFT_LEFT_ON;
- }
-
//
// downTime (long) - The time (in SystemClock.uptimeMillis()) at which this key code originally went down.
// ** Since this is a down event, this will be the same as getEventTime(). **
// Note that when chording keys, this value is the down time of the most recently pressed key, which may not be the same physical key of this event.
// eventTime (long) - The time (in SystemClock.uptimeMillis()) at which this event happened.
// TODO update repeat and event time? with
- builtinKeyboard.mEventTime = SystemClock.uptimeMillis();
- KeyEvent compiledKeyEvent = new KeyEvent(builtinKeyboard.mEventTime,
- builtinKeyboard.mEventTime,
- KeyEvent.ACTION_DOWN,
- key,
- 0,
- compiledMetaState);
+ builtinKeyboard.mEventPressTime = SystemClock.uptimeMillis();
- _main_surface.dispatchKeyEvent(compiledKeyEvent);
}
public void onRelease(int key) {
- //Log.d(ScummVM.LOG_TAG, "SHOW KEYBOARD - 001 - onRelease key: " + key );
+// Log.d(ScummVM.LOG_TAG, "SHOW KEYBOARD - 001 - onRelease key: " + key );
if (key == KeyEvent.KEYCODE_BACK) {
builtinKeyboard.setOnKeyboardActionListener(null);
+ builtinKeyboard.resetEventAndTimestamps();
showScreenKeyboardWithoutTextInputField(0); // Hide keyboard
return;
}
@@ -327,6 +322,7 @@ public class ScummVMActivity extends Activity implements OnKeyboardVisibilityLis
if (key == CustomKeyboard.KEYCODE_SHIFT) {
builtinKeyboard.shift = !builtinKeyboard.shift;
builtinKeyboard.ChangeKeyboard();
+ builtinKeyboard.resetEventAndTimestamps();
return;
}
@@ -336,10 +332,12 @@ public class ScummVMActivity extends Activity implements OnKeyboardVisibilityLis
builtinKeyboard.shift = false;
}
builtinKeyboard.ChangeKeyboard();
+ builtinKeyboard.resetEventAndTimestamps();
return;
}
if (key <= 0) {
+ builtinKeyboard.resetEventAndTimestamps();
return;
}
@@ -358,6 +356,7 @@ public class ScummVMActivity extends Activity implements OnKeyboardVisibilityLis
builtinKeyboard.stickyKeys.add(key);
}
builtinKeyboard.recheckStickyKeys();
+ builtinKeyboard.resetEventAndTimestamps();
return;
}
}
@@ -371,16 +370,18 @@ public class ScummVMActivity extends Activity implements OnKeyboardVisibilityLis
compiledMetaState |= KeyEvent.META_SHIFT_LEFT_ON;
}
- // TODO properly set repeat value?
- KeyEvent compiledKeyEvent = new KeyEvent(builtinKeyboard.mEventTime,
+ // The repeat argument (int) is:
+ // A repeat count for down events (> 0 if this is after the initial down)
+ // or event count for multiple events.
+ KeyEvent compiledKeyEvent = new KeyEvent(builtinKeyboard.mEventPressTime,
SystemClock.uptimeMillis(),
KeyEvent.ACTION_UP,
key,
- 0,
+ builtinKeyboard.mKeyRepeatedCount,
compiledMetaState);
_main_surface.dispatchKeyEvent(compiledKeyEvent);
- builtinKeyboard.mEventTime = -1; // reset event time
+ builtinKeyboard.resetEventAndTimestamps();
// Excluding the CAPS LOCK NUM LOCK AND SCROLL LOCK keys,
// clear the state of all other sticky keys that are used in a key combo
@@ -402,17 +403,55 @@ public class ScummVMActivity extends Activity implements OnKeyboardVisibilityLis
}
public void onText(CharSequence p1) {}
- public void swipeLeft() {}
- public void swipeRight() {}
- public void swipeDown() {}
- public void swipeUp() {}
- public void onKey(int p1, int[] p2) {}
+
+ public void swipeLeft() {
+ //Log.d(ScummVM.LOG_TAG, "SHOW KEYBOARD - 001 - swipeLeft");
+ }
+
+ public void swipeRight() {
+ //Log.d(ScummVM.LOG_TAG, "SHOW KEYBOARD - 001 - swipeRight" );
+ }
+
+ public void swipeDown() {
+ //Log.d(ScummVM.LOG_TAG, "SHOW KEYBOARD - 001 - swipeDown" );
+ }
+
+ public void swipeUp() {
+ //Log.d(ScummVM.LOG_TAG, "SHOW KEYBOARD - 001 - swipeUp ");
+ }
+ public void onKey(int key, int[] keysAround) {
+// Log.d(ScummVM.LOG_TAG, "SHOW KEYBOARD - 001 - onKey key: " + key );
+ if (builtinKeyboard.mEventPressTime == -1) {
+ return;
+ }
+
+ if (builtinKeyboard.mKeyRepeatedCount < Integer.MAX_VALUE) {
+ ++builtinKeyboard.mKeyRepeatedCount;
+ }
+ int compiledMetaState = builtinKeyboard.getCompiledMetaState();
+
+ // keys with keyCode greater than 100000, should be submitted with a LEFT_SHIFT_ modifier (and decreased by 100000 to get their proper code)
+ if (key > 100000) {
+ key -= 100000;
+ compiledMetaState |= KeyEvent.META_SHIFT_LEFT_ON;
+ }
+
+ // update the eventTime after the above check for first time "hit"
+ KeyEvent compiledKeyEvent = new KeyEvent(builtinKeyboard.mEventPressTime,
+ SystemClock.uptimeMillis(),
+ KeyEvent.ACTION_DOWN,
+ key,
+ builtinKeyboard.mKeyRepeatedCount,
+ compiledMetaState);
+
+ _main_surface.dispatchKeyEvent(compiledKeyEvent);
+ }
});
_screenKeyboard = builtinKeyboard;
// TODO better to have specific dimensions in dp and not adjusted to parent
// it may resolve the issue of resizing the keyboard wrongly (smaller) when returning to the suspended Activity in low resolution
- FrameLayout.LayoutParams sKeyboardLayout = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL);
+ FrameLayout.LayoutParams sKeyboardLayout = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL | Gravity.FILL_HORIZONTAL);
_videoLayout.addView(_screenKeyboard, sKeyboardLayout);
_videoLayout.bringChildToFront(_screenKeyboard);
@@ -492,10 +531,14 @@ public class ScummVMActivity extends Activity implements OnKeyboardVisibilityLis
return _screenKeyboard != null;
}
- public View getScreenKeyboard () {
+ public View getScreenKeyboard() {
return _screenKeyboard;
}
+// public View getMainSurfaceView() {
+// return _main_surface;
+// }
+
//
// END OF new screenKeyboardCode
// ---------------------------------------------------------------------------------------------------------------------------
diff --git a/backends/platform/android/org/scummvm/scummvm/ScummVMEventsBase.java b/backends/platform/android/org/scummvm/scummvm/ScummVMEventsBase.java
index 70bacadc9c..9080829ff4 100644
--- a/backends/platform/android/org/scummvm/scummvm/ScummVMEventsBase.java
+++ b/backends/platform/android/org/scummvm/scummvm/ScummVMEventsBase.java
@@ -156,7 +156,23 @@ public class ScummVMEventsBase implements
// OnKeyListener
@Override
final public boolean onKey(View v, int keyCode, KeyEvent e) {
-// Log.d(ScummVM.LOG_TAG, "SCUMMV-EVENTS-BASE - onKEY:::" + keyCode); // Called
+
+// String actionStr = "";
+// switch (e.getAction()) {
+// case KeyEvent.ACTION_UP:
+// actionStr = "KeyEvent.ACTION_UP";
+// break;
+// case KeyEvent.ACTION_DOWN:
+// actionStr = "KeyEvent.ACTION_DOWN";
+// break;
+// case KeyEvent.ACTION_MULTIPLE:
+// actionStr = "KeyEvent.ACTION_MULTIPLE";
+// break;
+// default:
+// actionStr = e.toString();
+// }
+// Log.d(ScummVM.LOG_TAG, "SCUMMV-EVENTS-BASE - onKEY:::" + keyCode + " Action::" + actionStr + " View:: " + actionView); // Called
+
final int action = e.getAction();
int eventUnicodeChar = e.getUnicodeChar();
@@ -191,8 +207,10 @@ public class ScummVMEventsBase implements
if (action == KeyEvent.ACTION_DOWN) {
return true;
} else if (action == KeyEvent.ACTION_UP) {
- // Hide keyboard (the argument here (0) does not matter)
- ((ScummVMActivity) _context).showScreenKeyboardWithoutTextInputField(0);
+ // Hide keyboard
+ if (((ScummVMActivity) _context).isScreenKeyboardShown()) {
+ ((ScummVMActivity) _context).hideScreenKeyboard();
+ }
return true;
}
}
@@ -200,8 +218,9 @@ public class ScummVMEventsBase implements
if (e.isSystem()) {
// no repeats for system keys
- if (e.getRepeatCount() > 0)
+ if (e.getRepeatCount() > 0) {
return false;
+ }
// Have to reimplement hold-down-menu-brings-up-softkeybd
// ourselves, since we are otherwise hijacking the menu key :(
@@ -335,7 +354,18 @@ public class ScummVMEventsBase implements
// OnTouchListener
@Override
final public boolean onTouch(View v, final MotionEvent event) {
- //Log.d(ScummVM.LOG_TAG, "SCUMMV-EVENTS-BASE - onTOUCH");
+// String actionStr = "";
+// switch (event.getAction()) {
+// case MotionEvent.ACTION_UP:
+// actionStr = "MotionEvent.ACTION_UP";
+// break;
+// case MotionEvent.ACTION_DOWN:
+// actionStr = "MotionEvent.ACTION_DOWN";
+// break;
+// default:
+// actionStr = event.toString();
+// }
+// Log.d(ScummVM.LOG_TAG, "SCUMMV-EVENTS-BASE - onTOUCH event" + actionStr);
if (ScummVMActivity.keyboardWithoutTextInputShown
&& ((ScummVMActivity) _context).isScreenKeyboardShown()
@@ -383,7 +413,7 @@ public class ScummVMEventsBase implements
// OnGestureListener
@Override
final public boolean onDown(MotionEvent e) {
- //Log.d(ScummVM.LOG_TAG, "SCUMMV-EVENTS-BASE - onDONW");
+ //Log.d(ScummVM.LOG_TAG, "SCUMMV-EVENTS-BASE - onDOWN MotionEvent");
_scummvm.pushEvent(JE_DOWN, (int)e.getX(), (int)e.getY(), 0, 0, 0, 0);
return true;
}
More information about the Scummvm-git-logs
mailing list