From 5c051746046b9e3e7f709788ed3d522ec31c10f8 Mon Sep 17 00:00:00 2001 From: Gheorghe Pinzaru Date: Mon, 6 Jul 2020 15:41:32 +0300 Subject: [PATCH] Merge password screens Update e2e Small UX feedback changes Signed-off-by: Gheorghe Pinzaru --- src/quo/platform.cljs | 6 +- src/quo/react_native.cljs | 19 ++- src/status_im/multiaccounts/create/core.cljs | 71 ++--------- src/status_im/multiaccounts/recover/core.cljs | 50 ++------ .../multiaccounts/recover/core_test.cljs | 19 +-- src/status_im/subs.cljs | 11 +- src/status_im/ui/screens/intro/password.cljs | 112 ++++++++++++++++++ src/status_im/ui/screens/intro/views.cljs | 88 +------------- .../ui/screens/routing/intro_login_stack.cljs | 11 +- .../account_management/test_create_account.py | 1 - test/appium/views/sign_in_view.py | 8 +- translations/en.json | 2 + 12 files changed, 163 insertions(+), 235 deletions(-) create mode 100644 src/status_im/ui/screens/intro/password.cljs diff --git a/src/quo/platform.cljs b/src/quo/platform.cljs index 33e5b64c81..61dc7845af 100644 --- a/src/quo/platform.cljs +++ b/src/quo/platform.cljs @@ -1,7 +1,9 @@ (ns quo.platform - (:require [quo.react-native :as rn])) + (:require ["react-native" :as rn])) -(def os (when rn/platform (.-OS rn/platform))) +(def platform (.-Platform ^js rn)) + +(def os (when platform (.-OS platform))) (def android? (= os "android")) (def ios? (= os "ios")) diff --git a/src/quo/react_native.cljs b/src/quo/react_native.cljs index cbdbd09cf0..2d0ad25723 100644 --- a/src/quo/react_native.cljs +++ b/src/quo/react_native.cljs @@ -1,6 +1,7 @@ (ns quo.react-native (:require [reagent.core :as reagent] [cljs-bean.core :as bean] + [quo.platform :as platform] ["react-native" :as rn] ["@react-native-community/hooks" :as hooks])) @@ -20,9 +21,19 @@ (def touchable-without-feedback (reagent/adapt-react-class (.-TouchableWithoutFeedback ^js rn))) (def text-input (reagent/adapt-react-class (.-TextInput ^js rn))) -(def keyboard-avoiding-view (reagent/adapt-react-class (.-KeyboardAvoidingView ^js rn))) +(def keyboard-avoiding-view-class (reagent/adapt-react-class (.-KeyboardAvoidingView ^js rn))) + +(defn keyboard-avoiding-view [] + (let [this (reagent/current-component) + props (reagent/props this)] + (into [keyboard-avoiding-view-class + (merge (when platform/ios? + {:behavior :padding}) + props)] + (reagent/children this)))) (def keyboard (.-Keyboard ^js rn)) + (def dismiss-keyboard! #(.dismiss ^js keyboard)) (def ui-manager (.-UIManager ^js rn)) @@ -33,10 +44,8 @@ :linear (-> ^js layout-animation .-Presets .-linear) :spring (-> ^js layout-animation .-Presets .-spring)}) -(def activity-indicator-class (reagent/adapt-react-class (.-ActivityIndicator ^js rn))) - -(defn activity-indicator [props] - [activity-indicator-class props]) +(def switch (reagent/adapt-react-class (.-Switch ^js rn))) +(def activity-indicator (reagent/adapt-react-class (.-ActivityIndicator ^js rn))) ;; Flat-list (def ^:private rn-flat-list (reagent/adapt-react-class (.-FlatList ^js rn))) diff --git a/src/status_im/multiaccounts/create/core.cljs b/src/status_im/multiaccounts/create/core.cljs index 05eaea6d2e..509c713ba1 100644 --- a/src/status_im/multiaccounts/create/core.cljs +++ b/src/status_im/multiaccounts/create/core.cljs @@ -7,7 +7,6 @@ [status-im.ethereum.eip55 :as eip55] [status-im.keycard.nfc :as nfc] [status-im.i18n :as i18n] - [status-im.multiaccounts.db :as db] [status-im.native-module.core :as status] [status-im.node.core :as node] [status-im.ui.components.bottom-sheet.core :as bottom-sheet] @@ -26,8 +25,7 @@ {:generate-key 1 :choose-key 2 :select-key-storage 3 - :create-code 4 - :confirm-code 5}) + :create-code 4}) (defn decrement-step [step] (let [inverted (map-invert step-kw-to-num)] @@ -69,8 +67,8 @@ (update :derived normalize-derived-data-keys))) (fx/defn create-multiaccount - [{:keys [db]}] - (let [{:keys [selected-id key-code]} (:intro-wizard db) + [{:keys [db]} key-code] + (let [{:keys [selected-id]} (:intro-wizard db) key-uid (some (fn [{:keys [id key-uid]}] (when (= id selected-id) @@ -94,10 +92,8 @@ (fx/defn prepare-intro-wizard [{:keys [db] :as cofx}] {:db (assoc db :intro-wizard {:step :generate-key - :weak-password? true :back-action :intro-wizard/navigate-back - :forward-action :intro-wizard/step-forward-pressed - :encrypt-with-password? true})}) + :forward-action :intro-wizard/step-forward-pressed})}) (fx/defn intro-wizard {:events [:multiaccounts.create.ui/intro-wizard]} @@ -121,11 +117,7 @@ (let [step (get-in db [:intro-wizard :step])] (fx/merge cofx (when-not (= :generate-key step) - {:db (cond-> (assoc-in db [:intro-wizard :step] (decrement-step step)) - (#{:create-code :confirm-code} step) - (update :intro-wizard assoc :weak-password? true :key-code nil) - (= step :confirm-code) - (assoc-in [:intro-wizard :confirm-failure?] false))}) + {:db (assoc-in db [:intro-wizard :step] (decrement-step step))}) (when (= :generate-key-step) {:db (dissoc db :intro-wizard)})))) @@ -154,18 +146,6 @@ {:db (assoc-in db [:intro-wizard :processing?] true) :intro-wizard/start-onboarding nil}) -(fx/defn on-confirm-failure [{:keys [db] :as cofx}] - (do - (utils/vibrate) - {:db (assoc-in db [:intro-wizard :confirm-failure?] true)})) - -(defn confirm-failure? [db] - (let [step (get-in db [:intro-wizard :step])] - (and (= step :confirm-code) - (not (:multiaccounts/login db)) - (get-in db [:intro-wizard :encrypt-with-password?]) - (not= (get-in db [:intro-wizard :stored-key-code]) (get-in db [:intro-wizard :key-code]))))) - (fx/defn store-key-code [{:keys [db] :as cofx}] (let [key-code (get-in db [:intro-wizard :key-code])] {:db (update db :intro-wizard @@ -174,27 +154,20 @@ (fx/defn intro-step-forward {:events [:intro-wizard/step-forward-pressed]} - [{:keys [db] :as cofx} {:keys [skip?] :as opts}] - (let [{:keys [step selected-storage-type processing? weak-password?]} (:intro-wizard db)] + [{:keys [db] :as cofx} {:keys [skip? key-code] :as opts}] + (let [{:keys [step selected-storage-type processing?]} (:intro-wizard db)] (log/debug "[multiaccount.create] intro-step-forward" "step" step) - (cond (confirm-failure? db) - (on-confirm-failure cofx) - - (= step :generate-key) + (cond (= step :generate-key) (init-key-generation cofx) - (and (= step :create-code) - (= weak-password? true)) - nil - - (and (= step :confirm-code) + (and (= step :create-code) (not processing?)) (fx/merge cofx {:db (assoc-in db [:intro-wizard :processing?] true)} - create-multiaccount) + (create-multiaccount key-code)) - (and (= step :confirm-code) + (and (= step :create-code) (:multiaccounts/login db)) (exit-wizard cofx) @@ -363,33 +336,11 @@ [{:keys [db] :as cofx} storage-type] {:db (assoc-in db [:intro-wizard :selected-storage-type] storage-type)}) -(fx/defn on-encrypt-with-password-pressed - {:events [:intro-wizard/on-encrypt-with-password-pressed]} - [{:keys [db] :as cofx}] - {:db (assoc-in db [:intro-wizard :encrypt-with-password?] true)}) - (fx/defn on-learn-more-pressed {:events [:intro-wizard/on-learn-more-pressed]} [{:keys [db] :as cofx}] {:db (assoc-in db [:intro-wizard :show-learn-more?] true)}) -(defn get-new-key-code [current-code sym encrypt-with-password?] - (cond (or (= sym :remove) (= sym "Backspace")) - (subs current-code 0 (dec (count current-code))) - (and (not encrypt-with-password?) (= (count current-code) 6)) - current-code - (= (count sym) 1) - (str current-code sym) - :else current-code)) - -(fx/defn code-symbol-pressed - {:events [:intro-wizard/code-symbol-pressed]} - [{:keys [db] :as cofx} new-key-code] - (let [encrypt-with-password? (get-in db [:intro-wizard :encrypt-with-password?])] - {:db (update db :intro-wizard assoc :key-code new-key-code - :confirm-failure? false - :weak-password? (not (db/valid-length? new-key-code)))})) - (re-frame/reg-cofx ::get-signing-phrase (fn [cofx _] diff --git a/src/status_im/multiaccounts/recover/core.cljs b/src/status_im/multiaccounts/recover/core.cljs index d67638b888..6522662010 100644 --- a/src/status_im/multiaccounts/recover/core.cljs +++ b/src/status_im/multiaccounts/recover/core.cljs @@ -77,28 +77,14 @@ (fx/defn store-multiaccount {:events [::recover-multiaccount-confirmed]} - [{:keys [db]}] - (let [password (get-in db [:intro-wizard :key-code]) - {:keys [root-key]} (:intro-wizard db) + [{:keys [db]} password] + (let [{:keys [root-key]} (:intro-wizard db) {:keys [id key-uid]} root-key callback #(re-frame/dispatch [::store-multiaccount-success % password]) hashed-password (ethereum/sha3 (security/safe-unmask-data password))] {:db (assoc-in db [:intro-wizard :processing?] true) ::multiaccounts.create/store-multiaccount [id key-uid hashed-password callback]})) -(fx/defn recover-multiaccount-with-checks - {:events [::sign-in-button-pressed]} - [{:keys [db] :as cofx}] - (let [{:keys [passphrase processing?]} (:intro-wizard db)] - (when-not processing? - (if (mnemonic/status-generated-phrase? passphrase) - (store-multiaccount cofx) - {:ui/show-confirmation - {:title (i18n/label :recovery-typo-dialog-title) - :content (i18n/label :recovery-typo-dialog-description) - :confirm-button-text (i18n/label :recovery-confirm-phrase) - :on-accept #(re-frame/dispatch [::recover-multiaccount-confirmed])}})))) - (re-frame/reg-fx ::import-multiaccount (fn [{:keys [passphrase password]}] @@ -210,11 +196,9 @@ (case step :recovery-success :enter-phrase :select-key-storage :recovery-success - :create-code :select-key-storage - :confirm-code :create-code) + :create-code :select-key-storage) :confirm-failure? false - :key-code nil - :weak-password? true)}))) + :key-code nil)}))) (fx/defn cancel-pressed {:events [:multiaccounts.recover/cancel-pressed]} @@ -259,31 +243,11 @@ (navigation/navigate-to-cofx :recover-multiaccount-select-storage nil) (select-storage-next-pressed)))) -(fx/defn proceed-to-password-confirm - [{:keys [db] :as cofx}] - (fx/merge cofx - {:db (update db :intro-wizard assoc :step :confirm-code - :forward-action :multiaccounts.recover/confirm-password-next-pressed)} - (navigation/navigate-to-cofx :recover-multiaccount-confirm-password nil))) - -(fx/defn enter-password-next-button-pressed - {:events [:multiaccounts.recover/enter-password-next-pressed]} - [{:keys [db] :as cofx}] - (fx/merge cofx - {:db (-> db - (assoc-in [:intro-wizard :stored-key-code] (get-in db [:intro-wizard :key-code])) - (assoc-in [:intro-wizard :key-code] ""))} - (proceed-to-password-confirm))) - (fx/defn confirm-password-next-button-pressed - {:events [:multiaccounts.recover/confirm-password-next-pressed] + {:events [:multiaccounts.recover/enter-password-next-pressed] :interceptors [(re-frame/inject-cofx :random-guid-generator)]} - [{:keys [db] :as cofx}] - (let [{:keys [key-code stored-key-code]} (:intro-wizard db)] - (if (= key-code stored-key-code) - (fx/merge cofx - (store-multiaccount)) - {:db (assoc-in db [:intro-wizard :confirm-failure?] true)}))) + [{:keys [db] :as cofx} {:keys [key-code]}] + (store-multiaccount cofx key-code)) (fx/defn count-words [{:keys [db]}] diff --git a/src/status_im/multiaccounts/recover/core_test.cljs b/src/status_im/multiaccounts/recover/core_test.cljs index 7afa609e36..bea20e27e3 100644 --- a/src/status_im/multiaccounts/recover/core_test.cljs +++ b/src/status_im/multiaccounts/recover/core_test.cljs @@ -2,8 +2,7 @@ (:require [cljs.test :refer-macros [deftest is testing]] [status-im.multiaccounts.recover.core :as models] [status-im.multiaccounts.create.core :as multiaccounts.create] - [status-im.utils.security :as security] - [status-im.i18n :as i18n])) + [status-im.utils.security :as security])) ;;;; helpers @@ -37,22 +36,10 @@ (deftest store-multiaccount (let [new-cofx (models/store-multiaccount {:db {:intro-wizard - {:passphrase "game buzz method pretty zeus fat quit display velvet unveil marine crater" - :password "thisisapaswoord"}}})] + {:passphrase "game buzz method pretty zeus fat quit display velvet unveil marine crater"}}} + (security/mask-data "thisisapaswoord"))] (is (::multiaccounts.create/store-multiaccount new-cofx)))) -(deftest recover-multiaccount-with-checks - (let [new-cofx (models/recover-multiaccount-with-checks {:db {:intro-wizard - {:passphrase "game buzz method pretty olympic fat quit display velvet unveil marine crater" - :password "thisisapaswoord"}}})] - (is (::multiaccounts.create/store-multiaccount new-cofx))) - (let [new-cofx (models/recover-multiaccount-with-checks {:db {:intro-wizard - {:passphrase "game buzz method pretty zeus fat quit display velvet unveil marine crater" - :password "thisisapaswoord"}}})] - (is (= (i18n/label :recovery-typo-dialog-title) (-> new-cofx :ui/show-confirmation :title))) - (is (= (i18n/label :recovery-typo-dialog-description) (-> new-cofx :ui/show-confirmation :content))) - (is (= (i18n/label :recovery-confirm-phrase) (-> new-cofx :ui/show-confirmation :confirm-button-text))))) - (deftest on-import-multiaccount-success (testing "importing a new multiaccount" (let [res (models/on-import-multiaccount-success diff --git a/src/status_im/subs.cljs b/src/status_im/subs.cljs index 20c13151e1..756b64ec02 100644 --- a/src/status_im/subs.cljs +++ b/src/status_im/subs.cljs @@ -231,20 +231,11 @@ :intro-wizard/create-code :<- [:intro-wizard] (fn [wizard-state] - (merge (select-keys wizard-state [:confirm-failure? :encrypt-with-password? :weak-password? :view-width]) + (merge (select-keys wizard-state [:processing?]) (if (:recovering? wizard-state) {:forward-action :multiaccounts.recover/enter-password-next-pressed} {:forward-action :intro-wizard/step-forward-pressed})))) -(re-frame/reg-sub - :intro-wizard/confirm-code - :<- [:intro-wizard] - (fn [wizard-state] - (merge (select-keys wizard-state [:confirm-failure? :encrypt-with-password? :processing? :view-width]) - (if (:recovering? wizard-state) - {:forward-action :multiaccounts.recover/confirm-password-next-pressed} - {:forward-action :intro-wizard/step-forward-pressed})))) - (re-frame/reg-sub :intro-wizard/enter-phrase :<- [:intro-wizard] diff --git a/src/status_im/ui/screens/intro/password.cljs b/src/status_im/ui/screens/intro/password.cljs new file mode 100644 index 0000000000..c2037af335 --- /dev/null +++ b/src/status_im/ui/screens/intro/password.cljs @@ -0,0 +1,112 @@ +(ns status-im.ui.screens.intro.password + (:require [re-frame.core :as re-frame] + [reagent.core :as reagent] + [status-im.ui.components.topbar :as topbar] + [status-im.ui.components.toolbar :as toolbar] + [status-im.i18n :as i18n] + [status-im.constants :as const] + [status-im.utils.security :as security] + [quo.react-native :as rn] + [quo.core :as quo])) + +(defn validate-password [password] + (>= (count password) const/min-password-length)) + +(defn confirm-password [password confirm] + (= password confirm)) + +(defn screen [] + (let [password (reagent/atom nil) + confirm (reagent/atom nil) + show-error (reagent/atom nil) + confirm-ref (atom nil)] + (fn [] + (let [{:keys [forward-action processing?]} + @(re-frame/subscribe [:intro-wizard/create-code]) + valid-password (validate-password @password) + valid-form (confirm-password @password @confirm) + on-submit (fn [] + (when (not processing?) + (if valid-form + (do (reset! show-error false) + (re-frame/dispatch [forward-action {:key-code @password}])) + (reset! show-error true))))] + [rn/keyboard-avoiding-view {:flex 1} + [topbar/topbar + {:navigation + {:icon :main-icons/back + :accessibility-label :back-button + :handler #(re-frame/dispatch [:intro-wizard/navigate-back])}}] + [rn/view {:style {:flex 1 + :justify-content :space-between + :padding-vertical 16 + :padding-horizontal 16}} + + [rn/view + [quo/text {:weight :bold + :align :center + :size :x-large} + (i18n/label :intro-wizard-title-alt4)]] + [rn/view + [rn/view {:style {:padding 16}} + [quo/text-input {:secure-text-entry true + :auto-capitalize :none + :auto-focus true + :show-cancel false + :accessibility-label :password-input + :placeholder (i18n/label :t/password-placeholder) + :on-change-text #(reset! password (security/mask-data %)) + :return-key-type :next + :on-submit-editing #(when valid-password + (some-> ^js @confirm-ref .focus))}]] + [rn/view {:style {:padding 16 + :opacity (if-not valid-password 0.33 1)}} + [quo/text-input {:secure-text-entry true + :get-ref #(reset! confirm-ref %) + :auto-capitalize :none + :show-cancel false + :accessibility-label :password-input + :editable valid-password + :placeholder (i18n/label :t/confirm-password-placeholder) + :return-key-type :go + :error (when @show-error (i18n/label :t/password_error1)) + :blur-on-submit true + :on-focus #(reset! show-error false) + :on-submit-editing on-submit + :on-change-text #(do + (reset! confirm (security/mask-data %)) + (cond + (> (count @password) (count @confirm)) + (reset! show-error false) + + (not (confirm-password @password @confirm)) + (reset! show-error true) + + :else (reset! show-error false)))}]]] + [rn/view + [quo/text {:color :secondary + :align :center + :size :small} + (i18n/label :t/password-description)]]] + [toolbar/toolbar + (merge {:show-border? true} + (if processing? + {:center + [rn/view {:align-items :center + :justify-content :center + :flex-direction :row} + [rn/activity-indicator {:size :small + :animating true}] + [rn/view {:padding-horizontal 8} + [quo/text {:color :secondary} + (i18n/label :t/processing)]]]} + {:right + [quo/button + {:on-press on-submit + :accessibility-label :onboarding-next-button + :disabled (or (nil? @confirm) + (not valid-password) + processing?) + :type :secondary + :after :main-icons/next} + (i18n/label :t/next)]}))]])))) diff --git a/src/status_im/ui/screens/intro/views.cljs b/src/status_im/ui/screens/intro/views.cljs index 3ea6ea84ff..4d5e9de760 100644 --- a/src/status_im/ui/screens/intro/views.cljs +++ b/src/status_im/ui/screens/intro/views.cljs @@ -153,40 +153,7 @@ :max-height 16}}] [storage-entry (second storage-types) selected-storage-type]]]])) -(defn password-container [confirm-failure? _] - (let [horizontal-margin 16] - [react/view {:style {:flex 1 - :justify-content :space-between - :margin-horizontal horizontal-margin}} - [react/view - [react/text {:style (assoc styles/wizard-text :color colors/red - :margin-bottom 16)} - (if confirm-failure? (i18n/label :t/password_error1) " ")]] - [react/view {:padding 16} - [quo/text-input {:secure-text-entry true - :auto-capitalize :none - :auto-focus true - :show-cancel false - :accessibility-label :password-input - :placeholder "" - :on-change-text #(re-frame/dispatch [:intro-wizard/code-symbol-pressed %])}]] - [react/text {:style (assoc styles/wizard-text :margin-bottom 16)} (i18n/label :t/password-description)]])) - -(defn create-code [{:keys [confirm-failure? view-width]}] - [password-container confirm-failure? view-width]) - -(defn confirm-code [{:keys [confirm-failure? processing? view-width]}] - (if processing? - [react/view {:style {:justify-content :center - :align-items :center}} - [react/activity-indicator {:size :large - :animating true}] - [react/text {:style {:color colors/gray - :margin-top 8}} - (i18n/label :t/processing)]] - [password-container confirm-failure? view-width])) - -(defn bottom-bar [{:keys [step weak-password? encrypt-with-password? +(defn bottom-bar [{:keys [step weak-password? forward-action next-button-disabled? processing? existing-account?]}] @@ -206,15 +173,6 @@ :on-press #(re-frame/dispatch [forward-action]) :accessibility-label :onboarding-next-button} (i18n/label label-kw)]]) - (and (#{:create-code :confirm-code} step) - (not encrypt-with-password?)) - [react/view {:margin-bottom 16} - [quo/button {:style styles/bottom-button - :accessibility-label :encrypt-with-password-button - :on-press #(re-frame/dispatch [:intro-wizard/on-encrypt-with-password-pressed]) - :type :secondary} - (i18n/label :t/encrypt-with-password)]] - :else [toolbar/toolbar {:show-border? true @@ -241,10 +199,8 @@ processing? :t/generating-keys :else :t/this-will-take-few-seconds))])]) -(defn top-bar [{:keys [step encrypt-with-password?]}] - (let [hide-subtitle? (or (= step :confirm-code) - (= step :enter-phrase) - (and (#{:create-code :confirm-code} step) encrypt-with-password?))] +(defn top-bar [{:keys [step]}] + (let [hide-subtitle? (or (= step :enter-phrase))] [react/view {:style {:margin-top 16 :margin-horizontal 32}} @@ -256,9 +212,7 @@ :t/multiaccounts-recover-enter-phrase-title (= step :recovery-success) :t/keycard-recovery-success-header - :else (keyword (str "intro-wizard-title" - (when (and (#{:create-code :confirm-code} step) encrypt-with-password?) - "-alt") (step-kw-to-num step)))))] + :else (keyword (str "intro-wizard-title" (step-kw-to-num step)))))] (cond (#{:choose-key :select-key-storage} step) ; Use nested text for the "Learn more" link [react/nested-text {:style (merge styles/wizard-text @@ -408,40 +362,6 @@ [bottom-bar {:step :select-key-storage :forward-action (:forward-action wizard-state)}]]])) -(defview wizard-create-code [] - (letsubs [wizard-state [:intro-wizard/create-code]] - [react/keyboard-avoiding-view {:style {:flex 1}} - [topbar/topbar - {:navigation - {:icon :main-icons/arrow-left - :accessibility-label :back-button - :handler #(re-frame/dispatch [:intro-wizard/navigate-back])}}] - [react/view {:style {:flex 1 - :justify-content :space-between}} - [top-bar {:step :create-code :encrypt-with-password? (:encrypt-with-password? wizard-state)}] - [create-code wizard-state] - [bottom-bar (merge {:step :create-code - :forward-action (:forward-action wizard-state)} - wizard-state)]]])) - -(defview wizard-confirm-code [] - (letsubs [wizard-state [:intro-wizard/confirm-code]] - [react/keyboard-avoiding-view {:style {:flex 1}} - [topbar/topbar - {:navigation - (if (:processing? wizard-state) - :none - {:icon :main-icons/arrow-left - :accessibility-label :back-button - :handler #(re-frame/dispatch [:intro-wizard/navigate-back])})}] - [react/view {:style {:flex 1 - :justify-content :space-between}} - [top-bar {:step :confirm-code :encrypt-with-password? (:encrypt-with-password? wizard-state)}] - [confirm-code wizard-state] - [bottom-bar (merge {:step :confirm-code - :forward-action (:forward-action wizard-state)} - wizard-state)]]])) - (defview wizard-enter-phrase [] (letsubs [wizard-state [:intro-wizard/enter-phrase]] [react/keyboard-avoiding-view {:style {:flex 1}} diff --git a/src/status_im/ui/screens/routing/intro_login_stack.cljs b/src/status_im/ui/screens/routing/intro_login_stack.cljs index d84c5ade0e..2eeadd4cab 100644 --- a/src/status_im/ui/screens/routing/intro_login_stack.cljs +++ b/src/status_im/ui/screens/routing/intro_login_stack.cljs @@ -7,6 +7,7 @@ [status-im.ui.screens.keycard.onboarding.views :as keycard.onboarding] [status-im.ui.screens.keycard.recovery.views :as keycard.recovery] [status-im.ui.screens.keycard.views :as keycard] + [status-im.ui.screens.intro.password :as password] [status-im.ui.screens.keycard.authentication-method.views :as keycard.authentication] @@ -47,10 +48,7 @@ :component intro/wizard-select-key-storage} {:name :create-multiaccount-create-code :back-handler :noop - :component intro/wizard-create-code} - {:name :create-multiaccount-confirm-code - :back-handler :noop - :component intro/wizard-confirm-code} + :component password/screen} {:name :recover-multiaccount-enter-phrase :component intro/wizard-enter-phrase} {:name :recover-multiaccount-select-storage @@ -58,10 +56,7 @@ :component intro/wizard-select-key-storage} {:name :recover-multiaccount-enter-password :back-handler :noop - :component intro/wizard-create-code} - {:name :recover-multiaccount-confirm-password - :back-handler :noop - :component intro/wizard-confirm-code} + :component password/screen} {:name :recover-multiaccount-success :back-handler :noop :component intro/wizard-recovery-success} diff --git a/test/appium/tests/atomic/account_management/test_create_account.py b/test/appium/tests/atomic/account_management/test_create_account.py index c022ee2350..92045b72bc 100644 --- a/test/appium/tests/atomic/account_management/test_create_account.py +++ b/test/appium/tests/atomic/account_management/test_create_account.py @@ -48,7 +48,6 @@ class TestCreateAccount(SingleDeviceTestCase): sign_in.next_button.click() sign_in.next_button.click() sign_in.create_password_input.set_value(common_password) - sign_in.next_button.click() sign_in.confirm_your_password_input.set_value(common_password) sign_in.next_button.click() for element in sign_in.maybe_later_button, sign_in.lets_go_button: diff --git a/test/appium/views/sign_in_view.py b/test/appium/views/sign_in_view.py index 510b9ac839..899d51487f 100644 --- a/test/appium/views/sign_in_view.py +++ b/test/appium/views/sign_in_view.py @@ -70,15 +70,13 @@ class FirstKeyForChatText(BaseText): class CreatePasswordInput(BaseEditBox): def __init__(self, driver): super(CreatePasswordInput, self).__init__(driver) - self.locator = self.Locator.xpath_selector("//android.widget.TextView[@text='Create a password']/.." - "//android.widget.EditText") + self.locator = self.Locator.xpath_selector("(//android.widget.EditText[@content-desc='password-input'])[1]") class ConfirmYourPasswordInput(BaseEditBox): def __init__(self, driver): super(ConfirmYourPasswordInput, self).__init__(driver) - self.locator = self.Locator.xpath_selector("//android.widget.TextView[@text='Confirm your password']/.." - "//android.widget.EditText") + self.locator = self.Locator.xpath_selector("(//android.widget.EditText[@content-desc='password-input'])[2]") class SignInButton(BaseButton): @@ -265,7 +263,6 @@ class SignInView(BaseView): else: self.next_button.click() self.create_password_input.set_value(password) - self.next_button.click() self.confirm_your_password_input.set_value(password) self.next_button.click() self.maybe_later_button.wait_for_visibility_of_element(30) @@ -288,7 +285,6 @@ class SignInView(BaseView): else: recover_access_view.next_button.click() recover_access_view.create_password_input.set_value(password) - recover_access_view.next_button.click() recover_access_view.confirm_your_password_input.set_value(password) recover_access_view.next_button.click_until_presence_of_element(self.maybe_later_button) self.maybe_later_button.wait_for_element(30) diff --git a/translations/en.json b/translations/en.json index 1c235e75af..ae5c7d9444 100644 --- a/translations/en.json +++ b/translations/en.json @@ -417,6 +417,8 @@ "pair-code-placeholder": "Pair code...", "enter-pair-code-description": "Pairing code was displayed to you during the Keycard setup", "enter-password": "Enter password", + "password-placeholder":"Password...", + "confirm-password-placeholder": "Confirm your password...", "enter-pin": "Enter 6-digit passcode", "enter-puk-code": "Enter PUK code", "enter-puk-code-description": "6-digit passcode has been blocked.\n Please enter PUK code to unblock passcode.",