Wholphin/app/src/main/java/com/github/damontecres/wholphin/ui
Justin Caveda d725821011
[FEAT] Add voicesearch button to search page (#637)
## Description
This PR is a rewrite of a previously submitted PR for this same feature.
It implements native Voice Search for Android TV using Android's
SpeechRecognizer API.

Key Changes

  New Files:
- VoiceInputManager.kt - Handles SpeechRecognizer lifecycle, permission
management, and audio level normalization
- VoiceSearchButton.kt - Composable button with audio-reactive pulse and
full-screen listening dialog

  UI/UX:
  - Audio-reactive microphone button that pulses based on input volume
  - Full-screen listening overlay with animated states:
- Listening - Pulsing bubble with ripple rings, shows partial
transcription
    - Processing - Animated dots while waiting for final result
- Error - Red bubble with localized error message, auto-dismisses after
3s

### Related issues
Resolves https://github.com/damontecres/Wholphin/issues/515

### AI/LLM usage
The initial draft of this change from the prior PR was created with the
assistance of Claude Code, which was heavily leaned on for the overlay.
I have taken the initial draft, gone through it, and re-implemented by
hand to clean it up, narrow the scope (AI loves to touch and change
things unrelated to what you're working on) and make it more readable.
AI was used in the last stage to assist with finding any logic
errors/bugs I may have missed (by looking through code and also by
looking over ADB logs from testing on Nvidia Shield).. AI was also used
to create the tests found in TestVoiceInputManager.kt. Lastly, I fed the
diffs to an AI to help summarize the changes for this PR in an easy to
read manner.

---------

Co-authored-by: Damontecres <damontecres@gmail.com>
2026-01-14 17:06:22 -05:00
..
cards Use circular cards for people (#691) 2026-01-13 14:16:49 -05:00
components [FEAT] Add voicesearch button to search page (#637) 2026-01-14 17:06:22 -05:00
data Consistent audio/subtitle info across dialogs (#664) 2026-01-11 12:46:38 -05:00
detail Fixes to genre grids (#693) 2026-01-13 16:05:09 -05:00
discover Add integration with Jellyseerr/Seerr (#558) 2026-01-12 16:35:27 -05:00
main [FEAT] Add voicesearch button to search page (#637) 2026-01-14 17:06:22 -05:00
nav Add integration with Jellyseerr/Seerr (#558) 2026-01-12 16:35:27 -05:00
playback Add integration with Jellyseerr/Seerr (#558) 2026-01-12 16:35:27 -05:00
preferences Fix wrong dialog showing after Seerr login (#688) 2026-01-13 15:32:29 -05:00
setup Fix wrong dialog showing after Seerr login (#688) 2026-01-13 15:32:29 -05:00
theme Consistent audio/subtitle info across dialogs (#664) 2026-01-11 12:46:38 -05:00
util Consistent audio/subtitle info across dialogs (#664) 2026-01-11 12:46:38 -05:00
CoilConfig.kt Prefetch trickplay images (#445) 2025-12-12 22:04:52 -05:00
CoilTrickplayTransformation.kt Rebrand 2025-10-15 15:27:30 -04:00
CrossFadeFactory.kt Better video grid, poster images, & home page images (#238) 2025-11-17 13:44:03 -05:00
Extensions.kt Fix home header not updating & row movement (#627) 2026-01-03 18:09:40 -05:00
Formatting.kt Add integration with Jellyseerr/Seerr (#558) 2026-01-12 16:35:27 -05:00
UiConstants.kt Add integration with Jellyseerr/Seerr (#558) 2026-01-12 16:35:27 -05:00