Skip to content

Releases: rfivesix/train-libre

Release v0.9.25

Choose a tag to compare

@rfivesix rfivesix released this 12 Jun 15:17

Added

  • Diary Day Export & Sharing Hub: Introduced a comprehensive "Day Export" feature directly accessible via a new context sheet in the Diary screen, allowing users to share their daily logs in two distinct formats:
    • Visual Image Export: Generates a high-resolution PNG snapshot of the top macro, calorie, water, and sugar summary cards using a native RepaintBoundary composition render tree, routing it seamlessly into the native system share sheet.
    • Granular Localized Markdown Export: Compiles a deep-dive, human- and LLM-readable Markdown document containing full nutritional breakdowns per food item (including sugar, salt, and fiber), total fluid intake tracking, complete workout logs with routine names, weights, and RIR/RPE metrics, as well as a full sleep analysis.
  • Detailed Sleep Phase & Timing Mapping: Enhanced the text export data engine to fetch and extract exact falling-asleep and waking-up timestamps alongside floating-point duration metrics for all tracked sleep phases (Deep, Light, REM, and Awake/Interruptions).
  • Multi-Region Localization Strings: Fully localized all day-sharing components, summary headers, and placeholder metrics across English, German, French (app_fr.arb), Italian (app_it.arb), and Japanese (app_ja.arb) resource bundles to ensure strict compliance with the global localization pipeline.

Changed

  • Decoupled Exercise / Wger Catalog Sync: Extracted the exercise database sync and update logic from the default automatic startup path (checkForBasisDataUpdate()) into a new public importExerciseCatalog() method. The exercise database is now only updated when manually triggered by the user or during database initialization, preventing startup slowdowns.
  • Unified Settings Sync Action: Combined the exercise update action with the manual food database update card in Settings, which now triggers a sequential update of both the food and exercise databases with unified progress tracking.
  • Refactored Interactive Diary AppBar: Streamlined the top navigation layout of the main Diary scaffold to maximize interactive ergonomics and reduce visual noise:
    • Transformed the static date title into a fully interactive core navigation control, wrapping the left and right date-increment chevrons (Icons.chevron_left / Icons.chevron_right) directly around the central date string.
    • Converted the date string itself into a trigger target that invokes the primary calendar date picker sheet upon touch, completely eliminating the redundant central calendar icon button.
    • Relocated and consolidated all primary trailing actions cleanly into the right header container, positioning the new Icons.share_outlined button immediately to the left of the static profile picture avatar.

Fixed

  • Sleep Sync Freeze & Progress Bar Repair: Resolved a database deadlock that froze the manual 90-day Sleep Sync at the last iteration (e.g. "Importing Night 58/58...") by removing nested _db.transaction(...) blocks from the custom sleep database access objects (SleepRawImportsDao, SleepCanonicalSessionsDao, SleepCanonicalStageSegmentsDao, SleepCanonicalHeartRateSamplesDao, SleepNightlyAnalysesDao). Refined the pipeline progress calculation to allocate totalSessions + 5 total steps and report an out-of-bounds progress value (-1.0) at initialization, enabling an active indeterminate scanning animation during heavy background isolate calculations before transitioning to determinate progress updates through the database writing phase.
  • Multilingual Database Sync Labels: Updated settings database sync labels (settingsUpdateFoodDatabase, settingsUpdateFoodDatabaseSubtitle, settingsUpdateFoodDatabaseSuccess, settingsUpdateFoodDatabaseError) in Japanese (app_ja.arb) to refer to both the food and exercise databases rather than just the food database, aligning with German, English, French, and Italian translations.

Release v0.9.24

Choose a tag to compare

@rfivesix rfivesix released this 12 Jun 12:34

Added

  • Unified Long-Running Operation UI & Cooperative Cancellation: Introduced a reusable progress overlay (LongRunningOperationOverlay) wrapping operations in PopScope(canPop: false) to prevent route popping. Added CancellationToken and OperationCanceledException utilities to support cooperative cancellation of intensive background tasks.
  • Multilingual Support for Progress States: Integrated fully localized progress strings across German, English, French, Italian, and Japanese resource bundles for all long-running stages.

Changed

  • Optimized Sleep Import Windowing: Re-introduced a rolling 72-hour delta-sync lookback window for standard UI and Diary interactions to keep page transitions fluid and prevent main-thread lag.
  • Manual Deep History Sync: Explicitly delegated historical syncs (90 days) to a manual action via the Sleep Settings screen using a new forceFullSync parameter.
  • Transactional Backup & Import Safety: Updated the database backup export/import features to accept cancellation tokens and report table-level progress. Extended backup import to execute inside a single Drift SQLite transaction with savepoints to guarantee an atomic database rollback if canceled.
  • Preferences State Rollback: Implemented automatic state restoration for SharedPreferences if a backup import operation is cancelled mid-way.
  • Test Suite Realignment: Updated mock test classes (FakeSleepImportService and _FakeSleepSettingsService) across the widget and unit test suites to align with the updated importRecent method signature.

Fixed

  • Health Connect Permissions Crash (ActivityNotFoundException): Patched a native Android runtime crash caused by unsupported contract intents when requesting permissions under the standard FlutterActivity. Refactored MainActivity.kt to dispatch requests using the native ActivityCompat.requestPermissions utility and handle results uniformly in onRequestPermissionsResult and onActivityResult.
  • Static Analysis Warnings: Resolved unused fields and variables (_isFullBackupRunning, _isSleepImporting, and unknown exercise list) and addressed use_build_context_synchronously warnings across settings screens using context.mounted.
  • Android Predictive Back Gestures: Resolved a platform-specific issue where the native predictive back gesture would fail or freeze on Android/GrapheneOS devices. Refactored the core Android container MainActivity to inherit from the standard FlutterActivity instead of FlutterFragmentActivity, eliminating fragment lifecycle dispatcher conflicts. Ported the internal Health Connect permissions launcher and Storage Access Framework directory picker launcher to use the base SDK startActivityForResult and onActivityResult callbacks to maintain full compile-time compatibility with standard activity lifecycles.
  • Sleep Data Import Ingestion (7 out of 90 nights): Resolved a critical bug causing long historical imports to starve or skip valid entries by correcting lookback window truncations.
  • Idempotent Sleep Session Overlaps: Refactored overlapping session rules to prevent shorter naps or duplicate records from being completely discarded. Non-enveloping sleep sessions can now safely coexist, and identical boundaries trigger precise updates instead of omissions.

Release v0.9.24-beta.1

Pre-release

Choose a tag to compare

@rfivesix rfivesix released this 09 Jun 21:28

Added

  • Nested Locked Glassmorphic Adaptive Scopes: Introduced nested, locked GlassAdaptiveScope wrappers (minQuality: GlassQuality.premium, maxQuality: GlassQuality.premium) around the bottom navigation bar, workout overlay, and FAB. This prevents these core elements from being downgraded by the performance-driven global adaptive quality ceiling during frame-dropping screen transitions.
  • Global App Localization (FR, IT, JA): Expanded native multi-language support across the entire frontend architecture, incorporating over 1,300 fully translated keys per language (app_fr.arb, app_it.arb, app_ja.arb).
  • Dynamic Web Template i18n: Implemented client-side localized script dictionaries within docs/script.js and expanded selection dropdowns across all HTML compliance pages (landing page, privacy, terms, recovery, etc.).
  • Targeted Country Pipelines: Upgraded the Open Food Facts pipeline (create_off_food_db.py) to generate dedicated localized SQLite asset databases for France (fr), Italy (it), and Japan (jp), prioritizing local language tags.

Changed

  • Relational Database Migration (v22 -> v23): Refactored the rigid, fixed-column translation model into a highly scalable, modular 1:N relational schema for exercises and user-food overrides (exercise_translations and user_food_override_translations).
  • Relational Fallback Resolvers: Replaced old static queries with robust SQLite LEFT JOIN and COALESCE statements to dynamically resolve active UI strings with graceful fallback chains down to English and German.
  • Automated Catalog Workflows: Updated the weekly wger Python catalog fetcher (create_wger_exercise_db.py) and corresponding GitHub Actions to automatically export into the new 1:N relational layout.
  • Web Screenshot Fallbacks: Configured the localized web templates to dynamically map fr, it, and ja screenshots directly to the existing verified en-US directory, avoiding duplicate storage overhead.

Fixed

  • Bottom Navigation Bar Quality Degradation: Fixed a bug where returning from route transitions (such as speed dial option screens) demoted the navigation bar to medium quality (frosted fallback) while leaving the sibling action button in premium quality.
  • Static Analysis Cleanup: Resolved all remaining static analysis warnings by removing the unused _isRouteActive field, deleting redundant didPushNext() and didPop() overrides, cleaning up unnecessary dart:ui imports, and globally suppressing experimental_member_use warnings for the liquid glass widgets API.
  • Recovery Screen Muscle Tracking: Patched the muscle fatigue calculation algorithm by updating the workout history queries to join the new exercise_translations table, resolving a bug where exercise names evaluated to null.
  • Base Food Language Toggle: Fixed a localization lock in the settings menu by refactoring BasisDataManager._performBatchImport to correctly ingest the precompiled flat columns (name_fr, category_ja, etc.) from train_libre_base_foods.db and adding dynamic runtime entity getters.

Release v0.9.23

Choose a tag to compare

@rfivesix rfivesix released this 08 Jun 11:22

Changed

  • SpeedDial Overlay Quality Isolation: Decoupled the speed dial action buttons from dynamic performance telemetry and forced them to render with standard quality (GlassQuality.standard), eliminating dynamic quality degradation or toggling.

Fixed

  • Bottom Navigation FAB Glassmorphic Blur Mismatch: Fixed a visual discrepancy where the bottom navigation bar's circular FAB lost background blur (rendering flat white) when quality downgraded to minimal. Refactored main_screen.dart to bypass the package's built-in extraButton parameter, instead implementing a layout composition with a custom sibling AdaptiveGlass widget configured with isInteractive: false to guarantee consistent glassmorphic blur across all rendering quality levels.
  • Fix: Restricted calorie adjustment notification banner strictly to the current date view in Diary.
  • UX: Configured 3-Zone master cards in Recovery Tracker to be collapsed by default for faster scanning.
  • UI: Removed leading food icons and converted vertical meal lists into space-adaptive horizontal grids.
  • Nutrition Hub Card Overflow Fix: Removed 12px default nested padding from horizontal meal overview cards, preventing layout overflows when translated action strings wrap to multiple lines.
  • Light Mode Bottom Sheet Container Harmonization: Corrected white-on-white visibility issues in workout and supplement selection bottom sheets under Light Mode by resolving card backgrounds to a transparent black color, ensuring outlines are clearly visible.

Release v0.9.22

Choose a tag to compare

@rfivesix rfivesix released this 08 Jun 00:25

Added

  • Dynamic Glassmorphic Shader Quality Degradation: Implemented GlassPerformanceManager singleton to dynamically adjust glass rendering quality (premium, standard, minimal) based on sliding-window raster FrameTiming performance and hardware frame budgets.
  • Route-Aware Render Complexity Gating: Integrated invisible route-aware quality transitions to apply quality downgrades on push-route transitions and quality upgrades on pop-route re-entry.
  • Fade-Transition Shader Cross-Fade Shield: Refactored the persistent RunningWorkoutOverlay to perform quality shader swaps at zero opacity via a 120ms FadeTransition animation shield to eliminate quality "pop-in" visual flicker.
  • Speed Dial Quality Binding: Wired the SpeedDialMenuOverlay action buttons to consume active manager quality dynamically using a ValueListenableBuilder.
  • Expanded Recovery Tracker Muscle Groups: Expanded the master tracking array to track 13 primary muscle groups, adding Muscle.adductors, Muscle.lowerBack, and Muscle.forearms to target lists, status badges, and recovery calculations.

Changed

  • Centralized Design Constants: Migrated and refactored all glassmorphic widgets (GlassBottomNavBar, GlassFab, GlassPillButton, RunningWorkoutOverlay, GlassBottomMenu, SpeedDialMenuOverlay) to utilize unified styling tokens defined in DesignConstants (glassShadow, glassNeutralTint, glassColor, and liquidGlassSettings).
  • Removed Android Bottom Bar Quality Override: Removed target platform checks that restricted the bottom navigation bar's tap indicator to standard/medium quality on Android devices, allowing it to leverage dynamic/configured quality settings.
  • 3-Zone Accordion Compacting Architecture for Recovery Tracker: Refactored the scrollable list layer in recovery_tracker_screen.dart to group all 13 core muscle metrics into exactly three master expandable categories based on recovery status: "In Erholung" (In Recovery - expanded by default), "Gemischt / Bereit" (Mixed / Ready - expanded by default), and "Frisch" (Fresh - collapsed by default). Each zone card features a color-coded status dot, a horizontal minimalist muscle preview chip loop, an animated rotation disclosure chevron, and smooth expansion/collapse cross-fade transitions.

Fixed

  • Liquid Glass Shadow Clipping: Integrated ShadowOuterClipper across all Liquid Glass components (bottom navigation, FAB, workout overlay, speed dial actions) to strictly clip drop shadows from behind the transparent glass elements, keeping the backgrounds bright and translucent.
  • Anatomical Body Highlighter Canvas Mappings: Synchronized SVG path mappings in local package flutter_body_highlighter (and bumped version to 1.0.3) to resolve blank forearms, map lateral head triceps (front view), neck muscles (back view), erector spinae (lower back), isolated tibialis anterior (shin-adjacent), and inner-thigh adductors insertion (back view).
  • Neck & Traps Visual Merge: Merged the posterior neck SVG paths directly into the trapezius map entry in flutter_body_highlighter (v1.0.3) and routed all legacy neck/lower neck raw mappings to the trapezius token to eliminate the uncolored gap on the back view.
  • Adductor Logging Pipeline Repair: Fixed the state query aggregation pipeline to resolve naming variance drops for adductors by mapping raw input strings to major muscle groups before fatigue load evaluation threshold filtering.

Open Food Facts Catalog (jp, stable channel)

Choose a tag to compare

@github-actions github-actions released this 09 Jun 16:49
c4096b3

OFF Food Catalog Refresh (JP)

  • Version: 202608170704
  • Generated at: 2026-08-17T07:04:28+00:00
  • Country code: jp
  • Country filter tags: en:japan, en:jp
  • Imported products: 40193
  • Rejected rows: 4634754
  • Duplicate barcodes skipped: 0
  • Diff removed barcodes: 0
  • Diff added barcodes: 305
  • Diff changed barcodes: 45

This is a data-artifact release channel used by app-side Open Food Facts catalog refresh.

Open Food Facts Catalog (it, stable channel)

Choose a tag to compare

@github-actions github-actions released this 09 Jun 16:50
c4096b3

OFF Food Catalog Refresh (IT)

  • Version: 202608170705
  • Generated at: 2026-08-17T07:05:43+00:00
  • Country code: it
  • Country filter tags: en:it, en:italy
  • Imported products: 217025
  • Rejected rows: 4457922
  • Duplicate barcodes skipped: 5
  • Diff removed barcodes: 3
  • Diff added barcodes: 123
  • Diff changed barcodes: 211

This is a data-artifact release channel used by app-side Open Food Facts catalog refresh.

Open Food Facts Catalog (fr, stable channel)

Choose a tag to compare

@github-actions github-actions released this 09 Jun 16:54
c4096b3

OFF Food Catalog Refresh (FR)

  • Version: 202608170709
  • Generated at: 2026-08-17T07:09:32+00:00
  • Country code: fr
  • Country filter tags: en:fr, en:france
  • Imported products: 873672
  • Rejected rows: 3801275
  • Duplicate barcodes skipped: 17
  • Diff removed barcodes: 67
  • Diff added barcodes: 1870
  • Diff changed barcodes: 2058

This is a data-artifact release channel used by app-side Open Food Facts catalog refresh.

0.9.21

Choose a tag to compare

@rfivesix rfivesix released this 07 Jun 12:33
2232fcb

0.9.21

This release establishes an identical material identity across our visual branches, focusing on standard glass rendering passes, light mode tint harmonization, and depth layer unification.

What's New

Default Visual Style Switch

  • Default Configuration Swap: Altered the out-of-the-box user preference default inside ThemeService from "Flüssig (Liquid Glass)" (index 1) to "Standard (Glas)" (index 0). New application installations will now initialize with the refined standard frosted glass configuration as their default baseline framework.

Bug Fixes & Optimization

Standard Glass Shader Pipeline Upgrade

  • Core Shader Migration: Upgraded the standard visual style (visualStyle == 0) branch across all major interface structures, including GlassBottomNavBar, GlassFab, GlassPillButton, RunningWorkoutOverlay, GlassBottomMenu, and SpeedDialMenuOverlay.
  • Legacy Filter Elimination: Replaced the native Flutter BackdropFilter container fallbacks with the unified AdaptiveGlass shader pipeline from the liquid_glass_widgets ecosystem, successfully marrying the advanced depth, grain, and refraction mechanics of the new library with our rigid, unwarped geometric layouts.

Light Mode Tint Harmonization

  • Burnout & Muddy Color Resolution: Resolved a blending error where the bottom bar and FAB components either clipped into flat white or rendered a dirty-grey tone when the device layer toggled into Light Mode.
  • Background Value Matching: Synchronized the background properties to a semi-transparent white tint (Colors.white.withValues(alpha: 0.10)), matching the working environment of the RunningWorkoutOverlay to secure a smooth glass transition.

Ambient Shadow Matrix Unification

  • Depth Map Equalization: Unified the multi-layered depth maps by injecting our premium ambient shadow matrix across both standard (visualStyle == 0) and liquid (visualStyle == 1) interaction shells.
  • Shadow Parameter Standards: Applied a matching BoxShadow vector (blurRadius: 12, offset: Offset(0, 6), Colors.black at 30% opacity) to the navigation deck and FAB layers, removing the visual color rift and restoring physical layout parity across all floating components.

What's Changed

  • updated the standard glass design. this maybe replaces the liquid gla… by @rfivesix in #435

Full Changelog: v0.9.20...v0.9.21

0.9.20

Choose a tag to compare

@rfivesix rfivesix released this 07 Jun 02:50

0.9.20

This release introduces a profound visual synchronization of our user interface. We have eliminated layout friction and legacy asset scaling to establish a premium, high-fidelity design system that feels completely fluid, quiet, and balanced.

What's New

Next-Gen Glassmorphic UI & Fluid Layouts

  • Engine Migration: Transitioned the entire glass rendering layer to the powerful liquid_glass_widgets (v0.15.0) framework. The primary navigation deck (GlassBottomBar) and the quick action button (FAB) now merge organically, throwing a homogeneous, physically accurate shadow map across active layouts.

Minimalist Icon System & Color State Refactor

  • Lucide Icons Integration: Migrated the entire application navigation shell and active workout tracking overlays to the open-source flutter_lucide asset repository.
  • Pure Color State Toggle: To prevent visual jitter and layout popping during touch interactions, all assets retain identical geometry across states.
  • Focus Through Color: State differentiation is now handled exclusively via chromatic shifts using our signature Chartreuse accent for active tabs and a clean, muted onSurface configuration for inactive paths.
    • Diary: LucideIcons.notebook
    • Workout: LucideIcons.dumbbell
    • Analytics: LucideIcons.chart_no_axes_column
    • Nutrition: LucideIcons.utensils
    • Workout Timer: LucideIcons.clock (scaled strictly to size 20 for uniform line-weight parity)

Bug Fixes & Optimization

  • Compact & Clean Tab Labels: Fixed a regression inside the navigation view where an uninherited Material context caused text labels to fall back to aggressive system scaling and render with yellow error underlines. The components have been wrapped in a proper Material widget context and clamped to our absolute compact design token (fontSize: 11.0, fontWeight: FontWeight.w600, fontFamily: 'Inter', letterSpacing: -0.2).
  • Collision Fix in RunningWorkoutOverlay: Fixed a critical layout error where the workout tracking bar overlapped the boundaries of the navigation deck. Introducing a precise 8px vertical layout clearance offset ensures both interface structures sit stacked in a clean geometric hierarchy.
  • Timer Typography Standardization: Extracted the elapsed duration clock from inaccurate system fonts and bound the node configuration explicitly to our centralized titleMedium text theme (Inter, Bold), securing a static, jitter-free character grid during live second updates.

Dependency Updates

  • Added: flutter_lucide: ^1.11.0 (FOSS-compliant & fully tree-shaken for minimal binary foot-print)
  • Removed: Legacy experimental icon sets.

Full Changelog: v0.9.19...v0.9.20