chore(onboarding): Remove welcome screen from onboarding (#20912)
* Fix customization color in disclaimer on onboarding * Remove welcome page from onboarding * Fix notification permission request on onboarding * e2e: updated create user flow --------- Co-authored-by: Ulises M <ulises.ssb@hotmail.com> Co-authored-by: Yevheniia Berdnyk <ie.berdnyk@gmail.com>
This commit is contained in:
parent
3363152160
commit
a1662752bc
|
@ -57,6 +57,11 @@
|
||||||
(fn [options]
|
(fn [options]
|
||||||
(permissions/request-permissions options)))
|
(permissions/request-permissions options)))
|
||||||
|
|
||||||
|
(re-frame/reg-fx
|
||||||
|
:request-notifications-fx
|
||||||
|
(fn [options]
|
||||||
|
(permissions/request-notifications options)))
|
||||||
|
|
||||||
(re-frame/reg-fx
|
(re-frame/reg-fx
|
||||||
:ui/show-error
|
:ui/show-error
|
||||||
(fn [content]
|
(fn [content]
|
||||||
|
@ -164,6 +169,12 @@
|
||||||
[_ options]
|
[_ options]
|
||||||
{:request-permissions-fx options})
|
{:request-permissions-fx options})
|
||||||
|
|
||||||
|
(rf/reg-event-fx
|
||||||
|
:request-notifications
|
||||||
|
(fn [_ [options]]
|
||||||
|
(prn options)
|
||||||
|
{:request-notifications-fx options}))
|
||||||
|
|
||||||
(rf/defn update-window-dimensions
|
(rf/defn update-window-dimensions
|
||||||
{:events [:update-window-dimensions]}
|
{:events [:update-window-dimensions]}
|
||||||
[{:keys [db]} dimensions]
|
[{:keys [db]} dimensions]
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
(ns react-native.permissions
|
(ns react-native.permissions
|
||||||
(:require
|
(:require
|
||||||
["react-native-permissions" :refer (check openSettings requestMultiple PERMISSIONS RESULTS)]
|
["react-native-permissions" :refer
|
||||||
[react-native.platform :as platform]))
|
[check openSettings PERMISSIONS requestMultiple requestNotifications
|
||||||
|
RESULTS]]
|
||||||
|
[react-native.platform :as platform]
|
||||||
|
[taoensso.timbre :as log]))
|
||||||
|
|
||||||
(def permissions-map
|
(def permissions-map
|
||||||
{:read-external-storage (cond
|
{:read-external-storage (cond
|
||||||
|
@ -45,3 +48,20 @@
|
||||||
(.catch #(on-error %))))
|
(.catch #(on-error %))))
|
||||||
|
|
||||||
(def open-settings openSettings)
|
(def open-settings openSettings)
|
||||||
|
|
||||||
|
(defn request-notifications
|
||||||
|
"`notification-options` is only used on iOS.
|
||||||
|
A map with `:status` and `settings` (only for iOS) is passed to the callbacks.
|
||||||
|
See https://github.com/zoontek/react-native-permissions?tab=readme-ov-file#requestnotifications."
|
||||||
|
[{:keys [notification-options on-allowed on-denied]
|
||||||
|
:or {notification-options #js ["alert"]}}]
|
||||||
|
(-> (requestNotifications notification-options)
|
||||||
|
(.then (fn [js-response]
|
||||||
|
(let [response (js->clj js-response :keywordize-keys true)]
|
||||||
|
(if (= (:status response) "granted")
|
||||||
|
(do
|
||||||
|
(on-allowed response)
|
||||||
|
(log/debug "Notification permission were allowed" response))
|
||||||
|
(do
|
||||||
|
(on-denied response)
|
||||||
|
(log/debug "Notification permission were denied" response))))))))
|
||||||
|
|
|
@ -209,9 +209,10 @@
|
||||||
(when same-passwords?
|
(when same-passwords?
|
||||||
[rn/view {:style style/disclaimer-container}
|
[rn/view {:style style/disclaimer-container}
|
||||||
[quo/disclaimer
|
[quo/disclaimer
|
||||||
{:blur? true
|
{:blur? true
|
||||||
:on-change (partial set-accepts-disclaimer? not)
|
:on-change (partial set-accepts-disclaimer? not)
|
||||||
:checked? accepts-disclaimer?}
|
:checked? accepts-disclaimer?
|
||||||
|
:customization-color user-color}
|
||||||
(i18n/label :t/password-creation-disclaimer)]])
|
(i18n/label :t/password-creation-disclaimer)]])
|
||||||
(when (and (= focused-input :password) (not same-passwords?))
|
(when (and (= focused-input :password) (not same-passwords?))
|
||||||
[help
|
[help
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
[status-im.contexts.onboarding.enable-notifications.style :as style]
|
[status-im.contexts.onboarding.enable-notifications.style :as style]
|
||||||
[status-im.contexts.shell.jump-to.constants :as shell.constants]
|
[status-im.contexts.shell.jump-to.constants :as shell.constants]
|
||||||
[status-im.contexts.shell.jump-to.utils :as shell.utils]
|
[status-im.contexts.shell.jump-to.utils :as shell.utils]
|
||||||
[taoensso.timbre :as log]
|
|
||||||
[utils.i18n :as i18n]
|
[utils.i18n :as i18n]
|
||||||
[utils.re-frame :as rf]))
|
[utils.re-frame :as rf]))
|
||||||
|
|
||||||
|
@ -20,39 +19,36 @@
|
||||||
:description (i18n/label :t/enable-notifications-sub-title)
|
:description (i18n/label :t/enable-notifications-sub-title)
|
||||||
:description-accessibility-label :notifications-sub-title}])
|
:description-accessibility-label :notifications-sub-title}])
|
||||||
|
|
||||||
|
(defn- finish-onboarding
|
||||||
|
[notifications-enabled?]
|
||||||
|
(rf/dispatch [:push-notifications/switch notifications-enabled?])
|
||||||
|
(shell.utils/change-selected-stack-id shell.constants/default-selected-stack true nil)
|
||||||
|
(rf/dispatch [:update-theme-and-init-root :shell-stack])
|
||||||
|
(rf/dispatch [:profile/show-testnet-mode-banner-if-enabled])
|
||||||
|
(rf/dispatch [:universal-links/process-stored-event]))
|
||||||
|
|
||||||
(defn enable-notification-buttons
|
(defn enable-notification-buttons
|
||||||
[{:keys [insets]}]
|
[{:keys [insets]}]
|
||||||
(let [profile-color (rf/sub [:onboarding/customization-color])]
|
(let [profile-color (rf/sub [:onboarding/customization-color])
|
||||||
|
ask-permission (fn []
|
||||||
|
(rf/dispatch [:request-notifications
|
||||||
|
{:on-allowed (fn []
|
||||||
|
(js/setTimeout #(finish-onboarding true)
|
||||||
|
300))
|
||||||
|
:on-denied (fn []
|
||||||
|
(js/setTimeout #(finish-onboarding false)
|
||||||
|
300))}]))
|
||||||
|
skip-permission #(finish-onboarding false)]
|
||||||
[rn/view {:style (style/buttons insets)}
|
[rn/view {:style (style/buttons insets)}
|
||||||
[quo/button
|
[quo/button
|
||||||
{:on-press (fn []
|
{:on-press ask-permission
|
||||||
(shell.utils/change-selected-stack-id
|
|
||||||
shell.constants/default-selected-stack
|
|
||||||
true
|
|
||||||
nil)
|
|
||||||
(rf/dispatch
|
|
||||||
[:request-permissions
|
|
||||||
{:permissions [:post-notifications]
|
|
||||||
:on-allowed #(log/info "push notification permissions were allowed")
|
|
||||||
:on-denied #(log/error "user denied push notification permissions")}])
|
|
||||||
(rf/dispatch [:push-notifications/switch true])
|
|
||||||
(rf/dispatch [:navigate-to-within-stack
|
|
||||||
[:screen/onboarding.welcome
|
|
||||||
:screen/onboarding.enable-notifications]]))
|
|
||||||
:type :primary
|
:type :primary
|
||||||
:icon-left :i/notifications
|
:icon-left :i/notifications
|
||||||
:accessibility-label :enable-notifications-button
|
:accessibility-label :enable-notifications-button
|
||||||
:customization-color profile-color}
|
:customization-color profile-color}
|
||||||
(i18n/label :t/intro-wizard-title6)]
|
(i18n/label :t/intro-wizard-title6)]
|
||||||
[quo/button
|
[quo/button
|
||||||
{:on-press (fn []
|
{:on-press skip-permission
|
||||||
(shell.utils/change-selected-stack-id
|
|
||||||
shell.constants/default-selected-stack
|
|
||||||
true
|
|
||||||
nil)
|
|
||||||
(rf/dispatch [:navigate-to-within-stack
|
|
||||||
[:screen/onboarding.welcome
|
|
||||||
:screen/onboarding.enable-notifications]]))
|
|
||||||
:accessibility-label :enable-notifications-later-button
|
:accessibility-label :enable-notifications-later-button
|
||||||
:type :grey
|
:type :grey
|
||||||
:background :blur
|
:background :blur
|
||||||
|
|
|
@ -1,36 +0,0 @@
|
||||||
(ns status-im.contexts.onboarding.welcome.style)
|
|
||||||
|
|
||||||
(def default-margin 20)
|
|
||||||
|
|
||||||
(defn page-container
|
|
||||||
[insets]
|
|
||||||
{:flex 1
|
|
||||||
:padding-top (:top insets)})
|
|
||||||
|
|
||||||
(defn page-illustration
|
|
||||||
[width]
|
|
||||||
{:width width
|
|
||||||
:aspect-ratio 0.7
|
|
||||||
:height :auto})
|
|
||||||
|
|
||||||
(def page-title
|
|
||||||
{:margin-top 12
|
|
||||||
:margin-horizontal 20
|
|
||||||
:margin-bottom 8})
|
|
||||||
|
|
||||||
(defn buttons
|
|
||||||
[insets]
|
|
||||||
{:position :absolute
|
|
||||||
:left 0
|
|
||||||
:right 0
|
|
||||||
:padding-left default-margin
|
|
||||||
:padding-right default-margin
|
|
||||||
:bottom (+ 12 (:bottom insets))})
|
|
||||||
|
|
||||||
(def bottom-shadow
|
|
||||||
{:position :absolute
|
|
||||||
:height 64
|
|
||||||
:top 0
|
|
||||||
:bottom 0
|
|
||||||
:left 0
|
|
||||||
:right 0})
|
|
|
@ -1,54 +0,0 @@
|
||||||
(ns status-im.contexts.onboarding.welcome.view
|
|
||||||
(:require
|
|
||||||
[quo.core :as quo]
|
|
||||||
[quo.foundations.colors :as colors]
|
|
||||||
[react-native.core :as rn]
|
|
||||||
[react-native.linear-gradient :as linear-gradient]
|
|
||||||
[react-native.safe-area :as safe-area]
|
|
||||||
[status-im.common.resources :as resources]
|
|
||||||
[status-im.contexts.onboarding.welcome.style :as style]
|
|
||||||
[utils.i18n :as i18n]
|
|
||||||
[utils.re-frame :as rf]))
|
|
||||||
|
|
||||||
(defn page-title
|
|
||||||
[]
|
|
||||||
(let [new-account? (rf/sub [:onboarding/new-account?])]
|
|
||||||
[quo/text-combinations
|
|
||||||
{:container-style style/page-title
|
|
||||||
:title (i18n/label (if new-account?
|
|
||||||
:t/welcome-to-web3
|
|
||||||
:t/welcome-back))
|
|
||||||
:title-accessibility-label :welcome-title
|
|
||||||
:description (i18n/label :t/welcome-to-web3-sub-title)
|
|
||||||
:description-accessibility-label :welcome-sub-title}]))
|
|
||||||
|
|
||||||
(defn view
|
|
||||||
[]
|
|
||||||
(let [profile-color (rf/sub [:onboarding/customization-color])
|
|
||||||
window (rf/sub [:dimensions/window])
|
|
||||||
insets (safe-area/get-insets)]
|
|
||||||
[rn/view {:style (style/page-container insets)}
|
|
||||||
[quo/page-nav
|
|
||||||
{:type :no-title
|
|
||||||
:background :blur
|
|
||||||
:icon-name :i/arrow-left
|
|
||||||
:on-press #(rf/dispatch [:navigate-back])}]
|
|
||||||
[page-title]
|
|
||||||
[rn/image
|
|
||||||
{:style (style/page-illustration (:width window))
|
|
||||||
:resize-mode :contain
|
|
||||||
:source (resources/get-image :welcome-illustration)}]
|
|
||||||
[rn/view {:style (style/buttons insets)}
|
|
||||||
(when rn/small-screen?
|
|
||||||
[linear-gradient/linear-gradient
|
|
||||||
{:style style/bottom-shadow
|
|
||||||
:colors [colors/neutral-100-opa-0 colors/neutral-100-opa-80]}])
|
|
||||||
[quo/button
|
|
||||||
{:on-press (fn []
|
|
||||||
(rf/dispatch [:update-theme-and-init-root :shell-stack])
|
|
||||||
(rf/dispatch [:profile/show-testnet-mode-banner-if-enabled])
|
|
||||||
(rf/dispatch [:universal-links/process-stored-event]))
|
|
||||||
:type :primary
|
|
||||||
:accessibility-label :welcome-button
|
|
||||||
:customization-color profile-color}
|
|
||||||
(i18n/label :t/start-using-status)]]]))
|
|
|
@ -37,7 +37,6 @@
|
||||||
[status-im.contexts.onboarding.sign-in.view :as sign-in]
|
[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.progress.view :as syncing-devices]
|
||||||
[status-im.contexts.onboarding.syncing.results.view :as syncing-results]
|
[status-im.contexts.onboarding.syncing.results.view :as syncing-results]
|
||||||
[status-im.contexts.onboarding.welcome.view :as welcome]
|
|
||||||
[status-im.contexts.preview.feature-flags.view :as feature-flags]
|
[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.component-preview.view :as component-preview]
|
||||||
[status-im.contexts.preview.quo.main :as quo.preview]
|
[status-im.contexts.preview.quo.main :as quo.preview]
|
||||||
|
@ -356,9 +355,7 @@
|
||||||
{:name :screen/onboarding.enable-notifications
|
{:name :screen/onboarding.enable-notifications
|
||||||
:options {:theme :dark
|
:options {:theme :dark
|
||||||
:layout options/onboarding-transparent-layout
|
:layout options/onboarding-transparent-layout
|
||||||
:animations (merge
|
:animations transitions/push-animations-for-transparent-background
|
||||||
transitions/new-to-status-modal-animations
|
|
||||||
transitions/push-animations-for-transparent-background)
|
|
||||||
:popGesture false
|
:popGesture false
|
||||||
:modalPresentationStyle :overCurrentContext
|
:modalPresentationStyle :overCurrentContext
|
||||||
:hardwareBackButton {:dismissModalOnPress false
|
:hardwareBackButton {:dismissModalOnPress false
|
||||||
|
@ -409,12 +406,6 @@
|
||||||
:options {:theme :dark}
|
:options {:theme :dark}
|
||||||
:component syncing-results/view}
|
:component syncing-results/view}
|
||||||
|
|
||||||
{:name :screen/onboarding.welcome
|
|
||||||
:options {:theme :dark
|
|
||||||
:layout options/onboarding-transparent-layout
|
|
||||||
:animations transitions/push-animations-for-transparent-background}
|
|
||||||
:component welcome/view}
|
|
||||||
|
|
||||||
{:name :emoji-picker
|
{:name :emoji-picker
|
||||||
:options {:sheet? true}
|
:options {:sheet? true}
|
||||||
:component emoji-picker/view}
|
:component emoji-picker/view}
|
||||||
|
|
|
@ -267,12 +267,11 @@ class SignInView(BaseView):
|
||||||
for _ in range(3):
|
for _ in range(3):
|
||||||
self.allow_button.click_if_shown(sec=10)
|
self.allow_button.click_if_shown(sec=10)
|
||||||
self.enable_notifications_button.click_if_shown()
|
self.enable_notifications_button.click_if_shown()
|
||||||
if self.start_button.is_element_displayed():
|
if self.chats_tab.is_element_displayed():
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
self.maybe_later_button.click_until_presence_of_element(self.start_button)
|
self.maybe_later_button.wait_and_click()
|
||||||
self.cancel_button.click_if_shown() # TODO: remove when issue 20806 is fixed
|
self.cancel_button.click_if_shown() # TODO: remove when issue 20806 is fixed
|
||||||
self.start_button.click()
|
|
||||||
self.chats_tab.wait_for_visibility_of_element(30)
|
self.chats_tab.wait_for_visibility_of_element(30)
|
||||||
self.driver.info("## New multiaccount is created successfully!", device=False)
|
self.driver.info("## New multiaccount is created successfully!", device=False)
|
||||||
return self.get_home_view()
|
return self.get_home_view()
|
||||||
|
@ -298,11 +297,10 @@ class SignInView(BaseView):
|
||||||
# self.enable_biometric_maybe_later_button.click()
|
# self.enable_biometric_maybe_later_button.click()
|
||||||
# self.identifiers_button.wait_and_click(30)
|
# self.identifiers_button.wait_and_click(30)
|
||||||
if enable_notifications:
|
if enable_notifications:
|
||||||
self.enable_notifications_button.click_until_presence_of_element(self.start_button)
|
self.enable_notifications_button.click()
|
||||||
else:
|
else:
|
||||||
self.maybe_later_button.click_until_presence_of_element(self.start_button)
|
self.maybe_later_button.wait_and_click()
|
||||||
self.cancel_button.click_if_shown() # TODO: remove when issue 20806 is fixed
|
self.cancel_button.click_if_shown() # TODO: remove when issue 20806 is fixed
|
||||||
self.start_button.click()
|
|
||||||
self.chats_tab.wait_for_visibility_of_element(30)
|
self.chats_tab.wait_for_visibility_of_element(30)
|
||||||
self.driver.info("## Multiaccount is recovered successfully!", device=False)
|
self.driver.info("## Multiaccount is recovered successfully!", device=False)
|
||||||
return self.get_home_view()
|
return self.get_home_view()
|
||||||
|
|
Loading…
Reference in New Issue