Extra keys view: Implement sending text

This commit is contained in:
Fredrik Fornwall
2016-06-06 00:56:42 +02:00
parent 0861be363b
commit a2ebcdcf49

View File

@@ -1,7 +1,9 @@
package com.termux.app; package com.termux.app;
import android.content.Context; import android.content.Context;
import android.os.SystemClock;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.util.Log;
import android.view.Gravity; import android.view.Gravity;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.View; import android.view.View;
@@ -9,6 +11,8 @@ import android.widget.Button;
import android.widget.GridLayout; import android.widget.GridLayout;
import android.widget.ToggleButton; import android.widget.ToggleButton;
import com.termux.R;
import com.termux.terminal.TerminalSession;
import com.termux.view.TerminalView; import com.termux.view.TerminalView;
/** /**
@@ -25,15 +29,27 @@ public final class ExtraKeysView extends GridLayout implements TerminalView.Keyb
reload(); reload();
} }
private static int keyNameToKeyCode(String keyName) { private static void sendKey(View view, String keyName) {
int keyCode = 0;
String chars = null;
switch (keyName) { switch (keyName) {
case "ESC": return KeyEvent.KEYCODE_ESCAPE; case "ESC": keyCode = KeyEvent.KEYCODE_ESCAPE; break;
case "TAB": return KeyEvent.KEYCODE_TAB; case "TAB": keyCode = KeyEvent.KEYCODE_TAB; break;
case "": return KeyEvent.KEYCODE_DPAD_UP; case "": keyCode = KeyEvent.KEYCODE_DPAD_UP; break;
case "": return KeyEvent.KEYCODE_DPAD_LEFT; case "": keyCode = KeyEvent.KEYCODE_DPAD_LEFT; break;
case "": return KeyEvent.KEYCODE_DPAD_RIGHT; case "": keyCode = KeyEvent.KEYCODE_DPAD_RIGHT; break;
case "": return KeyEvent.KEYCODE_DPAD_DOWN; case "": keyCode = KeyEvent.KEYCODE_DPAD_DOWN; break;
default: return -1; case "": chars = "-"; break;
default: chars = keyName;
}
if (keyCode > 0) {
view.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, keyCode));
view.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, keyCode));
} else {
TerminalView terminalView = (TerminalView) view.findViewById(R.id.terminal_view);
TerminalSession session = terminalView.getCurrentSession();
if (session != null) session.write(chars);
} }
} }
@@ -42,6 +58,7 @@ public final class ExtraKeysView extends GridLayout implements TerminalView.Keyb
private ToggleButton fnButton; private ToggleButton fnButton;
public boolean readControlButton() { public boolean readControlButton() {
if (controlButton.isPressed()) return true;
boolean result = controlButton.isChecked(); boolean result = controlButton.isChecked();
if (result) { if (result) {
controlButton.setChecked(false); controlButton.setChecked(false);
@@ -51,6 +68,7 @@ public final class ExtraKeysView extends GridLayout implements TerminalView.Keyb
} }
public boolean readAltButton() { public boolean readAltButton() {
if (altButton.isPressed()) return true;
boolean result = altButton.isChecked(); boolean result = altButton.isChecked();
if (result) { if (result) {
altButton.setChecked(false); altButton.setChecked(false);
@@ -60,6 +78,7 @@ public final class ExtraKeysView extends GridLayout implements TerminalView.Keyb
} }
public boolean readFnButton() { public boolean readFnButton() {
if (fnButton.isPressed()) return true;
boolean result = fnButton.isChecked(); boolean result = fnButton.isChecked();
if (result) { if (result) {
fnButton.setChecked(false); fnButton.setChecked(false);
@@ -73,7 +92,7 @@ public final class ExtraKeysView extends GridLayout implements TerminalView.Keyb
removeAllViews(); removeAllViews();
String[][] buttons = { String[][] buttons = {
{"ESC", "CTRL", "ALT", "", "", "", ""} {"ESC", "CTRL", "ALT", "TAB", "", "/", "|"}
}; };
final int rows = buttons.length; final int rows = buttons.length;
@@ -90,12 +109,15 @@ public final class ExtraKeysView extends GridLayout implements TerminalView.Keyb
switch (buttonText) { switch (buttonText) {
case "CTRL": case "CTRL":
button = controlButton = new ToggleButton(getContext(), null, android.R.attr.buttonBarButtonStyle); button = controlButton = new ToggleButton(getContext(), null, android.R.attr.buttonBarButtonStyle);
button.setClickable(true);
break; break;
case "ALT": case "ALT":
button = altButton = new ToggleButton(getContext(), null, android.R.attr.buttonBarButtonStyle); button = altButton = new ToggleButton(getContext(), null, android.R.attr.buttonBarButtonStyle);
button.setClickable(true);
break; break;
case "FN": case "FN":
button = fnButton = new ToggleButton(getContext(), null, android.R.attr.buttonBarButtonStyle); button = fnButton = new ToggleButton(getContext(), null, android.R.attr.buttonBarButtonStyle);
button.setClickable(true);
break; break;
default: default:
button = new Button(getContext(), null, android.R.attr.buttonBarButtonStyle); button = new Button(getContext(), null, android.R.attr.buttonBarButtonStyle);
@@ -119,9 +141,7 @@ public final class ExtraKeysView extends GridLayout implements TerminalView.Keyb
self.setTextColor(self.isChecked() ? 0xFF80DEEA : TEXT_COLOR); self.setTextColor(self.isChecked() ? 0xFF80DEEA : TEXT_COLOR);
break; break;
default: default:
int keyCode = keyNameToKeyCode(buttonText); sendKey(root, buttonText);
root.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, keyCode));
root.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, keyCode));
break; break;
} }
} }