Просмотр исходного кода

Minor adjustments
* Change navigation title from .automatic to .inline to save space
* Utilize custom padding and ignoreSafeArea to save space
* Move warning hint to header
* Change warning hint color for better readability; orange for dark mode, accentColor for light mode
* Add some Spacer() for better readability of labels and inputs
* Rename 'New Override +' button 'Add Override +' for consistency across app

Deniz Cengiz 1 год назад
Родитель
Сommit
2ed92523d0

+ 52 - 26
FreeAPS/Sources/Modules/OverrideConfig/View/AddOverrideForm.swift

@@ -72,13 +72,22 @@ struct AddOverrideForm: View {
                 addOverride()
                 saveButton
             }
-            .listSectionSpacing(20)
+            .listSectionSpacing(10)
             .listRowSpacing(10)
+            .padding(.top, 30)
+            .ignoresSafeArea(edges: .top)
             .scrollContentBackground(.hidden).background(color)
-            .navigationTitle("New Override")
-            .navigationBarItems(trailing: Button("Cancel") {
-                presentationMode.wrappedValue.dismiss()
-            })
+            .navigationTitle("Add Override")
+            .navigationBarTitleDisplayMode(.inline)
+            .toolbar {
+                ToolbarItem(placement: .topBarLeading) {
+                    Button(action: {
+                        presentationMode.wrappedValue.dismiss()
+                    }, label: {
+                        Text("Cancel")
+                    })
+                }
+            }
         }
     }
 
@@ -270,7 +279,12 @@ struct AddOverrideForm: View {
                             )
                             .foregroundColor(!displayPickerDisableSmbSchedule ? .primary : .accentColor)
 
+                            Spacer()
+
                             Divider().frame(width: 1, height: 20)
+
+                            Spacer()
+
                             Text("To")
                             Spacer()
                             Text(
@@ -333,7 +347,13 @@ struct AddOverrideForm: View {
                                 Spacer()
                                 Text("\(state.smbMinutes.formatted(.number)) min")
                                     .foregroundColor(!displayPickerSmbMinutes ? .primary : .accentColor)
+
+                                Spacer()
+
                                 Divider().frame(width: 1, height: 20)
+
+                                Spacer()
+
                                 Text("UAM")
                                 Spacer()
                                 Text("\(state.uamMinutes.formatted(.number)) min")
@@ -381,27 +401,33 @@ struct AddOverrideForm: View {
         let (isInvalid, errorMessage) = isOverrideInvalid()
 
         return Group {
-            Section {
-                Button(action: {
-                    Task {
-                        if state.indefinite { state.overrideDuration = 0 }
-                        state.isEnabled.toggle()
-                        await state.saveCustomOverride()
-                        await state.resetStateVariables()
-                        dismiss()
-                    }
-                }, label: {
-                    Text("Enact Override")
-                })
-                    .disabled(isInvalid)
-                    .frame(maxWidth: .infinity, alignment: .center)
-                    .tint(.white)
-            }.listRowBackground(isInvalid ? Color(.systemGray4) : Color(.systemBlue))
-
             Section(
-                footer: Text(errorMessage ?? "")
-                    .foregroundColor(.red)
-            ) {
+                header:
+                HStack {
+                    Spacer()
+                    Text(errorMessage ?? "").textCase(nil)
+                        .foregroundColor(colorScheme == .dark ? .orange : .accentColor)
+                    Spacer()
+                },
+                content: {
+                    Button(action: {
+                        Task {
+                            if state.indefinite { state.overrideDuration = 0 }
+                            state.isEnabled.toggle()
+                            await state.saveCustomOverride()
+                            await state.resetStateVariables()
+                            dismiss()
+                        }
+                    }, label: {
+                        Text("Enact Override")
+                    })
+                        .disabled(isInvalid)
+                        .frame(maxWidth: .infinity, alignment: .center)
+                        .tint(.white)
+                }
+            ).listRowBackground(isInvalid ? Color(.systemGray4) : Color(.systemBlue))
+
+            Section {
                 Button(action: {
                     Task {
                         await state.saveOverridePreset()
@@ -416,7 +442,7 @@ struct AddOverrideForm: View {
                     .tint(.white)
             }
             .listRowBackground(
-                isInvalid ? Color(.systemGray4) : Color(.orange)
+                isInvalid ? Color(.systemGray4) : Color.secondary
             )
         }
     }

+ 61 - 36
FreeAPS/Sources/Modules/OverrideConfig/View/EditOverrideForm.swift

@@ -116,14 +116,22 @@ struct EditOverrideForm: View {
                 editOverride()
                 saveButton
             }
-            .listSectionSpacing(20)
+            .listSectionSpacing(10)
             .listRowSpacing(10)
+            .padding(.top, 30)
+            .ignoresSafeArea(edges: .top)
             .scrollContentBackground(.hidden).background(color)
             .navigationTitle("Edit Override")
             .navigationBarTitleDisplayMode(.inline)
-            .navigationBarItems(trailing: Button("Cancel") {
-                presentationMode.wrappedValue.dismiss()
-            })
+            .toolbar {
+                ToolbarItem(placement: .topBarLeading) {
+                    Button(action: {
+                        presentationMode.wrappedValue.dismiss()
+                    }, label: {
+                        Text("Cancel")
+                    })
+                }
+            }
             .onDisappear {
                 if !hasChanges {
                     // Reset UI changes
@@ -334,7 +342,12 @@ struct EditOverrideForm: View {
                         )
                         .foregroundColor(!displayPickerDisableSmbSchedule ? .primary : .accentColor)
 
+                        Spacer()
+
                         Divider().frame(width: 1, height: 20)
+
+                        Spacer()
+
                         Text("To")
                         Spacer()
                         Text(
@@ -410,7 +423,13 @@ struct EditOverrideForm: View {
                                 Spacer()
                                 Text("\(smbMinutes?.formatted(.number) ?? "\(state.defaultSmbMinutes)") min")
                                     .foregroundColor(!displayPickerSmbMinutes ? .primary : .accentColor)
+
+                                Spacer()
+
                                 Divider().frame(width: 1, height: 20)
+
+                                Spacer()
+
                                 Text("UAM")
                                 Spacer()
                                 Text("\(uamMinutes?.formatted(.number) ?? "\(state.defaultUamMinutes)") min")
@@ -470,40 +489,46 @@ struct EditOverrideForm: View {
         let (isInvalid, errorMessage) = isOverrideInvalid()
 
         return Section(
-            footer: Text(errorMessage ?? "")
-                .foregroundColor(.red)
-        ) {
-            Button(action: {
-                saveChanges()
-
-                do {
-                    guard let moc = override.managedObjectContext else { return }
-                    guard moc.hasChanges else { return }
-                    try moc.save()
-
-                    if let currentActiveOverride = state.currentActiveOverride {
-                        Task {
-                            await state.disableAllActiveOverrides(
-                                except: currentActiveOverride.objectID,
-                                createOverrideRunEntry: false
-                            )
-                            // Update View
-                            state.updateLatestOverrideConfiguration()
+            header:
+            HStack {
+                Spacer()
+                Text(errorMessage ?? "").textCase(nil)
+                    .foregroundColor(colorScheme == .dark ? .orange : .accentColor)
+                Spacer()
+            },
+            content: {
+                Button(action: {
+                    saveChanges()
+
+                    do {
+                        guard let moc = override.managedObjectContext else { return }
+                        guard moc.hasChanges else { return }
+                        try moc.save()
+
+                        if let currentActiveOverride = state.currentActiveOverride {
+                            Task {
+                                await state.disableAllActiveOverrides(
+                                    except: currentActiveOverride.objectID,
+                                    createOverrideRunEntry: false
+                                )
+                                // Update View
+                                state.updateLatestOverrideConfiguration()
+                            }
                         }
-                    }
 
-                    hasChanges = false
-                    presentationMode.wrappedValue.dismiss()
-                } catch {
-                    debugPrint("\(DebuggingIdentifiers.failed) \(#file) \(#function) Failed to edit Override")
-                }
-            }, label: {
-                Text("Save Override")
-            })
-                .disabled(isInvalid) // Disable button if changes are invalid
-                .frame(maxWidth: .infinity, alignment: .center)
-                .tint(.white)
-        }
+                        hasChanges = false
+                        presentationMode.wrappedValue.dismiss()
+                    } catch {
+                        debugPrint("\(DebuggingIdentifiers.failed) \(#file) \(#function) Failed to edit Override")
+                    }
+                }, label: {
+                    Text("Save Override")
+                })
+                    .disabled(isInvalid) // Disable button if changes are invalid
+                    .frame(maxWidth: .infinity, alignment: .center)
+                    .tint(.white)
+            }
+        )
         .listRowBackground(isInvalid ? Color(.systemGray4) : Color(.systemBlue))
     }
 

+ 1 - 1
FreeAPS/Sources/Modules/OverrideConfig/View/OverrideRootView.swift

@@ -88,7 +88,7 @@ extension OverrideConfig {
                                     showOverrideCreationSheet = true
                                 }, label: {
                                     HStack {
-                                        Text("New Override")
+                                        Text("Add Override")
                                         Image(systemName: "plus")
                                     }
                                 })