Release journal

What changed.

Formal Play releases and the development milestones behind them, reconstructed from app release metadata and Git history.

Latest: version 1.1.1, build 1012 prepared for production review

Version 1.6.0

Optimized calorie analysis for multiple photos

Automatic detection now groups photos of the same meal before performing calorie analysis. This reduces the number of AI requests and ensures that meals are counted accurately from the start, rather than merging and re-calculating after multiple individual analyses.

Intelligent photo settling wait

Added a short settling period for detected food photos. This allows multiple shots of the same meal to be captured and grouped together before analysis begins, ensuring a more cohesive and efficient processing experience.

Improved merge planning reliability

Enhanced the merge planner to handle cases where AI responses are delayed or unavailable. The system now gracefully manages plan timeouts and ensures that photos are analyzed independently if a merge plan cannot be finalized, maintaining consistent calorie tracking.

Version 1.5.0

Resumable AI analysis

AI analysis for meals, stacks, and text entries now continues automatically after app restarts or network interruptions. If an analysis is interrupted, it will resume once the connection is restored, ensuring your results are delivered without needing to restart the process.

Retry failed AI tasks

If an AI analysis or automatic stack planning task fails, you can now review the error and choose to retry the operation. This gives you control over when to re-run tasks that may require additional AI allowance.

Shared text recovery

Shared text entries that fail to log are now saved. You can review and retry these imports directly from the main screen, ensuring your shared food descriptions are captured correctly.

Improved Health Connect sync

Nutrition data sync with Health Connect is now more reliable, ensuring that your calorie and macro records remain consistent even when multiple updates occur in the background.

Version 1.4.0

Improve build and testing configuration

Updated Gradle build scripts to enable Android resource inclusion in unit tests and optimize release builds with resource shrinking and minification.

Enhance activity launch behavior

Modified the main activity's launch mode to 'singleTop' and added 'adjustResize' to windowSoftInputMode for smoother keyboard handling.

Refine AI allowance state management

Improved the AiAllowanceStore by simplifying state handling and enhancing the decision logic for allowance requests, including better error code management for unresolved costs.

Streamline AI plan state and background work

Updated AiPlanState to use the refined AiAllowanceStore decision logic and integrated BackgroundClassificationWorker for improved background analysis runs.

Improve meal planning and stack preservation

Refactored AutoMergePlannerOptimizer to use meal IDs instead of stack IDs for planning and preservation, ensuring meals are planned together.

Enhance background classification and meal analysis

Overhauled BackgroundClassificationWorker for more robust media store syncing, improved AI analysis integration, and refined ingredient-aware auto-merging logic.

Optimize background monitoring and classification scheduling

Refined BackgroundMonitoringCoordinator to use a unique work name for classification refreshes, ensuring sequential execution and improved input data handling for retries.

Improve UI and data handling for calorie tracking

Enhanced CalorieScreen with a new Ledger system for better daily data aggregation, refined UI elements for meal display, and improved image preview and dialog interactions.

Refactor calorie timeline data models

Introduced new data models like Ledger, DayLedger, and Meal to streamline calorie tracking data representation and improve UI logic.

Streamline calorie view model and meal management

Refactored CalorieViewModel to integrate new Meal and Ledger models, improve background analysis management, and enhance image handling.

Implement daily status resolution logic

Introduced DailyStatusProvider to resolve daily status suggestions, integrating caching, allowance checks, and AI generation for personalized feedback.

Clarify fitness extra calories calculation

Updated the documentation for FitnessExtraCaloriesCalculator to accurately reflect its purpose in calculating extra calories burned beyond the daily budget.

Enhance food evaluator dialog and meal summary

Improved the MenuEvaluatorDialog by integrating the new DayLedger for accurate daily data and refining the meal summary generation for better display.

Refine ingredient-aware matching logic

Updated IngredientAwareMatcher to use MealPhoto and Meal data, improving the evaluation of merge candidates based on meal context and ML labels.

Improve AI client for meal analysis and planning

Enhanced LazyCaloriesAiClient with refined error handling, improved merge planning metadata generation, and updated analysis methods for photos and text.

Enable edge-to-edge display and improve background

Enabled edge-to-edge display for a more immersive UI and set the background color to match the theme's primary container.

Streamline monitoring notification updates

Refactored MonitoringNotificationUpdater to use a DailyStatusProvider for resolving status and suggestions, improving efficiency and accuracy.

Adjust TokenGate API client for plan usage

Modified TokenGateClient to allow disabling usage publishing for specific calls, improving flexibility in plan usage retrieval.

Introduce UsageAllowanceStatus and refine allowance logic

Created UsageAllowanceStatus to consolidate allowance information and refined the logic for determining block reasons and recovery actions.

Simplify WeightProjectionViewModelFactory

Removed unnecessary dependencies from WeightProjectionViewModelFactory, simplifying its constructor to only require the AppDatabase.

Simplify WeightProjectionViewModelFactory

Removed unnecessary dependencies from WeightProjectionViewModelFactory, simplifying its constructor to only require the AppDatabase.

Refactor WeightProjectionViewModelNonHilt with Ledger

Updated WeightProjectionViewModelNonHilt to use the new Ledger system for calculating intake averages and projections, improving data handling.

Implement FoodEvaluator for AI-driven food assessment

Introduced FoodEvaluator to provide AI-driven advice on food choices based on user context and preferences.

Enhance MealAnalysis for robust AI-driven food assessment

Refactored MealAnalysis for improved handling of photo and text analysis, refined transaction management, and better integration with MealMembership.

Implement TokenGateMealAnalysisAi for production AI analysis

Introduced TokenGateMealAnalysisAi to handle production AI requests, including photo decoding and TokenGate client interaction.

Update AppDatabase migrations for Meal and FoodImage changes

Added migrations MIGRATION_25_26, MIGRATION_26_27, and MIGRATION_27_28 to handle the introduction of the Meal table and changes to FoodImageEntity.

Add TypeConverters for FoodVerdict and EnabledBy

Included TypeConverters for FoodVerdict and EnabledBy enums in AppDatabase to support their storage in the database.

Implement DailyStatusCacheStore for caching AI suggestions

Created DailyStatusCacheStore to manage caching of AI-generated daily status suggestions, improving performance and reliability.

Simplify FoodImageDao operations

Refactored FoodImageDao by removing redundant queries and update methods, streamlining database interactions.

Refine FoodImageEntity structure

Updated FoodImageEntity to reflect the new data model, removing legacy fields and adding mealId for direct relation.

Introduce FoodVerdict and EnabledBy enums

Added FoodVerdict and EnabledBy enums to represent the AI's assessment of food and the source of the enabled state for photos.

Remove legacy Health Connect write methods

Deprecated and removed legacy methods in HealthConnectService for writing calorie consumption directly, favoring the sync approach.

Implement LegacyMealConversion for data migration

Created LegacyMealConversion to handle the conversion of legacy photo data into the new Meal and FoodImageEntity structure during database migrations.

Add MealDao and related methods for Meal management

Introduced MealDao and associated methods to manage Meal entities, including CRUD operations and queries for MealWithPhotos.

Define MealEntity for storing meal-specific data

Created MealEntity to store aggregated data for a meal occasion, including counts, calories, macros, and AI analysis results.

Introduce MealWithPhotos data class for combined meal and photo data

Created MealWithPhotos data class to represent a Meal along with its associated photos, simplifying data retrieval and display.

Implement PreMigrationCopy for database safety

Added PreMigrationCopy utility to safeguard database integrity during migrations by keeping a copy of the previous version.

Refine BackupFileService for Meal data and format versioning

Updated BackupFileService to include Meal data in snapshots, handle format versioning, and improve restore logic.

Update BackupSnapshot for Meal data and format versioning

Modified BackupSnapshot to include Meal data and updated the format version to 6, supporting the new Meal entity.

Remove unused UserPreferencesRepository

Removed the UserPreferencesRepository interface as its functionality is now handled directly by UserPreferencesDao.

Release candidate

Version 1.1.1

Build 1012 · Internal testing · Production review pending

Reliability

More reliable meal tracking, clearer AI limits.

A burst of meal photos can take time to process. Each analysis now gets its full request window when its turn begins, while Android keeps the calorie status notification alive without an overlong foreground service. Build 1012 also clarifies AI allowances and protects typed meal descriptions and backup recovery. Public release is pending Google Play approval.

Fixed

  • Typed meal descriptions remain intact when AI analysis estimates calories.
  • Failed text analyses show an error so you can retry or enter calories yourself.
  • AI checks respect the current service allowance and retain known blocks while status refreshes.
  • Several meal analyses started together wait in a controlled queue instead of timing out before their requests begin.
  • The ongoing calorie progress notification no longer disappears after Android stops a long-running background service.
  • The notification shows "Refreshing..." during a manual scan and ignores repeat taps until that scan finishes.
  • Back navigation from a meal photo preview returns to the expected screen.
  • Invalid AI responses get another attempt before an analysis is reported as failed.

Improved

  • Plan settings explain personal AI allowance and shared Free usage, with usage shown as whole percentages.
  • New backups preserve the app ID so restored devices can continue using the same allowance identity.
  • App launches, device restarts, scheduled scans, and manual refreshes restore or update the notification through Android-managed background jobs.
  • The notification icon now reflects whether today's calorie intake is below, near, or above the current pace.

Version 1.1

Build 6

Backups

A backup path that does not fight Android.

Android can block the system folder picker from selecting Downloads. This update adds a direct route and keeps the flexible option for people who store backups elsewhere.

New

  • On Android 10 and newer, save backups straight to Downloads/LazyCalories without opening the folder picker.

Improved

  • Custom folders remain available for cloud drives and other storage providers.
  • Manual backups, daily automatic backups, and retention cleanup now follow the selected destination consistently.
  • Existing backup ZIP files remain compatible with restore.

Version 1.0

Build 5

Reliability

The calorie count comes back with the phone.

Fixed

  • AI analysis is more reliable and shows a clear message when an app update is required.
  • The ongoing calorie progress notification returns after a device restart or app update.

Improved

  • The notification includes the current daily calorie total and progress at a glance.

Version 1.0 beta

Build 4

Closed beta

Hosted AI reaches the Community beta.

This closed-beta build packaged the app's automatic photo analysis, calorie timeline, meal tools, and health data support for broader testing.

New

  • Hosted AI allowances let testers analyze meals without configuring a personal API key.
  • An optional Pro plan adds a larger monthly analysis allowance.
  • Play Integrity verifies official installs before granting hosted AI access, while keeping a private app installation identity.

Improved

  • Onboarding explains why full photo access is needed for automatic background detection.
  • Privacy, terms, subscription, and support pages are available from the app and public website.
  • The interface fits Android 16 system bars and follows the active light or dark theme.

Version 1.0 previews

Builds 2 and 3

Early Play builds

Android 16 support and install checks arrive.

New

  • All meal analysis can use the app's hosted AI service, with usage tied to a private installation instead of a user account.
  • Play Integrity checks protect the hosted allowance from modified or copied app builds.

Improved

  • The app targets Android 16 and handles edge-to-edge status and navigation bars correctly.
  • Turning background monitoring off now stops its work without briefly starting the service again.
  • A redundant AI settings page was removed as hosted analysis became the standard path.

Development milestone

Pre-release history

Less setup

Hosted AI replaces personal key setup.

This period moved meal analysis from a bring-your-own-key experiment to the hosted service used by the beta.

Improved

  • Food photos, text entries, menu evaluation, and background analysis share one hosted AI path.
  • Ingredient-aware auto-merging uses smaller planning windows to group related meal photos with fewer unnecessary AI requests.
  • Context written on separate photos is combined when those photos become one meal stack.
  • The photo dialog keeps its controls visible when the keyboard opens and uses clearer action wording.

Changed

  • Photo cleanup remains a manual review. The short-lived automatic deletion option was removed before the public beta.
  • Notification and full-library photo permissions now have guided setup instead of appearing without context.

Development milestone

Pre-release history

Meal detail

A meal becomes more than one calorie number.

New

  • Detected meals show an itemized food list that can be edited one item at a time.
  • Common ingredient and preparation alternatives offer quick calorie corrections when the AI picked the wrong variation.
  • Photos shared from other Android apps can be imported straight into Lazy Calories.
  • A manual photo-cleanup review finds likely food photos and asks before Android deletes anything.

Improved

  • Single photos and merged stacks both retain their detected item lists.
  • Recent meals, approximate location, and time of day give AI analysis better context for ambiguous food.
  • Food suggestions can appear in the progress notification without waiting for the app to open.
  • Health Connect calorie totals no longer overcount overlapping activity records.

Development milestone

Pre-release history

Automation

Meal detection runs in the background.

New

  • On-device image labels are saved and shown in previews, so it is easier to understand why a photo was treated as food.
  • Ingredient-aware auto-merging groups several photos of the same meal before AI analysis.
  • Health Connect supplies active calories, nutrition, and weight data.
  • Local backup and restore includes optional daily backups and retention cleanup.
  • Daily totals include protein, carbohydrates, and fat with a per-meal breakdown.
  • An ongoing notification shows calorie progress and whether today's intake is ahead of or behind pace.

Improved

  • The Menu Evaluator ranks choices using the current calorie budget, dietary preferences, and time of day.
  • Stack previews share context more predictably, and unstacking triggers the right follow-up analysis.
  • Background scans recover from stalled runs and send one useful meal notification after merging.
  • Midday budgets use active-calorie extras instead of inflating the allowance with resting calories.

Development milestone

Pre-release history

Correction tools

Real portions rarely land on whole numbers.

New

  • Serving multipliers accept fractions for half portions and other practical adjustments.
  • Trend summaries use a longer history to show calorie and weight direction without a cramped projection chart.
  • Food entry times can be corrected after logging.

Fixed

  • Text-only meals can be edited and reanalyzed without trying to open them as image files.
  • Automatic gallery scanning stays limited to camera photos.
  • Merging existing meals preserves their calorie values and lists the nearest, newest candidates first.
  • Notifications stay quiet while the app is already open.

Development milestone

Pre-release history

Reliability

Fitness sync and background scans get steadier.

New

  • Consumed calories and meal summaries can sync to Google Fit alongside activity calories.
  • Weight and calorie trends can trigger progress notifications.
  • Non-food photos collapse into a separate stack instead of crowding each day.
  • Food entries support direct time editing.

Improved

  • Background food detection avoids interrupting taps, edits, and other active use.
  • Errors, offline states, and retry behavior are handled consistently throughout the app.
  • Cached fitness data keeps daily budgets stable when a health service is temporarily unavailable.
  • Android 15 devices with 16 KB memory pages can install and run the app.

Development milestone

Pre-release history

The daily workflow

Photos become meals, not isolated guesses.

New

  • Related photos can be stacked and analyzed as one meal, including menus, receipts, and different angles.
  • Personal context such as portion size, drink type, or preparation guides a fresh calorie estimate.
  • Serving multipliers cover repeated drinks, slices, and portions.
  • Text-only food entries can be logged and estimated without a photo.
  • The Food Evaluator checks a food or menu against today's budget and dietary preferences.
  • On-device food detection can find likely meal photos in the background before sending selected images for analysis.

Improved

  • A 30-day timeline, collapsible day sections, and a combined progress bar make longer histories easier to scan.
  • Meal photos are resized before analysis to reduce upload time and data use.
  • Entries can be copied to today, and deleted source photos no longer erase saved calorie records.
  • Preview screens update as analysis finishes instead of showing stale calories or descriptions.

First app version

Version 1.0, build 1

The beginning

Take a photo. Let the day add itself up.

The original baking demo was replaced with the core Lazy Calories idea in three days: read camera photos, estimate food, and keep a daily total with very little input.

New

  • The app scans the phone's photo library and groups images by date.
  • Photos can be included or excluded from a day's calorie total.
  • Saved entries survive restarts, and calorie estimates can be corrected by hand.
  • Profile details calculate a personal daily budget with metric or imperial units.
  • Gemini identifies visible food and estimates calories from the image.
  • A personal AI key can be stored securely on the device.
  • Google Fit activity adjusts the calorie budget for calories burned.

Improved

  • Daily headers show running totals and color-coded progress toward the budget.
  • Pressing and holding opens a larger photo preview.
  • AI results are cached, slow requests time out, and API errors explain what went wrong.
  • The unselected photo grid uses a compact mosaic so a day is quick to review.