summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Wright <michaelwr@google.com>2013-02-26 11:09:12 -0800
committerMichael Wright <michaelwr@google.com>2013-02-26 11:13:27 -0800
commitc8be1790590605603a8dca8f9ee93327c916de3f (patch)
treea00c1490fe283a9e54c91489f12c8a08e319f1ce
parent303dab01fa211d0da20136049196e3321241cad8 (diff)
downloadandroid_packages_apps_Terminal-c8be1790590605603a8dca8f9ee93327c916de3f.tar.gz
android_packages_apps_Terminal-c8be1790590605603a8dca8f9ee93327c916de3f.tar.bz2
android_packages_apps_Terminal-c8be1790590605603a8dca8f9ee93327c916de3f.zip
Added input error handling and enabled keyboard input
Change-Id: Ie74da0b39d9002802c76dc3ceecd5082e7504f26
-rw-r--r--AndroidManifest.xml3
-rw-r--r--jni/com_android_terminal_Terminal.cpp33
-rw-r--r--src/com/android/terminal/Terminal.java8
-rw-r--r--src/com/android/terminal/TerminalKeys.java10
4 files changed, 26 insertions, 28 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 078ace7..058d269 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -20,7 +20,8 @@
android:label="@string/app_label"
android:persistent="true">
- <activity android:name=".TerminalActivity">
+ <activity android:name=".TerminalActivity"
+ android:windowSoftInputMode="stateAlwaysVisible|adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
diff --git a/jni/com_android_terminal_Terminal.cpp b/jni/com_android_terminal_Terminal.cpp
index bc303dd..9f4b36e 100644
--- a/jni/com_android_terminal_Terminal.cpp
+++ b/jni/com_android_terminal_Terminal.cpp
@@ -34,7 +34,7 @@
#include <string.h>
-#define USE_TEST_SHELL 1
+#define USE_TEST_SHELL 0
#define DEBUG_CALLBACKS 0
#define DEBUG_IO 0
@@ -87,9 +87,9 @@ public:
size_t write(const char *bytes, size_t len);
- int dispatchCharacter(int mod, int character);
- int dispatchKey(int mod, int key);
- void flushInput();
+ bool dispatchCharacter(int mod, int character);
+ bool dispatchKey(int mod, int key);
+ bool flushInput();
int flushDamage();
int resize(short unsigned int rows, short unsigned int cols);
@@ -387,25 +387,24 @@ size_t Terminal::write(const char *bytes, size_t len) {
return ::write(mMasterFd, bytes, len);
}
-int Terminal::dispatchCharacter(int mod, int character) {
+bool Terminal::dispatchCharacter(int mod, int character) {
vterm_input_push_char(mVt, static_cast<VTermModifier>(mod), character);
- flushInput();
- return 0;
+ return flushInput();
}
-int Terminal::dispatchKey(int mod, int key) {
+bool Terminal::dispatchKey(int mod, int key) {
vterm_input_push_key(mVt, static_cast<VTermModifier>(mod), static_cast<VTermKey>(key));
- flushInput();
- return 0;
+ return flushInput();
}
-void Terminal::flushInput() {
+bool Terminal::flushInput() {
size_t len = vterm_output_get_buffer_current(mVt);
if (len) {
char buf[len];
len = vterm_output_bufferread(mVt, buf, len);
- write(buf, len);
+ return len == write(buf, len);
}
+ return true;
}
int Terminal::flushDamage() {
@@ -559,14 +558,14 @@ static jint com_android_terminal_Terminal_nativeGetCols(JNIEnv* env, jclass claz
return term->getCols();
}
-static jint com_android_terminal_Terminal_nativeDispatchCharacter(JNIEnv *env, jclass clazz,
+static jboolean com_android_terminal_Terminal_nativeDispatchCharacter(JNIEnv *env, jclass clazz,
jint ptr, jint mod, jint c) {
Terminal* term = reinterpret_cast<Terminal*>(ptr);
return term->dispatchCharacter(mod, c);
}
-static jint com_android_terminal_Terminal_nativeDispatchKey(JNIEnv *env, jclass clazz, jint ptr,
- jint mod, jint c) {
+static jboolean com_android_terminal_Terminal_nativeDispatchKey(JNIEnv *env, jclass clazz,
+ jint ptr, jint mod, jint c) {
Terminal* term = reinterpret_cast<Terminal*>(ptr);
return term->dispatchKey(mod, c);
}
@@ -580,8 +579,8 @@ static JNINativeMethod gMethods[] = {
{ "nativeGetCellRun", "(IIILcom/android/terminal/Terminal$CellRun;)I", (void*)com_android_terminal_Terminal_nativeGetCellRun },
{ "nativeGetRows", "(I)I", (void*)com_android_terminal_Terminal_nativeGetRows },
{ "nativeGetCols", "(I)I", (void*)com_android_terminal_Terminal_nativeGetCols },
- { "nativeDispatchCharacter", "(III)I", (void*)com_android_terminal_Terminal_nativeDispatchCharacter},
- { "nativeDispatchKey", "(III)I", (void*)com_android_terminal_Terminal_nativeDispatchKey },
+ { "nativeDispatchCharacter", "(III)Z", (void*)com_android_terminal_Terminal_nativeDispatchCharacter},
+ { "nativeDispatchKey", "(III)Z", (void*)com_android_terminal_Terminal_nativeDispatchKey },
};
int register_com_android_terminal_Terminal(JNIEnv* env) {
diff --git a/src/com/android/terminal/Terminal.java b/src/com/android/terminal/Terminal.java
index 5d1e6d6..35c2cee 100644
--- a/src/com/android/terminal/Terminal.java
+++ b/src/com/android/terminal/Terminal.java
@@ -152,11 +152,11 @@ public class Terminal {
}
public boolean dispatchKey(int modifiers, int key) {
- return nativeDispatchKey(mNativePtr, modifiers, key) == 0;
+ return nativeDispatchKey(mNativePtr, modifiers, key);
}
public boolean dispatchCharacter(int modifiers, int character) {
- return nativeDispatchCharacter(mNativePtr, modifiers, character) == 0;
+ return nativeDispatchCharacter(mNativePtr, modifiers, character);
}
@@ -170,6 +170,6 @@ public class Terminal {
private static native int nativeGetRows(int ptr);
private static native int nativeGetCols(int ptr);
- private static native int nativeDispatchKey(int ptr, int modifiers, int key);
- private static native int nativeDispatchCharacter(int ptr, int modifiers, int character);
+ private static native boolean nativeDispatchKey(int ptr, int modifiers, int key);
+ private static native boolean nativeDispatchCharacter(int ptr, int modifiers, int character);
}
diff --git a/src/com/android/terminal/TerminalKeys.java b/src/com/android/terminal/TerminalKeys.java
index e77085a..17cab5e 100644
--- a/src/com/android/terminal/TerminalKeys.java
+++ b/src/com/android/terminal/TerminalKeys.java
@@ -168,30 +168,28 @@ public class TerminalKeys implements View.OnKeyListener {
}
public boolean onKey(View v, int keyCode, KeyEvent event) {
- if (mTerm == null) return false;
+ if (mTerm == null || event.getAction() == KeyEvent.ACTION_UP) return false;
int modifiers = getModifiers(event);
int c = getKey(event);
if (c != 0) {
- mTerm.dispatchKey(modifiers, c);
if (DEBUG) {
Log.d(TAG, "dispatched key event: " +
"mod=" + modifiers + ", " +
- "keys=" + getKeyName(keyCode));
+ "keys=" + getKeyName(c));
}
- return true;
+ return mTerm.dispatchKey(modifiers, c);
}
c = getCharacter(event);
if (c != 0) {
- mTerm.dispatchKey(modifiers, c);
if (DEBUG) {
Log.d(TAG, "dispatched key event: " +
"mod=" + modifiers + ", " +
"character='" + new String(Character.toChars(c)) + "'");
}
- return true;
+ return mTerm.dispatchCharacter(modifiers, c);
}
return false;