      :on-blur           #(re-frame/dispatch [:accounts.recover.ui/password-input-blured])
      :secure-text-entry true
      :error             (when error (i18n/label error))
-     :on-submit-editing #(re-frame/dispatch [:accounts.recover.ui/sign-in-button-pressed])}]])
+     :on-submit-editing on-submit-editing}]])
 
 (defview recover []
   (letsubs [recovered-account [:get-recover-account]]
     (let [{:keys [passphrase password processing passphrase-valid? password-valid?
                   password-error passphrase-error passphrase-warning processing?]} recovered-account
-          valid-form? (and password-valid? passphrase-valid?)]
+          valid-form? (and password-valid? passphrase-valid?)
+          disabled?   (or (not recovered-account) processing? (not valid-form?))
+          sign-in     #(re-frame/dispatch [:accounts.recover.ui/sign-in-button-pressed])]
       [react/keyboard-avoiding-view {:style styles/screen-container}
        [status-bar/status-bar]
        [toolbar/toolbar nil toolbar/default-nav-back

       [components.common/separator]
       [react/view styles/inputs-container
        [passphrase-input (or passphrase "") passphrase-error passphrase-warning]
        [password-input (or password "") password-error]]
       [react/view components.styles/flex]
       (if processing
         [react/view styles/processing-view

      :error               (cond error (i18n/label error)
                                 warning (i18n/label warning))}]))

(defview password-input [password error on-submit-editing]
  [react/view {:style                       styles/password-input
               :important-for-accessibility :no-hide-descendants}
   [text-input/text-input-with-label
