Skip to content

Commit

Permalink
If card connected start processing on sheet open
Browse files Browse the repository at this point in the history
  • Loading branch information
Ferossgp committed Feb 28, 2020
1 parent 93c0d90 commit f5bcb29
Show file tree
Hide file tree
Showing 7 changed files with 82 additions and 40 deletions.
11 changes: 11 additions & 0 deletions src/status_im/hardwallet/card.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

(defonce keycard (.-default js-dependencies/status-keycard))
(defonce event-emitter (.-DeviceEventEmitter js-dependencies/react-native))
(defonce active-listeners (atom []))

(defn- error-object->map [object]
{:code (.-code object)
Expand Down Expand Up @@ -37,6 +38,9 @@
(doseq [event ["keyCardOnConnected" "keyCardOnDisconnected"]]
(.removeAllListeners event-emitter event)))

(defn remove-event-listener [event]
(.remove event))

(defn on-card-connected [callback]
(when (and config/hardwallet-enabled?
platform/android?)
Expand All @@ -47,6 +51,13 @@
platform/android?)
(.addListener event-emitter "keyCardOnDisconnected" callback)))

(defn register-card-events []
(doseq [listener @active-listeners]
(remove-event-listener listener))
(reset! active-listeners
[(on-card-connected #(re-frame/dispatch [:hardwallet.callback/on-card-connected]))
(on-card-disconnected #(re-frame/dispatch [:hardwallet.callback/on-card-disconnected]))]))

(defn get-application-info [{:keys [pairing on-success]}]
(log/debug "[keycard] get-application-info")
(.. keycard
Expand Down
19 changes: 9 additions & 10 deletions src/status_im/hardwallet/common.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -171,14 +171,14 @@
:or {on-cancel [::cancel-sheet-confirm]}}]
(log/debug "[hardwallet] show-pair-sheet")
(let [connected? (get-in cofx [:db :hardwallet :card-connected?])]
(fx/merge cofx
{:dismiss-keyboard true}
(bottom-sheet/show-bottom-sheet
{:view {:show-handle? false
:backdrop-dismiss? false
:disable-drag? true
:content (keycard-sheet-content on-cancel
connected?)}}))))
(fx/merge cofx
{:dismiss-keyboard true}
(bottom-sheet/show-bottom-sheet
{:view {:show-handle? false
:backdrop-dismiss? false
:disable-drag? true
:content (keycard-sheet-content on-cancel
connected?)}}))))

(fx/defn hide-pair-sheet
[{:keys [db] :as cofx}]
Expand Down Expand Up @@ -420,7 +420,6 @@
"on-card-read" on-card-read)
(fx/merge cofx
{:db (-> db
(assoc-in [:hardwallet :card-connected?] true)
(assoc-in [:hardwallet :card-read-in-progress?] (boolean on-card-read)))}
(when on-card-connected
(dispatch-event on-card-connected))
Expand All @@ -435,7 +434,7 @@
(log/debug "[hardwallet] card disconnected ")
(fx/merge cofx
{:db (-> db
(assoc-in [:hardwallet :card-connected?] false)
(assoc-in [:hardwallet :card-read-in-progress?] false))}
(restore-on-card-connected)
(restore-on-card-read)))

18 changes: 18 additions & 0 deletions src/status_im/hardwallet/core.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -497,3 +497,21 @@
(when (and (= card-state :multiaccount)
(#{:create :recovery} flow))
(show-keycard-has-multiaccount-alert)))))

(fx/defn on-card-connected
{:events [:hardwallet.callback/on-card-connected]}
[{:keys [db]} _]
(log/debug "[hardwallet] card globally connected")
{:db (assoc-in db [:hardwallet :card-connected?] true)})

(fx/defn on-card-disconnected
{:events [:hardwallet.callback/on-card-disconnected]}
[{:keys [db]} _]
(log/debug "[hardwallet] card disconnected ")
{:db (assoc-in db [:hardwallet :card-connected?] false)})

(fx/defn on-register-card-events
{:events [:hardwallet.callback/on-register-card-events]}
[{:keys [db]} listeners]
{:db (update-in db [:hardwallet :listeners] merge listeners)})

4 changes: 4 additions & 0 deletions src/status_im/hardwallet/fx.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@
:hardwallet/init-card
card/init-card)

(re-frame/reg-fx
:hardwallet/register-card-events
card/register-card-events)

(re-frame/reg-fx
:hardwallet/remove-event-listeners
card/remove-event-listeners)
Expand Down
1 change: 1 addition & 0 deletions src/status_im/init/core.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@
::open-multiaccounts #(re-frame/dispatch [::initialize-multiaccounts % {:logout? false}])
:ui/listen-to-window-dimensions-change nil
::network/listen-to-network-info nil
:hardwallet/register-card-events nil
:hardwallet/check-nfc-support nil
:hardwallet/check-nfc-enabled nil
:hardwallet/retrieve-pairings nil}
Expand Down
22 changes: 15 additions & 7 deletions src/status_im/ui/screens/keycard/components/keycard_animation.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,7 @@
2000)
(animation/start connect-animation)))

(defn animated-circles [{:keys [state on-card-connected on-card-disconnected]}]
(defn animated-circles [{:keys [state connected? on-card-connected on-card-disconnected]}]
(let [animation-small (animation/create-value 0)
animation-medium (animation/create-value 0)
animation-big (animation/create-value 0)
Expand Down Expand Up @@ -300,17 +300,25 @@
(on-card-disconnected)
(on-error
{:state state
:restart on-start-animation}))]
:restart on-start-animation}))
listeners (atom [])]
(reagent/create-class
{:component-did-mount
(fn []
(keycard-nfc/remove-event-listeners)
(keycard-nfc/on-card-connected on-card-connected)
(keycard-nfc/on-card-disconnected on-error)
(on-start-animation))
(doseq [listener @listeners]
(keycard-nfc/remove-event-listener listener))

(reset! listeners [(keycard-nfc/on-card-connected on-card-connected)
(keycard-nfc/on-card-disconnected on-error)])

(on-start-animation)

(when connected?
(on-card-connected)))
:component-will-unmount
(fn []
(keycard-nfc/remove-event-listeners))
(doseq [listener @listeners]
(keycard-nfc/remove-event-listener listener)))
:render
(fn []
[react/view {:style {:position :absolute
Expand Down
47 changes: 24 additions & 23 deletions src/status_im/ui/screens/keycard/keycard_interaction.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -26,38 +26,39 @@

(defn card-sync-flow []
(let [state (reagent/atom nil)]
(fn [{:keys [on-card-connected on-card-disconnected]}]
(fn [{:keys [on-card-connected connected? on-card-disconnected]}]
(let [translation (get state->translations @state)]
[react/view {:style styles/container-style}
[react/view {:height 200
:margin-bottom 20}
[animated-circles {:state state
:connected? connected?
:on-card-disconnected on-card-disconnected
:on-card-connected on-card-connected}]]
(when translation
[description/animated-description
{:title (i18n/label (:title translation))
:description (i18n/label (:description translation))}])]))))

(defn connect-keycard [{:keys [on-connect on-cancel on-disconnect]}]
(fn []
[react/view {:style {:flex 1
:align-items :center
:justify-content :center}}
(when on-cancel
[react/touchable-highlight
{:on-press on-cancel
:style {:position :absolute
:top 0
:right 0}}
[react/text {:style {:line-height 22
:padding-horizontal 16
:color colors/blue
:text-align :center}}
(i18n/label :t/cancel)]])
(if @(re-frame/subscribe [:hardwallet/nfc-enabled?])
[card-sync-flow {:on-card-disconnected
#(re-frame/dispatch [on-disconnect])
:on-card-connected
#(re-frame/dispatch [on-connect])}]
[turn-nfc/turn-nfc-on])]))
(defn connect-keycard [{:keys [on-connect on-cancel connected? on-disconnect]}]
[react/view {:style {:flex 1
:align-items :center
:justify-content :center}}
(when on-cancel
[react/touchable-highlight
{:on-press on-cancel
:style {:position :absolute
:top 0
:right 0}}
[react/text {:style {:line-height 22
:padding-horizontal 16
:color colors/blue
:text-align :center}}
(i18n/label :t/cancel)]])
(if @(re-frame/subscribe [:hardwallet/nfc-enabled?])
[card-sync-flow {:connected? connected?
:on-card-disconnected
#(re-frame/dispatch [on-disconnect])
:on-card-connected
#(re-frame/dispatch [on-connect])}]
[turn-nfc/turn-nfc-on])])

0 comments on commit f5bcb29

Please sign in to comment.