|
20 | 20 | import android.view.WindowManager;
|
21 | 21 | import android.view.WindowMetrics;
|
22 | 22 | import android.view.Surface;
|
| 23 | +import android.view.inputmethod.InputMethodManager; |
| 24 | +import android.view.KeyEvent; |
23 | 25 | import android.widget.ArrayAdapter;
|
24 | 26 | import android.widget.Button;
|
25 | 27 | import android.widget.EditText;
|
@@ -101,11 +103,20 @@ public void onClick(final View view) {
|
101 | 103 |
|
102 | 104 | setContentView(R.layout.drawterm_main);
|
103 | 105 |
|
| 106 | + Button kbutton = (Button)findViewById(R.id.keyboardToggle); |
| 107 | + kbutton.setOnClickListener(new View.OnClickListener() { |
| 108 | + @Override |
| 109 | + public void onClick(final View view) { |
| 110 | + InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); |
| 111 | + imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0); |
| 112 | + } |
| 113 | + }); |
| 114 | + |
104 | 115 | int rid = res.getIdentifier("navigation_bar_height", "dimen", "android");
|
105 | 116 | if (rid > 0) {
|
106 | 117 | hp -= res.getDimensionPixelSize(rid);
|
107 | 118 | }
|
108 |
| - LinearLayout ll = findViewById(R.id.mouseButtons); |
| 119 | + LinearLayout ll = findViewById(R.id.dtButtons); |
109 | 120 | hp -= ll.getHeight();
|
110 | 121 |
|
111 | 122 | int w = (int)(wp * (160.0/dm.xdpi));
|
@@ -156,6 +167,85 @@ public void onClick(View v) {
|
156 | 167 | });
|
157 | 168 | }
|
158 | 169 |
|
| 170 | + @Override |
| 171 | + public boolean dispatchKeyEvent(KeyEvent event) |
| 172 | + { |
| 173 | + int k = event.getUnicodeChar(); |
| 174 | + if (k == 0) { |
| 175 | + k = event.getDisplayLabel(); |
| 176 | + if (k != 0) |
| 177 | + k |= 0x20; |
| 178 | + } |
| 179 | + |
| 180 | + switch (event.getKeyCode()) { |
| 181 | + case KeyEvent.KEYCODE_DEL: |
| 182 | + k = 0x0008; |
| 183 | + break; |
| 184 | + case KeyEvent.KEYCODE_FORWARD_DEL: |
| 185 | + k = 0x007F; |
| 186 | + break; |
| 187 | + case KeyEvent.KEYCODE_ESCAPE: |
| 188 | + k = 0x001B; |
| 189 | + break; |
| 190 | + case KeyEvent.KEYCODE_MOVE_HOME: |
| 191 | + k = 0xF00D; |
| 192 | + break; |
| 193 | + case KeyEvent.KEYCODE_MOVE_END: |
| 194 | + k = 0xF018; |
| 195 | + break; |
| 196 | + case KeyEvent.KEYCODE_PAGE_UP: |
| 197 | + k = 0xF00F; |
| 198 | + break; |
| 199 | + case KeyEvent.KEYCODE_PAGE_DOWN: |
| 200 | + k = 0xF013; |
| 201 | + break; |
| 202 | + case KeyEvent.KEYCODE_INSERT: |
| 203 | + k = 0xF014; |
| 204 | + break; |
| 205 | + case KeyEvent.KEYCODE_SYSRQ: |
| 206 | + k = 0xF010; |
| 207 | + break; |
| 208 | + case KeyEvent.KEYCODE_DPAD_UP: |
| 209 | + k = 0xF00E; |
| 210 | + break; |
| 211 | + case KeyEvent.KEYCODE_DPAD_LEFT: |
| 212 | + k = 0xF011; |
| 213 | + break; |
| 214 | + case KeyEvent.KEYCODE_DPAD_RIGHT: |
| 215 | + k = 0xF012; |
| 216 | + break; |
| 217 | + case KeyEvent.KEYCODE_DPAD_DOWN: |
| 218 | + k = 0xF800; |
| 219 | + break; |
| 220 | + } |
| 221 | + |
| 222 | + if (k == 0) |
| 223 | + return true; |
| 224 | + |
| 225 | + if (event.isCtrlPressed()) { |
| 226 | + keyDown(0xF017); |
| 227 | + } |
| 228 | + if (event.isAltPressed()) { |
| 229 | + keyDown(0xF015); |
| 230 | + } |
| 231 | + |
| 232 | + if (event.getAction() == KeyEvent.ACTION_DOWN) { |
| 233 | + keyDown(k); |
| 234 | + } |
| 235 | + else if (event.getAction() == KeyEvent.ACTION_UP) { |
| 236 | + keyUp(k); |
| 237 | + } |
| 238 | + |
| 239 | + if (event.isCtrlPressed()) { |
| 240 | + keyUp(0xF017); |
| 241 | + } |
| 242 | + if (event.isAltPressed()) { |
| 243 | + keyUp(0xF015); |
| 244 | + } |
| 245 | + |
| 246 | + return true; |
| 247 | + } |
| 248 | + |
159 | 249 | @Override
|
160 | 250 | public void onBackPressed()
|
161 | 251 | {
|
@@ -188,4 +278,6 @@ public String getClipBoard() {
|
188 | 278 | public native void setDTSurface(Surface surface);
|
189 | 279 | public native void setMouse(int[] args);
|
190 | 280 | public native void setObject();
|
| 281 | + public native void keyDown(int c); |
| 282 | + public native void keyUp(int c); |
191 | 283 | }
|
0 commit comments