diff --git a/src/com/android/settings/CryptKeeper.java b/src/com/android/settings/CryptKeeper.java
index 3d752a3..0374ba6 100644
--- a/src/com/android/settings/CryptKeeper.java
+++ b/src/com/android/settings/CryptKeeper.java
@@ -25,6 +25,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
+import android.graphics.Rect;
 import android.inputmethodservice.KeyboardView;
 import android.os.Bundle;
 import android.os.Handler;
@@ -35,11 +36,14 @@
 import android.os.SystemProperties;
 import android.os.storage.IMountService;
 import android.text.TextUtils;
+import android.util.AttributeSet;
 import android.util.Log;
 import android.view.KeyEvent;
+import android.view.MotionEvent;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.inputmethod.EditorInfo;
+import android.view.inputmethod.InputMethodManager;
 import android.widget.Button;
 import android.widget.EditText;
 import android.widget.ProgressBar;
@@ -80,6 +84,38 @@
         }
     }
 
+    // Use a custom EditText to prevent the input method from showing.
+    public static class CryptEditText extends EditText {
+        InputMethodManager imm;
+
+        public CryptEditText(Context context, AttributeSet attrs) {
+            super(context, attrs);
+            imm = ((InputMethodManager) getContext().
+                    getSystemService(Context.INPUT_METHOD_SERVICE));
+        }
+
+        @Override
+        protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
+            super.onFocusChanged(focused, direction, previouslyFocusedRect);
+
+            if (focused && imm != null && imm.isActive(this)) {
+                imm.hideSoftInputFromWindow(getApplicationWindowToken(), 0);
+            }
+        }
+
+        @Override
+        public boolean onTouchEvent(MotionEvent event) {
+            boolean handled = super.onTouchEvent(event);
+
+            if (imm != null && imm.isActive(this)) {
+                imm.hideSoftInputFromWindow(getApplicationWindowToken(), 0);
+            }
+
+            return handled;
+        }
+    }
+
+
     private Handler mHandler = new Handler() {
         @Override
         public void handleMessage(Message msg) {
