Skip to content

(ui) Radial Dial Progress UI with bubbles - #87

Open
glowinthedark wants to merge 21 commits into
Darkrock-Studios:mainfrom
glowinthedark:revamp
Open

(ui) Radial Dial Progress UI with bubbles #87
glowinthedark wants to merge 21 commits into
Darkrock-Studios:mainfrom
glowinthedark:revamp

Conversation

@glowinthedark

@glowinthedark glowinthedark commented Jul 10, 2026

Copy link
Copy Markdown

FastTrack UI Revamp

APK

An APK for the radial version built using github action (see apk.yml not the only difference from this PR's branch is the .yml github workflow this pr is on the revamp branch)

  • 💾 FastTrack-release.apk (package name patched on-the-fly in the github runner, not in the repo, to com.darkrockstudios.apps.fasttrack.revamp_v3 to allow installing side-by-side with the published version)

NOTE: The APK branch already diverged from this PR branch and includes extra features not present this PR: share image, import ZIP backups from EasyFast, import/export to/from iCalendar .ics and ActivityStreams 2.0 (JSON-LD), Log tab: add Total Fasts, Total Days fasted, Longest Fast. The branch is revamp-v3 in my repo. Not including it here since this PR already has multiple overlapping scopes. @Wavesonics: let me know if you'd rather have it all here. I have included it ALL into this monolithic PR. Splitting it by scope would be just too much work, and it would probably have to be a dozen of single-scoped PR's.

A more joyful fasting screen with tappable bubbles for each fasting stage. Hour/minutes display chanages to days/hours on tap:

telegram-cloud-photo-size-4-5947444715076652589-y telegram-cloud-photo-size-4-5947444715076652590-y

AlertDialog replaced with material bottom sheet:
image

End Fast

After end fast the last fast details don't stay frozen, instead the UI shows days elapsed since last fast (after one hour).

Fat Burn, Ketosis, Autophagy

You can show/hide them now in settings or enable auto-mode (show only active phases) which will display only those that already kicked in. To some degree they duplicate the bubbles but I left them since they provide extra context without having to interact in any way with the dial.

Details

Dial: Flat circular progress gauge with 10 tappable emoji milestones. Intro bloom animates the sweep on first load. Past ~4 days the tip caps at arc's end for visual consistency on long fasts. Theme-tuned dark/light palettes; stroke width and margins tuned to golden ratio.

Center/timer: Auto-sizing single-line timer in the center of the dial. Tap toggles day+hour vs. total-hours format (persisted). Phase rows (Fat Burn/Ketosis/Autophagy) open a bottom-sheet with phase details; upcoming phases shown neutrally, active in green; removed alarming red countdowns. Old AlertDialogs replaced by Material 3 ModalBottomSheet throughout (journey stage info, start/end fast, with optional Notes field on end).

Layout: Golden-ratio-driven, height-aware layout — dial capped at ~0.382 of height, hero cluster golden-seated (0.382/0.618 spacers) above the pinned full-width Start/End Fast button, so the button never clips off-screen. Spacing scale follows Fibonacci sequence.

Settings: Per-phase visibility toggles (Fat Burn/Ketosis/Autophagy) plus an Auto mode that reveals rows only once each phase begins (disables manual toggles when on). Reactive flow-backed, live-updating.

Post-fast state: Dial rests muted (no pulse, no timer, rows hidden) after a fast ends; status line shows "just finished" message for an hour, then time-since-last-fast.

Duration formatting: Unified humanized formatter replacing scattered ad-hoc formatting across 7+ call sites (timer, phase rows, share text, log stats, widget, notification), with hour-granular variants for surfaces refreshing hourly.

Content: Fasting phase model expanded from 3 to 10 stages (blood sugar dynamics → gluconeogenesis → fat burning → ketosis → autophagy → GH surge → insulin sensitivity → immune regeneration) with cited figures; legacy 3-phase model retained for compatibility with existing consumers.

Chrome: Removed redundant top app bar; added translucent floating icon pill (Share + Info + overflow menu with About/Settings).

Notifications: Progress-style segmented bar on newer API levels; humanized hour-granular duration in title.

Build: Use app name for APK naming.

Data/CSV: New CSV schema with full timestamps, duration seconds, humanized duration, and notes; DB migration adds notes column; CSV parsing with fixed timezone mismatch and import idempotency (dedupe by start-second); import/export moved to background dispatcher.

Additional tweaks from the second iteration:

  • remove deprecated deps and replace with Composable AboutDialog.kt
  • bring Share back to where it was before
  • Log: editable Notes on long tap
  • Share: text with Image
  • Settings: Import EasyFast ZIP backup
  • Settings: Import/Export iCalendar .ics and ActivityStreams 2.0 (JSON-LD)
  • Log stats: add Total Fasts, Total Days fasted, Longest Fast
  • Fixed localization for all languages, tweaked bad translations for Spanish, for nl replaced equivalent English dupes with actual translations.

...and more, see sources for details

glwnd added 11 commits July 10, 2026 16:21
Ground-up redesign of the Fasting screen and underlying layers.

**Dial**: Flat circular progress gauge with 10 tappable emoji milestones. Intro bloom animates the sweep on first load. Past ~4 days the tip caps at arc's end for visual consistency on long fasts. Theme-tuned dark/light palettes; stroke width and margins tuned to golden ratio.

**Center/timer**: Auto-sizing single-line timer inscribed within the ring's inscribed square. Tap toggles day+hour vs. total-hours format (persisted). Phase rows (Fat Burn/Ketosis/Autophagy) open a bottom-sheet with phase details; upcoming phases shown neutrally, active in green; removed alarming red countdowns. Old AlertDialogs replaced by Material 3 ModalBottomSheet throughout (journey stage info, start/end fast, with optional Notes field on end).

**Layout**: Golden-ratio-driven, height-aware layout — dial capped at ~0.382 of height, hero cluster golden-seated (0.382/0.618 spacers) above the pinned full-width Start/End Fast button, so the button never clips off-screen. Spacing scale follows Fibonacci sequence.

**Settings**: Per-phase visibility toggles (Fat Burn/Ketosis/Autophagy) plus an Auto mode that reveals rows only once each phase begins (disables manual toggles when on). Reactive flow-backed, live-updating.

**Post-fast state**: Dial rests muted (no pulse, no timer, rows hidden) after a fast ends; status line shows "just finished" message for an hour, then time-since-last-fast.

**Duration formatting**: Unified humanized formatter replacing scattered ad-hoc formatting across 7+ call sites (timer, phase rows, share text, log stats, widget, notification), with hour-granular variants for surfaces refreshing hourly.

**Content**: Fasting phase model expanded from 3 to 10 stages (blood sugar dynamics → gluconeogenesis → fat burning → ketosis → autophagy → GH surge → insulin sensitivity → immune regeneration) with cited figures; legacy 3-phase model retained for compatibility with existing consumers.

**Chrome**: Removed redundant top app bar; added translucent floating icon pill (info + overflow menu with Share/About/Settings).

**Notifications**: Progress-style segmented bar on newer API levels; humanized hour-granular duration in title.

**Build**: Use app name for APK naming.

**Data/CSV**: New CSV schema with full timestamps, duration seconds, humanized duration, and notes; DB migration adds notes column; CSV parsing with fixed timezone mismatch and import idempotency (dedupe by start-second); import/export moved to background dispatcher.
- add Csv.kt
- basic `Makefile`
- string translations fix for Spanish
- spanish localization for the new strings
- spanish localization for the new strings
- spanish localization for the new strings
- localization for the new strings in other languages, fix nl english placeholders
- Share text with Image
- Settings: Import EasyFast ZIP backup
- Settings: Import/Export iCalendar .ics and ActivityStreams 2.0 (JSON-LD)
- Log stats: add Total Fasts, Total Days fasted, Longest Fast

@codacy-production codacy-production Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR implements a comprehensive overhaul of the application, including a 10-stage radial progress dial, a transition to Material 3 ModalBottomSheets, and expanded data portability via iCalendar and ActivityStreams 2.0. Codacy reports the changes are up to standards, though coverage metrics are currently unavailable. The primary concern is the complexity of the PR, which the author acknowledges is monolithic; this makes the review process more difficult and increases the likelihood of side effects in the database migrations or duration formatting logic. Additionally, the removal of the standard top app bar in favor of a floating pill icon should be verified for accessibility compliance.

About this PR

  • This monolithic PR significantly increases review complexity and the risk of regressions. Future updates of this scale should be decomposed into smaller, incremental pull requests (e.g., separating database changes from UI overhauls) to ensure better auditability.

Test suggestions

  • Verify the unified duration formatter correctly handles hour-granular variants vs. standard formats.
  • Verify database migration integrity to ensure the notes column is added without data loss.
  • Verify CSV import/export logic correctly handles timezone offsets to prevent timestamp shifting.
  • Verify the 'Auto mode' logic correctly calculates phase visibility based on elapsed duration.
  • Verify the background dispatcher implementation for I/O heavy tasks such as ZIP imports and ActivityStreams exports.
Prompt proposal for missing tests
Consider implementing these tests if applicable:
1. Verify the unified duration formatter correctly handles hour-granular variants vs. standard formats.
2. Verify database migration integrity to ensure the notes column is added without data loss.
3. Verify CSV import/export logic correctly handles timezone offsets to prevent timestamp shifting.
4. Verify the 'Auto mode' logic correctly calculates phase visibility based on elapsed duration.
5. Verify the background dispatcher implementation for I/O heavy tasks such as ZIP imports and ActivityStreams exports.
Low confidence findings
  • The replacement of the standard top app bar with a floating pill icon may impact navigation accessibility. Ensure that this UI pattern adheres to Android accessibility standards and does not hinder users relying on screen readers or standard navigation gestures.

TIP Improve review quality by adding custom instructions
TIP How was this review? Give us feedback

@codacy-production

codacy-production Bot commented Jul 14, 2026

Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

🟢 Metrics 522 complexity · 6 duplication

Metric Results
Complexity 522
Duplication 6

View in Codacy

AI Reviewer: first review requested successfully. AI can make mistakes. Always validate suggestions.

Run reviewer

TIP This summary will be updated as you push new changes.

glwnd added 5 commits July 16, 2026 10:00
- cleanup
- remove logci duplication/triplication
- Logbook: delete all entries
- trigger Manual Add via tamp on calendar day
- allow hours _and_ minutes for fast duration
- use 1min refresh for FastingScreen.kt calculation logic instead of 10 millis
- Manual Add: use bottom sheet instead of AlertDialog
- optimize parseIcsDateTime(), parseIsoDurationMs(), parseIso8601() to reduce unnecessary object allocations, reduce RAM, use char walking state machines instead of regexes
- i10n sync, fix cognitive dissonance in i10n strings
- sync tests
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant