On-boarding: re add bio-metric screen to syncing flow (#21890)

This commit is contained in:
Parvesh Monu 2025-01-09 18:22:37 +05:30 committed by GitHub
parent 32a3f85694
commit 874aa9866d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 45 additions and 195 deletions

View File

@ -52,7 +52,7 @@
(contains? view-ids-to-track view-id)
(conj (navigation-event (name view-id)))
(= :screen/onboarding.syncing-results view-id)
(#{:screen/onboarding.preparing-status :screen/onboarding.syncing-biometric} view-id)
(conj (key-value-event "onboarding-completed"))
(= :screen/keycard.migrate.success view-id)

View File

@ -6,7 +6,6 @@
[status-im.common.biometric.utils :as biometric]
[status-im.common.resources :as resources]
[status-im.contexts.onboarding.enable-biometrics.style :as style]
[status-im.navigation.state :as state]
[utils.i18n :as i18n]
[utils.re-frame :as rf]))
@ -25,7 +24,7 @@
bio-type-label (biometric/get-label-by-type supported-biometric-type)
profile-color (or (:color (rf/sub [:onboarding/profile]))
(rf/sub [:profile/customization-color]))
syncing-results? (= :screen/onboarding.syncing-results @state/root-id)
syncing? (= (rf/sub [:view-id]) :screen/onboarding.syncing-biometric)
biometric-type (rf/sub [:biometrics/supported-type])]
[rn/view {:style (style/buttons insets)}
[quo/button
@ -39,10 +38,8 @@
{:accessibility-label :maybe-later-button
:background :blur
:type :grey
:on-press #(rf/dispatch (if syncing-results?
[:navigate-to-within-stack
[:screen/onboarding.enable-notifications
:screen/onboarding.enable-biometrics]]
:on-press #(rf/dispatch (if syncing?
[:onboarding/finish-onboarding false]
[:onboarding/create-account-and-login]))
:container-style {:margin-top 12}}
(i18n/label :t/maybe-later)]]))

View File

@ -38,12 +38,6 @@
(fn [{:keys [db]}]
{:db (dissoc db :onboarding/navigated-to-enter-seed-phrase-from-screen)}))
(rf/reg-event-fx :onboarding/navigate-to-enable-notifications-from-syncing
(fn [{:keys [db]}]
{:db (dissoc db :onboarding/profile)
:dispatch [:navigate-to-within-stack
[:screen/onboarding.enable-notifications :screen/onboarding.enable-biometrics]]}))
(rf/reg-event-fx :onboarding/navigate-to-enable-notifications
(fn [{:keys [db]}]
{:dispatch [:navigate-to-within-stack
@ -113,14 +107,6 @@
[:navigate-to-within-stack [:screen/onboarding.enable-biometrics from-screen]]
[:onboarding/create-account-and-login])]]})))
(rf/reg-event-fx
:onboarding/navigate-to-enable-biometrics
(fn [{:keys [db]}]
(let [supported-type (get-in db [:biometrics :supported-type])]
{:dispatch (if supported-type
[:open-modal :screen/onboarding.enable-biometrics]
[:open-modal :screen/onboarding.enable-notifications])})))
(rf/reg-event-fx
:onboarding/seed-phrase-validated
(fn [{:keys [db]} [seed-phrase key-uid]]
@ -200,7 +186,7 @@
(rf/dispatch [:onboarding/set-auth-method auth-method])
(when syncing?
(rf/dispatch
[:onboarding/navigate-to-enable-notifications-from-syncing])))
[:onboarding/finish-onboarding false])))
:on-error #(log/error "failed to save biometrics"
{:key-uid key-uid
:error %})}])]})))

View File

@ -41,24 +41,25 @@
(defn try-again-button
[profile-color logged-in?]
[quo/bottom-actions
{:actions (if logged-in? :one-action :two-vertical-actions)
:blur? true
:container-style {:height (when-not logged-in? 116)}
:button-two-label (i18n/label :t/use-recovery-phrase)
:button-two-props {:type :primary
:accessibility-label :try-seed-phrase-button
:customization-color profile-color
:size 40
:on-press navigate-to-enter-seed-phrase}
:button-one-label
(i18n/label :t/try-again)
:button-one-props
{:type (if logged-in? :primary :grey)
:accessibility-label :try-again-later-button
:customization-color profile-color
:size 40
:on-press #(try-again logged-in?)}}])
(let [two-vertical-actions-height 116]
[quo/bottom-actions
{:actions (if logged-in? :one-action :two-vertical-actions)
:blur? true
:container-style {:height (when-not logged-in? two-vertical-actions-height)}
:button-two-label (i18n/label :t/use-recovery-phrase)
:button-two-props {:type :primary
:accessibility-label :try-seed-phrase-button
:customization-color profile-color
:size 40
:on-press navigate-to-enter-seed-phrase}
:button-one-label
(i18n/label :t/try-again)
:button-one-props
{:type (if logged-in? :primary :grey)
:accessibility-label :try-again-later-button
:customization-color profile-color
:size 40
:on-press #(try-again logged-in?)}}]))
(defn- illustration
[pairing-progress?]

View File

@ -1,43 +0,0 @@
(ns status-im.contexts.onboarding.syncing.results.style
(:require
[quo.foundations.colors :as colors]
[react-native.reanimated :as reanimated]))
(def absolute-fill
{:position :absolute
:top 0
:bottom 0
:left 0
:right 0})
(defn page-container
[top]
{:flex 1
:position :absolute
:top 0
:bottom 0
:left 0
:right 0
:padding-top top
:padding-bottom 20
:background-color colors/neutral-80-opa-80-blur})
(defn content
[translate-x]
(reanimated/apply-animations-to-style
{:transform [{:translate-x translate-x}]}
{:margin-top 56
:margin-bottom 26
:flex 1}))
(def current-device
{:margin-bottom 19})
(def device-list
{:flex 1
:margin-top 12
:padding-horizontal 20})
(def continue-button
{:margin-top 20
:padding-horizontal 20})

View File

@ -1,84 +0,0 @@
(ns status-im.contexts.onboarding.syncing.results.view
(:require
[quo.core :as quo]
[quo.foundations.colors :as colors]
[react-native.core :as rn]
[react-native.reanimated :as reanimated]
[react-native.safe-area :as safe-area]
[status-im.constants :as constants]
[status-im.contexts.onboarding.common.background.view :as background]
[status-im.contexts.onboarding.syncing.results.style :as style]
[status-im.contexts.syncing.device.view :as device]
[utils.i18n :as i18n]
[utils.re-frame :as rf]))
(defn page-title
[]
[quo/text-combinations
{:container-style {:margin-horizontal 20}
:title (i18n/label :t/sync-devices-complete-title)
:title-accessibility-label :sync-devices-title
:description (i18n/label :t/sync-devices-complete-sub-title)
:description-accessibility-label :sync-devices-complete-sub-title}])
(defn current-device
[installation]
[rn/view {:style style/current-device}
[device/view
(merge installation
{:this-device? true})]])
(defn devices-list
[]
(let [installations (rf/sub [:pairing/enabled-installations])
this-device (first installations)
other-devices (rest installations)]
[rn/view {:style style/device-list}
[current-device this-device]
[quo/text
{:accessibility-label :synced-with-sub-title
:weight :regular
:size :paragraph-2
:style {:color colors/white-opa-40}}
(i18n/label :t/synced-with)]
[rn/flat-list
{:data other-devices
:shows-vertical-scroll-indicator false
:key-fn :installation-id
:render-fn device/view}]]))
(defn continue-button
[on-press]
(let [profile-color (rf/sub [:profile/customization-color])]
[quo/button
{:on-press (fn []
(when on-press
(on-press))
(rf/dispatch [:onboarding/navigate-to-enable-biometrics]))
:accessibility-label :continue-button
:customization-color profile-color
:container-style style/continue-button}
(i18n/label :t/continue)]))
(defn- f-view
[]
(let [top (safe-area/get-top)
translate-x (reanimated/use-shared-value 0)
window-width (:width (rn/get-window))]
[rn/view {:style (style/page-container top)}
[rn/view {:style style/absolute-fill}
[background/view true]]
[reanimated/view
{:style (style/content translate-x)}
[page-title]
[devices-list]
[continue-button
#(reanimated/animate-shared-value-with-delay translate-x
(- window-width)
constants/onboarding-modal-animation-duration
:linear
200)]]]))
(defn view
[]
[:f> f-view])

View File

@ -37,18 +37,19 @@
;; login phase 1: we want to load and show chats faster, so we split login into 2 phases
(rf/reg-event-fx :profile.login/login-existing-profile
(fn [{:keys [db]} [settings-data account]]
(let [settings (data-store.settings/rpc->settings settings-data)
profile-overview (profile.rpc/rpc->profiles-overview account)
log-level (or (:log-level settings) config/log-level)
pairing-completed? (= (get-in db [:syncing :pairing-status]) :completed)
new-db (-> db
(assoc :profile/profile
(merge profile-overview
settings
{:log-level log-level}))
(assoc-in [:activity-center :loading?] true)
(dissoc :centralized-metrics/onboarding-enabled?))
keycard? (get-in new-db [:profile/profile :keycard-pairing])]
(let [settings (data-store.settings/rpc->settings settings-data)
profile-overview (profile.rpc/rpc->profiles-overview account)
log-level (or (:log-level settings) config/log-level)
pairing-completed? (= (get-in db [:syncing :pairing-status]) :completed)
biometric-supported-type (get-in db [:biometrics :supported-type])
new-db (-> db
(assoc :profile/profile
(merge profile-overview
settings
{:log-level log-level}))
(assoc-in [:activity-center :loading?] true)
(dissoc :centralized-metrics/onboarding-enabled?))
keycard? (get-in new-db [:profile/profile :keycard-pairing])]
{:db (cond-> new-db
pairing-completed? (dissoc :syncing))
:fx (into [[:json-rpc/call
@ -81,10 +82,10 @@
(when keycard?
[:dispatch [:centralized-metrics/track :metric/keycard-login]])]
(cond
pairing-completed?
[[:dispatch [:onboarding/finish-onboarding false]]]
(and pairing-completed? biometric-supported-type)
[[:dispatch [:update-theme-and-init-root :screen/onboarding.syncing-biometric]]]
(get db :onboarding/new-account?)
(or pairing-completed? (get db :onboarding/new-account?))
[[:dispatch [:onboarding/finalize-setup]]
[:dispatch [:onboarding/finish-onboarding false]]]

View File

@ -26,9 +26,10 @@
:id :screen/profile.profiles
:options (options/dark-root-options)}}]}}}
:screen/onboarding.syncing-results
{:root {:stack {:children [{:component {:name :screen/onboarding.syncing-results
:id :screen/onboarding.syncing-results
:screen/onboarding.syncing-biometric
{:root {:stack {:id :screen/onboarding.enable-biometrics
:children [{:component {:name :screen/onboarding.enable-biometrics
:id :screen/onboarding.enable-biometrics
:options (options/dark-root-options)}}]}}}})
(defn old-roots

View File

@ -53,7 +53,6 @@
[status-im.contexts.onboarding.share-usage.view :as onboarding.share-usage]
[status-im.contexts.onboarding.sign-in.view :as sign-in]
[status-im.contexts.onboarding.syncing.progress.view :as syncing-devices]
[status-im.contexts.onboarding.syncing.results.view :as syncing-results]
[status-im.contexts.preview.feature-flags.view :as feature-flags]
[status-im.contexts.preview.quo.component-preview.view :as component-preview]
[status-im.contexts.preview.quo.main :as quo.preview]
@ -855,13 +854,6 @@
:popGesture false}
:component syncing-devices/view-onboarding})
(def onboarding-syncing-results
{:name :screen/onboarding.syncing-results
:metrics {:track? true
:alias-id :onboarding.syncing-completed}
:options {:theme :dark}
:component syncing-results/view})
(def onboarding-screens
[onboarding-intro
onboarding-create-profile
@ -875,8 +867,7 @@
onboarding-sign-in-intro
onboarding-sign-in
onboarding-syncing-progress
onboarding-syncing-progress-intro
onboarding-syncing-results])
onboarding-syncing-progress-intro])
(def keycard-screens
[{:name :screen/keycard.check