diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 6fd534c..d8d1736 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1407,7 +1407,7 @@
             android:theme="@style/Theme.ConfirmDeviceCredentials"/>
 
         <activity android:name="ConfirmLockPassword"
-            android:windowSoftInputMode="stateVisible|adjustResize"
+            android:windowSoftInputMode="adjustResize"
             android:theme="@style/Theme.ConfirmDeviceCredentials"/>
 
         <activity android:name=".fingerprint.FingerprintSettings" android:exported="false"/>
@@ -1424,7 +1424,7 @@
         <!-- Note this must not be exported since it returns the password in the intent -->
         <activity android:name="ConfirmLockPassword$InternalActivity"
             android:exported="false"
-            android:windowSoftInputMode="stateVisible|adjustResize"
+            android:windowSoftInputMode="adjustResize"
             android:theme="@style/Theme.ConfirmDeviceCredentials"/>
 
         <activity android:name="SetupChooseLockGeneric"
diff --git a/src/com/android/settings/ConfirmLockPassword.java b/src/com/android/settings/ConfirmLockPassword.java
index c1d8adb..8ae2824 100644
--- a/src/com/android/settings/ConfirmLockPassword.java
+++ b/src/com/android/settings/ConfirmLockPassword.java
@@ -16,7 +16,6 @@
 
 package com.android.settings;
 
-import android.annotation.Nullable;
 import android.os.UserHandle;
 import android.text.TextUtils;
 import com.android.internal.logging.MetricsLogger;
@@ -24,7 +23,9 @@
 import com.android.internal.widget.LockPatternUtils;
 import com.android.internal.widget.TextViewInputDisabler;
 
+import android.app.Fragment;
 import android.app.admin.DevicePolicyManager;
+import android.content.Context;
 import android.content.Intent;
 import android.os.AsyncTask;
 import android.os.Bundle;
@@ -35,11 +36,11 @@
 import android.text.InputType;
 import android.view.KeyEvent;
 import android.view.LayoutInflater;
-import android.view.MenuItem;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.ViewGroup;
 import android.view.inputmethod.EditorInfo;
+import android.view.inputmethod.InputMethodManager;
 import android.widget.TextView;
 import android.widget.TextView.OnEditorActionListener;
 
@@ -61,6 +62,15 @@
         return false;
     }
 
+    @Override
+    public void onWindowFocusChanged(boolean hasFocus) {
+        super.onWindowFocusChanged(hasFocus);
+        Fragment fragment = getFragmentManager().findFragmentById(R.id.main_content);
+        if (fragment != null && fragment instanceof ConfirmLockPasswordFragment) {
+            ((ConfirmLockPasswordFragment)fragment).onWindowFocusChanged(hasFocus);
+        }
+    }
+
     public static class ConfirmLockPasswordFragment extends ConfirmDeviceCredentialBaseFragment
             implements OnClickListener, OnEditorActionListener {
         private static final String KEY_NUM_WRONG_CONFIRM_ATTEMPTS
@@ -77,6 +87,7 @@
         private int mNumWrongConfirmAttempts;
         private CountDownTimer mCountdownTimer;
         private boolean mIsAlpha;
+        private InputMethodManager mImm;
 
         // required constructor for fragments
         public ConfirmLockPasswordFragment() {
@@ -111,6 +122,9 @@
                     || DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC == storedQuality
                     || DevicePolicyManager.PASSWORD_QUALITY_COMPLEX == storedQuality;
 
+            mImm = (InputMethodManager) getActivity().getSystemService(
+                    Context.INPUT_METHOD_SERVICE);
+
             Intent intent = getActivity().getIntent();
             if (intent != null) {
                 CharSequence headerMessage = intent.getCharSequenceExtra(
@@ -172,7 +186,7 @@
             if (deadline != 0) {
                 handleAttemptLockout(deadline);
             } else {
-                mPasswordEntryInputDisabler.setInputEnabled(true);
+                resetState();
             }
         }
 
@@ -189,6 +203,31 @@
             getActivity().finish();
         }
 
+        private void resetState() {
+            mPasswordEntry.setEnabled(true);
+            mPasswordEntryInputDisabler.setInputEnabled(true);
+            mImm.showSoftInput(mPasswordEntry, InputMethodManager.SHOW_IMPLICIT);
+        }
+
+        public void onWindowFocusChanged(boolean hasFocus) {
+            if (!hasFocus) {
+                return;
+            }
+            // Post to let window focus logic to finish to allow soft input show/hide properly.
+            mPasswordEntry.post(new Runnable() {
+                @Override
+                public void run() {
+                    if (mPasswordEntry.isEnabled()) {
+                        resetState();
+                        return;
+                    }
+
+                    mImm.hideSoftInputFromWindow(mPasswordEntry.getWindowToken(),
+                            InputMethodManager.HIDE_IMPLICIT_ONLY);
+                }
+            });
+        }
+
         private void handleNext() {
             mPasswordEntryInputDisabler.setInputEnabled(false);
             if (mPendingLockCheck != null) {
@@ -279,7 +318,7 @@
 
         private void handleAttemptLockout(long elapsedRealtimeDeadline) {
             long elapsedRealtime = SystemClock.elapsedRealtime();
-            mPasswordEntryInputDisabler.setInputEnabled(false);
+            mPasswordEntry.setEnabled(false);
             mCountdownTimer = new CountDownTimer(
                     elapsedRealtimeDeadline - elapsedRealtime,
                     LockPatternUtils.FAILED_ATTEMPT_COUNTDOWN_INTERVAL_MS) {
@@ -294,7 +333,7 @@
 
                 @Override
                 public void onFinish() {
-                    mPasswordEntryInputDisabler.setInputEnabled(true);
+                    resetState();
                     mErrorTextView.setText("");
                     mNumWrongConfirmAttempts = 0;
                 }
