diff --git a/.env b/.env index a6b21c1d2b10..ffbea0e33faf 100644 --- a/.env +++ b/.env @@ -22,3 +22,4 @@ STATUS_GO_ENABLE_NIMBUS=0 KEYCARD_TEST_MENU=0 QR_READ_TEST_MENU=1 ENABLE_ROOT_ALERT=1 +DISABLE_WALLET_ON_MOBILE_NETWORK=1 diff --git a/.env.jenkins b/.env.jenkins index 394258ef65ec..8f79bf85d9e4 100644 --- a/.env.jenkins +++ b/.env.jenkins @@ -19,4 +19,5 @@ PARTITIONED_TOPIC=0 CONTRACT_NODES=1 STATUS_GO_ENABLE_NIMBUS=0 KEYCARD_TEST_MENU=0 -ENABLE_ROOT_ALERT=1 \ No newline at end of file +ENABLE_ROOT_ALERT=1 +DISABLE_WALLET_ON_MOBILE_NETWORK=1 diff --git a/modules/react-native-status/android/src/main/java/im/status/ethereum/module/StatusModule.java b/modules/react-native-status/android/src/main/java/im/status/ethereum/module/StatusModule.java index 507573c0a021..03819714b90c 100644 --- a/modules/react-native-status/android/src/main/java/im/status/ethereum/module/StatusModule.java +++ b/modules/react-native-status/android/src/main/java/im/status/ethereum/module/StatusModule.java @@ -1099,6 +1099,18 @@ public void appStateChange(final String type) { Statusgo.appStateChange(type); } + @ReactMethod + public void stopWallet() { + Log.d(TAG, "StopWallet"); + Statusgo.stopWallet(); + } + + @ReactMethod + public void startWallet() { + Log.d(TAG, "StartWallet"); + Statusgo.startWallet(); + } + @ReactMethod public void setBlankPreviewFlag(final Boolean blankPreview) { final SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this.reactContext); diff --git a/modules/react-native-status/ios/RCTStatus/RCTStatus.m b/modules/react-native-status/ios/RCTStatus/RCTStatus.m index edd87695869e..9048ebd11919 100644 --- a/modules/react-native-status/ios/RCTStatus/RCTStatus.m +++ b/modules/react-native-status/ios/RCTStatus/RCTStatus.m @@ -740,6 +740,20 @@ - (void) migrateKeystore:(NSString *)accountData StatusgoAppStateChange(type); } +RCT_EXPORT_METHOD(stopWallet) { +#if DEBUG + NSLog(@"StopWallet() method called"); +#endif + StatusgoStopWallet(); +} + +RCT_EXPORT_METHOD(startWallet) { +#if DEBUG + NSLog(@"StartWallet() method called"); +#endif + StatusgoStartWallet(); +} + RCT_EXPORT_METHOD(setBlankPreviewFlag:(BOOL *)newValue) { NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; diff --git a/src/status_im/native_module/core.cljs b/src/status_im/native_module/core.cljs index f79dc81d8c5a..501d3d9999a3 100644 --- a/src/status_im/native_module/core.cljs +++ b/src/status_im/native_module/core.cljs @@ -263,6 +263,14 @@ (log/debug "[native-module] app-state-change") (.appStateChange ^js (status) state)) +(defn stop-wallet [] + (log/debug "[native-module] stop-wallet") + (.stopWallet ^js (status))) + +(defn start-wallet [] + (log/debug "[native-module] start-wallet") + (.startWallet ^js (status))) + (defn set-blank-preview-flag [flag] (log/debug "[native-module] set-blank-preview-flag") (.setBlankPreviewFlag ^js (status) flag)) diff --git a/src/status_im/network/net_info.cljs b/src/status_im/network/net_info.cljs index 8a588825ab98..2028efa1f705 100644 --- a/src/status_im/network/net_info.cljs +++ b/src/status_im/network/net_info.cljs @@ -4,7 +4,8 @@ [status-im.ui.screens.mobile-network-settings.events :as mobile-network] [status-im.utils.fx :as fx] [status-im.wallet.core :as wallet] - ["@react-native-community/netinfo" :default net-info])) + ["@react-native-community/netinfo" :default net-info] + [taoensso.timbre :as log])) (fx/defn change-network-status [{:keys [db] :as cofx} is-connected?] @@ -24,14 +25,23 @@ (fx/defn handle-network-info-change {:events [::network-info-changed]} [{:keys [db] :as cofx} {:keys [isConnected type details] :as state}] - (let [old-network-status (:network-status db) - old-network-type (:network/type db) - connectivity-status (if isConnected :online :offline)] + (let [old-network-status (:network-status db) + old-network-type (:network/type db) + connectivity-status (if isConnected :online :offline) + status-changed? (= connectivity-status old-network-status) + type-changed? (= type old-network-type)] + (log/debug "[net-info]" + "old-network-status" old-network-status + "old-network-type" old-network-type + "connectivity-status" connectivity-status + "type" type + "details" details) (fx/merge cofx - (when-not (= connectivity-status old-network-status) + (when-not status-changed? (change-network-status isConnected)) - (when-not (= type old-network-type) - (change-network-type old-network-type type (:is-connection-expensive details)))))) + (when-not type-changed? + (change-network-type old-network-type type (:is-connection-expensive details))) + (wallet/restart-wallet-service type-changed?)))) (defn add-net-info-listener [] (when net-info diff --git a/src/status_im/subs.cljs b/src/status_im/subs.cljs index d0f9936e98d8..1250a10afa38 100644 --- a/src/status_im/subs.cljs +++ b/src/status_im/subs.cljs @@ -59,6 +59,7 @@ ;;general (reg-root-key-sub :sync-state :sync-state) (reg-root-key-sub :network-status :network-status) +(reg-root-key-sub :network/type :network/type) (reg-root-key-sub :peers-count :peers-count) (reg-root-key-sub :about-app/node-info :node-info) (reg-root-key-sub :peers-summary :peers-summary) @@ -152,7 +153,7 @@ (reg-root-key-sub :wallet.transactions :wallet.transactions) (reg-root-key-sub :wallet/custom-token-screen :wallet/custom-token-screen) (reg-root-key-sub :wallet/prepare-transaction :wallet/prepare-transaction) - +(reg-root-key-sub :wallet-service/manual-setting :wallet-service/manual-setting) ;;commands (reg-root-key-sub :commands/select-account :commands/select-account) diff --git a/src/status_im/ui/screens/wallet/transactions/views.cljs b/src/status_im/ui/screens/wallet/transactions/views.cljs index 108fb21ed122..c52333ff763b 100644 --- a/src/status_im/ui/screens/wallet/transactions/views.cljs +++ b/src/status_im/ui/screens/wallet/transactions/views.cljs @@ -10,7 +10,9 @@ [status-im.ui.components.toolbar.view :as toolbar-old] [status-im.ui.screens.wallet.transactions.styles :as styles] [quo.core :as quo] - [status-im.ui.components.toolbar :as toolbar]) + [status-im.ui.components.toolbar :as toolbar] + [status-im.wallet.core :as wallet.core] + [status-im.utils.config :as config]) (:require-macros [status-im.utils.views :refer [defview letsubs]])) (defn- transaction-icon @@ -93,6 +95,34 @@ {:style {:color colors/blue}} (i18n/label :t/check-on-etherscan)]]])) +(defn wallet-service-state [] + (let [status @(re-frame/subscribe [:network-status]) + type @(re-frame/subscribe [:network/type]) + setting @(re-frame/subscribe [:wallet-service/manual-setting])] + [react/view + {:style {:flex 1 + :flex-direction :row}} + [react/text {:style {:flex 1}} (str "setting: " setting)] + [react/text + {:style {:background-color :grey + :flex 1}} + status] + [react/text type] + [react/text + {:on-press #(re-frame/dispatch + [::wallet.core/toggle-force-stop-wallet-service]) + :style {:color (when (= setting :off) :red) + :background-color :green + :flex 1}} + "force stop"] + [react/text + {:on-press #(re-frame/dispatch + [::wallet.core/toggle-force-start-wallet-service]) + :style {:color (when (= setting :on) :red) + :background-color :yellow + :flex 1}} + "force start"]])) + (defn history-list [transactions-history-sections address] (let [fetching-recent-history? @(re-frame/subscribe [:wallet/fetching-recent-tx-history? address]) @@ -100,6 +130,8 @@ all-fetched? @(re-frame/subscribe [:wallet/tx-history-fetched? address])] [react/view components.styles/flex [etherscan-link address] + (when config/disable-wallet-on-mobile-network? + [wallet-service-state]) (when fetching-recent-history? [react/view {:style {:flex 1 diff --git a/src/status_im/utils/config.cljs b/src/status_im/utils/config.cljs index 2d5d932b1b01..d0b8d302d5cb 100644 --- a/src/status_im/utils/config.cljs +++ b/src/status_im/utils/config.cljs @@ -39,7 +39,8 @@ (def commands-enabled? (enabled? (get-config :COMMANDS_ENABLED "0"))) (def keycard-test-menu-enabled? (enabled? (get-config :KEYCARD_TEST_MENU "0"))) (def qr-test-menu-enabled? (enabled? (get-config :QR_READ_TEST_MENU "0"))) - +(def disable-wallet-on-mobile-network? + (enabled? (get-config :DISABLE_WALLET_ON_MOBILE_NETWORK))) ;; CONFIG VALUES (def log-level (string/upper-case (get-config :LOG_LEVEL ""))) diff --git a/src/status_im/wallet/core.cljs b/src/status_im/wallet/core.cljs index 29b6d4798fcf..3e886266b7a2 100644 --- a/src/status_im/wallet/core.cljs +++ b/src/status_im/wallet/core.cljs @@ -24,7 +24,8 @@ [status-im.ethereum.stateofus :as stateofus] [status-im.ui.components.bottom-sheet.core :as bottom-sheet] [status-im.wallet.prices :as prices] - [status-im.wallet.utils :as wallet.utils])) + [status-im.wallet.utils :as wallet.utils] + [status-im.native-module.core :as status])) (defn get-balance [{:keys [address on-success on-error]}] @@ -601,3 +602,74 @@ :cancel-button-text (i18n/label :t/no) :on-accept #(re-frame/dispatch [:wallet.accounts/delete-account account]) :on-cancel #()}}) + +(re-frame/reg-fx + ::stop-wallet + (fn [] + (log/info "stop-wallet fx") + (status/stop-wallet))) + +(re-frame/reg-fx + ::start-wallet + (fn [] + (log/info "start-wallet fx") + (status/start-wallet))) + +(fx/defn stop-wallet + [{:keys [db] :as cofx}] + (let [] + {:db (assoc db :wallet-service/state :stopped) + ::stop-wallet nil})) + +(fx/defn start-wallet + [{:keys [db] :as cofx}] + (let [] + {:db (assoc db :wallet-service/state :started) + ::start-wallet nil})) + +(fx/defn restart-wallet-service + [{:keys [db] :as cofx} type-changed?] + (let [network-status (:network-status db) + network-type (:network/type db) + setting (:wallet-service/manual-setting db) + state (:wallet-service/state db)] + (log/info "restart-wallet-service" + "setting?" setting + "state" state + "network-type" network-type + "network-status" network-status) + (when (and config/disable-wallet-on-mobile-network? + (= network-status :online) + (nil? setting)) + (cond + (and (not= network-type "wifi") + (not= state :stopped)) + (stop-wallet cofx) + + (and (= network-type "wifi") + (= state :stopped)) + (start-wallet cofx))))) + +(fx/defn toggle-force-stop-wallet-service + {:events [::toggle-force-stop-wallet-service]} + [{:keys [db] :as cofx}] + (let [setting (:wallet-service/manual-setting db) + new-setting (when (not= setting :off) :off)] + (fx/merge + cofx + {:db (assoc db :wallet-service/manual-setting new-setting)} + (if (= new-setting :off) + (stop-wallet) + (restart-wallet-service true))))) + +(fx/defn toggle-force-start-wallet-service + {:events [::toggle-force-start-wallet-service]} + [{:keys [db] :as cofx}] + (let [setting (:wallet-service/manual-setting db) + new-setting (when (not= setting :on) :on)] + (fx/merge + cofx + {:db (assoc db :wallet-service/manual-setting new-setting)} + (if (= new-setting :on) + (start-wallet) + (restart-wallet-service true))))) diff --git a/status-go-version.json b/status-go-version.json index 190af1b54b35..ec31f0bd556e 100644 --- a/status-go-version.json +++ b/status-go-version.json @@ -2,7 +2,7 @@ "_comment": "DO NOT EDIT THIS FILE BY HAND. USE 'scripts/update-status-go.sh ' instead", "owner": "status-im", "repo": "status-go", - "version": "v0.56.1", - "commit-sha1": "4574ab4c22ee6b662a7f87c39d0f714998c567dc", - "src-sha256": "0jd684lv7x93gxgvvhsv4ihxr5sw2rck2divsxfiql5g2c1v4alg" + "version": "stop-wallet", + "commit-sha1": "6a830d0d8518ea09e463a3544ec857b40b8350b2", + "src-sha256": "1hh6f4cdm5hcxyjf2zrprqpnc3biijfxsc3pb71q0lm33h4s1ngh" }