gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-taler-ios] 32/69: Warnings for tx buttons


From: gnunet
Subject: [taler-taler-ios] 32/69: Warnings for tx buttons
Date: Fri, 19 Jan 2024 09:02:05 +0100

This is an automated email from the git hooks/post-receive script.

marc-stibane pushed a commit to branch master
in repository taler-ios.

commit b1b30fabfa5664009d93eafc66d13306bfe9634b
Author: Marc Stibane <marc@taler.net>
AuthorDate: Thu Jan 4 17:52:36 2024 +0100

    Warnings for tx buttons
---
 .../Views/HelperViews/TransactionButton.swift      | 53 ++++++++++++++++------
 TalerWallet1/Views/Settings/SettingsView.swift     | 19 ++++++--
 2 files changed, 53 insertions(+), 19 deletions(-)

diff --git a/TalerWallet1/Views/HelperViews/TransactionButton.swift 
b/TalerWallet1/Views/HelperViews/TransactionButton.swift
index 40b0c5e..2f1674a 100644
--- a/TalerWallet1/Views/HelperViews/TransactionButton.swift
+++ b/TalerWallet1/Views/HelperViews/TransactionButton.swift
@@ -7,12 +7,30 @@ import taler_swift
 import AVFoundation
 
 struct TransactionButton: View {
-    let transactionId : String
-    let command : TxAction
+    let transactionId: String
+    let command: TxAction
+    let warning: String?
     let action: (_ transactionId: String) async throws -> Void
 
-    @State var disabled: Bool = false
-    @State var executed: Bool = false
+    @AppStorage("shouldShowWarning") var shouldShowWarning: Bool = true
+
+    @State private var disabled: Bool = false
+    @State private var executed: Bool = false
+    @State private var showAlert: Bool = false
+
+    private func doAction() {
+        disabled = true     // don't try this more than once
+        Task { // runs on MainActor
+            do {
+                try await action(transactionId)
+//                symLog.log("\(executed) \(transactionId)")
+                executed = true
+            } catch {    // TODO: error
+//                symLog.log(error.localizedDescription)
+            }
+        }
+    }
+
     var body: some View {
         let isDestructive = (command == .delete) || (command == .fail)
         let isCancel = (command == .abort)
@@ -21,15 +39,10 @@ struct TransactionButton: View {
                                               : nil
         Button(role: role, action: {
             if !disabled {
-                disabled = true     // don't try this more than once
-                Task { // runs on MainActor
-                    do {
-                        try await action(transactionId)
-//                    symLog.log("\(executed) \(transactionId)")
-                        executed = true
-                    } catch {    // TODO: error
-//                    symLog.log(error.localizedDescription)
-                    }
+                if shouldShowWarning && (isDestructive || isCancel) {
+                    showAlert = true
+                } else {
+                    doAction()
                 }
             }
         }, label: {
@@ -46,6 +59,16 @@ struct TransactionButton: View {
         .buttonStyle(.bordered)
         .controlSize(.large)
         .disabled(disabled)
+        .alert(warning ?? EMPTYSTRING, isPresented: $showAlert, actions: {
+                Button("Cancel", role: .cancel) {
+                    showAlert = false
+                }
+                Button(command.localizedActionTitle) {
+                    showAlert = false
+                    doAction()
+                }
+            }, message: { Text("This operation cannot be undone") }
+        )
     }
 }
 // MARK: -
@@ -58,7 +81,9 @@ struct TransactionButton_Previews: PreviewProvider {
 
     static var previews: some View {
         List {
-            TransactionButton(transactionId: "Button pressed", command: 
.abort, action: action)
+            TransactionButton(transactionId: "Button pressed", command: .abort,
+                              warning: "Are you sure you want to abort this 
transaction?",
+                              action: action)
         }
     }
 }
diff --git a/TalerWallet1/Views/Settings/SettingsView.swift 
b/TalerWallet1/Views/Settings/SettingsView.swift
index 777bc3a..4782328 100644
--- a/TalerWallet1/Views/Settings/SettingsView.swift
+++ b/TalerWallet1/Views/Settings/SettingsView.swift
@@ -31,6 +31,8 @@ struct SettingsView: View {
     @AppStorage("useHaptics") var useHaptics: Bool = true
     @AppStorage("playSoundsI") var playSoundsI: Int = 1
     @AppStorage("playSoundsB") var playSoundsB: Bool = true
+    @AppStorage("shouldShowWarning") var shouldShowWarning: Bool = true
+//    @AppStorage("increaseContrast") var increaseContrast: Bool = false
     @AppStorage("talerFont") var talerFont: Int = 0
     @AppStorage("developDelay") var developDelay: Bool = false
     @AppStorage("myListStyle") var myListStyle: MyListStyle = .automatic
@@ -101,12 +103,13 @@ struct SettingsView: View {
                           description: hideDescriptions ? nil : 
String(localized: "More info about this app...")) {}
                 }
 #if DEBUG
-                Group {
+                if showDevelopItems {
                     Text("https://bank.taler.grothoff.org/";)
                     Text("https://bank.taler.fdold.eu/";)
                     Text("https://bank.head.taler.net/";)
                     Text("https://bank.test.taler.net/";)
                     Text("https://bank.demo.taler.net/";)
+                    Text("https://bank.taler.ar/";)
                 }
 #endif
                 if controller.hapticCapability.supportsHaptics {
@@ -120,14 +123,20 @@ struct SettingsView: View {
 #if DEBUG
                 if Double.random(in: -100.0...100.0) > 0 {
                     SettingsSpeaker(name: String(localized: "Play Payment 
Sounds"), value: $playSoundsI,
-                         description: hideDescriptions ? nil : 
String(localized: "When a transaction finished"))
-                .id("playSounds")
-                SettingsFont(title: String(localized: "Font:"), value: 
talerFont, action: redraw)
-                    .id("font")
+                                    description: hideDescriptions ? nil : 
String(localized: "When a transaction finished"))
+                    .id("playSounds")
                 } else { playToggle }
 #else
                 playToggle
 #endif
+//                SettingsToggle(name: String(localized: "Increase Contrast"), 
value: $increaseContrast, id1: "contrast",
+//                               description: hideDescriptions ? nil : 
String(localized: "If you don't want to set it globally in Settings.app"))
+//                .id("increaseContrast")
+                SettingsToggle(name: String(localized: "Show Warnings"), 
value: $shouldShowWarning, id1: "warnings",
+                               description: hideDescriptions ? nil : 
String(localized: "For Delete, Fail & Abort buttons"))
+                .id("showWarnings")
+//                SettingsFont(title: String(localized: "Font:"), value: 
talerFont, action: redraw)
+//                    .id("font")
                 SettingsStyle(title: String(localized: "Liststyle:"), 
myListStyle: $myListStyle)
                     .id("liststyle")
                 SettingsToggle(name: String(localized: "Minimalistic"), value: 
$iconOnly, id1: "minimal",

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]