Skip to content

Conversation

@gsalinaslopez
Copy link
Collaborator

Changes

  • Sticky group headers for snapcast control list
  • Snapcast control list composable and viewModel state list refactoring/simplification
  • Separate NowPlayingScreen viewModel, being in charge of audio channel selection and snapcast control interaction
  • Fix bug to remember last played snapserver on TuneIn Screen

Copy link
Contributor

@guerman5 guerman5 left a comment

Choose a reason for hiding this comment

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

This PR introduces the Snapserver group UI with sticky headers, volume controls, and better client grouping, making multi-device audio smoother. The ViewModel refactor and added tests look solid. With 35 files changed, we should keep an eye on edge cases.

@gsalinaslopez gsalinaslopez changed the base branch from main to develop December 1, 2025 08:05
@gsalinaslopez gsalinaslopez merged commit 595afdb into develop Dec 1, 2025
5 checks passed
@gsalinaslopez gsalinaslopez deleted the feat/snapserver-group-ui branch December 1, 2025 08:06
NowPlayingScreenContent(
uiState = uiState,
groups = viewModel.groups,
onClientVolumeChange = viewModel::onClientVolumeChange,
Copy link
Collaborator

Choose a reason for hiding this comment

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

SnarserverGroups call shows onClientVolumeChange twice in the diff. Once here and once in Line115. Make sure final code only passes this parameter once.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

it may appear as being passed twice but in reality is being hoisted by the topmost NowPlayingScreen which in turns calls the function on the viewModel, making it the final point of action


@Preview(showBackground = true)
@Composable
fun NowPlayingScreenContentPreview() {
Copy link
Collaborator

Choose a reason for hiding this comment

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

The mock group/client construction is duplicated between Broadcaster and NowPlaying previews; you could extract a small helper to avoid repeating that structure, but that’s a minor nit.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Minor NIT agree.

Copy link
Collaborator

@garpernica garpernica left a comment

Choose a reason for hiding this comment

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

Nice improvements, NowPlaying has its own ViewModel + UI state more testable and preview-friendly. Snapserver used from both Broadcaster and NowPlaying reduces duplication and keeps the Snapserver group UI consistent.

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.

4 participants