Reaction: Make per-device reaction settings easier to find#562
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
settings_reactionDataStore via the existingLegacyReactionSettingsReader. The earlier per-device migration (commit067eb2e9) reads but never deletes those keys, so they persist on old installs months after the migration ran. A newhadLegacyReactionDataflag 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.reactionsHintDismissed = true, gated on the currentshowReactionsHintso we don't re-writetrueovertrueon 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.visibleProfiledDevices.isNotEmpty()rather thanprofiles.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.strings.xml(e.g.upgrade_benefit_disclaimer, default profile name).DeviceSettingsScreenonly rendersReactionsCardwhen 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.IconButton→OutlinedIconButtonswap kept the existingonSurfaceVarianticon tint to avoid color drift across Material 3 default-color updates.Review checklist