screen-locker/stronglift_replacement/workout_app/lib/services
Krzysztof kuhy Rudnicki 83d77884a0 Workout screen never moves when a rest starts; a sandbox flavor to prove it on the phone
The rest banner used to be inserted into the column only while a break ran,
so its arrival took height from the exercise list, shifted every tile down
and pushed the last one into scroll range. The strip is now a permanently
reserved 64 dp slot (muted "Rest / 00:00" while idle, Skip keeps its space),
the list is a non-scrolling column that scales down as a whole if it would
not fit (0.96 on the Pixel 6a with four tiles, pinned by a widget test at
the phone's logical size with the status bar simulated), and the activity is
locked to portrait. Verified on the real phone: only the tapped circle's
pixels change when a rest starts.

Verifying that needed a workout screen that today's already-logged workout
did not offer, so the app gained a `sandbox` product flavor beside `daily`:
com.kuhy.workout_app.sandbox installs side by side with its own data, refuses
every network connection at the socket layer, starts no LAN server for the
PC to pull from, keeps its /sdcard files beside the daily build's, wears a
red SANDBOX ribbon, and offers a SANDBOX section in Settings (wipe, mark
today not done, rest length in seconds). MainActivity answers the flavor and
carries a `WorkoutSandbox` logcat trace of every tap, break, save and
navigation. On Linux the same mode is WORKOUT_SANDBOX=1, driven under Xvfb by
scripts/run_sandbox_xvfb.sh. CI builds --flavor daily; .phone-deploy-flavor
tells phone_deploy.sh the same.

Set circles and the home icon buttons carry semantics labels so they can be
addressed by element (and by screen readers).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YbBZqUaNWyhHYfzz6zGC7q
2026-09-20 18:55:08 +02:00
..
backup_service_session.dart Workout screen never moves when a rest starts; a sandbox flavor to prove it on the phone 2026-09-20 18:55:08 +02:00
backup_service.dart Workout screen never moves when a rest starts; a sandbox flavor to prove it on the phone 2026-09-20 18:55:08 +02:00
break_clock.dart workout_app: run the break countdown in a foreground service with notifications 2026-09-13 20:28:36 +02:00
break_intent_queue.dart workout_app: run the break countdown in a foreground service with notifications 2026-09-13 20:28:36 +02:00
break_intent_store.dart workout_app: run the break countdown in a foreground service with notifications 2026-09-13 20:28:36 +02:00
break_notification_text.dart workout_app: run the break countdown in a foreground service with notifications 2026-09-13 20:28:36 +02:00
break_service_controller.dart workout_app: run the break countdown in a foreground service with notifications 2026-09-13 20:28:36 +02:00
break_service_port_flutter.dart workout_app: run the break countdown in a foreground service with notifications 2026-09-13 20:28:36 +02:00
break_service_port.dart workout_app: run the break countdown in a foreground service with notifications 2026-09-13 20:28:36 +02:00
break_task_handler.dart workout_app: run the break countdown in a foreground service with notifications 2026-09-13 20:28:36 +02:00
firebase_backend_desktop.dart Run the workout app on Linux, and let it hold the screen lock 2026-08-22 11:18:48 +02:00
firebase_backend_google.dart Run the workout app on Linux, and let it hold the screen lock 2026-08-22 11:18:48 +02:00
firebase_backend.dart Bring the workout app and status web UI up to latest stable 2026-09-07 15:46:07 +02:00
foreground_break_client_flutter.dart workout_app: run the break countdown in a foreground service with notifications 2026-09-13 20:28:36 +02:00
foreground_break_client.dart workout_app: run the break countdown in a foreground service with notifications 2026-09-13 20:28:36 +02:00
github_device_auth.dart Carry progression through Firebase, and stop demanding storage permission 2026-08-10 16:54:21 +02:00
google_platform_io.dart workout_app: add Google sign-in support for the Firebase sync account 2026-08-14 10:56:16 +02:00
google_platform_web.dart workout_app: add Google sign-in support for the Firebase sync account 2026-08-14 10:56:16 +02:00
google_platform.dart workout_app: add Google sign-in support for the Firebase sync account 2026-08-14 10:56:16 +02:00
google_sign_in_backend.dart Workout screen never moves when a rest starts; a sandbox flavor to prove it on the phone 2026-09-20 18:55:08 +02:00
http_server_service.dart Workout screen never moves when a rest starts; a sandbox flavor to prove it on the phone 2026-09-20 18:55:08 +02:00
lock_mode.dart Run the workout app on Linux, and let it hold the screen lock 2026-08-22 11:18:48 +02:00
progression_sync_service_pull.dart Split progression_sync_service.dart (433) into four 2026-08-15 21:44:43 +02:00
progression_sync_service_push.dart Split progression_sync_service.dart (433) into four 2026-08-15 21:44:43 +02:00
progression_sync_service_session.dart Split progression_sync_service.dart (433) into four 2026-08-15 21:44:43 +02:00
progression_sync_service.dart Split progression_sync_service.dart (433) into four 2026-08-15 21:44:43 +02:00
storage_service_backup.dart Split storage_service.dart (781) into part extensions 2026-08-15 21:12:08 +02:00
storage_service_exercises.dart Split storage_service.dart (781) into part extensions 2026-08-15 21:12:08 +02:00
storage_service_sandbox.dart Workout screen never moves when a rest starts; a sandbox flavor to prove it on the phone 2026-09-20 18:55:08 +02:00
storage_service_schema.dart Bring the workout app and status web UI up to latest stable 2026-09-07 15:46:07 +02:00
storage_service_sessions.dart Split storage_service.dart (781) into part extensions 2026-08-15 21:12:08 +02:00
storage_service.dart Workout screen never moves when a rest starts; a sandbox flavor to prove it on the phone 2026-09-20 18:55:08 +02:00
sync_device_id.dart Push under a persisted per-install uuid, not a fixed role id 2026-08-09 17:31:15 +02:00
sync_service.dart Workout screen never moves when a rest starts; a sandbox flavor to prove it on the phone 2026-09-20 18:55:08 +02:00
sync_settings.dart Carry progression through Firebase, and stop demanding storage permission 2026-08-10 16:54:21 +02:00
sync_state_factory.dart Sync workouts through Firebase, mirroring to GitHub during the cutover 2026-08-05 08:12:40 +02:00
sync_status.dart Add sync-status card and duration-threshold fixture 2026-08-15 18:41:31 +02:00
workout_sync_service_read.dart Stop the phone counting deleted and empty manual workouts 2026-08-27 20:13:12 +02:00
workout_sync_service.dart Bring the workout app and status web UI up to latest stable 2026-09-07 15:46:07 +02:00
workout_sync_session.dart Extract WorkoutSyncSession from workout_sync_service.dart (322 -> 218) 2026-08-15 22:28:02 +02:00