Skip to content

Commit 7c38be7

Browse files
committed
improvement on snackbar by considering login time
1 parent dcfac1c commit 7c38be7

File tree

4 files changed

+47
-50
lines changed

4 files changed

+47
-50
lines changed

src/status_im/multiaccounts/login/core.cljs

+4-3
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@
282282
(boolean (get-in cofx [:db :hardwallet :flow])))
283283

284284
(fx/defn multiaccount-login-success
285-
[{:keys [db] :as cofx}]
285+
[{:keys [db now] :as cofx}]
286286
(let [{:keys [key-uid password save-password? creating?]} (:multiaccounts/login db)
287287
recovering? (get-in db [:intro-wizard :recovering?])
288288
login-only? (not (or creating?
@@ -294,12 +294,13 @@
294294
"recovering?" recovering?)
295295
(fx/merge cofx
296296
{:db (-> db
297-
(dissoc :multiaccounts/login)
297+
(dissoc :multiaccounts/login :connectivity/ui-status-properties)
298298
(update :hardwallet dissoc
299299
:on-card-read
300300
:card-read-in-progress?
301301
:pin
302-
:multiaccount))
302+
:multiaccount)
303+
(assoc :logged-in-since now))
303304
::json-rpc/call
304305
[{:method "web3_clientVersion"
305306
:on-success #(re-frame/dispatch [::initialize-web3-client-version %])}]}

src/status_im/subs.cljs

+5-3
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@
9999
(reg-root-key-sub :supported-biometric-auth :supported-biometric-auth)
100100
(reg-root-key-sub :app-active-since :app-active-since)
101101
(reg-root-key-sub :connectivity/ui-status-properties :connectivity/ui-status-properties)
102+
(reg-root-key-sub :logged-in-since :logged-in-since)
102103

103104
;;NOTE this one is not related to ethereum network
104105
;; it is about cellular network/ wifi network
@@ -1574,11 +1575,12 @@
15741575
disconnected?
15751576
:t/offline
15761577

1577-
:else nil)]
1578+
:else nil)
1579+
connected? (and (nil? error-label) (not= :mobile-network error-label))]
15781580
{:message (or error-label :t/connected)
1579-
:connected? (and (nil? error-label) (not= :mobile-network error-label))
1581+
:connected? connected?
15801582
:connecting? (= error-label :t/connecting)
1581-
:loading-indicator? mailserver-fetching?
1583+
:loading-indicator? (and mailserver-fetching? connected?)
15821584
:on-press-event (cond
15831585
mailserver-connection-error?
15841586
:mailserver.ui/reconnect-mailserver-pressed

src/status_im/ui/components/connectivity/view.cljs

+36-44
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,19 @@
99
[status-im.ui.components.animation :as animation]
1010
[status-im.utils.utils :as utils]
1111
[status-im.utils.datetime :as datetime]
12-
[status-im.utils.platform :as platform]))
12+
[status-im.utils.platform :as platform]
13+
[taoensso.timbre :as log]))
1314

1415
(def connectivity-bar-height 36)
1516
(def neg-connectivity-bar-height (- connectivity-bar-height))
1617

18+
;; ui-connectivity-status delays
19+
(def standard-delay 1000)
20+
(def long-delay 5000)
21+
22+
;; millisec window from foreground\login within which use long delay
23+
(def timewindow-for-long-delay 5000)
24+
1725
(defn easing [direction n]
1826
{:toValue n
1927
:easing ((if (= :in direction)
@@ -175,50 +183,32 @@ all connectivity views (we have at least one view in home and one in chat)"
175183
(defn propagate-status
176184
"Smoothly propagate from :connectivity/status-properties subscription to
177185
:ui-status-properties db. UI components will render based on :ui-status-properties"
178-
[{:keys [status-properties app-active-since ui-status-properties]}]
179-
(let [;; enqueued or immediate?
180-
;; send immediately if we are transitioning to an offline state
181-
enqueue? (cond
182-
(and
183-
(or
184-
(nil? @enqueued-connectivity-status-properties)
185-
(:connected? @enqueued-connectivity-status-properties)
186-
(:connecting? @enqueued-connectivity-status-properties))
187-
(not
188-
(or (:connected? status-properties)
189-
(:connecting? status-properties))))
190-
false
191-
192-
:else
193-
true)]
194-
(if enqueue?
195-
(when (or (and (nil? @enqueued-connectivity-status-properties)
196-
(not= status-properties ui-status-properties))
197-
(and (some? @enqueued-connectivity-status-properties)
198-
(not= status-properties @enqueued-connectivity-status-properties)))
199-
;; reset queued with new state and start a timer if not yet started
200-
(reset! enqueued-connectivity-status-properties status-properties)
201-
(when-not @timer
202-
(reset! timer (utils/set-timeout #(do
203-
(reset! timer nil)
204-
(when @enqueued-connectivity-status-properties
205-
(re-frame/dispatch [:set :connectivity/ui-status-properties @enqueued-connectivity-status-properties])
206-
(reset! enqueued-connectivity-status-properties nil)))
186+
[{:keys [status-properties app-active-since logged-in-since ui-status-properties]}]
187+
(when (or (and (nil? @enqueued-connectivity-status-properties)
188+
(not= status-properties ui-status-properties))
189+
(and (some? @enqueued-connectivity-status-properties)
190+
(not= status-properties @enqueued-connectivity-status-properties)))
191+
;; reset queued with new state and start a timer if not yet started
192+
(reset! enqueued-connectivity-status-properties status-properties)
193+
(when-not @timer
194+
(reset! timer (utils/set-timeout #(do
195+
(reset! timer nil)
196+
(when @enqueued-connectivity-status-properties
197+
(re-frame/dispatch [:set :connectivity/ui-status-properties @enqueued-connectivity-status-properties])
198+
(reset! enqueued-connectivity-status-properties nil)))
207199

208-
;; if the app is in foreground for less than 5s, postpone state changes for 5s otherwise 1s
209-
(if
210-
(and app-active-since
211-
(< (- (datetime/timestamp) app-active-since)
212-
5000))
213-
5000
214-
1000)))))
215-
(when (not= status-properties ui-status-properties)
216-
;; send immediately
217-
(reset! enqueued-connectivity-status-properties nil)
218-
(re-frame/dispatch [:set :connectivity/ui-status-properties status-properties])
219-
(when @timer
220-
(utils/clear-timeout @timer)
221-
(reset! timer nil))))))
200+
;; timeout choice:
201+
;; if the app is in foreground or logged-in for less than <timeframe>,
202+
;; postpone state changes for <long> otherwise <short>
203+
(let [ts (max
204+
(or logged-in-since 0)
205+
(or app-active-since 0))
206+
ts-diff (- (datetime/timestamp) ts)
207+
timeout (if (< ts-diff timewindow-for-long-delay)
208+
long-delay
209+
standard-delay)]
210+
(log/debug "propagate-status set-timeout: " logged-in-since app-active-since ts-diff timeout)
211+
timeout))))))
222212

223213
(defn status-propagator-dummy-view
224214
"this empty view is needed to react propagate status-properties to ui-status-properties"
@@ -236,6 +226,7 @@ all connectivity views (we have at least one view in home and one in chat)"
236226
(defview connectivity-view [anim-translate-y]
237227
(letsubs [status-properties [:connectivity/status-properties]
238228
app-active-since [:app-active-since]
229+
logged-in-since [:logged-in-since]
239230
ui-status-properties [:connectivity/ui-status-properties]
240231
status-hidden (reagent/atom true)
241232
view-id [:view-id]
@@ -267,6 +258,7 @@ all connectivity views (we have at least one view in home and one in chat)"
267258
status-hidden]
268259
[status-propagator-dummy-view {:status-properties status-properties
269260
:app-active-since app-active-since
261+
:logged-in-since logged-in-since
270262
:ui-status-properties ui-status-properties}]])))
271263

272264
;; "push?" determines whether "content" gets pushed down when disconnected

src/status_im/ui/screens/db.cljs

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@
8282
(spec/def ::app-state string?)
8383
(spec/def ::app-in-background-since (spec/nilable number?))
8484
(spec/def ::app-active-since (spec/nilable number?))
85+
(spec/def ::logged-in-since (spec/nilable number?))
8586

8687
;;;;NODE
8788

@@ -276,6 +277,7 @@
276277
::app-state
277278
::app-in-background-since
278279
::app-active-since
280+
::logged-in-since
279281
::hardwallet
280282
::auth-method
281283
:multiaccount/multiaccount

0 commit comments

Comments
 (0)