diff src/com/five_ten_sg/connectbot/service/TerminalKeyListener.java @ 53:e872762ec105 tn5250

start tn5250 integration
author Carl Byington <carl@five-ten-sg.com>
date Wed, 11 Jun 2014 13:37:02 -0700
parents 0e3fc85d0586
children a7e660661e08
line wrap: on
line diff
--- a/src/com/five_ten_sg/connectbot/service/TerminalKeyListener.java	Wed Jun 11 12:18:18 2014 -0700
+++ b/src/com/five_ten_sg/connectbot/service/TerminalKeyListener.java	Wed Jun 11 13:37:02 2014 -0700
@@ -91,7 +91,7 @@
     protected String  customKeyboard = null;
 
     protected int metaState = 0;
-    private   int mDeadKey  = 0;
+    protected int mDeadKey  = 0;
 
     // TODO add support for the new API.
     private ClipboardManager clipboard = null;
@@ -118,11 +118,17 @@
     }
 
     public void sendEscape() {
-        buffer.write(0x1b);
+        buffer.keyPressed(vt320.KEY_ESCAPE, ' ',  getStateForBuffer());
     }
 
     protected void sendEncoded(String s) {
-        buffer.write(s.getBytes(encoding));
+        byte [] b = null;
+        try {
+            b = s.getBytes(encoding);
+        }
+        catch (UnsupportedEncodingException e){
+        }
+        if (b != null) buffer.write(b);
     }
 
     /**
@@ -176,7 +182,7 @@
                     else if (keyCode == KeyEvent.KEYCODE_SHIFT_RIGHT
                              && (metaState & META_TAB) != 0) {
                         metaState &= ~(META_TAB | META_TRANSIENT);
-                        buffer.write(0x09);
+                        buffer.keyPressed(vt320.KEY_TAB, ' ',  getStateForBuffer());
                         return true;
                     }
                 }
@@ -190,7 +196,7 @@
                     else if (keyCode == KeyEvent.KEYCODE_SHIFT_LEFT
                              && (metaState & META_TAB) != 0) {
                         metaState &= ~(META_TAB | META_TRANSIENT);
-                        buffer.write(0x09);
+                        buffer.keyPressed(vt320.KEY_TAB, ' ',  getStateForBuffer());
                         return true;
                     }
                 }
@@ -317,7 +323,7 @@
                     }
                     else if ((orgMetaState & KeyEvent.META_ALT_ON) != 0) {
                         sendMeta = true;
-                        buffer.write(0x1b);
+                        sendEscape();
                     }
 
                     if (sendMeta || sendCtrl) {
@@ -342,7 +348,7 @@
                         return true;
                     }
                     else if ((orgMetaState & KeyEvent.META_ALT_ON) != 0) {
-                        buffer.write(0x1b);
+                        sendEscape();
                         buffer.write(k);
                         return true;
                     }
@@ -418,11 +424,11 @@
             // look for special chars
             switch (keyCode) {
                 case KEYCODE_ESCAPE:
-                    buffer.write(0x1b);
+                    sendEscape();
                     return true;
 
                 case KeyEvent.KEYCODE_TAB:
-                    buffer.write(0x09);
+                    buffer.keyPressed(vt320.KEY_TAB, ' ',  getStateForBuffer());
                     return true;
 
                 case KEYCODE_PAGE_DOWN:
@@ -479,12 +485,10 @@
 
                 case KeyEvent.KEYCODE_DEL:
                     if ((metaState & META_ALT_MASK) != 0) {
-                        buffer.keyPressed(vt320.KEY_INSERT, ' ',
-                                          getStateForBuffer());
+                        buffer.keyPressed(vt320.KEY_INSERT, ' ', getStateForBuffer());
                     }
                     else {
-                        buffer.keyPressed(vt320.KEY_BACK_SPACE, ' ',
-                                          getStateForBuffer());
+                        buffer.keyPressed(vt320.KEY_BACK_SPACE, ' ', getStateForBuffer());
                     }
 
                     metaState &= ~META_TRANSIENT;
@@ -502,12 +506,10 @@
                     }
                     else {
                         if ((metaState & META_ALT_MASK) != 0) {
-                            buffer.keyPressed(vt320.KEY_HOME, ' ',
-                                              getStateForBuffer());
+                            buffer.keyPressed(vt320.KEY_HOME, ' ', getStateForBuffer());
                         }
                         else {
-                            buffer.keyPressed(vt320.KEY_LEFT, ' ',
-                                              getStateForBuffer());
+                            buffer.keyPressed(vt320.KEY_LEFT, ' ', getStateForBuffer());
                         }
 
                         metaState &= ~META_TRANSIENT;
@@ -523,12 +525,10 @@
                     }
                     else {
                         if ((metaState & META_ALT_MASK) != 0) {
-                            buffer.keyPressed(vt320.KEY_PAGE_UP, ' ',
-                                              getStateForBuffer());
+                            buffer.keyPressed(vt320.KEY_PAGE_UP, ' ', getStateForBuffer());
                         }
                         else {
-                            buffer.keyPressed(vt320.KEY_UP, ' ',
-                                              getStateForBuffer());
+                            buffer.keyPressed(vt320.KEY_UP, ' ', getStateForBuffer());
                         }
 
                         metaState &= ~META_TRANSIENT;
@@ -544,12 +544,10 @@
                     }
                     else {
                         if ((metaState & META_ALT_MASK) != 0) {
-                            buffer.keyPressed(vt320.KEY_PAGE_DOWN, ' ',
-                                              getStateForBuffer());
+                            buffer.keyPressed(vt320.KEY_PAGE_DOWN, ' ', getStateForBuffer());
                         }
                         else {
-                            buffer.keyPressed(vt320.KEY_DOWN, ' ',
-                                              getStateForBuffer());
+                            buffer.keyPressed(vt320.KEY_DOWN, ' ', getStateForBuffer());
                         }
 
                         metaState &= ~META_TRANSIENT;
@@ -565,12 +563,10 @@
                     }
                     else {
                         if ((metaState & META_ALT_MASK) != 0) {
-                            buffer.keyPressed(vt320.KEY_END, ' ',
-                                              getStateForBuffer());
+                            buffer.keyPressed(vt320.KEY_END, ' ', getStateForBuffer());
                         }
                         else {
-                            buffer.keyPressed(vt320.KEY_RIGHT, ' ',
-                                              getStateForBuffer());
+                            buffer.keyPressed(vt320.KEY_RIGHT, ' ', getStateForBuffer());
                         }
 
                         metaState &= ~META_TRANSIENT;
@@ -612,7 +608,7 @@
             metaPress(META_CTRL_ON);
         }
         else if (PreferenceConstants.HWBUTTON_TAB.equals(shortcut)) {
-            buffer.write(0x09);
+            buffer.keyPressed(vt320.KEY_TAB, ' ',  getStateForBuffer());
         }
         else if (PreferenceConstants.HWBUTTON_CTRLA_SPACE.equals(shortcut)) {
             buffer.write(0x01);
@@ -623,10 +619,10 @@
         }
         else if (PreferenceConstants.HWBUTTON_ESC.equals(shortcut)) {
             showMetakeyToast(v, PreferenceConstants.HWBUTTON_ESC);
-            buffer.write(0x1b);
+            sendEscape();
         }
         else if (PreferenceConstants.HWBUTTON_ESC_A.equals(shortcut)) {
-            buffer.write(0x1b);
+            sendEscape();
             buffer.write('a');
         }
         else {
@@ -901,7 +897,7 @@
         }
         else {
             if ((metaState & META_CTRL_ON) != 0) {
-                buffer.write(0x1b);
+                sendEscape();
                 metaState &= ~META_CTRL_ON;
             }
             else
@@ -911,7 +907,7 @@
         bridge.redraw();
     }
 
-    private boolean customKeymapAction(View v, int keyCode, KeyEvent event) {
+    protected boolean customKeymapAction(View v, int keyCode, KeyEvent event) {
         if (bridge == null || customKeyboard.equals(PreferenceConstants.CUSTOM_KEYMAP_DISABLED))
             return false;
 
@@ -941,7 +937,7 @@
                         // screen (-1) or the Asus Transformer Keyboard Dock.
                         // Treat the HW button as ESC.
                         if (event.getDeviceId() > 0) {
-                            buffer.write(0x1b);
+                            sendEscape();
                             return true;
                         }
                     }
@@ -1035,12 +1031,14 @@
             // Samsung Captivate Glide (SGH-i927)
             if (keyCode == 115) {
                 // .com key = ESC
-                c = 0x1b;
+                c = 0x00;
+                termKey = vt320.KEY_ESCAPE;
                 return true;
             }
             else if (keyCode == 116) {
                 // Microphone key = TAB
-                c = 0x09;
+                c = 0x00;
+                termKey = vt320.KEY_TAB;
             }
             else if ((metaState & META_ALT_MASK) != 0 && (metaState & META_SHIFT_MASK) != 0) {
                 switch (keyCode) {
@@ -1066,11 +1064,13 @@
             // Samsung Captivate Glide (SGH-i927) Ice Cream Sandwich (4.0.x)
             if (keyCode == 226) {
                 // .com key = ESC
-                c = 0x1b;
+                c = 0x00;
+                termKey = vt320.KEY_ESCAPE;
             }
             else if (keyCode == 220) {
                 // Microphone key = TAB
-                c = 0x09;
+                c = 0x00;
+                termKey = vt320.KEY_TAB;
             }
             else if ((metaState & META_ALT_MASK) != 0 && (metaState & META_SHIFT_MASK) != 0) {
                 switch (keyCode) {