diff --git a/TraccarClient.xcodeproj/project.xcworkspace/xcuserdata/g.makhoul.xcuserdatad/UserInterfaceState.xcuserstate b/TraccarClient.xcodeproj/project.xcworkspace/xcuserdata/g.makhoul.xcuserdatad/UserInterfaceState.xcuserstate index a001ccfb39779730bf745416ba61e9bc44c765bd..ad14cabc7ee570ecd5be227744104e34ad95f1ae 100644 Binary files a/TraccarClient.xcodeproj/project.xcworkspace/xcuserdata/g.makhoul.xcuserdatad/UserInterfaceState.xcuserstate and b/TraccarClient.xcodeproj/project.xcworkspace/xcuserdata/g.makhoul.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/TraccarClient/SettingsViewController/SettingsViewController.swift b/TraccarClient/SettingsViewController/SettingsViewController.swift index 794db6c710e48a47d6c6b16642e20cb63fea18bc..7cf7ba225fa24dfc1a390d77d8be2e1617c94ff7 100644 --- a/TraccarClient/SettingsViewController/SettingsViewController.swift +++ b/TraccarClient/SettingsViewController/SettingsViewController.swift @@ -39,7 +39,10 @@ final class SettingsViewController: KNViewController { value: UserDefaults.standard.string(forKey: "accuracy_preference") ?? "", keyboardType: .default, key: "accuracy_preference")] - + private var editedTextDefaults: [DefaultsModel] = [] + private var editedSwitchDefaults: [DefaultsModel] = [] + private var editedMultiChoicesDefaults: [DefaultsModel] = [] + var trackingController: TrackingController? @@ -63,31 +66,86 @@ final class SettingsViewController: KNViewController { tableView.allowsSelection = false tableView.separatorStyle = .none } + + private func isChangesOccured() -> Bool{ + for defaultItem in textDefaults { + if let editedItem = editedTextDefaults.first(where: { $0.key == defaultItem.key }) { + if "\(editedItem.value ?? "")" != "\(defaultItem.value ?? "")" { + return true + } + } + } + for defaultItem in switchDefaults { + if let editedItem = editedSwitchDefaults.first(where: { $0.key == defaultItem.key }) { + if "\(editedItem.value ?? "")" != "\(defaultItem.value ?? "")" { + return true + } + } + } + for defaultItem in multiChoicesDefaults { + if let editedItem = editedMultiChoicesDefaults.first(where: { $0.key == defaultItem.key }) { + if "\(editedItem.value ?? "")" != "\(defaultItem.value ?? "")" { + return true + } + } + } + return false + } } extension SettingsViewController: CustomHeaderViewDelegate { func rightButtonTapped(action: RightButtonAction) { view.endEditing(true) - alert(confirm: "Yes", destructive: "No", message: "Are you sure you want to change settings?") { - for item in self.textDefaults { - UserDefaults.standard.setValue(item.value, forKey: item.key) - } - for item in self.switchDefaults { - UserDefaults.standard.setValue(item.value, forKey: item.key) - } - for item in self.multiChoicesDefaults { - UserDefaults.standard.setValue(item.value, forKey: item.key) - } - if AppDelegate.instance.trackingController != nil { - AppDelegate.instance.trackingController = TrackingController() - AppDelegate.instance.trackingController?.start() + if isChangesOccured() { + alert(confirm: "Yes", destructive: "No", message: "Are you sure you want to change settings?") { + for item in self.editedTextDefaults { + UserDefaults.standard.setValue(item.value, forKey: item.key) + } + for item in self.editedSwitchDefaults { + UserDefaults.standard.setValue(item.value, forKey: item.key) + } + for item in self.editedMultiChoicesDefaults { + UserDefaults.standard.setValue(item.value, forKey: item.key) + } + if AppDelegate.instance.trackingController != nil { + AppDelegate.instance.trackingController = TrackingController() + AppDelegate.instance.trackingController?.start() + } + self.dismiss(animated: true) + self.navigationController?.popViewController(animated: true) } + } else { self.dismiss(animated: true) self.navigationController?.popViewController(animated: true) } } func leftButtonTapped(action: LeftButtonAction) { - self.navigationController?.popViewController(animated: true) + view.endEditing(true) + if isChangesOccured() { + alert(presentingBy: self, confirm: "Save Changes", destructive: "Discard Changes", message: "You have unsaved changes. What do you want to do?") { + for item in self.editedTextDefaults { + UserDefaults.standard.setValue(item.value, forKey: item.key) + } + for item in self.editedSwitchDefaults { + UserDefaults.standard.setValue(item.value, forKey: item.key) + } + for item in self.editedMultiChoicesDefaults { + UserDefaults.standard.setValue(item.value, forKey: item.key) + } + if AppDelegate.instance.trackingController != nil { + AppDelegate.instance.trackingController = TrackingController() + AppDelegate.instance.trackingController?.start() + } + self.dismiss(animated: true) + self.navigationController?.popViewController(animated: true) + } _: { + self.dismiss(animated: true) + self.navigationController?.popViewController(animated: true) + } + + } else { + self.navigationController?.popViewController(animated: true) + } } func logoutRequest() { @@ -171,27 +229,31 @@ extension SettingsViewController: SettingsTextTableViewCellDelegate, SettingsSwitchTableViewCellDelegate, SettingsSegmentTableViewCellDelegate { func didUpdateText(model: DefaultsModel) { - for (index, item) in textDefaults.enumerated() { - if item.key == model.key { - textDefaults[index].value = model.value - } - } +// for (index, item) in textDefaults.enumerated() { +// if item.key == model.key { +// textDefaults[index].value = model.value +// } +// } + editedTextDefaults.append(model) } + func didUpdateSwitch(model: DefaultsModel) { - for (index, item) in switchDefaults.enumerated() { - if item.key == model.key { - switchDefaults[index].value = model.value - } - } +// for (index, item) in switchDefaults.enumerated() { +// if item.key == model.key { +// switchDefaults[index].value = model.value +// } +// } + editedSwitchDefaults.append(model) } func didUpdateSegment(model: DefaultsModel) { - for (index, item) in multiChoicesDefaults.enumerated() { - if item.key == model.key { - multiChoicesDefaults[index].value = model.value - } - } +// for (index, item) in multiChoicesDefaults.enumerated() { +// if item.key == model.key { +// multiChoicesDefaults[index].value = model.value +// } +// } + editedMultiChoicesDefaults.append(model) } } diff --git a/TraccarClient/TransactionsViewController/TransactionsViewController.swift b/TraccarClient/TransactionsViewController/TransactionsViewController.swift index d48846e91822b9d567fc4ec13de1c8db3bd8894b..1591c5cbfbb22ffc67e9627a48a0443850394538 100644 --- a/TraccarClient/TransactionsViewController/TransactionsViewController.swift +++ b/TraccarClient/TransactionsViewController/TransactionsViewController.swift @@ -50,16 +50,16 @@ class TransactionsViewController: KNViewController { if messages.count > LIMIT { messages.remove(at: 0) } - transactionViewController?.tableView.reloadData() + transactionViewController?.noDataFoundLabel.isHidden = !TransactionsViewController.messages.isEmpty } class func clearMessages() { messages.removeAll() - transactionViewController?.tableView.reloadData() + transactionViewController?.noDataFoundLabel.isHidden = !TransactionsViewController.messages.isEmpty } override func viewWillAppear(_ animated: Bool) { @@ -104,6 +104,7 @@ extension TransactionsViewController: UITableViewDelegate, UITableViewDataSource extension TransactionsViewController: CustomHeaderViewDelegate { func rightButtonTapped(action: RightButtonAction) { TransactionsViewController.clearMessages() + noDataFoundLabel.isHidden = !TransactionsViewController.messages.isEmpty } func leftButtonTapped(action: LeftButtonAction) {