Skip to content

Reaction: Make per-device reaction settings easier to find#562

Merged
d4rken merged 1 commit into
mainfrom
feat/reactions-discoverability-hint
Apr 30, 2026
Merged

Reaction: Make per-device reaction settings easier to find#562
d4rken merged 1 commit into
mainfrom
feat/reactions-discoverability-hint

Conversation

@d4rken

@d4rken d4rken commented Apr 30, 2026

Copy link
Copy Markdown
Member

What changed

For users who configured reactions before they moved to per-device profile settings, the dashboard now shows a small hint pointing to where those settings live. The settings icon on each device card and on the Device Manager screen also reads more clearly as a tappable button (outlined style instead of a flat icon).

The hint only shows for users who actually used the old global reaction settings — new installs and existing users who never touched reactions never see it.

Technical Context

  • Upgrader detection reads the legacy settings_reaction DataStore via the existing LegacyReactionSettingsReader. The earlier per-device migration (commit 067eb2e9) reads but never deletes those keys, so they persist on old installs months after the migration ran. A new hadLegacyReactionData flag is computed once on every app start (cheap probe wrapped in a try-catch) — this works retroactively for users who already migrated before this PR.
  • Hint dismissal is implicit only: tapping the device-settings gear writes reactionsHintDismissed = true, gated on the current showReactionsHint so we don't re-write true over true on every subsequent gear tap. An explicit × button was considered and dropped — the implicit pattern is enough since tapping the gear proves discovery, and removing it makes the card less noisy.
  • Hint is gated on visibleProfiledDevices.isNotEmpty() rather than profiles.isNotEmpty() because a fresh install has a default profile (DeviceProfilesRepo.kt:40) but the device card list is empty until at least one device is live or cached. Without that guard the hint would point to a button that doesn't exist yet.
  • The hint copy says "headphones" rather than "AirPods" because the app supports Beats and other Apple-protocol devices, matching the wording used elsewhere in strings.xml (e.g. upgrade_benefit_disclaimer, default profile name).
  • DeviceSettingsScreen only renders ReactionsCard when the device is classically connected (DeviceSettingsScreen.kt:333). Rather than loosen that gate (separate UX consideration), the hint copy explicitly notes "while your headphones are connected" so users in the disconnected state aren't sent on a dead-end tap.
  • IconButtonOutlinedIconButton swap kept the existing onSurfaceVariant icon tint to avoid color drift across Material 3 default-color updates.

Review checklist

  • On a fresh install (no legacy reaction DataStore): hint never appears, even after pairing a device.
  • On an upgrader install (legacy DataStore has at least one non-default reaction value): hint appears above device cards once at least one device is visible.
  • Tapping the gear on any device card dismisses the hint permanently (survives process restart).
  • Disconnected device case: hint still shows, copy ("while your headphones are connected") sets the right expectation.
  • Outlined icon button reads correctly on Overview cards (single + dual pod) and on Device Manager rows; tap target unchanged.

@d4rken d4rken added the enhancement Add a new feature of improve an existing feature label Apr 30, 2026
@d4rken d4rken merged commit abde0b7 into main Apr 30, 2026
10 checks passed
@d4rken d4rken deleted the feat/reactions-discoverability-hint branch April 30, 2026 15:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement Add a new feature of improve an existing feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant