@@ -271,22 +271,40 @@ final class StatusTableViewController: LoopChartsTableViewController {
271
271
private func setupToolbarItems( ) {
272
272
let space = UIBarButtonItem ( barButtonSystemItem: . flexibleSpace, target: self , action: nil )
273
273
let carbs = UIBarButtonItem ( image: UIImage ( named: " carbs " ) , style: . plain, target: self , action: #selector( userTappedAddCarbs) )
274
- let meals = UIBarButtonItem ( image: UIImage ( named: " meals " ) , style: . plain, target: self , action: #selector( presentMealsScreen) )
275
274
let bolus = UIBarButtonItem ( image: UIImage ( named: " bolus " ) , style: . plain, target: self , action: #selector( presentBolusScreen) )
276
- let presets = createPresetsButtonItem ( )
277
275
let settings = UIBarButtonItem ( image: UIImage ( named: " settings " ) , style: . plain, target: self , action: #selector( onSettingsTapped) )
278
276
279
- toolbarItems = [
280
- carbs,
281
- space,
282
- meals,
283
- space,
284
- bolus,
285
- space,
286
- presets,
287
- space,
288
- settings
289
- ]
277
+ let favoriteFoodsEnabled = deviceManager. loopManager. settings. favoriteFoodsEnabled
278
+ if favoriteFoodsEnabled {
279
+ let meals = UIBarButtonItem ( image: UIImage ( named: " meals " ) , style: . plain, target: self , action: #selector( presentMealsScreen) )
280
+ let presets = createPresetsButtonItem ( selected: false , isEnabled: true )
281
+ toolbarItems = [
282
+ carbs,
283
+ space,
284
+ meals,
285
+ space,
286
+ bolus,
287
+ space,
288
+ presets,
289
+ space,
290
+ settings
291
+ ]
292
+ }
293
+ else {
294
+ let preMeal = createPreMealButtonItem ( selected: false , isEnabled: true )
295
+ let workout = createWorkoutButtonItem ( selected: false , isEnabled: true )
296
+ toolbarItems = [
297
+ carbs,
298
+ space,
299
+ preMeal,
300
+ space,
301
+ bolus,
302
+ space,
303
+ workout,
304
+ space,
305
+ settings
306
+ ]
307
+ }
290
308
}
291
309
292
310
private func updateToolbarItems( ) {
@@ -295,18 +313,23 @@ final class StatusTableViewController: LoopChartsTableViewController {
295
313
toolbarItems![ 0 ] . accessibilityLabel = NSLocalizedString ( " Enter Carbs " , comment: " The label of the carb entry button " )
296
314
toolbarItems![ 0 ] . isEnabled = isPumpOnboarded
297
315
toolbarItems![ 0 ] . tintColor = UIColor . carbTintColor
298
- // TODO: - Fix localized string here
299
- toolbarItems![ 0 ] . accessibilityLabel = NSLocalizedString ( " Enter Carbs " , comment: " The label of the carb entry button " )
300
- toolbarItems![ 2 ] . isEnabled = isPumpOnboarded
301
- toolbarItems![ 2 ] . tintColor = UIColor . carbTintColor
302
316
toolbarItems![ 4 ] . accessibilityLabel = NSLocalizedString ( " Bolus " , comment: " The label of the bolus entry button " )
303
317
toolbarItems![ 4 ] . isEnabled = isPumpOnboarded
304
318
toolbarItems![ 4 ] . tintColor = UIColor . insulinTintColor
305
- toolbarItems![ 6 ] . accessibilityLabel = NSLocalizedString ( " Presets " , comment: " The label of the presets button " )
306
- toolbarItems![ 6 ] . isEnabled = isPumpOnboarded
307
- toolbarItems![ 6 ] . tintColor = UIColor . presetTintColor
308
319
toolbarItems![ 8 ] . accessibilityLabel = NSLocalizedString ( " Settings " , comment: " The label of the settings button " )
309
320
toolbarItems![ 8 ] . tintColor = UIColor . secondaryLabel
321
+
322
+ let favoriteFoodsEnabled = deviceManager. loopManager. settings. favoriteFoodsEnabled
323
+ if favoriteFoodsEnabled {
324
+ toolbarItems![ 2 ] = createFavoriteFoodsButtonItem ( )
325
+
326
+ let selected = ( preMealMode == true && preMealModeAllowed) || ( workoutMode == true && workoutModeAllowed)
327
+ toolbarItems![ 6 ] = createPresetsButtonItem ( selected: selected, isEnabled: preMealModeAllowed || workoutModeAllowed)
328
+ }
329
+ else {
330
+ toolbarItems![ 2 ] = createPreMealButtonItem ( selected: preMealMode == true && preMealModeAllowed, isEnabled: preMealModeAllowed)
331
+ toolbarItems![ 6 ] = createWorkoutButtonItem ( selected: workoutMode == true && workoutModeAllowed, isEnabled: workoutModeAllowed)
332
+ }
310
333
}
311
334
312
335
public var basalDeliveryState : PumpManagerStatus . BasalDeliveryState ? = nil {
@@ -837,35 +860,34 @@ final class StatusTableViewController: LoopChartsTableViewController {
837
860
guard oldValue != preMealMode else {
838
861
return
839
862
}
840
- // updatePreMealModeAvailability(automaticDosingEnabled: automaticDosingStatus.automaticDosingEnabled)
841
-
842
- toolbarItems![ 6 ] = createPresetsButtonItem ( )
843
-
844
- // updatePreMealModeAvailability(automaticDosingEnabled: automaticDosingStatus.automaticDosingEnabled)
863
+ updatePreMealModeAvailability ( automaticDosingEnabled: automaticDosingStatus. automaticDosingEnabled)
845
864
}
846
865
}
866
+ private lazy var preMealModeAllowed : Bool = {
867
+ onboardingManager. isComplete &&
868
+ ( automaticDosingStatus. automaticDosingEnabled || !FeatureFlags. simpleBolusCalculatorEnabled)
869
+ && deviceManager. loopManager. settings. preMealTargetRange != nil
870
+ } ( )
847
871
848
872
private func updatePreMealModeAvailability( automaticDosingEnabled: Bool ) {
849
- let allowed = onboardingManager. isComplete &&
873
+ preMealModeAllowed = onboardingManager. isComplete &&
850
874
( automaticDosingEnabled || !FeatureFlags. simpleBolusCalculatorEnabled)
851
875
&& deviceManager. loopManager. settings. preMealTargetRange != nil
876
+ updateToolbarItems ( )
852
877
}
853
878
854
879
private var workoutMode : Bool ? = nil {
855
880
didSet {
856
881
guard oldValue != workoutMode else {
857
882
return
858
883
}
859
- // if let workoutMode = workoutMode {
860
- // let allowed = onboardingManager.isComplete
861
- // toolbarItems![6] = createWorkoutButtonItem(selected: workoutMode, isEnabled: allowed)
862
- // } else {
863
- // toolbarItems![6].isEnabled = false
864
- // }
865
-
866
- toolbarItems![ 6 ] = createPresetsButtonItem ( )
884
+ workoutModeAllowed = workoutMode != nil && onboardingManager. isComplete
885
+ updateToolbarItems ( )
867
886
}
868
887
}
888
+ private lazy var workoutModeAllowed : Bool = {
889
+ workoutMode != nil && onboardingManager. isComplete
890
+ } ( )
869
891
870
892
// MARK: - Table view data source
871
893
@@ -1375,7 +1397,7 @@ final class StatusTableViewController: LoopChartsTableViewController {
1375
1397
hostingController. navigationItem. leftBarButtonItem = UIBarButtonItem ( barButtonSystemItem: . cancel, target: navigationWrapper, action: #selector( dismissWithAnimation) )
1376
1398
} else {
1377
1399
let carbEntryViewController = UIStoryboard ( name: " Main " , bundle: Bundle ( for: AppDelegate . self) ) . instantiateViewController ( withIdentifier: " CarbEntryViewController " ) as! CarbEntryViewController
1378
-
1400
+ carbEntryViewController . favoriteFoodsDelegate = self
1379
1401
carbEntryViewController. deviceManager = deviceManager
1380
1402
carbEntryViewController. defaultAbsorptionTimes = deviceManager. carbStore. defaultAbsorptionTimes
1381
1403
carbEntryViewController. preferredCarbUnit = deviceManager. carbStore. preferredUnit
@@ -1421,11 +1443,17 @@ final class StatusTableViewController: LoopChartsTableViewController {
1421
1443
deviceManager. analyticsServicesManager. didDisplayBolusScreen ( )
1422
1444
}
1423
1445
1424
- private func createPresetsButtonItem( ) -> UIBarButtonItem {
1425
- let selected = workoutMode == true || preMealMode == true
1426
-
1446
+ private func createFavoriteFoodsButtonItem( ) -> UIBarButtonItem {
1447
+ let item = UIBarButtonItem ( image: UIImage ( named: " favorite-foods " ) !, style: . plain, target: self , action: #selector( presentMealsScreen) )
1448
+ item. accessibilityLabel = NSLocalizedString ( " Favorite Foods " , comment: " The label of the favorite foods button " )
1449
+
1450
+ item. tintColor = UIColor . carbTintColor
1451
+
1452
+ return item
1453
+ }
1454
+
1455
+ private func createPresetsButtonItem( selected: Bool , isEnabled: Bool ) -> UIBarButtonItem {
1427
1456
let item = UIBarButtonItem ( image: UIImage . presetsImage ( selected: selected) !, style: . plain, target: self , action: #selector( onPresetsTapped) )
1428
- // MARK: - Needs localization
1429
1457
item. accessibilityLabel = NSLocalizedString ( " Presets " , comment: " The label of the presets mode toggle button " )
1430
1458
1431
1459
if selected {
@@ -1436,43 +1464,44 @@ final class StatusTableViewController: LoopChartsTableViewController {
1436
1464
}
1437
1465
1438
1466
item. tintColor = UIColor . presetTintColor
1467
+ item. isEnabled = isEnabled
1439
1468
1440
1469
return item
1441
1470
}
1442
1471
1443
- // private func createPreMealButtonItem(selected: Bool, isEnabled: Bool) -> UIBarButtonItem {
1444
- // let item = UIBarButtonItem(image: UIImage.preMealImage(selected: selected), style: .plain, target: self, action: #selector(togglePreMealMode(_:)))
1445
- // item.accessibilityLabel = NSLocalizedString("Pre-Meal Targets", comment: "The label of the pre-meal mode toggle button")
1446
- //
1447
- // if selected {
1448
- // item.accessibilityTraits.insert(.selected)
1449
- // item.accessibilityHint = NSLocalizedString("Disables", comment: "The action hint of the workout mode toggle button when enabled")
1450
- // } else {
1451
- // item.accessibilityHint = NSLocalizedString("Enables", comment: "The action hint of the workout mode toggle button when disabled")
1452
- // }
1453
- //
1454
- // item.tintColor = UIColor.carbTintColor
1455
- // item.isEnabled = isEnabled
1456
- //
1457
- // return item
1458
- // }
1472
+ private func createPreMealButtonItem( selected: Bool , isEnabled: Bool ) -> UIBarButtonItem {
1473
+ let item = UIBarButtonItem ( image: UIImage . preMealImage ( selected: selected) , style: . plain, target: self , action: #selector( togglePreMealMode ( _: ) ) )
1474
+ item. accessibilityLabel = NSLocalizedString ( " Pre-Meal Targets " , comment: " The label of the pre-meal mode toggle button " )
1475
+
1476
+ if selected {
1477
+ item. accessibilityTraits. insert ( . selected)
1478
+ item. accessibilityHint = NSLocalizedString ( " Disables " , comment: " The action hint of the workout mode toggle button when enabled " )
1479
+ } else {
1480
+ item. accessibilityHint = NSLocalizedString ( " Enables " , comment: " The action hint of the workout mode toggle button when disabled " )
1481
+ }
1482
+
1483
+ item. tintColor = UIColor . carbTintColor
1484
+ item. isEnabled = isEnabled
1485
+
1486
+ return item
1487
+ }
1459
1488
1460
- // private func createWorkoutButtonItem(selected: Bool, isEnabled: Bool) -> UIBarButtonItem {
1461
- // let item = UIBarButtonItem(image: UIImage.workoutImage(selected: selected), style: .plain, target: self, action: #selector(toggleWorkoutMode(_:)))
1462
- // item.accessibilityLabel = NSLocalizedString("Workout Targets", comment: "The label of the workout mode toggle button")
1463
- //
1464
- // if selected {
1465
- // item.accessibilityTraits.insert(.selected)
1466
- // item.accessibilityHint = NSLocalizedString("Disables", comment: "The action hint of the workout mode toggle button when enabled")
1467
- // } else {
1468
- // item.accessibilityHint = NSLocalizedString("Enables", comment: "The action hint of the workout mode toggle button when disabled")
1469
- // }
1470
- //
1471
- // item.tintColor = UIColor.glucoseTintColor
1472
- // item.isEnabled = isEnabled
1473
- //
1474
- // return item
1475
- // }
1489
+ private func createWorkoutButtonItem( selected: Bool , isEnabled: Bool ) -> UIBarButtonItem {
1490
+ let item = UIBarButtonItem ( image: UIImage . workoutImage ( selected: selected) , style: . plain, target: self , action: #selector( toggleWorkoutMode ( _: ) ) )
1491
+ item. accessibilityLabel = NSLocalizedString ( " Workout Targets " , comment: " The label of the workout mode toggle button " )
1492
+
1493
+ if selected {
1494
+ item. accessibilityTraits. insert ( . selected)
1495
+ item. accessibilityHint = NSLocalizedString ( " Disables " , comment: " The action hint of the workout mode toggle button when enabled " )
1496
+ } else {
1497
+ item. accessibilityHint = NSLocalizedString ( " Enables " , comment: " The action hint of the workout mode toggle button when disabled " )
1498
+ }
1499
+
1500
+ item. tintColor = UIColor . glucoseTintColor
1501
+ item. isEnabled = isEnabled
1502
+
1503
+ return item
1504
+ }
1476
1505
1477
1506
@objc func onPresetsTapped( ) {
1478
1507
if preMealMode == true {
@@ -1495,6 +1524,15 @@ final class StatusTableViewController: LoopChartsTableViewController {
1495
1524
}
1496
1525
1497
1526
func presentPresetAlertController( ) {
1527
+ guard workoutModeAllowed else {
1528
+ presentPreMealModeAlertController ( )
1529
+ return
1530
+ }
1531
+ guard preMealModeAllowed else {
1532
+ presentWorkoutModeAlertController ( )
1533
+ return
1534
+ }
1535
+
1498
1536
let vc = UIAlertController ( presetTypeSelectionHandler: { [ self ] presetType in
1499
1537
switch presetType {
1500
1538
case . preMeal:
@@ -1509,15 +1547,15 @@ final class StatusTableViewController: LoopChartsTableViewController {
1509
1547
present ( vc, animated: true , completion: nil )
1510
1548
}
1511
1549
1512
- // @IBAction func togglePreMealMode(_ sender: UIBarButtonItem) {
1513
- // if preMealMode == true {
1514
- // deviceManager.loopManager.mutateSettings { settings in
1515
- // settings.clearOverride(matching: .preMeal)
1516
- // }
1517
- // } else {
1518
- // presentPreMealModeAlertController()
1519
- // }
1520
- // }
1550
+ @IBAction func togglePreMealMode( _ sender: UIBarButtonItem ) {
1551
+ if preMealMode == true {
1552
+ deviceManager. loopManager. mutateSettings { settings in
1553
+ settings. clearOverride ( matching: . preMeal)
1554
+ }
1555
+ } else {
1556
+ presentPreMealModeAlertController ( )
1557
+ }
1558
+ }
1521
1559
1522
1560
func presentPreMealModeAlertController( ) {
1523
1561
let vc = UIAlertController ( premealDurationSelectionHandler: { duration in
@@ -1544,19 +1582,19 @@ final class StatusTableViewController: LoopChartsTableViewController {
1544
1582
present ( vc, animated: true , completion: nil )
1545
1583
}
1546
1584
1547
- // @IBAction func toggleWorkoutMode(_ sender: UIBarButtonItem) {
1548
- // if workoutMode == true {
1549
- // deviceManager.loopManager.mutateSettings { settings in
1550
- // settings.clearOverride()
1551
- // }
1552
- // } else {
1553
- // if FeatureFlags.sensitivityOverridesEnabled {
1554
- // performSegue(withIdentifier: OverrideSelectionViewController.className, sender: toolbarItems![6])
1555
- // } else {
1556
- // presentWorkoutModeAlertController()
1557
- // }
1558
- // }
1559
- // }
1585
+ @IBAction func toggleWorkoutMode( _ sender: UIBarButtonItem ) {
1586
+ if workoutMode == true {
1587
+ deviceManager. loopManager. mutateSettings { settings in
1588
+ settings. clearOverride ( )
1589
+ }
1590
+ } else {
1591
+ if FeatureFlags . sensitivityOverridesEnabled {
1592
+ performSegue ( withIdentifier: OverrideSelectionViewController . className, sender: toolbarItems![ 6 ] )
1593
+ } else {
1594
+ presentWorkoutModeAlertController ( )
1595
+ }
1596
+ }
1597
+ }
1560
1598
1561
1599
func presentWorkoutModeAlertController( ) {
1562
1600
let vc = UIAlertController ( workoutDurationSelectionHandler: { duration in
@@ -1675,7 +1713,7 @@ final class StatusTableViewController: LoopChartsTableViewController {
1675
1713
}
1676
1714
1677
1715
private func automaticDosingStatusChanged( _ automaticDosingEnabled: Bool ) {
1678
- // updatePreMealModeAvailability(automaticDosingEnabled: automaticDosingEnabled)
1716
+ updatePreMealModeAvailability ( automaticDosingEnabled: automaticDosingEnabled)
1679
1717
hudView? . loopCompletionHUD. loopIconClosed = automaticDosingEnabled
1680
1718
hudView? . loopCompletionHUD. closedLoopDisallowedLocalizedDescription = deviceManager. closedLoopDisallowedLocalizedDescription
1681
1719
}
@@ -2282,3 +2320,12 @@ extension StatusTableViewController: ServicesViewModelDelegate {
2282
2320
show ( settingsViewController, sender: self )
2283
2321
}
2284
2322
}
2323
+
2324
+ extension StatusTableViewController : FavoriteFoodsFeatureUnlockDelegate {
2325
+ func featureAvailabilityChanged( ) {
2326
+ deviceManager. loopManager. mutateSettings { settings in
2327
+ settings. favoriteFoodsEnabled. toggle ( )
2328
+ }
2329
+ self . updateToolbarItems ( )
2330
+ }
2331
+ }
0 commit comments