taler-ios

iOS apps for GNU Taler (wallet)
Log | Files | Refs | README | LICENSE

commit 85404244d5e6ba4a7e046bdfaf49afac5b646c3e
parent 86ff4abbc304a0df0603b165d71092917906f01d
Author: Marc Stibane <marc@taler.net>
Date:   Thu, 13 Mar 2025 15:37:15 +0100

UserDefaults+oimMode

Diffstat:
MTalerWallet.xcodeproj/project.pbxproj | 6++++++
MTalerWallet1/Controllers/Controller.swift | 18++++++++++++++++++
ATalerWallet1/Helper/UserDefaults+oimMode.swift | 23+++++++++++++++++++++++
3 files changed, 47 insertions(+), 0 deletions(-)

diff --git a/TalerWallet.xcodeproj/project.pbxproj b/TalerWallet.xcodeproj/project.pbxproj @@ -302,6 +302,8 @@ 4EE77E822C06E513007C9064 /* WithdrawAcceptView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EE77E802C06E513007C9064 /* WithdrawAcceptView.swift */; }; 4EE9864F2CE26E0F00F75634 /* DepositAmountView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EE9864E2CE26E0F00F75634 /* DepositAmountView.swift */; }; 4EE986502CE26E0F00F75634 /* DepositAmountView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EE9864E2CE26E0F00F75634 /* DepositAmountView.swift */; }; + 4EE9E1FD2D7E3C8000365E72 /* UserDefaults+oimMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EE9E1FC2D7E3C8000365E72 /* UserDefaults+oimMode.swift */; }; + 4EE9E1FE2D7E3C8000365E72 /* UserDefaults+oimMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EE9E1FC2D7E3C8000365E72 /* UserDefaults+oimMode.swift */; }; 4EEBEFB02C8982180020D340 /* View+innerSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EEBEFAF2C8982180020D340 /* View+innerSize.swift */; }; 4EEBEFB12C8982180020D340 /* View+innerSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EEBEFAF2C8982180020D340 /* View+innerSize.swift */; }; 4EEC118D2B83DE4800146CFF /* AmountInputV.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EEC118C2B83DE4700146CFF /* AmountInputV.swift */; }; @@ -522,6 +524,7 @@ 4EE77E7E2C0280E5007C9064 /* Taler_Wallet InfoPlist.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = "Taler_Wallet InfoPlist.xcstrings"; sourceTree = "<group>"; }; 4EE77E802C06E513007C9064 /* WithdrawAcceptView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WithdrawAcceptView.swift; sourceTree = "<group>"; }; 4EE9864E2CE26E0F00F75634 /* DepositAmountView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DepositAmountView.swift; sourceTree = "<group>"; }; + 4EE9E1FC2D7E3C8000365E72 /* UserDefaults+oimMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UserDefaults+oimMode.swift"; sourceTree = "<group>"; }; 4EEBEFAF2C8982180020D340 /* View+innerSize.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "View+innerSize.swift"; sourceTree = "<group>"; }; 4EEC118C2B83DE4700146CFF /* AmountInputV.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AmountInputV.swift; sourceTree = "<group>"; }; 4EEC11922B83FB7A00146CFF /* SubjectInputV.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SubjectInputV.swift; sourceTree = "<group>"; }; @@ -748,6 +751,7 @@ 4E0A71132C396D86002485BB /* Error+debugDescription.swift */, 4E605DAE2AADDD13002FB9A7 /* UIScreen+screenSize.swift */, 4E363CBB2A237E0900D7E98C /* URL+id+iban.swift */, + 4EE9E1FC2D7E3C8000365E72 /* UserDefaults+oimMode.swift */, 4E9320422A14F6EA00A87B0E /* WalletColors.swift */, 4E8E25322A1CD39700A27BFA /* EqualIconWidthDomain.swift */, 4EBA563E2A7FD9390084948B /* SuperScriptDigits.swift */, @@ -1380,6 +1384,7 @@ 4E0A71182C3AB099002485BB /* IconBadge.swift in Sources */, 4E3EAE6F2A990778009F1BE8 /* TalerStrings.swift in Sources */, 4E3EAE702A990778009F1BE8 /* CurrencyInputView.swift in Sources */, + 4EE9E1FD2D7E3C8000365E72 /* UserDefaults+oimMode.swift in Sources */, 4E3EAE712A990778009F1BE8 /* URL+id+iban.swift in Sources */, 4E0E8EFD2CF0A18800C5F914 /* BankSectionView.swift in Sources */, 4ED80E8B2B8F60E7008BD576 /* Atomic.swift in Sources */, @@ -1523,6 +1528,7 @@ 4E0A71192C3AB099002485BB /* IconBadge.swift in Sources */, 4EB0950A2989CB7C0043A8A1 /* TalerStrings.swift in Sources */, 4EA551252A2C923600FEC9A8 /* CurrencyInputView.swift in Sources */, + 4EE9E1FE2D7E3C8000365E72 /* UserDefaults+oimMode.swift in Sources */, 4E363CBC2A237E0900D7E98C /* URL+id+iban.swift in Sources */, 4E0E8EFE2CF0A18800C5F914 /* BankSectionView.swift in Sources */, 4ED80E8C2B8F60E7008BD576 /* Atomic.swift in Sources */, diff --git a/TalerWallet1/Controllers/Controller.swift b/TalerWallet1/Controllers/Controller.swift @@ -54,6 +54,8 @@ class Controller: ObservableObject { @Published var backendState: BackendState = .none // only used for launch animation @Published var currencyTicker: Int = 0 // updates whenever a new currency is added @Published var isConnected: Bool = true + @Published var oimModeActive: Bool = false + @Published var diagnosticModeActive: Bool = false @AppStorage("useHaptics") var useHaptics: Bool = true // extension mustn't define this, so it must be here @AppStorage("playSoundsI") var playSoundsI: Int = 1 // extension mustn't define this, so it must be here @AppStorage("playSoundsB") var playSoundsB: Bool = false @@ -68,6 +70,21 @@ class Controller: ObservableObject { private let monitor = NWPathMonitor() + private var oimModeObservation: NSKeyValueObservation? + private var diagnosticModeObservation: NSKeyValueObservation? + + func startObserving() { + let defaults = UserDefaults.standard + self.oimModeObservation = defaults.observe(\.oimModeEnabled, options: [.new, .old, .prior, .initial]) { [weak self](object, change) in +// print(object, change) + print(UserDefaults.standard.oimModeEnabled) + self?.oimModeActive = UserDefaults.standard.oimModeEnabled + } + self.diagnosticModeObservation = defaults.observe(\.diagnosticModeEnabled, options: [.new, .old,.prior,.initial]) { [weak self](_, _) in + self?.diagnosticModeActive = UserDefaults.standard.diagnosticModeEnabled + } + } + func checkInternetConnection() { monitor.pathUpdateHandler = { path in let status = switch path.status { @@ -115,6 +132,7 @@ class Controller: ObservableObject { exchanges = [] balances = [] // checkInternetConnection() + startObserving() } // MARK: - @MainActor diff --git a/TalerWallet1/Helper/UserDefaults+oimMode.swift b/TalerWallet1/Helper/UserDefaults+oimMode.swift @@ -0,0 +1,23 @@ +/* + * This file is part of GNU Taler, ©2022-25 Taler Systems S.A. + * See LICENSE.md + */ +/** + * @author Marc Stibane + */ +import Foundation + +// https://developer.apple.com/forums/thread/764675?answerId=805946022#805946022 +extension UserDefaults { + private static let oimModeEnabledKey = "oimModeEnabled" + @objc dynamic var oimModeEnabled: Bool { + get { bool(forKey: UserDefaults.oimModeEnabledKey) } + set { set(newValue, forKey: UserDefaults.oimModeEnabledKey) } + } + + private static let diagnosticModeEnabledKey = "diagnosticModeEnabled" + @objc dynamic var diagnosticModeEnabled: Bool { + get { bool(forKey: UserDefaults.diagnosticModeEnabledKey) } + set { set(newValue, forKey: UserDefaults.diagnosticModeEnabledKey) } + } +}