Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
494 commits
Select commit Hold shift + click to select a range
ce7c83f
[LOOP-5056] Presets Homepage Updates - Part 1 (#733)
Camji55 Dec 12, 2024
3a1144c
[COASTAL-1389] display status row until bolus is completed (#731)
nhamming Dec 13, 2024
6003381
[LOOP-5056] Presets Homepage Updates - Part 2 (#734)
Camji55 Dec 16, 2024
df1ff80
[LOOP-5056] Presets Homepage Updates - Part 3 (#735)
Camji55 Dec 17, 2024
f6a4cd0
[LOOOP-5175] assigning services view model delegate (#736)
nhamming Dec 18, 2024
19ca694
[LOOP-5056] Presets Homepage Bugs (#737)
Camji55 Dec 19, 2024
47c8d41
[LOOP-5056] Presets Homepage Bugs (#738)
Camji55 Dec 20, 2024
f2f82b2
[LOOP-5056] Presets Homepage Bugs (#738) (#739)
Camji55 Dec 20, 2024
39e7d86
[LOOP-5188] optional VC (#741)
nhamming Jan 8, 2025
c963f83
[LOOP-5055] Presets Training QA Feedback (#740)
Camji55 Jan 8, 2025
f1f01ed
reduce to single SettingsViewModel reference (#742)
nhamming Jan 10, 2025
44ec303
[LOOP-5184] fixing saving manual glucose entry (#743)
nhamming Jan 14, 2025
3d07070
[LOOP-5069] Presets Bugs (#744)
Camji55 Jan 14, 2025
1c0bfcc
[LOOP-5218] correctly assign isOnboardingCompleted (#745)
nhamming Jan 15, 2025
206018b
[LOOP-5195] explicitly set font and color (#746)
nhamming Jan 16, 2025
61daa83
[QAE-446] Add identifiers for new tests
Petr-Zywczok Jan 8, 2025
61b3f3d
[COASTAL-1449-LOOP-5216] if delivery states are not changed, still up…
nhamming Jan 22, 2025
349ae49
[COASTAL-900] correcting inset for margin (#750)
nhamming Jan 22, 2025
4f5d3f4
Merge pull request #747 from tidepool-org/petr/QAE-446-Add-identifier…
Petr-Zywczok Jan 23, 2025
26e3f1d
[LOOP-5161] Remove Pre-Meal Correction Range from Meal Bolus Recommen…
Camji55 Jan 23, 2025
a364437
[LOOP-5069] Fix Adjust Preset Duration Value When Already Adjusted (#…
Camji55 Jan 29, 2025
802506a
Loop-5057 Preset Editing (#752)
ps2 Feb 4, 2025
df37176
[LOOP-5232] zero out the bolus amount (#753)
nhamming Feb 6, 2025
65caad7
[LOOP-4760] vibrate for none critical alerts (#754)
nhamming Feb 8, 2025
e53d236
[LOOP-5247] match insulin layout (#755)
nhamming Feb 10, 2025
a333777
[QAE-451] Add identifier for Presets button
Petr-Zywczok Jan 29, 2025
2848945
Merge pull request #756 from tidepool-org/petr/QAE-451-Add-identifier…
Petr-Zywczok Feb 11, 2025
a9af9fa
[LOOP-4922] use the canceled bolus if provided (#758)
nhamming Feb 12, 2025
fa87178
[LOOP-5232] reset to 0 after recommendation updates and bolus amount …
nhamming Feb 12, 2025
c020f87
Updates from design review (#759)
ps2 Feb 14, 2025
db151eb
[LOOP-5167] cannot convert .infinity to string (#760)
nhamming Feb 19, 2025
4c88375
[LOOP-5271] display both warning and critical icons (#761)
nhamming Feb 20, 2025
322acea
Add guardrail excursion caption for correction range to preset edit v…
ps2 Feb 21, 2025
536d873
ensure all copy displays (#763)
nhamming Feb 26, 2025
183a0dd
Fix warning icon color on preset edit page (#764)
ps2 Mar 3, 2025
4fc3818
[LOOP-5281] update to basal state display in pump pill (#766)
nhamming Mar 7, 2025
51a8484
Update tip text for pre-meal range (#765)
ps2 Mar 11, 2025
7195b5d
[LOOP-5280] Preset Impact View in Sheet Detent (#768)
Camji55 Mar 12, 2025
00f06f9
[LOOP-5259] Homescreen Charts Update (#767)
Camji55 Mar 12, 2025
3fadc00
[LOOP-5290 & LOOP-5294] Fix Crashed When Tapping Glucose and COB Char…
Camji55 Mar 19, 2025
ae32067
[QAE-459] Add accessibility identifiers
Petr-Zywczok Mar 21, 2025
c6907fd
LOOP-5123 Create preset (#771)
ps2 Mar 21, 2025
e550589
Fix tests (#772)
ps2 Mar 21, 2025
dc1a6e9
[QAE-459] Add accessibility identifiers
Petr-Zywczok Mar 21, 2025
504fdb0
Merge branch 'petr/QAE-459-Test-IDs-CGM-Status-Bar' of github.com:tid…
Petr-Zywczok Mar 24, 2025
59714b5
Merge pull request #770 from tidepool-org/petr/QAE-459-Test-IDs-CGM-S…
Petr-Zywczok Mar 25, 2025
2c8f48e
[LOOP-5311] Fix withObservationTracking for LoopCircleView (#773)
Camji55 Mar 29, 2025
218eac3
LOOP-5233 Updates from design review (#774)
ps2 Apr 1, 2025
20f4c96
fix width of panel on review screen (#775)
ps2 Apr 1, 2025
a690172
Add UI warnings for insulin scale guardrails (#776)
ps2 Apr 3, 2025
bddd31b
[LOOP-5280] Display Glucose Preference by InternationalUnit (#777)
Camji55 Apr 7, 2025
82c9158
[QAE-466] Add test ID for Carb Entry view
Petr-Zywczok Mar 24, 2025
dc48e7a
Merge pull request #778 from tidepool-org/petr/QAE-466-Test-IDs-Carbs…
Petr-Zywczok Apr 8, 2025
0ca22b4
Adding Identifiers
Foscottl-TP Apr 10, 2025
ef2a239
Add instructions when user has not set insulin adjustment or correcti…
ps2 Apr 11, 2025
56a18df
Merge pull request #779 from tidepool-org/scott/QAE-456-Test-Automati…
Foscottl-TP Apr 11, 2025
79f5752
Add correction range info screen (#781)
ps2 Apr 11, 2025
2d84db8
Fix capitalization (#782)
ps2 Apr 16, 2025
5e85511
[QAE-484] Changed ID format and Added Bolus field
Foscottl-TP Apr 11, 2025
d3ac177
[QAE-484] Changed ID format and Added Bolus field
Foscottl-TP Apr 11, 2025
94b8d31
[QAE-483] Add test IDs for Carbs & Bolus
Petr-Zywczok Apr 18, 2025
c9eac38
[LOOP-5301] Ignore Keyboard Inset StatusTableView (#785)
Camji55 Apr 23, 2025
61fd696
Merge pull request #787 from tidepool-org/petr/QAE-483-Carbs-Bolus-Te…
Petr-Zywczok Apr 23, 2025
c6c83c8
Merge pull request #784 from tidepool-org/scott/QAE-456-TestAutomatio…
Foscottl-TP Apr 24, 2025
d6020bc
LOOP-5315 Edit Custom Presets (#783)
ps2 Apr 24, 2025
e2f8777
Fix trailing comma (#789)
ps2 Apr 24, 2025
7c4dc07
[QAE-452] Add accessibility identifiers
pragnasadhu Apr 24, 2025
1009885
Merge pull request #788 from tidepool-org/Pragna/QAE-452-Identifiers
Petr-Zywczok Apr 25, 2025
b66912e
Add guardrails for custom preset target ranges (#792)
ps2 May 7, 2025
7e4093d
Use NavigationPath to workaround iOS 17 bug (#791)
ps2 May 7, 2025
95cab74
[QAE-486] IDs for Fingerstick Glucose field and button
Foscottl-TP May 7, 2025
fd789a8
LOOP-5218 Treatment arrow (#794)
ps2 May 15, 2025
c111439
Fix button text (#795)
ps2 May 19, 2025
295694c
Remove adult/child insulin model selection (#797)
ps2 May 29, 2025
270b533
LOOP-5315 Edit carbs fixes (#796)
ps2 May 29, 2025
221dde0
Merge pull request #793 from tidepool-org/scott/QAE-486-AutomateTest-…
Foscottl-TP Jun 4, 2025
08f45c7
[LOOP-5295] decisionId on DoseEntry and PersistedPumpEvent (#790)
Camji55 Jun 6, 2025
2ad62a9
[LOOP-5295] crashrecoverymanager fix (#800)
Camji55 Jun 6, 2025
2fb1fde
Update guidance colors for status table (#799)
ps2 Jun 6, 2025
6008346
[QAE-487] Add accessibility identifiers
Petr-Zywczok May 28, 2025
5a41dd7
[QAE-487] Add accessibility identifiers
Petr-Zywczok Jun 3, 2025
892ea8f
Preset correction guardrail for lower bound stays the same regardless…
ps2 Jun 10, 2025
e0f73cd
LOOP-5352 Fix guardrail colors for create preset summary (#801)
ps2 Jun 10, 2025
9fbb30c
Merge pull request #798 from tidepool-org/petr/QAE-487-Add-accessibil…
Foscottl-TP Jun 13, 2025
9141df2
[LOOP-5295] enactedTempBasal updates to StoredDosingDecision (#804)
Camji55 Jun 20, 2025
1187c6a
[LOOP-5259] StatusTableView Toolbar Background Update (#805)
Camji55 Jun 20, 2025
8d7a7df
[LOOP-5259] Dose Chart Icon Updates (#806)
Camji55 Jun 20, 2025
c2bd2e7
[LOOP-5328] Fix Deeplinking and Widgets (#786)
Camji55 Jul 17, 2025
9366353
[LOOP-5295] Insulin Delivery Log (#807)
Camji55 Jul 17, 2025
bd31ab0
LOOP-5235 Enable scheduled presets (#808)
ps2 Jul 29, 2025
1cf40a9
LOOP-5170 Fix inappropriate overlay of override target history (#809)
ps2 Jul 31, 2025
d34e491
Collapse picker when indefinite duration selected (#810)
ps2 Jul 31, 2025
c86f5f9
Cleanup (#811)
ps2 Aug 1, 2025
5c83657
[LOOP-5389] Fetching efficiencies for delivery log (#812)
Camji55 Aug 1, 2025
e7a36d8
[LOOP-5236] Preset Card States (#813)
Camji55 Aug 8, 2025
fc7c0db
[LOOP-5237] Bolusing with a preset (#814)
Camji55 Aug 11, 2025
d63ea34
LOOP-5314 FeatureFlag to limit strategy to automatic bolus (#815)
ps2 Aug 15, 2025
e997a0c
LOOP-5235 Fixes/updates for scheduled presets (#816)
ps2 Aug 20, 2025
9966b65
Add preset history to issue report (#817)
ps2 Aug 20, 2025
352a049
[LOOP-5405] Activity Presets Core (#818)
Camji55 Aug 22, 2025
cd450df
[LOOP-5402 & LOOP-5393] Fix status overview labeling for increased an…
Camji55 Aug 25, 2025
20c5b03
[LOOP-5405 & LOOP-5420] Update Activity Preset Default Insulin Sensit…
Camji55 Aug 26, 2025
b64285c
[LOOP-5405] Add Unmodified Badge to PresetDetentView (#821)
Camji55 Aug 27, 2025
7a51b8b
[LOOP-5417] Presets Training Part 1
Camji55 Aug 29, 2025
887064f
Do not truncate non-premeal overrides when meal bolusing (#823)
ps2 Sep 2, 2025
33e3a29
[LOOP-5432] Active Preset Banner on CarbEntryView (#825)
Camji55 Sep 10, 2025
410f2ce
[LOOP-5418] Presets Training Part 2 (#824)
Camji55 Sep 10, 2025
c8ae68a
[LOOP-5393 & LOOP-5418] Use correct current basal rate in Insulin Del…
Camji55 Sep 16, 2025
8bddda1
Automatic Xcode Signing (#829)
Camji55 Sep 16, 2025
1b2e13d
Fix bolus notification (#830)
ps2 Sep 24, 2025
d213403
LOOP-5327 - Presets Watch Updates (#828)
ps2 Sep 24, 2025
09016dd
[LOOP-5404] Replace assertionFailure with os.log (#832)
Camji55 Sep 25, 2025
14eaa67
Fix testflight build upload error (#831)
ps2 Sep 25, 2025
7606db1
LOOP-5327 - fix another upload issue (#833)
ps2 Sep 29, 2025
96f3bd1
LOOP-5460 Fix repeat options saving on new preset creation (#834)
ps2 Oct 2, 2025
65f706d
Bring in fixes from DIY for bolus entry, and also fix safe area layou…
ps2 Oct 3, 2025
d7146a9
LOOP-5327 Add icon to watch presets detail view (#837)
ps2 Oct 6, 2025
70e5ee8
Add warning info text for insulin needs guardrails (#838)
ps2 Oct 6, 2025
58807a2
LOOP-5435 fix bolus preview forecast (#840)
ps2 Oct 7, 2025
00608fd
Fix tests for bolus forecast preview updates (#841)
ps2 Oct 7, 2025
7d2affa
[LOOP-5452-5493] Automation icon update (#839)
nhamming Oct 9, 2025
2ab7dfa
[LOOP-5452] adding logic for device inoperable display in LoopStateVi…
nhamming Oct 15, 2025
a1fb4fa
[LOOP-5452] loop status fixes (#843)
nhamming Oct 16, 2025
d6d4c29
[LOOP-5452] updating unit tests (#844)
nhamming Oct 16, 2025
d049a27
[LOOP-5509] removing automaticDosingStatus (#845)
nhamming Oct 20, 2025
c1e7342
[LOOP-5509] correcting unit tests (#847)
nhamming Oct 20, 2025
fbc690d
[LOOP-5458] adding new line to modal copy (#850)
nhamming Oct 21, 2025
9f31161
LOOP-5495 ios26 fixes (#848)
ps2 Oct 21, 2025
ae55e6c
LOOP-5430 (#846)
ps2 Oct 21, 2025
c9c8f6c
[LOOP-5515] truncate time ago for loop status caption (#849)
nhamming Oct 21, 2025
b670495
[LOOP-5396-5484] corrected copy (#852)
nhamming Oct 24, 2025
e31c3c2
[LOOP-5496] automation modal (#851)
nhamming Oct 24, 2025
49311cd
[LOOP-5496] updated copy (#853)
nhamming Oct 28, 2025
66bba00
[LOOP-5437] Update banner style (#854)
nhamming Oct 28, 2025
7596f45
[LOOP-5517] added warning bounds to guardrails and updated preset gua…
nhamming Oct 29, 2025
3f212ec
[LOOP-5533] corrected display of in-app alert for critical alert disa…
nhamming Oct 30, 2025
e89d847
[LOOP-5496] adding link to settings (#856)
nhamming Oct 31, 2025
8223613
[LOOP-5486] added indefinite preset reminder (#857)
nhamming Oct 31, 2025
8d3171c
LOOP-5439 high insulin needs preset mitigation (#859)
ps2 Nov 3, 2025
9f0a6e3
[LOOP-5428-5496] corrected background color (#860)
nhamming Nov 7, 2025
a209d4b
[LOOP-5550] unschedule deleted preset (#861)
nhamming Nov 7, 2025
26b02f3
[LOOP-5426] can schedule activity presets (#863)
nhamming Nov 10, 2025
b34d14a
[LOOP-5453] Presets Training Updates (#862)
Camji55 Nov 10, 2025
c043ecf
[LOOP-5545] retract alert when preset starts (#864)
nhamming Nov 12, 2025
0d92064
[LOOP-5550] Display confirm delete preset alert (#865)
nhamming Nov 12, 2025
55d9a83
[LOOP-5425] added automated caption (#866)
nhamming Nov 13, 2025
fd62aa2
[LOOP-5500] Show "No Delivery" in Insulin Delivery Log During Pump Er…
Camji55 Nov 18, 2025
422b34e
LOOP-5439 - High Insulin Needs Preset Mitigation Bug Fixes (#868)
ps2 Nov 19, 2025
d54a4a8
Update StoredDataAlgorithmInput for AlgorithmInput protocol changes (…
ps2 Nov 19, 2025
0212f30
Only using piecewise linear carb model in Loop now (#870)
ps2 Nov 19, 2025
63b3b03
[LOOP-5542] initiating a bolus needs to state auto or not (#871)
nhamming Nov 21, 2025
ccb7fcd
[LOOP-5421] check that the delivered bolus is different from the prev…
nhamming Nov 24, 2025
ade7d62
Fix issues setting start date for scheduled presets (#873)
ps2 Nov 24, 2025
aea3372
[LOOP-5577] checking before deallocating (#874)
nhamming Nov 26, 2025
620daea
[LOOP-5496-5600] disable pre-meal preset when in open loop (#875)
nhamming Nov 28, 2025
0193c55
[LOOP-5496-5625] display programmed details & status modal update (#877)
nhamming Dec 5, 2025
6cb0a89
Fix truncated units on watch display of presets (#876)
ps2 Dec 9, 2025
89cdc5c
LOOP-5617 Fix repeat day reset on start day change (#878)
ps2 Dec 10, 2025
e385dc3
[LOOP-5639-5640] preset training fixes (#879)
nhamming Dec 16, 2025
a5629bd
[LOOP-5613] Update Watch with Settings and Automation Changes (#881)
Camji55 Dec 17, 2025
13c2c53
[LOOP-5561] add preset schedule footer (#880)
nhamming Dec 18, 2025
50d5e8d
[LOOP-5676] Fixed AlertStore.purge(before:) crash (#882)
Camji55 Jan 5, 2026
0be4495
[LOOP-5329] when a single use preset ends it cannot start again (#883)
nhamming Jan 8, 2026
868a8a7
[LOP-5558] round basal rate when displaying preset settings impact (#…
nhamming Jan 8, 2026
184ea75
[LOOP-5558] rounding basal rates consistently (#885)
nhamming Jan 8, 2026
c6be386
[LOOP-5615] refactored display of last bolus UI element (#886)
nhamming Jan 12, 2026
d4363b1
[LOOP-5691] type needs to be bolus (#887)
nhamming Jan 12, 2026
53c37b5
[LOOP-5699] correcting single use preset filter (#888)
nhamming Jan 12, 2026
7fb3be6
[LOOP-5615] reverted to single text view (#889)
nhamming Jan 14, 2026
2cc9e27
[LOOP-5558] round input basal to deliverable amount when determining …
nhamming Jan 15, 2026
c7bb0d9
Add feature flag for apidra (#891)
ps2 Jan 15, 2026
a5b30fb
[LOOP-5496] made loop completion modal viewModel observable (#892)
nhamming Jan 22, 2026
e17d004
[LOOP-5707] Migrate Presets to LoopKit (#893)
Camji55 Jan 26, 2026
b81e0c6
[LOOP-5710] removed asserts from testflight builds (#895)
nhamming Jan 28, 2026
04913da
[LOOP-5677] fix for crash (#896)
nhamming Jan 28, 2026
6ad659a
[LOOP-5582, LOOP-5613, LOOP-5711 & LOOP-5713] Status Icon and Toolbar…
Camji55 Jan 29, 2026
81622c5
[LOOP-5582] Add Toolbar Spacers to Ensure Proper iOS 26 spacing (#897)
Camji55 Feb 2, 2026
eadcf89
Temporarily Disable Liquid Glass (#898)
Camji55 Feb 5, 2026
4a0349e
[LOOP-5732] signal loss display device issue state (#899)
nhamming Feb 5, 2026
b9cdb71
[LOOP-5734] Remove Pulsing Animation Logic for Watch Loop Status Icon…
Camji55 Feb 5, 2026
a1ff6a3
[LOOP-5751] add all the toolbar items as a group (#902)
nhamming Feb 9, 2026
96a1f29
Fix race condition when acknowledging preset alert from watch (#901)
ps2 Feb 9, 2026
952f543
Update detection to handle 2 readings with delta > 3mg/dl/min (#903)
ps2 Feb 20, 2026
4d1b013
[LOOP-5737-5778] use last glucose data date when loop is open (#904)
nhamming Feb 24, 2026
6759c38
[LOOP-5773] style updates for mute all app sounds (#905)
nhamming Feb 26, 2026
3cf34a6
[LOOP-5774] updated preset training UI (#906)
nhamming Feb 26, 2026
f84741a
[LOOP-5764] wait for onboarding to be completed before allowing use o…
nhamming Feb 26, 2026
1e7ba0a
Fix glucose rising notice to display on average of last three samples…
ps2 Feb 27, 2026
2b10f8e
[LOOP-5752] Fix Delayed Notification Alert (#908)
Camji55 Feb 27, 2026
2fcd705
[LOOP-5787-5496] updated loop status when closed loop is off and ther…
nhamming Mar 4, 2026
dab455e
[LOOP-5707] Add missing loopDataManager.dosingStrategySelectionEnable…
Camji55 Mar 5, 2026
6bc63f1
[LOOP-5774] minor corrections to preset training UI (#912)
nhamming Mar 9, 2026
2cdbddf
Merge tidepool/dev into tidepool-sync/2026-03-10
Mar 10, 2026
7383a6e
Resolve LoopDataManager concurrency migration (amend Loop sync)
Mar 10, 2026
c0929ff
Fix HKUnit → LoopUnit in GlucoseLiveActivityConfiguration (LoopAlgori…
Mar 11, 2026
54c0b7d
Fix dangling DerivedAssets pbxproj ref in WatchApp Resources phase (c…
Mar 11, 2026
e1823a1
Add missing LoopAlgorithm import to GlucoseLiveActivityConfiguration …
Mar 11, 2026
77bed03
Fix merge-artifact brace imbalances in LoopDataManager and DeviceData…
Mar 11, 2026
6d9c954
Fix SettingsView.swift brace imbalances from merge
Mar 11, 2026
2fb43c9
Add missing LoopCore import to LiveActivityManager (needed for LiveAc…
Mar 11, 2026
a71fa40
Fix LiveActivityManager: HKUnit→LoopUnit, remove callback IOB API, re…
Mar 11, 2026
af749a7
Fix LiveActivityManager: add LoopAlgorithm import, async getGlucoseSa…
Mar 11, 2026
1e05d32
Fix ChartAxisGenerator: HKUnit→LoopUnit, add LoopAlgorithm import
Mar 11, 2026
dc972e1
Fix LoopDataManager: add missing overrideIntentObserver declaration, …
Mar 11, 2026
398dd28
Fix LoopUnit/HKUnit conversion in LiveActivityManager and ChartAxisGe…
Mar 12, 2026
79eee6d
Remove removed TherapySettingsViewModel params: sensitivityOverridesE…
Mar 12, 2026
71e06d6
Fix LoopDataManager init: move stored property assignments before ove…
loopkitdev Mar 12, 2026
d2ed561
[LOOP-5795] determine activeInsulin in computeSimpleBolusRecommendati…
nhamming Mar 13, 2026
8edd044
[LOOP-5403] Presets Performance History (#914)
Camji55 Mar 16, 2026
26dabaa
[LOOP-5639] when training is not completed, color is gray and tapping…
nhamming Mar 17, 2026
ca464a5
[LOOP-5813] Media Player (#917)
Camji55 Mar 20, 2026
cf40c9e
[LOOP-5403] Fix Average Glucose Calculation in Preset Performance His…
Camji55 Mar 24, 2026
eedaf78
[LOOP-5863] add an option to delete all testing data (#919)
nhamming Mar 27, 2026
520cf3e
Merge pull request #2414 from LoopKit/translations
marionbarker Mar 30, 2026
8e35b8f
[LOOP-5353 & LOOP-5870] Inject colorPallete (#920)
Camji55 Apr 3, 2026
cba8a23
[LOOP-5826] Preset Onboarding References (#921)
Camji55 Apr 3, 2026
15b64fc
Update string catalogs from Xcode build after Tidepool sync
loopkitdev Apr 9, 2026
8b1702b
Merge remote-tracking branch 'upstream/dev' into tidepool-sync/2026-0…
loopkitdev Apr 9, 2026
148dcfd
Fix duplicate Deliver button on bolus screen
loopkitdev Apr 9, 2026
651048f
Restore manual dose entry on insulin delivery screen
loopkitdev Apr 9, 2026
d77b178
[LOOP-1114] Wire MockSupport loading via SupportProviding (#922)
ps2 Apr 23, 2026
ac2040c
[LOOP-5866] Fix Suspended Delivery Handling in Delivery Log (#923)
Camji55 Apr 29, 2026
0214f92
[LOOP-1114] Add blocking modal and open loop enforcement for required…
ps2 Apr 30, 2026
67c7fe1
[LOOP-5878, LOOP-5797, LOOP-5772 & LOOP-5771] Remove Duplicate Refere…
Camji55 Apr 30, 2026
642d5a2
[LOOP-5867] Move LoopAlgorithm operation in updateDisplayState off th…
Camji55 Apr 30, 2026
79adfea
Updates to wording and layout tweak for Required Software Update (#927)
ps2 May 5, 2026
0e877ec
Merge remote-tracking branch 'origin/dev' into tidepool-sync/2026-05-11
ps2 May 11, 2026
761eb48
Merge tidepool/dev into tidepool-sync/2026-05-11
ps2 May 11, 2026
60c30bf
Merge remote-tracking branch 'origin/dev' into tidepool-sync/2026-05-11
ps2 May 11, 2026
36eba3c
LoopDataManager: force post-dose updateRemoteRecommendation
ps2 May 11, 2026
e500280
LiveActivityManagementView: use standard SwiftUI Picker
ps2 May 11, 2026
522f8c1
Live Activity: render preset SF Symbol instead of Optional debug text
ps2 May 11, 2026
6f848c7
Live Activity: move preset label to top-leading so it doesn't overlap…
ps2 May 11, 2026
72dc623
Live Activity: anchor preset label inside the plot area (top-trailing)
ps2 May 11, 2026
830af33
Settings: promote Live Activity to top-level menu under Alert Management
ps2 May 11, 2026
ce1935b
LoopAppManager: force-unwrap watch/statusExtension managers in diagno…
ps2 May 16, 2026
4eea0b2
Restore predicted carb-effect line on ICE and food-insight charts
May 16, 2026
3072541
LoopAppManager: restore submodule SHAs in diagnostic report
May 16, 2026
52564fc
Label manually-entered boluses as External Insulin and support deletion
May 19, 2026
3f4fd60
Add External Insulin strings to catalog
May 19, 2026
05d2f4a
PresetsTrainingContent: fix Text wrapping with fixedSize
May 19, 2026
e7a1e21
PresetsView: remove Performance History entry point
May 19, 2026
1119574
Merge remote-tracking branch 'origin/dev' into tidepool-sync/2026-05-11
May 20, 2026
fd313d0
WatchApp: drop WKWatchKitApp, keep WKApplication (fix watch embedding)
May 20, 2026
a81435c
Add Apple Health access status screen to Settings
May 20, 2026
8a7dac5
Allow deleting any dose from dose details behind a feature flag
May 21, 2026
1997657
FeatureFlags: enable doseDeletion by default (disable via DOSE_DELETI…
May 21, 2026
c876c56
Clear stale Last Bolus when the dose is gone
May 21, 2026
a3c9934
Don't allow deleting in-progress (mutable) doses
May 21, 2026
82193f4
Restore localized Intents.strings file references (fix ITMS-90626)
May 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//
// Comparable.swift
// WatchApp Extension
// Loop
//
// Created by Michael Pangburn on 3/27/20.
// Copyright © 2020 LoopKit Authors. All rights reserved.
Expand Down
10 changes: 5 additions & 5 deletions Common/Extensions/GlucoseRangeSchedule.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@
//

import LoopKit
import HealthKit
import LoopAlgorithm


extension GlucoseRangeSchedule {
func minQuantity(at date: Date) -> HKQuantity {
return HKQuantity(unit: unit, doubleValue: value(at: date).minValue)
func minQuantity(at date: Date) -> LoopQuantity {
return LoopQuantity(unit: unit, doubleValue: value(at: date).minValue)
}
func maxQuantity(at date: Date) -> HKQuantity {
return HKQuantity(unit: unit, doubleValue: value(at: date).maxValue)
func maxQuantity(at date: Date) -> LoopQuantity {
return LoopQuantity(unit: unit, doubleValue: value(at: date).maxValue)
}
}
18 changes: 2 additions & 16 deletions Common/Extensions/HKUnit.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@
// Copyright © 2016 LoopKit Authors. All rights reserved.
//

import HealthKit
import LoopAlgorithm
import LoopCore

// Code in this extension is duplicated from:
// https://github.com/LoopKit/LoopKit/blob/master/LoopKit/HKUnit.swift
// to avoid pulling in the LoopKit extension since it's not extension-API safe.
extension HKUnit {
extension LoopUnit {
// A formatting helper for determining the preferred decimal style for a given unit
var preferredFractionDigits: Int {
if self == .milligramsPerDeciliter {
Expand All @@ -22,20 +22,6 @@ extension HKUnit {
}
}

var localizedShortUnitString: String {
if self == HKUnit.millimolesPerLiter {
return NSLocalizedString("mmol/L", comment: "The short unit display string for millimoles of glucose per liter")
} else if self == .milligramsPerDeciliter {
return NSLocalizedString("mg/dL", comment: "The short unit display string for milligrams of glucose per decilter")
} else if self == .internationalUnit() {
return NSLocalizedString("U", comment: "The short unit display string for international units of insulin")
} else if self == .gram() {
return NSLocalizedString("g", comment: "The short unit display string for grams")
} else {
return String(describing: self)
}
}

/// The smallest value expected to be visible on a chart
var chartableIncrement: Double {
if self == .milligramsPerDeciliter {
Expand Down
22 changes: 22 additions & 0 deletions Common/Extensions/NSBundle.swift
Original file line number Diff line number Diff line change
Expand Up @@ -60,5 +60,27 @@ extension Bundle {
}
return .days(localCacheDurationDays)
}

var hostIdentifier: String {
var identifier = bundleIdentifier ?? "com.loopkit.Loop"
let components = identifier.components(separatedBy: ".")
// DIY Loop has bundle identifiers like com.UY653SP37Q.loopkit.Loop
if components[2] == "loopkit" && components[3] == "Loop" {
identifier = "com.loopkit.Loop"
}
return identifier
}

var hostVersion: String {
var semanticVersion = shortVersionString

while semanticVersion.split(separator: ".").count < 3 {
semanticVersion += ".0"
}

semanticVersion += "+\(Bundle.main.version)"

return semanticVersion
}
}

8 changes: 4 additions & 4 deletions Common/Extensions/NumberFormatter.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@
//

import Foundation
import HealthKit
import LoopAlgorithm


extension NumberFormatter {
static func glucoseFormatter(for unit: HKUnit) -> NumberFormatter {
static func glucoseFormatter(for unit: LoopUnit) -> NumberFormatter {
let numberFormatter = NumberFormatter()

numberFormatter.numberStyle = .decimal
Expand All @@ -24,11 +24,11 @@ extension NumberFormatter {
return string(from: NSNumber(value: number))
}

func string(from quantity: HKQuantity, unit: HKUnit) -> String? {
func string(from quantity: LoopQuantity, unit: LoopUnit) -> String? {
return string(from: quantity.doubleValue(for: unit), unit: unit)
}

func string(from number: Double, unit: HKUnit) -> String? {
func string(from number: Double, unit: LoopUnit) -> String? {
return string(from: number, unit: unit.localizedShortUnitString)
}

Expand Down
9 changes: 4 additions & 5 deletions Common/Extensions/SampleValue.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,14 @@
// Copyright © 2018 LoopKit Authors. All rights reserved.
//

import HealthKit
import LoopKit

import LoopAlgorithm

extension Collection where Element == SampleValue {
/// O(n)
var quantityRange: ClosedRange<HKQuantity>? {
var lowest: HKQuantity?
var highest: HKQuantity?
var quantityRange: ClosedRange<LoopQuantity>? {
var lowest: LoopQuantity?
var highest: LoopQuantity?

for sample in self {
if let l = lowest {
Expand Down
1 change: 1 addition & 0 deletions Common/Extensions/UserDefaults+LoopIntents.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
//

import Foundation
import LoopCore

extension UserDefaults {

Expand Down
65 changes: 32 additions & 33 deletions Common/FeatureFlags.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,42 +11,41 @@ import Foundation
let FeatureFlags = FeatureFlagConfiguration()

struct FeatureFlagConfiguration: Decodable {
let automaticBolusEnabled: Bool
let dosingStrategySelectionEnabled: Bool
let cgmManagerCategorizeManualGlucoseRangeEnabled: Bool
let criticalAlertsEnabled: Bool
let entryDeletionEnabled: Bool
let fiaspInsulinModelEnabled: Bool
let lyumjevInsulinModelEnabled: Bool
let afrezzaInsulinModelEnabled: Bool
let apidraInsulinModelEnabled: Bool
let includeServicesInSettingsEnabled: Bool
let manualDoseEntryEnabled: Bool
let doseDeletionEnabled: Bool
let insulinDeliveryReservoirViewEnabled: Bool
let mockTherapySettingsEnabled: Bool
let nonlinearCarbModelEnabled: Bool
let observeHealthKitCarbSamplesFromOtherApps: Bool
let observeHealthKitDoseSamplesFromOtherApps: Bool
let observeHealthKitGlucoseSamplesFromOtherApps: Bool
let remoteCommandsEnabled: Bool
let predictedGlucoseChartClampEnabled: Bool
let scenariosEnabled: Bool
let sensitivityOverridesEnabled: Bool
let showEventualBloodGlucoseOnWatchEnabled: Bool
let simulatedCoreDataEnabled: Bool
let siriEnabled: Bool
let simpleBolusCalculatorEnabled: Bool
let usePositiveMomentumAndRCForManualBoluses: Bool
let adultChildInsulinModelSelectionEnabled: Bool
let profileExpirationSettingsViewEnabled: Bool
let missedMealNotifications: Bool
let allowAlgorithmExperiments: Bool

let isInvestigationalDevice: Bool

fileprivate init() {
// Swift compiler config is inverse, since the default state is enabled.
#if AUTOMATIC_BOLUS_DISABLED
self.automaticBolusEnabled = false
#if DOSING_STRATEGY_SELECTION_DISABLED
self.dosingStrategySelectionEnabled = false
#else
self.automaticBolusEnabled = true
self.dosingStrategySelectionEnabled = true
#endif

#if CGM_MANAGER_CATEGORIZE_GLUCOSE_RANGE_ENABLED
Expand All @@ -67,13 +66,6 @@ struct FeatureFlagConfiguration: Decodable {
#else
self.entryDeletionEnabled = true
#endif

// Swift compiler config is inverse, since the default state is enabled.
#if FEATURE_OVERRIDES_DISABLED
self.sensitivityOverridesEnabled = false
#else
self.sensitivityOverridesEnabled = true
#endif

// Swift compiler config is inverse, since the default state is enabled.
#if FIASP_INSULIN_MODEL_DISABLED
Expand All @@ -82,6 +74,13 @@ struct FeatureFlagConfiguration: Decodable {
self.fiaspInsulinModelEnabled = true
#endif

// Swift compiler config is inverse, since the default state is enabled.
#if APIDRA_INSULIN_MODEL_DISABLED
self.apidraInsulinModelEnabled = false
#else
self.apidraInsulinModelEnabled = true
#endif

// Swift compiler config is inverse, since the default state is enabled.
#if LYUMJEV_INSULIN_MODEL_DISABLED
self.lyumjevInsulinModelEnabled = false
Expand Down Expand Up @@ -110,6 +109,13 @@ struct FeatureFlagConfiguration: Decodable {
self.manualDoseEntryEnabled = true
#endif

// Swift compiler config is inverse, since the default state is enabled.
#if DOSE_DELETION_DISABLED
self.doseDeletionEnabled = false
#else
self.doseDeletionEnabled = true
#endif

// Swift compiler config is inverse, since the default state is enabled.
#if INSULIN_DELIVERY_RESERVOIR_VIEW_DISABLED
self.insulinDeliveryReservoirViewEnabled = false
Expand All @@ -123,13 +129,6 @@ struct FeatureFlagConfiguration: Decodable {
self.mockTherapySettingsEnabled = false
#endif

// Swift compiler config is inverse, since the default state is enabled.
#if NONLINEAR_CARB_MODEL_DISABLED
self.nonlinearCarbModelEnabled = false
#else
self.nonlinearCarbModelEnabled = true
#endif

#if OBSERVE_HEALTH_KIT_CARB_SAMPLES_FROM_OTHER_APPS_ENABLED
self.observeHealthKitCarbSamplesFromOtherApps = true
#else
Expand Down Expand Up @@ -207,12 +206,6 @@ struct FeatureFlagConfiguration: Decodable {
self.usePositiveMomentumAndRCForManualBoluses = true
#endif

#if ADULT_CHILD_INSULIN_MODEL_SELECTION_ENABLED
self.adultChildInsulinModelSelectionEnabled = true
#else
self.adultChildInsulinModelSelectionEnabled = false
#endif

// ProfileExpirationSettingsView is inverse, since the default state is enabled.
#if PROFILE_EXPIRATION_SETTINGS_VIEW_DISABLED
self.profileExpirationSettingsViewEnabled = false
Expand All @@ -232,6 +225,12 @@ struct FeatureFlagConfiguration: Decodable {
#else
self.allowAlgorithmExperiments = false
#endif

#if INVESTIGATIONAL_DEVICE
self.isInvestigationalDevice = true
#else
self.isInvestigationalDevice = false
#endif
}
}

Expand All @@ -245,29 +244,29 @@ extension FeatureFlagConfiguration : CustomDebugStringConvertible {
"* fiaspInsulinModelEnabled: \(fiaspInsulinModelEnabled)",
"* lyumjevInsulinModelEnabled: \(lyumjevInsulinModelEnabled)",
"* afrezzaInsulinModelEnabled: \(afrezzaInsulinModelEnabled)",
"* apidraInsulinModelEnabled: \(apidraInsulinModelEnabled)",
"* includeServicesInSettingsEnabled: \(includeServicesInSettingsEnabled)",
"* mockTherapySettingsEnabled: \(mockTherapySettingsEnabled)",
"* nonlinearCarbModelEnabled: \(nonlinearCarbModelEnabled)",
"* observeHealthKitCarbSamplesFromOtherApps: \(observeHealthKitCarbSamplesFromOtherApps)",
"* observeHealthKitDoseSamplesFromOtherApps: \(observeHealthKitDoseSamplesFromOtherApps)",
"* observeHealthKitGlucoseSamplesFromOtherApps: \(observeHealthKitGlucoseSamplesFromOtherApps)",
"* predictedGlucoseChartClampEnabled: \(predictedGlucoseChartClampEnabled)",
"* remoteCommandsEnabled: \(remoteCommandsEnabled)",
"* scenariosEnabled: \(scenariosEnabled)",
"* sensitivityOverridesEnabled: \(sensitivityOverridesEnabled)",
"* showEventualBloodGlucoseOnWatchEnabled: \(showEventualBloodGlucoseOnWatchEnabled)",
"* simulatedCoreDataEnabled: \(simulatedCoreDataEnabled)",
"* siriEnabled: \(siriEnabled)",
"* automaticBolusEnabled: \(automaticBolusEnabled)",
"* dosingStrategySelectionEnabled: \(dosingStrategySelectionEnabled)",
"* manualDoseEntryEnabled: \(manualDoseEntryEnabled)",
"* doseDeletionEnabled: \(doseDeletionEnabled)",
"* allowDebugFeatures: \(allowDebugFeatures)",
"* simpleBolusCalculatorEnabled: \(simpleBolusCalculatorEnabled)",
"* usePositiveMomentumAndRCForManualBoluses: \(usePositiveMomentumAndRCForManualBoluses)",
"* adultChildInsulinModelSelectionEnabled: \(adultChildInsulinModelSelectionEnabled)",
"* profileExpirationSettingsViewEnabled: \(profileExpirationSettingsViewEnabled)",
"* missedMealNotifications: \(missedMealNotifications)",
"* allowAlgorithmExperiments: \(allowAlgorithmExperiments)",
"* allowExperimentalFeatures: \(allowExperimentalFeatures)"
"* allowExperimentalFeatures: \(allowExperimentalFeatures)",
"* isInvestigationalDevice: \(isInvestigationalDevice)"
].joined(separator: "\n")
}
}
Expand Down
41 changes: 0 additions & 41 deletions Common/Models/LoopSettingsUserInfo.swift

This file was deleted.

4 changes: 2 additions & 2 deletions Common/Models/PumpManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,13 @@ import MockKit
import MockKitUI

let staticPumpManagersByIdentifier: [String: PumpManagerUI.Type] = [
MockPumpManager.pluginIdentifier : MockPumpManager.self
MockPumpManager.managerIdentifier : MockPumpManager.self
]

var availableStaticPumpManagers: [PumpManagerDescriptor] {
if FeatureFlags.allowSimulators {
return [
PumpManagerDescriptor(identifier: MockPumpManager.pluginIdentifier, localizedTitle: MockPumpManager.localizedTitle)
PumpManagerDescriptor(identifier: MockPumpManager.managerIdentifier, localizedTitle: MockPumpManager.localizedTitle)
]
} else {
return []
Expand Down
1 change: 1 addition & 0 deletions Common/Models/PumpManagerUI.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import LoopKitUI

typealias PumpManagerHUDViewRawValue = [String: Any]

@MainActor
func PumpManagerHUDViewFromRawValue(_ rawValue: PumpManagerHUDViewRawValue, pluginManager: PluginManager) -> BaseHUDView? {
guard
let identifier = rawValue["managerIdentifier"] as? String,
Expand Down
Loading