diff --git a/WatchConnectivity.ios.js b/WatchConnectivity.ios.js index 887576710..361626b61 100644 --- a/WatchConnectivity.ios.js +++ b/WatchConnectivity.ios.js @@ -7,7 +7,9 @@ import { BlueStorageContext } from './blue_modules/storage-context'; import Notifications from './blue_modules/notifications'; function WatchConnectivity() { - const { walletsInitialized, wallets, fetchWalletTransactions, saveToDisk, txMetadata } = useContext(BlueStorageContext); + const { walletsInitialized, wallets, fetchWalletTransactions, saveToDisk, txMetadata, preferredFiatCurrency } = useContext( + BlueStorageContext, + ); const isReachable = useReachability(); const isInstalled = useInstalled(); // true | false @@ -19,6 +21,21 @@ function WatchConnectivity() { // eslint-disable-next-line react-hooks/exhaustive-deps }, [walletsInitialized, wallets, isReachable, isInstalled]); + useEffect(() => { + if (walletsInitialized) { + try { + updateApplicationContext({ + preferredFiatCurrency: JSON.parse(preferredFiatCurrency).endPointKey, + randomID: Math.floor(Math.random() * 11), + }); + } catch (e) { + console.log('WatchConnectivity useEffect preferredFiatCurrency error'); + console.log(e); + } + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [preferredFiatCurrency, walletsInitialized]); + const handleMessages = (message, reply) => { if (message.request === 'createInvoice') { handleLightningInvoiceCreateRequest(message.walletIndex, message.amount, message.description) diff --git a/blue_modules/currency.js b/blue_modules/currency.js index 42fe78f82..d63a570a8 100644 --- a/blue_modules/currency.js +++ b/blue_modules/currency.js @@ -30,6 +30,7 @@ async function setPrefferedCurrency(item) { async function getPreferredCurrency() { const preferredCurrency = await JSON.parse(await AsyncStorage.getItem(AppStorage.PREFERRED_CURRENCY)); + await DefaultPreference.setName('group.io.bluewallet.bluewallet'); await DefaultPreference.set('preferredCurrency', preferredCurrency.endPointKey); await DefaultPreference.set('preferredCurrencyLocale', preferredCurrency.locale.replace('-', '_')); return preferredCurrency; diff --git a/ios/BlueWalletWatch Extension/BlueWalletWatch Extension.entitlements b/ios/BlueWalletWatch Extension/BlueWalletWatch Extension.entitlements index 86bfd6c51..0c67376eb 100644 --- a/ios/BlueWalletWatch Extension/BlueWalletWatch Extension.entitlements +++ b/ios/BlueWalletWatch Extension/BlueWalletWatch Extension.entitlements @@ -1,10 +1,5 @@ - - com.apple.security.application-groups - - group.io.bluewallet.bluewallet - - + diff --git a/ios/BlueWalletWatch Extension/ComplicationController.swift b/ios/BlueWalletWatch Extension/ComplicationController.swift index 4ebfb3d15..2c1eff99d 100644 --- a/ios/BlueWalletWatch Extension/ComplicationController.swift +++ b/ios/BlueWalletWatch Extension/ComplicationController.swift @@ -41,13 +41,17 @@ class ComplicationController: NSObject, CLKComplicationDataSource { let valueLabel: String let currencySymbol: String - if let price = marketData?.formattedRateForComplication, let marketDatadata = marketData?.date, let userCurrencySymbol = fiatUnit(currency: WidgetAPI.getUserPreferredCurrency())?.symbol { + if let price = marketData?.formattedRateForComplication, let marketDatadata = marketData?.date { date = marketDatadata valueLabel = price - currencySymbol = userCurrencySymbol + if let preferredFiatCurrency = UserDefaults.standard.string(forKey: "preferredFiatCurrency"), let preferredFiatUnit = fiatUnit(currency: preferredFiatCurrency) { + currencySymbol = preferredFiatUnit.symbol + } else { + currencySymbol = fiatUnit(currency: "USD")!.symbol + } } else { valueLabel = "--" - currencySymbol = "USD" + currencySymbol = fiatUnit(currency: "USD")!.symbol date = Date() } diff --git a/ios/BlueWalletWatch Extension/ExtensionDelegate.swift b/ios/BlueWalletWatch Extension/ExtensionDelegate.swift index 4658dae65..b18a4a215 100644 --- a/ios/BlueWalletWatch Extension/ExtensionDelegate.swift +++ b/ios/BlueWalletWatch Extension/ExtensionDelegate.swift @@ -14,17 +14,32 @@ class ExtensionDelegate: NSObject, WKExtensionDelegate { func applicationDidFinishLaunching() { // Perform any final initialization of your application. scheduleNextReload() - WidgetAPI.fetchPrice(currency: WidgetAPI.getUserPreferredCurrency()) { [weak self] (data, error) in + ExtensionDelegate.preferredFiatCurrencyChanged() + } + + static func preferredFiatCurrencyChanged() { + let fiatUnitUserDefaults: FiatUnit + if let preferredFiatCurrency = UserDefaults.standard.string(forKey: "preferredFiatCurrency"), let preferredFiatUnit = fiatUnit(currency: preferredFiatCurrency) { + fiatUnitUserDefaults = preferredFiatUnit + } else { + fiatUnitUserDefaults = fiatUnit(currency: "USD")! + } + WidgetAPI.fetchPrice(currency: fiatUnitUserDefaults.endPointKey) { (data, error) in if let data = data, let encodedData = try? PropertyListEncoder().encode(data) { UserDefaults.standard.set(encodedData, forKey: MarketData.string) - self?.reloadActiveComplications() + UserDefaults.standard.synchronize() + let server = CLKComplicationServer.sharedInstance() + + for complication in server.activeComplications ?? [] { + server.reloadTimeline(for: complication) + } } } } func nextReloadTime(after date: Date) -> Date { let calendar = Calendar(identifier: .gregorian) - return calendar.date(byAdding: .minute, value: 1, to: date)! + return calendar.date(byAdding: .minute, value: 10, to: date)! } func scheduleNextReload() { @@ -60,14 +75,20 @@ class ExtensionDelegate: NSObject, WKExtensionDelegate { func handle(_ backgroundTasks: Set) { for task in backgroundTasks { switch task { - case let backgroundTask as WKApplicationRefreshBackgroundTask: + case let backgroundTask as WKApplicationRefreshBackgroundTask: NSLog("ExtensionDelegate: handling WKApplicationRefreshBackgroundTask") scheduleNextReload() - - WidgetAPI.fetchPrice(currency: WidgetAPI.getUserPreferredCurrency()) { [weak self] (data, error) in + let fiatUnitUserDefaults: FiatUnit + if let preferredFiatCurrency = UserDefaults.standard.string(forKey: "preferredFiatCurrency"), let preferredFiatUnit = fiatUnit(currency: preferredFiatCurrency) { + fiatUnitUserDefaults = preferredFiatUnit + } else { + fiatUnitUserDefaults = fiatUnit(currency: "USD")! + } + WidgetAPI.fetchPrice(currency: fiatUnitUserDefaults.endPointKey) { [weak self] (data, error) in if let data = data, let encodedData = try? PropertyListEncoder().encode(data) { UserDefaults.standard.set(encodedData, forKey: MarketData.string) + UserDefaults.standard.synchronize() self?.reloadActiveComplications() backgroundTask.setTaskCompletedWithSnapshot(false) } @@ -79,4 +100,6 @@ class ExtensionDelegate: NSObject, WKExtensionDelegate { } } + + } diff --git a/ios/BlueWalletWatch Extension/Objects/WatchDataSource.swift b/ios/BlueWalletWatch Extension/Objects/WatchDataSource.swift index 3e463d162..be95e8f30 100644 --- a/ios/BlueWalletWatch Extension/Objects/WatchDataSource.swift +++ b/ios/BlueWalletWatch Extension/Objects/WatchDataSource.swift @@ -96,11 +96,23 @@ class WatchDataSource: NSObject, WCSessionDelegate { } func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String : Any]) { - WatchDataSource.shared.processWalletsData(walletsInfo: applicationContext) + if let preferredFiatCurrency = applicationContext["preferredFiatCurrency"] as? String, let preferredFiatCurrencyUnit = fiatUnit(currency: preferredFiatCurrency) { + UserDefaults.standard.set(preferredFiatCurrencyUnit.endPointKey, forKey: "preferredFiatCurrency") + UserDefaults.standard.synchronize() + ExtensionDelegate.preferredFiatCurrencyChanged() + } else { + WatchDataSource.shared.processWalletsData(walletsInfo: applicationContext) + } } func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String : Any], replyHandler: @escaping ([String : Any]) -> Void) { - WatchDataSource.shared.processWalletsData(walletsInfo: applicationContext) + if let preferredFiatCurrency = applicationContext["preferredFiatCurrency"] as? String, let preferredFiatCurrencyUnit = fiatUnit(currency: preferredFiatCurrency) { + UserDefaults.standard.set(preferredFiatCurrencyUnit.endPointKey, forKey: "preferredFiatCurrency") + UserDefaults.standard.synchronize() + ExtensionDelegate.preferredFiatCurrencyChanged() + } else { + WatchDataSource.shared.processWalletsData(walletsInfo: applicationContext) + } } func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) { diff --git a/ios/BlueWalletWatch/BlueWalletWatch.entitlements b/ios/BlueWalletWatch/BlueWalletWatch.entitlements index 86bfd6c51..0c67376eb 100644 --- a/ios/BlueWalletWatch/BlueWalletWatch.entitlements +++ b/ios/BlueWalletWatch/BlueWalletWatch.entitlements @@ -1,10 +1,5 @@ - - com.apple.security.application-groups - - group.io.bluewallet.bluewallet - - + diff --git a/ios/WalletInformationWidget/Widgets/Shared/Models.swift b/ios/WalletInformationWidget/Widgets/Shared/Models.swift index 5e13b8df6..25a600d51 100644 --- a/ios/WalletInformationWidget/Widgets/Shared/Models.swift +++ b/ios/WalletInformationWidget/Widgets/Shared/Models.swift @@ -61,3 +61,14 @@ enum MarketDataTimeline: String { case Previous = "previous" case Current = "current" } + +enum UserDefaultsGroupKey: String { + case GroupName = "group.io.bluewallet.bluewallet" + case PreferredCurrency = "preferredCurrency" + case ElectrumSettingsHost = "electrum_host" + case ElectrumSettingsTCPPort = "electrum_tcp_port" + case ElectrumSettingsSSLPort = "electrum_ssl_port" + case AllWalletsBalance = "WidgetCommunicationAllWalletsSatoshiBalance" + case AllWalletsLatestTransactionTime = "WidgetCommunicationAllWalletsLatestTransactionTime" + case LatestTransactionIsUnconfirmed = "\"WidgetCommunicationLatestTransactionIsUnconfirmed\"" +} diff --git a/ios/WalletInformationWidget/Widgets/Shared/UserDefaultsGroup.swift b/ios/WalletInformationWidget/Widgets/Shared/UserDefaultsGroup.swift index cce998598..79736f481 100644 --- a/ios/WalletInformationWidget/Widgets/Shared/UserDefaultsGroup.swift +++ b/ios/WalletInformationWidget/Widgets/Shared/UserDefaultsGroup.swift @@ -8,17 +8,6 @@ import Foundation -enum UserDefaultsGroupKey: String { - case GroupName = "group.io.bluewallet.bluewallet" - case PreferredCurrency = "preferredCurrency" - case ElectrumSettingsHost = "electrum_host" - case ElectrumSettingsTCPPort = "electrum_tcp_port" - case ElectrumSettingsSSLPort = "electrum_ssl_port" - case AllWalletsBalance = "WidgetCommunicationAllWalletsSatoshiBalance" - case AllWalletsLatestTransactionTime = "WidgetCommunicationAllWalletsLatestTransactionTime" - case LatestTransactionIsUnconfirmed = "\"WidgetCommunicationLatestTransactionIsUnconfirmed\"" -} - struct UserDefaultsElectrumSettings { let host: String? let port: Int32? diff --git a/ios/WalletInformationWidget/Widgets/Shared/WidgetAPI.swift b/ios/WalletInformationWidget/Widgets/Shared/WidgetAPI.swift index c8cda89f5..25e60ef74 100644 --- a/ios/WalletInformationWidget/Widgets/Shared/WidgetAPI.swift +++ b/ios/WalletInformationWidget/Widgets/Shared/WidgetAPI.swift @@ -42,7 +42,8 @@ class WidgetAPI { } static func getUserPreferredCurrency() -> String { - guard let userDefaults = UserDefaults(suiteName: "group.io.bluewallet.bluewallet"), + + guard let userDefaults = UserDefaults(suiteName: UserDefaultsGroupKey.GroupName.rawValue), let preferredCurrency = userDefaults.string(forKey: "preferredCurrency") else { return "USD" @@ -58,7 +59,7 @@ class WidgetAPI { } static func getUserPreferredCurrencyLocale() -> String { - guard let userDefaults = UserDefaults(suiteName: "group.io.bluewallet.bluewallet"), + guard let userDefaults = UserDefaults(suiteName: UserDefaultsGroupKey.GroupName.rawValue), let preferredCurrency = userDefaults.string(forKey: "preferredCurrencyLocale") else { return "en_US"