Skip to content

feat: recording snackbar indicator (#10) - #17

Merged
DavidHruby1 merged 4 commits into
DavidHruby1:mainfrom
KristianP26:feat/recording-snackbar
Jun 4, 2026
Merged

DavidHruby1 merged 4 commits into
DavidHruby1:mainfrom
KristianP26:feat/recording-snackbar

Conversation

@KristianP26

Copy link
Copy Markdown
Contributor

Summary

Implements roadmap feature #10 Recording Snackbar (docs/FEATURES.md): a small animated on-screen indicator at the bottom-center of the screen.

A new src/snackbar.py provides RecordingSnackbar — a frameless, always-on-top, translucent, click-through overlay (a pill with a pulsing colored dot + label). It shows a red "Recording" pill while capturing audio and an amber "Processing" pill while the pipeline runs, then fades out on idle.

What changed

  • src/snackbar.py (new) — RecordingSnackbar(QWidget) overlay using WindowStaysOnTopHint | FramelessWindowHint | Tool, WA_TranslucentBackground, WA_TransparentForMouseEvents, WA_ShowWithoutActivating, NoFocus. Pulse via QPropertyAnimation on a custom pulse property; show/hide via a windowOpacity fade. Two pure, display-free helpers: snackbar_content_for(state_value) (state→content) and bottom_center_xy(available, size, margin) (geometry).
  • src/main.py — one RecordingSnackbar built in _TrayApp.__init__; driven from the single _apply_state seam; hidden on quit.
  • DocsREADME.md feature bullet + docs/IMPLEMENTATION.md API contract block.

Design decisions

Tests

New: tests/test_snackbar.py (content map, geometry, offscreen widget smoke), tests/test_snackbar_wiring.py (state→show/hide contract). Full suite: 54 passing (offscreen).

python -m compileall src/
QT_QPA_PLATFORM=offscreen python -m unittest discover -s tests

Manual smoke (python -m src.main): app starts clean; the pill shows/updates across Recording→Processing→idle and renders without error.

Add src/snackbar.py: a frameless, always-on-top, translucent, click-through status pill rendered at the bottom-center of the primary screen, with a pulsing colored dot plus label. Includes pure, display-free helpers snackbar_content_for (state->content) and bottom_center_xy (geometry), unit-tested without a QApplication.
Build one RecordingSnackbar in _TrayApp and show/hide it from the single _apply_state seam: a red "Recording" pill while capturing, an amber "Processing" pill while the pipeline runs, hidden on idle. Hide it on quit. Always-on for v1; no config/settings surface.
Add the on-screen recording indicator to the README feature list and a snackbar.py API contract block in IMPLEMENTATION.md.
@DavidHruby1
DavidHruby1 merged commit fe05927 into DavidHruby1:main Jun 4, 2026
3 checks passed
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.

2 participants