What's Changed
- chore(store): caption the Play set, add the iOS screenshots, retire "Free forever" by @simonoppowa in #1120
- chore(ci): drop the iOS screenshot lane by @simonoppowa in #1121
- fix(health): read workouts without the permissions Play refused (develop) by @simonoppowa in #1123
- chore(release): bump to 2.3.0+65 and add the build 65 note (develop) by @simonoppowa in #1125
- fix(l10n): disclose body fat only where it is read by @simonoppowa in #1128
- fix(health): five review findings from #1122, #1128 and #1132 by @simonoppowa in #1134
- fix(ci): the ledger tag is not proof Play took the bundle by @simonoppowa in #1133
- fix: three review findings from the 2.3.0 release PR by @simonoppowa in #1118
- fix(test): let the permission guard see plugin manifests by @simonoppowa in #1131
- fix(store): two declarations that understated what leaves the device by @simonoppowa in #1135
- test(health): converge the permission guard on the shipped version by @simonoppowa in #1144
- docs(releasing): the Android upload worked, without calling it fixed by @simonoppowa in #1146
- feat(bulk-add): show elapsed time, a hint and cancel while an own server answers by @simonoppowa in #1149
- fix(settings): log export/import failures and tell the user why by @simonoppowa in #1150
- fix(add-meal): convert Open Food Facts micronutrients into the app's units by @jordan-lee-code in #775
- fix(icons): give the launcher artwork room inside the icon mask by @simonoppowa in #1161
- feat: add scan and create-custom actions to no-results search state (#578) by @ibrahim-iqbal in #995
- chore(deps): bump fastlane from 2.238.0 to 2.239.0 in /android in the android-bundler group by @dependabot[bot] in #1141
- chore(deps): bump fastlane from 2.238.0 to 2.239.0 in /ios in the ios-bundler group by @dependabot[bot] in #1142
- chore(deps): bump the pub group with 6 updates by @dependabot[bot] in #1143
- feat(l10n): land the Weblate translations, ship languages from one list, stop failing CI on incomplete locales by @simonoppowa in #1188
- fix(l10n): name American football and springboard diving unambiguously in the source by @simonoppowa in #1201
- chore(deps): roll up the open Dependabot bumps (fastlane, archive, cached_network_image, sentry_flutter, stream_transform) by @simonoppowa in #1166
- fix(add-meal): resolve to the canonical FDC sibling, and show backend foods by their full description by @simonoppowa in #1170
- chore(l10n): update translations by @hosted-weblate[bot] in #1202
- fix(data): bring Open Food Facts micronutrients logged before #775 into app units by @simonoppowa in #1193
- chore(deps): bump mobile_scanner, sentry_flutter, synchronized and envied by @simonoppowa in #1203
- chore(deps): regenerate the lockfile against the pinned SDK by @simonoppowa in #1167
- chore(deps): tell Dependabot to skip the pub packages the pinned SDK cannot take by @simonoppowa in #1204
- chore(deps): bump actions/setup-java from 6.0.0 to 6.0.1 in the github-actions group by @dependabot[bot] in #1191
- chore(deps): bump hive_ce to 2.20.0 and flutter_local_notifications to 22.3.1 by @simonoppowa in #1206
- feat(l10n): ship Hungarian by @simonoppowa in #1211
- test(l10n): let the AI parity test follow the English-only policy (#1199) by @simonoppowa in #1212
- feat(search): ask Open Food Facts and the backend for Hungarian food names by @simonoppowa in #1213
- fix(search): request food names in the language the app is read in, not the device's by @simonoppowa in #1215
- chore(l10n): update translations by @hosted-weblate[bot] in #1217
- feat(add-meal): match the model's portion word on the English label, break a bare tie toward the middle rung, and mark a miss by @simonoppowa in #1208
- fix(add-meal): read has_portion at the search cut for the resolver's page, so a portionless exact title no longer pushes the survey record out of the twenty by @simonoppowa in #1209
- chore(l10n): update translations by @hosted-weblate[bot] in #1219
- ci(l10n): merge Weblate's pull requests with a merge commit once CI is green by @simonoppowa in #1220
- chore(l10n): update translations by @hosted-weblate[bot] in #1227
- fix(meal-detail): keep the hydrated serving option when the unit menu opens (#1216) by @simonoppowa in #1221
- chore(l10n): update translations by @hosted-weblate[bot] in #1228
- feat(l10n): ship Spanish by @simonoppowa in #1229
- feat(meal-detail): quick-serving chips (0.5x/1x/2x + 100 g) by @ibrahim-iqbal in #1101
- fix(off): read niacin from vitamin-pp_100g, not niacin_100g by @ibrahim-iqbal in #1168
- fix(recipes): thread totalWeightOverridden through JSON import save by @ibrahim-iqbal in #1169
- feat(meal-detail): opt-in Settings toggle for grams-first default (#1126) by @ibrahim-iqbal in #1195
- fix(recipes): thread totalWeightOverridden through CSV import and guard the column (#1194) by @ibrahim-iqbal in #1196
- feat(profile): 7-day moving-average overlay on the weight-trend chart (#1119) by @ibrahim-iqbal in #1197
- chore(l10n): update translations by @hosted-weblate[bot] in #1249
- fix(edit-meal): stop a zero base quantity from storing NaN nutriments by @simonoppowa in #1259
- chore(release): the store notes for build 66 by @simonoppowa in #1261
- chore(release): bump to 2.4.0+66 by @simonoppowa in #1263
- fix(settings): give the grams-first switch a semantics identifier by @simonoppowa in #1271
- docs(releasing): state the changelog cap, and correct the workflow-set note by @simonoppowa in #1278
- chore(l10n): update translations by @hosted-weblate[bot] in #1290
- chore(l10n): update translations by @hosted-weblate[bot] in #1298
- docs(store): record how the App Store screenshots went up with 2.4.0 by @simonoppowa in #1301
- chore(l10n): update translations by @hosted-weblate[bot] in #1322
- chore(l10n): update translations by @hosted-weblate[bot] in #1323
- fix(meal-detail): hide info button when there is no URL to open (#1275) by @ibrahim-iqbal in #1297
- fix(recent): order all entries chronologically instead of pinning custom meals (#1198) by @ibrahim-iqbal in #1252
- fix(profile): window the weight-trend chart by calendar days, not 24-hour spans by @simonoppowa in #1222
- chore(l10n): update translations by @hosted-weblate[bot] in #1337
- chore(l10n): update translations by @hosted-weblate[bot] in #1388
- chore(deps): roll up the open Dependabot bumps (fastlane, rubyzip, pub group) by @simonoppowa in #1374
- fix(import): upsert intakes and activities by id instead of appending (#1357) by @simonoppowa in #1369
- fix(export): carry the profile's goal settings in the backup and restore them (#1363) by @simonoppowa in #1381
- fix(settings): apply typed value on Save in kcal, nutrient and water dialogs by @simonoppowa in #1371
- fix(settings): reload Diary and Trends after settings changes (#1359) by @simonoppowa in #1370
- fix(settings): create today's tracked day when saving goals on an empty day by @simonoppowa in #1372
- fix(tracked-day): create a missing day only if it is still missing (#1373) by @simonoppowa in #1385
- fix(recipes): keep a manually entered total weight when reopening a recipe (#1277) by @simonoppowa in #1280
- fix(home): keep food logged into a 0 % meal visible and editable by @simonoppowa in #1318
- fix(input): let the iOS number pad be dismissed, and apply typed macros on focus loss by @simonoppowa in #1328
- fix(recents): offer an edited recipe as it is now, not as it was logged (#1276) by @simonoppowa in #1291
- fix(recipes): keep a shared recipe's hand-entered total weight on import (#1194) by @simonoppowa in #1294
- test(settings): register the reload blocs in the typed-value dialog tests by @simonoppowa in #1399
- chore(l10n): update translations by @hosted-weblate[bot] in #1400
- fix(import): give rows without an id one derived from their content (#1357) by @simonoppowa in #1398
- fix(meal-detail): hide the micronutrient section when Show Micronutrients is off by @simonoppowa in #1376
- fix(trends): plot the calorie chart in the selected energy unit by @simonoppowa in #1377
- fix(ai): keep a typed model across an address change, and show a refused OK (#1364) by @simonoppowa in #1378
- docs: correct the three one-liners #991 still lists by @simonoppowa in #1225
- fix(l10n): give every activity row its own English name by @simonoppowa in #1223
- chore(l10n): update translations by @hosted-weblate[bot] in #1401
- fix(add-meal): keep Recent chip sticky while typing, add Search all CTA by @ibrahim-iqbal in #1334
- fix(settings): make Reset + Save actually clear nutrient goals by @ibrahim-iqbal in #1353
- fix(notifications): reschedule the daily reminder when the app language changes (#1366) by @simonoppowa in #1379
- test(settings): add clearAll to the nutrient goals screen's fake bloc by @simonoppowa in #1402
- fix(diary): show the sorted macro on intake rows by @w3lld1 in #1333
- fix(settings): seven small fixes from the settings test run (#1368) by @simonoppowa in #1384
- enhancement: highlight calorie goal overage in dashboard. by @andbeaver in #1358
- fix(settings): round the kcal adjustment on save instead of truncating by @EugeneSusla in #1273
- fix(diary): keep a day's tracked-day row on the day its entries are listed under by @simonoppowa in #1319
- fix(settings): open the fibre goal at the reference the Diary uses by @simonoppowa in #1380
- fix(diary): treat the logical day as today in the Diary and goal edits by @simonoppowa in #1382
- fix(settings): accept a comma decimal separator in nutrient goal fields (#1387) by @simonoppowa in #1390
- fix(settings): let the language list scroll when it is taller than the dialog by @simonoppowa in #1332
- feat(android): add shared meal code import with preview by @KamikX in #1329
- fix(l10n): stop re-pushing a per-app language override the user cleared (#810, carried) by @simonoppowa in #1230
- feat(ios): add a read-only calorie progress home-screen widget by @hairmarc in #1251
- test(settings): stub getCurrentLogicalDay in the nutrient-goal screen fakes by @simonoppowa in #1416
- chore(l10n): update translations by @hosted-weblate[bot] in #1409
- fix(i18n): localize the 'min' duration unit for activities by @puravbhatt0504 in #1415
- fix(custom-meals): replace the edited meal instead of adding a copy (#1403) by @simonoppowa in #1404
- fix(add-meal): distinguish partial provider failure from zero results in All search by @ibrahim-iqbal in #1282
- feat(favourites): a personal list of starred foods and meals by @simonoppowa in #1320
- fix(custom-meals): move past diary entries along when an edit changes a meal's barcode or name (#1417) by @simonoppowa in #1420
- fix(weight): delete a Weight History row by its storage key, not its displayed date (#1418) by @simonoppowa in #1419
- fix(notifications): route onboarding's reminder through the scheduler and keep the alarm on a failed reschedule by @simonoppowa in #1391
- fix(weight): start the weight history from the onboarding weight (#1367) by @simonoppowa in #1383
- chore(deps): bump actions/setup-java from 6.0.1 to 6.1.0 by @simonoppowa in #1410
- chore(deps): bump fastlane from 2.240.1 to 2.241.1 in /ios by @simonoppowa in #1424
- chore(deps): bump fastlane from 2.240.1 to 2.241.1 in /android by @simonoppowa in #1423
- chore(release): bump to 2.5.0+67 and add the build 67 note by @simonoppowa in #1439
- Release 2.5.0+67 by @simonoppowa in #1447
- fix(ios): give the widget extension a bundle id the release team can register by @simonoppowa in #1449
- fix(ios): export the IPA with explicit per-target match profiles by @simonoppowa in #1451
- fix(ios): pass ExportOptions.plist to flutter by absolute path by @simonoppowa in #1452
New Contributors
- @hosted-weblate[bot] made their first contribution in #1202
- @w3lld1 made their first contribution in #1333
- @andbeaver made their first contribution in #1358
- @KamikX made their first contribution in #1329
- @hairmarc made their first contribution in #1251
- @puravbhatt0504 made their first contribution in #1415
Full Changelog: v2.4.0...v2.5.0