Reset Individual Settings: per-category reset, remove per-screen icons, accessible Reset App Settings screen - #683
Open
Mansimran Singh (Mansimran-Singh) wants to merge 8 commits into
Conversation
Adds a reset icon + confirmation dialog to each settings-adjacent screen (Voice, Timing/Sensitivity, Selection Mode, Categories, Phrases), each scoped to only its own domain, plus a new "Reset App Settings" screen with per-domain checkboxes and a separate nuclear "Reset Everything" option styled in the app's destructive color. Extracts a reusable ConfirmationDialog composable used by all of the above. Implements #672. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Move the Phrases reset icon off EditCategoriesScreen (which now only resets Categories) onto EditCategoryPhrasesScreen, scoped to just that one category instead of every phrase app-wide. Adds IPhrasesUseCase.resetPhrasesForCategory() to support it. - Replace the placeholder ic_undo icon with a proper ic_reset drawable. - Fix reset-icon headers overlapping their screen title: titles weren't width-constrained against the new icon, so long text rendered underneath it. Bound each title between its two nearest header buttons with fillToConstraints + ellipsis. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…pp Settings screen Adds a Reset Category button to EditCategoryMenuScreen for non-custom categories (gated like Remove Category, with a confirmation dialog), removes the now-redundant per-screen reset icons on Voice/Sensitivity/Selection Mode/Categories/Phrases in favor of the centralized Reset App Settings screen, and reworks that screen for gaze/ALS accessibility: bullet-dot selection indicators, full-row selected-state styling like other gaze buttons, a description-free domain grid that defaults to one full-width button per row and only adds columns (2, then 3) when vertical space forces it, and measured pagination as a fallback for screens too short to fit even that. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Several screens fell back to flat Material3 defaults instead of this app's own per-breakpoint dimens.xml convention, most notably the keyboard's letter-key and typed-input text - traced via git blame to an orphaned dimen left behind by the 2020 Compose rewrite. Wires those (and two similarly orphaned dimens on EditCategoryMenuScreen/SensitivityScreen) back in, corrects settings_title_text_size's phone value to match iOS's compact size (tablet already matched), and gives the six remaining genuine hardcoded text sizes proper per-breakpoint dimens. Font family (Roboto/San Francisco, each platform's OS default) was already correct on both sides and is unchanged. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…nto feature/672/reset-individual-settings
…tegory Merges feature/681/typography-parity so this branch picks up the newly-established per-breakpoint font-size conventions, and applies the same fix to the Reset Category button (added after that branch diverged, so it still had a hardcoded fontSize). Also moves Reset Category above Remove Category in EditCategoryMenuScreen's action list - the less-destructive action reads better before the fully-destructive one - and swaps the two buttons' reveal priority to match, so a cramped screen still reveals top-to-bottom in drawn order. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…pp -> Reset Vocable
The Reset App Settings screen's standalone "Phrases" checkbox called
resetToDefaults() - the same nuclear method backing "Reset Everything" - which
deleted every custom phrase too (both in preset categories and user-created ones).
A domain reset should only put back content that has a default to return to, so adds
IPhrasesUseCase.resetPresetPhrasesToDefaults(), which only touches preset-derived
("shadow") phrases across preset categories, identified by their array-entry-name
phraseId per RoomPresetPhrasesRepository's existing shadow-detection invariant -
genuinely custom phrases anywhere are left untouched. Also renames "Reset App" to
"Reset Vocable", matching the app's own existing phrasing.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…d toast feedback resetPresetPhrasesToDefaults() only removed shadow (edited) phrases within preset categories, leaving newly-added custom phrases behind - found via live device testing. A preset category's default is the array it was seeded from, so any deviation since (edit or addition) should revert; corrected the method to wipe every stored phrase per real preset category (excluding Recents/My Sayings, which have no default set) before repopulating, reusing the same shape resetPhrasesForCategory already uses for a single category. Removes the now-unused StoredPhrasesRepository.getAllPhrases() added for the old (too-narrow) filter. Also adds toast feedback after a reset completes - the screen previously gave no indication either way - via a ResetSettingsEvent.ShowResetResult(success) event matching the existing KeyboardEvent.ShowToast convention, with confirmDialog() now catching (and reporting) failures without swallowing coroutine cancellation. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Mansimran Singh (Mansimran-Singh)
requested review from
Michael Gonzalez (MicGon7) and
dlucci-wt
as code owners
August 19, 2026 03:41
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.
Summary
Reset Categorybutton toEditCategoryMenuScreenfor non-custom (preset) categories, styled like and positioned aboveRemove Category(less-destructive action before the fully-destructive one), gated behind a confirmation dialogmain, since those changes will then be common ancestryTicket
Closes #672
Type of Change
Testing
./gradlew compileDebugKotlin testDebugUnitTest— pass./gradlew assembleDebug assembleDebugAndroidTest— pass./gradlew connectedDebugAndroidTestforPhrasesUseCaseTest(16 cases) — pass, run against a connected physical deviceChecklist
Documentation/work-log/672-reset-individual-settings.md🤖 Generated with Claude Code