diff --git a/apps/Term/src/com/android/term/Term.java b/apps/Term/src/com/android/term/Term.java
index 2d8ba3c..d6b9fe9 100644
--- a/apps/Term/src/com/android/term/Term.java
+++ b/apps/Term/src/com/android/term/Term.java
@@ -2652,63 +2652,12 @@
         return new BaseInputConnection(this, false) {
 
             @Override
-            public boolean beginBatchEdit() {
-                return true;
-            }
-
-            @Override
-            public boolean clearMetaKeyStates(int states) {
-                return true;
-            }
-
-            @Override
-            public boolean commitCompletion(CompletionInfo text) {
-                return true;
-            }
-
-            @Override
             public boolean commitText(CharSequence text, int newCursorPosition) {
                 sendText(text);
                 return true;
             }
 
             @Override
-            public boolean deleteSurroundingText(int leftLength, int rightLength) {
-                return true;
-            }
-
-            @Override
-            public boolean endBatchEdit() {
-                return true;
-            }
-
-            @Override
-            public boolean finishComposingText() {
-                return true;
-            }
-
-            @Override
-            public int getCursorCapsMode(int reqModes) {
-                return 0;
-            }
-
-            @Override
-            public ExtractedText getExtractedText(ExtractedTextRequest request,
-                    int flags) {
-                return null;
-            }
-
-            @Override
-            public CharSequence getTextAfterCursor(int n, int flags) {
-                return null;
-            }
-
-            @Override
-            public CharSequence getTextBeforeCursor(int n, int flags) {
-                return null;
-            }
-
-            @Override
             public boolean performEditorAction(int actionCode) {
                 if(actionCode == EditorInfo.IME_ACTION_UNSPECIFIED) {
                     // The "return" key has been pressed on the IME.
@@ -2731,15 +2680,33 @@
             @Override
             public boolean sendKeyEvent(KeyEvent event) {
                 if (event.getAction() == KeyEvent.ACTION_DOWN) {
-                    switch(event.getKeyCode()) {
-                    case KeyEvent.KEYCODE_DEL:
-                        sendChar(127);
-                        break;
+                    // Some keys are sent here rather than to commitText.
+                    // In particular, del and the digit keys are sent here.
+                    // As a bit of defensive programming, handle every
+                    // key with an ASCII meaning.
+                    int keyCode = event.getKeyCode();
+                    if (keyCode >= 0 && keyCode < KEYCODE_CHARS.length()) {
+                        char c = KEYCODE_CHARS.charAt(keyCode);
+                        if (c > 0) {
+                            sendChar(c);
+                        }
                     }
                 }
                 return true;
             }
 
+            private final String KEYCODE_CHARS =
+                "\000\000\000\000\000\000\000" + "0123456789*#"
+                + "\000\000\000\000\000\000\000\000\000\000"
+                + "abcdefghijklmnopqrstuvwxyz,."
+                + "\000\000\000\000"
+                + "\011 "   // tab, space
+                + "\000\000\000" // sym .. envelope
+                + "\015\177" // enter, del
+                + "`-=[]\\;'/@"
+                + "\000\000\000"
+                + "+";
+
             @Override
             public boolean setComposingText(CharSequence text, int newCursorPosition) {
                 return true;
