commit 85404244d5e6ba4a7e046bdfaf49afac5b646c3e
parent 86ff4abbc304a0df0603b165d71092917906f01d
Author: Marc Stibane <marc@taler.net>
Date: Thu, 13 Mar 2025 15:37:15 +0100
UserDefaults+oimMode
Diffstat:
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) }
+ }
+}