@@ -671,19 +671,12 @@ final class SettingsTableViewController: UITableViewController, IdentifiableClas
671671
672672 switch pumpManagers. count {
673673 case 1 :
674- if let pumpManager = pumpManagers. first, let PumpManagerType = dataManager. pumpManagerTypeByIdentifier ( pumpManager. identifier) {
675-
676- let setupViewController = configuredSetupViewController ( for: PumpManagerType)
677- present ( setupViewController, animated: true , completion: nil )
678- }
674+ setupPumpManager ( identifier: pumpManagers. first!. identifier)
679675 completion ? ( )
680676 case let x where x > 1 :
681677 let alert = UIAlertController ( pumpManagers: pumpManagers) { [ weak self] ( identifier) in
682- if let self = self , let manager = self . dataManager. pumpManagerTypeByIdentifier ( identifier) {
683- let setupViewController = self . configuredSetupViewController ( for: manager)
684- self . present ( setupViewController, animated: true , completion: nil )
685- completion ? ( )
686- }
678+ self ? . setupPumpManager ( identifier: identifier)
679+ completion ? ( )
687680 }
688681
689682 alert. addCancelAction { ( _) in
@@ -697,6 +690,13 @@ final class SettingsTableViewController: UITableViewController, IdentifiableClas
697690 }
698691 }
699692
693+ private func setupPumpManager( identifier: String ) {
694+ if let manager = self . dataManager. pumpManagerTypeByIdentifier ( identifier) {
695+ let setupViewController = self . configuredSetupViewController ( for: manager)
696+ self . present ( setupViewController, animated: true , completion: nil )
697+ }
698+ }
699+
700700 private func didSelectCGM( completion: ( ( ) -> Void ) ? = nil ) {
701701 if let cgmManager = dataManager. cgmManager as? CGMManagerUI {
702702 if let unit = dataManager. glucoseStore. preferredUnit {
@@ -722,23 +722,11 @@ final class SettingsTableViewController: UITableViewController, IdentifiableClas
722722
723723 switch cgmManagers. count {
724724 case 1 :
725- if let cgmManager = cgmManagers. first, let CGMManagerType = dataManager. cgmManagerTypeByIdentifier ( cgmManager. identifier) {
726- setupCGMManager ( CGMManagerType)
727- }
728-
725+ setupCGMManager ( identifier: cgmManagers. first!. identifier)
729726 completion ? ( )
730727 case let x where x > 1 :
731- let alert = UIAlertController ( cgmManagers: cgmManagers, pumpManager: dataManager. pumpManager as? CGMManager ) { [ weak self] ( identifier, pumpManager) in
732- if let self = self {
733- if let cgmManagerIdentifier = identifier, let cgmManagerType = self . dataManager. cgmManagerTypeByIdentifier ( cgmManagerIdentifier) {
734- self . setupCGMManager ( cgmManagerType)
735- } else if let pumpManager = pumpManager {
736- self . completeCGMManagerSetup ( pumpManager)
737- } else {
738- fatalError ( " Could not set up CGM " )
739- }
740- }
741-
728+ let alert = UIAlertController ( cgmManagers: cgmManagers) { [ weak self] ( identifier) in
729+ self ? . setupCGMManager ( identifier: identifier)
742730 completion ? ( )
743731 }
744732
@@ -752,7 +740,7 @@ final class SettingsTableViewController: UITableViewController, IdentifiableClas
752740 }
753741 }
754742 }
755-
743+
756744 private func presentAlertPermissionsSettings( _ tableView: UITableView , _ indexPath: IndexPath ) {
757745 let hostingController = DismissibleHostingController (
758746 rootView: NotificationsCriticalAlertPermissionsView ( backButtonText: NSLocalizedString ( " Settings " , comment: " Settings return button " ) ,
@@ -766,20 +754,31 @@ final class SettingsTableViewController: UITableViewController, IdentifiableClas
766754
767755 private func presentTemporaryNewSettings( _ tableView: UITableView , _ indexPath: IndexPath ) {
768756 let pumpViewModel = DeviceViewModel (
769- deviceManagerUI: dataManager. pumpManager,
757+ image: dataManager. pumpManager? . smallImage,
758+ name: dataManager. pumpManager? . localizedTitle ?? " " ,
770759 isSetUp: dataManager. pumpManager != nil ,
760+ availableDevices: dataManager. availablePumpManagers,
771761 deleteData: ( dataManager. pumpManager is TestingPumpManager ) ? { [ weak self] in self ? . dataManager. deleteTestingPumpData ( )
772762 } : nil ,
773763 onTapped: { [ weak self] in
774- self ? . didSelectPump ( )
764+ self ? . didSelectPump ( )
765+ } ,
766+ didTapAddDevice: { [ weak self] in
767+ self ? . setupPumpManager ( identifier: $0. identifier)
775768 } )
769+
776770 let cgmViewModel = DeviceViewModel (
777- deviceManagerUI: dataManager. cgmManager as? DeviceManagerUI ,
771+ image: ( dataManager. cgmManager as? DeviceManagerUI ) ? . smallImage,
772+ name: dataManager. cgmManager? . localizedTitle ?? " " ,
778773 isSetUp: dataManager. cgmManager != nil ,
774+ availableDevices: dataManager. availableCGMManagers,
779775 deleteData: ( dataManager. cgmManager is TestingCGMManager ) ? { [ weak self] in self ? . dataManager. deleteTestingCGMData ( )
780776 } : nil ,
781777 onTapped: { [ weak self] in
782- self ? . didSelectCGM ( )
778+ self ? . didSelectCGM ( )
779+ } ,
780+ didTapAddDevice: { [ weak self] in
781+ self ? . setupCGMManager ( identifier: $0. identifier)
783782 } )
784783 let pumpSupportedIncrements = dataManager. pumpManager. map {
785784 PumpSupportedIncrements ( basalRates: $0. supportedBasalRates,
@@ -967,26 +966,36 @@ extension SettingsTableViewController: PumpManagerSetupViewControllerDelegate {
967966 }
968967}
969968
969+ private class DelegateShim : CGMManagerSetupViewControllerDelegate {
970+ let completion : ( CGMManager ? ) -> Void
971+ init ( completion: @escaping ( CGMManager ? ) -> Void ) {
972+ self . completion = completion
973+ }
974+ func cgmManagerSetupViewController( _ cgmManagerSetupViewController: CGMManagerSetupViewController , didSetUpCGMManager cgmManager: CGMManagerUI ) {
975+ self . completion ( cgmManager)
976+ }
977+ }
970978
971979extension SettingsTableViewController : CGMManagerSetupViewControllerDelegate {
972- fileprivate func setupCGMManager( _ CGMManagerType: CGMManagerUI . Type ) {
973- if var setupViewController = CGMManagerType . setupViewController ( glucoseTintColor: . glucoseTintColor, guidanceColors: . default) {
974- setupViewController. setupDelegate = self
975- setupViewController. completionDelegate = self
976- present ( setupViewController, animated: true , completion: nil )
977- } else {
978- completeCGMManagerSetup ( CGMManagerType . init ( rawState: [ : ] ) )
980+ fileprivate func setupCGMManager( identifier: String ) {
981+ dataManager. maybeSetupCGMManager ( identifier) { cgmManagerType, setupCompletion in
982+ if var setupViewController = cgmManagerType. setupViewController ( glucoseTintColor: . glucoseTintColor, guidanceColors: . default) {
983+ let shim = DelegateShim {
984+ setupCompletion ( $0)
985+ self . updateSelectedDeviceManagerRows ( )
986+ }
987+ setupViewController. setupDelegate = shim
988+ setupViewController. completionDelegate = self
989+ present ( setupViewController, animated: true , completion: nil )
990+ } else {
991+ setupCompletion ( cgmManagerType. init ( rawState: [ : ] ) )
992+ }
979993 }
980- }
981-
982- fileprivate func completeCGMManagerSetup( _ cgmManager: CGMManager ? ) {
983- dataManager. cgmManager = cgmManager
984-
985994 updateSelectedDeviceManagerRows ( )
986995 }
987996
988997 func cgmManagerSetupViewController( _ cgmManagerSetupViewController: CGMManagerSetupViewController , didSetUpCGMManager cgmManager: CGMManagerUI ) {
989- completeCGMManagerSetup ( cgmManager )
998+ updateSelectedDeviceManagerRows ( )
990999 }
9911000}
9921001
0 commit comments