diff options
author | Michael Wright <michaelwr@google.com> | 2013-02-26 11:09:12 -0800 |
---|---|---|
committer | Michael Wright <michaelwr@google.com> | 2013-02-26 11:13:27 -0800 |
commit | c8be1790590605603a8dca8f9ee93327c916de3f (patch) | |
tree | a00c1490fe283a9e54c91489f12c8a08e319f1ce | |
parent | 303dab01fa211d0da20136049196e3321241cad8 (diff) | |
download | Terminal-c8be1790590605603a8dca8f9ee93327c916de3f.tar.gz |
Added input error handling and enabled keyboard input
Change-Id: Ie74da0b39d9002802c76dc3ceecd5082e7504f26
-rw-r--r-- | AndroidManifest.xml | 3 | ||||
-rw-r--r-- | jni/com_android_terminal_Terminal.cpp | 33 | ||||
-rw-r--r-- | src/com/android/terminal/Terminal.java | 8 | ||||
-rw-r--r-- | src/com/android/terminal/TerminalKeys.java | 10 |
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; |