Fixed Ctrl key not working using volumn down key, and revert the change of changing the background of ctrl key shortcut button when it is toggled.
This commit is contained in:
parent
49d55dd422
commit
90d1ea0485
@ -7,7 +7,7 @@ buildscript {
|
||||
}
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:3.5.3'
|
||||
classpath 'com.android.tools.build:gradle:4.0.0'
|
||||
}
|
||||
}
|
||||
|
||||
@ -24,7 +24,7 @@ ext {
|
||||
minSdkVersion=14
|
||||
targetSdkVersion=29
|
||||
//version=YYYYMMVVRR (Either "VV" for stable version OR "RR" for pre-release candidate (e.g. 0001 for rc1)
|
||||
versionCode=2020010200
|
||||
versionName="2020.1"
|
||||
versionCode=2020030100
|
||||
versionName="2020.3-rc1"
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.offsec.nhterm.emulatorview"
|
||||
android:versionCode="43"
|
||||
android:versionName="1.0.42">
|
||||
package="com.offsec.nhterm.emulatorview">
|
||||
</manifest>
|
||||
|
@ -52,6 +52,7 @@ import android.util.AttributeSet;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.util.Log;
|
||||
import android.view.GestureDetector;
|
||||
import android.view.KeyCharacterMap;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.ScaleGestureDetector;
|
||||
@ -184,7 +185,10 @@ public class EmulatorView extends View implements GestureDetector.OnGestureListe
|
||||
private boolean mIsFnKeySent = false;
|
||||
|
||||
// This is only used when user is using default system input method.
|
||||
public boolean isCtrlPressed_defIM = false;
|
||||
public boolean isCtrlPressed_defIME = false;
|
||||
public boolean isAltPressed_defIME = false;
|
||||
public boolean isFnKeyPressed_defIME = false;
|
||||
public int metaState_defIME = 0;
|
||||
public boolean isUsingCustomInputMethod = false;
|
||||
|
||||
private boolean mMouseTracking;
|
||||
@ -670,7 +674,7 @@ public class EmulatorView extends View implements GestureDetector.OnGestureListe
|
||||
EditorInfo.TYPE_NULL;
|
||||
|
||||
// Everytime the user change the keyboard input method, reset the meta key status and check again the user keyboard input method.
|
||||
switchOffAllMetaKey();
|
||||
switchOffAllMetaKey_defIME();
|
||||
isUsingCustomInputMethod = isUsingCustomInputMethod();
|
||||
|
||||
return new BaseInputConnection(this, true) {
|
||||
@ -936,7 +940,6 @@ public class EmulatorView extends View implements GestureDetector.OnGestureListe
|
||||
if (LOG_IME) {
|
||||
Log.w(TAG, "sendKeyEvent(" + event + ")");
|
||||
}
|
||||
|
||||
// Some keys are sent here rather than to commitText.
|
||||
// In particular, del and the digit keys are sent here.
|
||||
// (And I have reports that the HTC Magic also sends Return here.)
|
||||
@ -945,15 +948,20 @@ public class EmulatorView extends View implements GestureDetector.OnGestureListe
|
||||
// So if user is using default system keyboard input method, sendKeyEvent() is called here.
|
||||
// but somehow the key combination is not working through normal dispatchKeyEvent()
|
||||
// the new KeyEvent class must be initialized with which meta key to use.
|
||||
if (!isUsingCustomInputMethod) {
|
||||
if (!isUsingCustomInputMethod && (isCtrlPressed_defIME || isFnKeyPressed_defIME || isAltPressed_defIME)) {
|
||||
dispatchKeyEvent(new KeyEvent(
|
||||
event.getDownTime(),
|
||||
event.getEventTime(),
|
||||
event.getAction(),
|
||||
event.getKeyCode(),
|
||||
(isFnKeyPressed_defIME && (!isCtrlPressed_defIME && !isAltPressed_defIME)) ?
|
||||
combineFnKeyToKeyCode(event.getDisplayLabel(), event.getKeyCode()) :
|
||||
event.getKeyCode(),
|
||||
event.getRepeatCount(),
|
||||
chooseMetaKeyToUse()));
|
||||
switchOffAllMetaKey();
|
||||
if (mKeyListener.getCtrlUIMode() != TextRenderer.MODE_LOCKED) isCtrlPressed_defIME = false;
|
||||
if (mKeyListener.getAltUIMode() != TextRenderer.MODE_LOCKED) isAltPressed_defIME = false;
|
||||
if (mKeyListener.getFnKeyUIMode() != TextRenderer.MODE_LOCKED) isFnKeyPressed_defIME = false;
|
||||
metaState_defIME = 0;
|
||||
} else {
|
||||
dispatchKeyEvent(event);
|
||||
}
|
||||
@ -1518,6 +1526,7 @@ public class EmulatorView extends View implements GestureDetector.OnGestureListe
|
||||
mIsFnKeySent = true;
|
||||
mKeyListener.handleFnKey(true);
|
||||
mKeyListener.handleFnKey(false);
|
||||
isFnKeyPressed_defIME = mKeyListener.isFnKeyActive();
|
||||
invalidate();
|
||||
}
|
||||
|
||||
@ -1526,6 +1535,7 @@ public class EmulatorView extends View implements GestureDetector.OnGestureListe
|
||||
mIsAltKeySent = true;
|
||||
mKeyListener.handleAltKey(true);
|
||||
mKeyListener.handleAltKey(false);
|
||||
isAltPressed_defIME = mKeyListener.isAltActive();
|
||||
invalidate();
|
||||
}
|
||||
|
||||
@ -1534,6 +1544,7 @@ public class EmulatorView extends View implements GestureDetector.OnGestureListe
|
||||
mIsControlKeySent = true;
|
||||
mKeyListener.handleControlKey(true);
|
||||
mKeyListener.handleControlKey(false);
|
||||
isCtrlPressed_defIME = mKeyListener.isCtrlActive();
|
||||
invalidate();
|
||||
}
|
||||
|
||||
@ -1959,6 +1970,7 @@ public class EmulatorView extends View implements GestureDetector.OnGestureListe
|
||||
Log.w(TAG, "handleControlKey " + keyCode);
|
||||
}
|
||||
mKeyListener.handleControlKey(down);
|
||||
if (down) isCtrlPressed_defIME = mKeyListener.getCtrlUIMode() != TextRenderer.MODE_OFF;
|
||||
invalidate();
|
||||
return true;
|
||||
}
|
||||
@ -1985,6 +1997,7 @@ public class EmulatorView extends View implements GestureDetector.OnGestureListe
|
||||
Log.w(TAG, "handleFnKey " + keyCode);
|
||||
}
|
||||
mKeyListener.handleFnKey(down);
|
||||
if (down) isFnKeyPressed_defIME = mKeyListener.getFnKeyUIMode() != TextRenderer.MODE_OFF;
|
||||
invalidate();
|
||||
return true;
|
||||
}
|
||||
@ -2213,6 +2226,7 @@ public class EmulatorView extends View implements GestureDetector.OnGestureListe
|
||||
public void sendControlKey() {
|
||||
mIsControlKeySent = true;
|
||||
mKeyListener.handleControlKey(true);
|
||||
isCtrlPressed_defIME = true;
|
||||
invalidate();
|
||||
}
|
||||
|
||||
@ -2223,6 +2237,7 @@ public class EmulatorView extends View implements GestureDetector.OnGestureListe
|
||||
public void sendFnKey() {
|
||||
mIsFnKeySent = true;
|
||||
mKeyListener.handleFnKey(true);
|
||||
isFnKeyPressed_defIME = true;
|
||||
invalidate();
|
||||
}
|
||||
|
||||
@ -2312,15 +2327,84 @@ public class EmulatorView extends View implements GestureDetector.OnGestureListe
|
||||
restartInput();
|
||||
}
|
||||
|
||||
public int combineFnKeyToKeyCode(char ch, int keyCode) {
|
||||
int result = 0;
|
||||
if (ch == 'w' || ch == 'W') {
|
||||
result = KeyEvent.KEYCODE_DPAD_UP;
|
||||
} else if (ch == 'a' || ch == 'A') {
|
||||
result = KeyEvent.KEYCODE_DPAD_LEFT;
|
||||
} else if (ch == 's' || ch == 'S') {
|
||||
result = KeyEvent.KEYCODE_DPAD_DOWN;
|
||||
} else if (ch == 'd' || ch == 'D') {
|
||||
result = KeyEvent.KEYCODE_DPAD_RIGHT;
|
||||
} else if (ch == 'p' || ch == 'P') {
|
||||
result = KeyEvent.KEYCODE_PAGE_UP;
|
||||
} else if (ch == 'n' || ch == 'N') {
|
||||
result = KeyEvent.KEYCODE_PAGE_DOWN;
|
||||
} else if (ch == 't' || ch == 'T') {
|
||||
result = KeyEvent.KEYCODE_TAB;
|
||||
} else if (ch == 'l' || ch == 'L') {
|
||||
metaState_defIME = 1;
|
||||
result = KeyEvent.KEYCODE_BACKSLASH; // ^|
|
||||
} else if (ch == 'u' || ch == 'U') {
|
||||
metaState_defIME = 1;
|
||||
result = KeyEvent.KEYCODE_MINUS; // ^_
|
||||
} else if (ch == 'e' || ch == 'E') {
|
||||
result = KeyEvent.KEYCODE_ESCAPE; // ^[ (Esc)
|
||||
} else if (ch == '.') {
|
||||
metaState_defIME = KeyEvent.META_CTRL_ON;
|
||||
result = KeyEvent.KEYCODE_BACKSLASH; // ^\
|
||||
} else if (ch == '1') {
|
||||
result = KeyEvent.KEYCODE_F1;
|
||||
} else if (ch == '2') {
|
||||
result = KeyEvent.KEYCODE_F2;
|
||||
} else if (ch == '3') {
|
||||
result = KeyEvent.KEYCODE_F3;
|
||||
} else if (ch == '4') {
|
||||
result = KeyEvent.KEYCODE_F4;
|
||||
} else if (ch == '5') {
|
||||
result = KeyEvent.KEYCODE_F5;
|
||||
} else if (ch == '6') {
|
||||
result = KeyEvent.KEYCODE_F6;
|
||||
} else if (ch == '7') {
|
||||
result = KeyEvent.KEYCODE_F7;
|
||||
} else if (ch == '8') {
|
||||
result = KeyEvent.KEYCODE_F8;
|
||||
} else if (ch == '9') {
|
||||
result = KeyEvent.KEYCODE_F9;
|
||||
} else if (ch == '0') {
|
||||
result = KeyEvent.KEYCODE_F10;
|
||||
} else if (ch == 'i' || ch == 'I') {
|
||||
result = KeyEvent.KEYCODE_INSERT;
|
||||
} else if (ch == 'x' || ch == 'X') {
|
||||
result = KeyEvent.KEYCODE_FORWARD_DEL;
|
||||
} else if (ch == 'h' || ch == 'H') {
|
||||
result = KeyEvent.KEYCODE_MOVE_HOME;
|
||||
} else if (ch == 'f' || ch == 'F') {
|
||||
result = KeyEvent.KEYCODE_MOVE_END;
|
||||
}
|
||||
if (result > -1) {
|
||||
mKeyListener.updateAllMetaKeyCursorMode();
|
||||
}
|
||||
return result == 0 ? keyCode : result;
|
||||
}
|
||||
// function to choose which meta key to use, other meta keys may be added in the future.
|
||||
public int chooseMetaKeyToUse() {
|
||||
if (isCtrlPressed_defIM) return KeyEvent.META_CTRL_ON;
|
||||
return 0;
|
||||
if ((isCtrlPressed_defIME && isAltPressed_defIME) ||
|
||||
(isCtrlPressed_defIME && isFnKeyPressed_defIME) ||
|
||||
(isFnKeyPressed_defIME && isAltPressed_defIME)) metaState_defIME = 0;
|
||||
else if (isFnKeyPressed_defIME) return metaState_defIME;
|
||||
else if (isCtrlPressed_defIME) metaState_defIME = KeyEvent.META_CTRL_ON;
|
||||
else if (isAltPressed_defIME) metaState_defIME = KeyEvent.META_ALT_ON;
|
||||
return metaState_defIME;
|
||||
}
|
||||
|
||||
// function to switch off all meta key status, other meta keys may be added in the future.
|
||||
public void switchOffAllMetaKey() {
|
||||
isCtrlPressed_defIM = false;
|
||||
public void switchOffAllMetaKey_defIME() {
|
||||
isCtrlPressed_defIME = false;
|
||||
isAltPressed_defIME = false;
|
||||
isFnKeyPressed_defIME = false;
|
||||
metaState_defIME = 0;
|
||||
}
|
||||
|
||||
// function to check if the keyboard the user using is a default system keyboard input method
|
||||
|
@ -505,11 +505,7 @@ class TermKeyListener {
|
||||
}
|
||||
|
||||
if (result > -1) {
|
||||
mAltKey.adjustAfterKeypress();
|
||||
mCapKey.adjustAfterKeypress();
|
||||
mControlKey.adjustAfterKeypress();
|
||||
mFnKey.adjustAfterKeypress();
|
||||
updateCursorMode();
|
||||
updateAllMetaKeyCursorMode();
|
||||
}
|
||||
|
||||
return result;
|
||||
@ -648,7 +644,16 @@ class TermKeyListener {
|
||||
return mCursorMode;
|
||||
}
|
||||
|
||||
private void updateCursorMode() {
|
||||
public void updateAllMetaKeyCursorMode() {
|
||||
mAltKey.adjustAfterKeypress();
|
||||
mCapKey.adjustAfterKeypress();
|
||||
mControlKey.adjustAfterKeypress();
|
||||
mFnKey.adjustAfterKeypress();
|
||||
updateCursorMode();
|
||||
}
|
||||
|
||||
|
||||
public void updateCursorMode() {
|
||||
mCursorMode = getCursorModeHelper(mCapKey, TextRenderer.MODE_SHIFT_SHIFT)
|
||||
| getCursorModeHelper(mAltKey, TextRenderer.MODE_ALT_SHIFT)
|
||||
| getCursorModeHelper(mControlKey, TextRenderer.MODE_CTRL_SHIFT)
|
||||
@ -803,4 +808,12 @@ class TermKeyListener {
|
||||
public boolean isCtrlActive() {
|
||||
return mControlKey.isActive();
|
||||
}
|
||||
|
||||
public boolean isFnKeyActive() { return mFnKey.isActive(); }
|
||||
|
||||
public int getCtrlUIMode() { return mControlKey.getUIMode(); }
|
||||
|
||||
public int getAltUIMode() { return mAltKey.getUIMode(); }
|
||||
|
||||
public int getFnKeyUIMode() { return mFnKey.getUIMode(); }
|
||||
}
|
4
gradle/wrapper/gradle-wrapper.properties
vendored
4
gradle/wrapper/gradle-wrapper.properties
vendored
@ -1,6 +1,6 @@
|
||||
#Thu Jan 09 00:45:43 CST 2020
|
||||
#Wed Jun 10 01:34:23 CST 2020
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
|
||||
|
@ -4,7 +4,7 @@ buildscript {
|
||||
google()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:3.5.3'
|
||||
classpath 'com.android.tools.build:gradle:4.0.0'
|
||||
}
|
||||
}
|
||||
apply plugin: 'com.android.library'
|
||||
|
@ -44,8 +44,7 @@
|
||||
android:label="@string/application_terminal"
|
||||
android:hardwareAccelerated="true"
|
||||
android:allowBackup="false"
|
||||
android:theme="@style/Theme"
|
||||
android:requestLegacyExternalStorage="true">
|
||||
android:theme="@style/Theme">
|
||||
<activity android:name="com.offsec.nhterm.Term"
|
||||
android:launchMode="singleTask"
|
||||
android:resizeableActivity="true"
|
||||
|
@ -313,8 +313,6 @@ public class Term extends Activity implements UpdateCallback, SharedPreferences.
|
||||
*/
|
||||
private View.OnKeyListener mKeyListener = new View.OnKeyListener() {
|
||||
public boolean onKey(View v, int keyCode, KeyEvent event) {
|
||||
if (!getCurrentEmulatorView().isUsingCustomInputMethod)
|
||||
setButtonToggledBackground(findViewById(R.id.button_ctrl), getCurrentEmulatorView().isCtrlPressed_defIM);
|
||||
return backkeyInterceptor(keyCode, event) || keyboardShortcuts(keyCode, event);
|
||||
}
|
||||
|
||||
@ -1674,12 +1672,7 @@ public class Term extends Activity implements UpdateCallback, SharedPreferences.
|
||||
doSendActionBarKey(view, KeycodeConstants.KEYCODE_ESCAPE);
|
||||
break;
|
||||
case R.id.button_ctrl:
|
||||
if (view.isUsingCustomInputMethod) {
|
||||
doSendActionBarKey(view, KeycodeConstants.KEYCODE_CTRL_LEFT);
|
||||
} else {
|
||||
view.isCtrlPressed_defIM = !view.isCtrlPressed_defIM;
|
||||
setButtonToggledBackground(findViewById(R.id.button_ctrl), view.isCtrlPressed_defIM);
|
||||
}
|
||||
doSendActionBarKey(view, KeycodeConstants.KEYCODE_CTRL_LEFT);
|
||||
break;
|
||||
case R.id.button_alt:
|
||||
doSendActionBarKey(view, KeycodeConstants.KEYCODE_ALT_LEFT);
|
||||
|
Loading…
Reference in New Issue
Block a user