Skip to content

Issue 226 and 240 solved. - #259

Open
YCK03 wants to merge 19 commits into
soundscape-community:mainfrom
YCK03:kishoy
Open

Issue 226 and 240 solved.#259
YCK03 wants to merge 19 commits into
soundscape-community:mainfrom
YCK03:kishoy

Conversation

@YCK03

@YCK03 YCK03 commented Apr 15, 2026

Copy link
Copy Markdown
Contributor

Summary by CodeRabbit

  • New Features

    • Added toggles to control callout sound effects (earcons) and inter-call delays; callouts now respect these settings app-wide.
  • Bug Fixes

    • Corrected grammar in audio session warning messages.
  • UI Updates

    • Settings screen exposes new Callouts options with localized labels and explanatory info; enabling/disabling persists and emits telemetry.

@coderabbitai

coderabbitai Bot commented Apr 15, 2026

Copy link
Copy Markdown
📝 Walkthrough

Walkthrough

Adds two user-configurable callout settings (earcons and inter-call delays), persists them in SettingsContext with notifications, and gates callout earcon inclusion and callout delays across generators and callout composition. UI, localization, and storyboard were updated to expose the new settings.

Changes

Cohort / File(s) Summary
Settings Infrastructure
apps/ios/GuideDogs/Code/App/Settings/SettingsContext.swift, apps/ios/GuideDogs/Code/App/Settings/AutoCalloutSettingsProvider.swift
Added calloutsEarconEnabled and calloutsDelayEnabled to the settings protocol and SettingsContext (UserDefaults-backed, notifications added); expanded provider with per-sense flags.
Callout Delay Logic
apps/ios/GuideDogs/Code/Behaviors/Default/AutoCalloutGenerator.swift, apps/ios/GuideDogs/Code/Behaviors/Default/BeaconCalloutGenerator.swift, apps/ios/GuideDogs/Code/Behaviors/Default/ExplorationGenerator.swift
Replaced fixed delay constants with runtime-computed delays based on SettingsContext.shared.calloutsDelayEnabled (uses configured delay or 0.0).
Callout Earcon Logic
apps/ios/GuideDogs/Code/Behaviors/Default/Callouts/DestinationCallout.swift, .../IntersectionCallout.swift, .../POICallout.swift, apps/ios/GuideDogs/Code/Behaviors/Preview/PreviewGenerator.swift, apps/ios/GuideDogs/Code/Data/Preview/IntersectionDecisionPoint.swift, apps/ios/GuideDogs/Code/Generators/Callouts/Location Callouts/...
Guarded prefix earcons and layered-earcon logic behind SettingsContext.shared.calloutsEarconEnabled; when disabled, return TTS-only. Adjusted layering/concatenation fallbacks and error messages.
Settings UI
apps/ios/GuideDogs/Code/Visual UI/Controls/Settings/CalloutSettingsCellView.swift, apps/ios/GuideDogs/Code/Visual UI/View Controllers/Settings/SettingsViewController.swift
Added soundEffects and delays cell types/cases; wired switches to new SettingsContext properties and telemetry; updated row counts, identifiers, and collapsible index paths to include new rows.
Localization & Storyboard
apps/ios/GuideDogs/Assets/Localization/en-US.lproj/Localizable.strings, apps/ios/GuideDogs/Code/Visual UI/Views/Settings.storyboard
Added localized strings for new settings; storyboard metadata/frame adjustments and removal of some designable overrides.
Minor/Formatting Fixes
apps/ios/GuideDogs/Code/Audio/AudioSessionManager.swift, apps/ios/GuideDogs/Code/Audio/DynamicAudioPlayer.swift, apps/ios/GuideDogs/Code/Audio/FadeableAudioPlayer.swift, apps/ios/GuideDogs/Code/Behaviors/Helpers/BeaconUpdateFilter.swift
Spelling/grammar fixes in logs/comments, minor formatting/trailing-whitespace edits; no behavior changes.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant SettingsUI as Settings UI
    participant Settings as SettingsContext
    participant Generators as Callout Generators
    participant Callouts as Callout Implementations
    participant Audio as Audio Output

    User->>SettingsUI: Toggle earcon / delay
    SettingsUI->>Settings: set calloutsEarconEnabled / calloutsDelayEnabled
    Settings->>Settings: persist to UserDefaults
    Settings->>Settings: post Notification
    Generators->>Settings: query calloutsDelayEnabled
    Generators->>Generators: compute calloutDelay (configured or 0.0)
    Generators->>Callouts: create CalloutGroup (with delay)
    Callouts->>Settings: query calloutsEarconEnabled
    Callouts->>Callouts: include earcon if enabled (layer or fallback)
    Callouts->>Audio: play callout (with/without earcon, with delay)
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Poem

🐰 I twitched my whiskers, toggled sound,

Earcons hop and pauses found,
Switches set and defaults saved,
Callouts layer or stay brave,
A happy rabbit cheers aloud.

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 35.29% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive The title "Issue 226 and 240 solved" is vague and generic; it references issue numbers without describing what those issues actually address or what changes were made. Replace with a descriptive title that summarizes the main changes, e.g., "Add callout earcon and delay toggles to settings" to clarify the primary purpose of the changeset.
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
⚔️ Resolve merge conflicts
  • Resolve merge conflict in branch kishoy

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 4

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
apps/ios/GuideDogs/Code/Visual UI/View Controllers/Settings/SettingsViewController.swift (1)

58-65: ⚠️ Potential issue | 🟠 Major

Keep soundEffects and delays visible when automatic callouts are off.

These two rows are being collapsed with the automatic-callouts children, but the settings are consumed outside automatic callouts too. ExplorationGenerator still reads calloutsDelayEnabled for manual exploration, and PreviewGenerator still reads calloutsEarconEnabled for preview/manual callouts. With the current row-count/collapse logic, users who turn automatic callouts off lose access to settings that still affect their remaining callout experience.

Also applies to: 94-95

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/ios/GuideDogs/Code/Visual` UI/View
Controllers/Settings/SettingsViewController.swift around lines 58 - 65, The
collapsibleCalloutIndexPaths array currently includes CalloutsRow.soundEffects
and CalloutsRow.delays which should remain visible even when automatic callouts
are collapsed; remove IndexPath entries for CalloutsRow.soundEffects and
CalloutsRow.delays from collapsibleCalloutIndexPaths (and from the other
identical occurrence referenced around the later block) so those rows are not
part of the collapse logic (keep Section.callouts and other CalloutsRow entries
intact), and ensure any UI collapse/filtering code that reads
collapsibleCalloutIndexPaths continues to operate without those two rows.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@apps/ios/GuideDogs/Code/Audio/FadeableAudioPlayer.swift`:
- Line 8: Update the class comment for FadeableAudioPlayer to fix the typo
("whenver" → "whenever") and broaden the description to mention both fadeIn and
fadeOut functionality; locate the comment above the FadeableAudioPlayer
declaration (or near methods fadeIn/fadeOut) and change the text to something
like "Allows audio to fade in and out whenever needed" or equivalent concise
description that references both fadeIn and fadeOut behaviors.

In `@apps/ios/GuideDogs/Code/Behaviors/Default/AutoCalloutGenerator.swift`:
- Around line 121-123: The computed property calloutDelay currently reads
SettingsContext.shared.calloutsDelayEnabled which bypasses the injected settings
provider; change it to use the instance-level settings provider (e.g.,
settings.calloutsDelayEnabled or the appropriate injected
AutoCalloutSettingsProvider property) so calloutDelay returns 0.75 when the
injected provider indicates calloutsDelayEnabled and 0.0 otherwise; update the
calloutDelay getter to reference the injected provider instead of
SettingsContext.shared to avoid desync.

In `@apps/ios/GuideDogs/Code/Behaviors/Default/BeaconCalloutGenerator.swift`:
- Around line 65-67: The calloutDelay property in BeaconCalloutGenerator
(private var calloutDelay) changed the enabled delay to 1.00, causing a mismatch
with AutoCalloutGenerator which uses 0.75; change BeaconCalloutGenerator to use
the same default pacing (0.75) when SettingsContext.shared.calloutsDelayEnabled
is true, or better yet read a single shared constant/config value used by
AutoCalloutGenerator (e.g., a shared defaultCalloutDelay on SettingsContext) so
both generators use the same delay.

In `@apps/ios/GuideDogs/Code/Visual`
UI/Controls/Settings/CalloutSettingsCellView.swift:
- Around line 47-54: The cell configuration must fully reset all reused UI and
accessibility fields and use localization; in the CalloutSettingsCellView (the
switch/case that sets .soundEffects and .delays) ensure every case (including
.shake) assigns textLabel?.text, detailTextLabel?.text, settingSwitch.isOn and
accessibilityLabel/accessibilityValue (or clears them) so reused cells can't
keep stale values, and replace hardcoded English strings with localized
equivalents (e.g., NSLocalizedString keys matching the screen's pattern). Also
add a default/reset path that clears or sets sensible defaults for any fields
not explicitly set.

---

Outside diff comments:
In `@apps/ios/GuideDogs/Code/Visual` UI/View
Controllers/Settings/SettingsViewController.swift:
- Around line 58-65: The collapsibleCalloutIndexPaths array currently includes
CalloutsRow.soundEffects and CalloutsRow.delays which should remain visible even
when automatic callouts are collapsed; remove IndexPath entries for
CalloutsRow.soundEffects and CalloutsRow.delays from
collapsibleCalloutIndexPaths (and from the other identical occurrence referenced
around the later block) so those rows are not part of the collapse logic (keep
Section.callouts and other CalloutsRow entries intact), and ensure any UI
collapse/filtering code that reads collapsibleCalloutIndexPaths continues to
operate without those two rows.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 9430ad70-e976-4376-b046-dbbe6c17ced6

📥 Commits

Reviewing files that changed from the base of the PR and between 1130855 and d251695.

⛔ Files ignored due to path filters (1)
  • VibroGuide/VibroGuide_User_Evaluation_Survey.pdf is excluded by !**/*.pdf
📒 Files selected for processing (19)
  • apps/ios/GuideDogs/Code/App/Settings/SettingsContext.swift
  • apps/ios/GuideDogs/Code/Audio/AudioSessionManager.swift
  • apps/ios/GuideDogs/Code/Audio/DynamicAudioPlayer.swift
  • apps/ios/GuideDogs/Code/Audio/FadeableAudioPlayer.swift
  • apps/ios/GuideDogs/Code/Behaviors/Default/AutoCalloutGenerator.swift
  • apps/ios/GuideDogs/Code/Behaviors/Default/BeaconCalloutGenerator.swift
  • apps/ios/GuideDogs/Code/Behaviors/Default/Callouts/DestinationCallout.swift
  • apps/ios/GuideDogs/Code/Behaviors/Default/Callouts/IntersectionCallout.swift
  • apps/ios/GuideDogs/Code/Behaviors/Default/Callouts/POICallout.swift
  • apps/ios/GuideDogs/Code/Behaviors/Default/ExplorationGenerator.swift
  • apps/ios/GuideDogs/Code/Behaviors/Helpers/BeaconUpdateFilter.swift
  • apps/ios/GuideDogs/Code/Behaviors/Preview/PreviewGenerator.swift
  • apps/ios/GuideDogs/Code/Data/Preview/IntersectionDecisionPoint.swift
  • apps/ios/GuideDogs/Code/Generators/Callouts/Location Callouts/AlongRoadLocationCallout.swift
  • apps/ios/GuideDogs/Code/Generators/Callouts/Location Callouts/InsideLocationCallout.swift
  • apps/ios/GuideDogs/Code/Generators/Callouts/Location Callouts/LocationCallout.swift
  • apps/ios/GuideDogs/Code/Visual UI/Controls/Settings/CalloutSettingsCellView.swift
  • apps/ios/GuideDogs/Code/Visual UI/View Controllers/Settings/SettingsViewController.swift
  • apps/ios/GuideDogs/Code/Visual UI/Views/Settings.storyboard

// Licensed under the MIT License.
//

// Allows audio to fade in whenver needed.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Fix typo and incomplete description in comment.

The comment has two issues:

  • Typo: "whenver" should be "whenever"
  • The description mentions only fade in functionality, but the class also implements fade out (fadeOut method)
📝 Proposed fix
-//  Allows audio to fade in whenver needed.
+//  Allows audio to fade in and fade out as needed.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
// Allows audio to fade in whenver needed.
// Allows audio to fade in and fade out as needed.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/ios/GuideDogs/Code/Audio/FadeableAudioPlayer.swift` at line 8, Update
the class comment for FadeableAudioPlayer to fix the typo ("whenver" →
"whenever") and broaden the description to mention both fadeIn and fadeOut
functionality; locate the comment above the FadeableAudioPlayer declaration (or
near methods fadeIn/fadeOut) and change the text to something like "Allows audio
to fade in and out whenever needed" or equivalent concise description that
references both fadeIn and fadeOut behaviors.

Comment on lines +121 to +123
private var calloutDelay: Double {
return SettingsContext.shared.calloutsDelayEnabled ? 0.75 : 0.0
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Use the injected settings provider for calloutDelay, not the global singleton.

Line 121 currently reads from SettingsContext.shared, which bypasses settings and can desync behavior when a non-shared AutoCalloutSettingsProvider is supplied.

🔧 Proposed fix
-    private var calloutDelay: Double {
-        return SettingsContext.shared.calloutsDelayEnabled ? 0.75 : 0.0
-    }
+    private var calloutDelay: Double {
+        return settings.calloutsDelayEnabled ? 0.75 : 0.0
+    }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/ios/GuideDogs/Code/Behaviors/Default/AutoCalloutGenerator.swift` around
lines 121 - 123, The computed property calloutDelay currently reads
SettingsContext.shared.calloutsDelayEnabled which bypasses the injected settings
provider; change it to use the instance-level settings provider (e.g.,
settings.calloutsDelayEnabled or the appropriate injected
AutoCalloutSettingsProvider property) so calloutDelay returns 0.75 when the
injected provider indicates calloutsDelayEnabled and 0.0 otherwise; update the
calloutDelay getter to reference the injected provider instead of
SettingsContext.shared to avoid desync.

Comment on lines +65 to +67
private var calloutDelay: Double {
return SettingsContext.shared.calloutsDelayEnabled ? 1.00 : 0.0
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Keep the beacon delay aligned with the existing default.

This toggle also changes beacon pacing from 0.75 to 1.0, while apps/ios/GuideDogs/Code/Behaviors/Default/AutoCalloutGenerator.swift:121-123 still uses 0.75. If the goal here is only to make the delay configurable, this introduces an unadvertised timing change and inconsistent cadence across generators.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/ios/GuideDogs/Code/Behaviors/Default/BeaconCalloutGenerator.swift`
around lines 65 - 67, The calloutDelay property in BeaconCalloutGenerator
(private var calloutDelay) changed the enabled delay to 1.00, causing a mismatch
with AutoCalloutGenerator which uses 0.75; change BeaconCalloutGenerator to use
the same default pacing (0.75) when SettingsContext.shared.calloutsDelayEnabled
is true, or better yet read a single shared constant/config value used by
AutoCalloutGenerator (e.g., a shared defaultCalloutDelay on SettingsContext) so
both generators use the same delay.

Comment on lines +47 to +54
case .soundEffects:
textLabel?.text = "Sound Effects"
detailTextLabel?.text = "Sounds played before callout"
settingSwitch.isOn = SettingsContext.shared.calloutsEarconEnabled
case .delays:
textLabel?.text = "Delays"
detailTextLabel?.text = "Short pauses between callouts"
settingSwitch.isOn = SettingsContext.shared.calloutsDelayEnabled

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Fully reconfigure reused cells here.

SettingsViewController now reuses the "shakeCallouts" prototype for .shake, .soundEffects, and .delays, but only the new cases overwrite the title/subtitle. A cell previously configured as .soundEffects or .delays can be reused as .shake and keep the wrong text/accessibility unless every case resets those fields. Also, these new labels are hardcoded English, so they bypass the localization pattern used by the rest of this screen.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/ios/GuideDogs/Code/Visual`
UI/Controls/Settings/CalloutSettingsCellView.swift around lines 47 - 54, The
cell configuration must fully reset all reused UI and accessibility fields and
use localization; in the CalloutSettingsCellView (the switch/case that sets
.soundEffects and .delays) ensure every case (including .shake) assigns
textLabel?.text, detailTextLabel?.text, settingSwitch.isOn and
accessibilityLabel/accessibilityValue (or clears them) so reused cells can't
keep stale values, and replace hardcoded English strings with localized
equivalents (e.g., NSLocalizedString keys matching the screen's pattern). Also
add a default/reset path that clears or sets sensible defaults for any fields
not explicitly set.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

♻️ Duplicate comments (1)
apps/ios/GuideDogs/Code/Visual UI/Controls/Settings/CalloutSettingsCellView.swift (1)

45-54: ⚠️ Potential issue | 🟡 Minor

Fully reset .shake cell content to avoid stale reused labels.

.soundEffects/.delays overwrite title/subtitle, but .shake does not. With reused cells, .shake can display stale text/detail from a previous type unless those fields are explicitly restored/cleared.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/ios/GuideDogs/Code/Visual`
UI/Controls/Settings/CalloutSettingsCellView.swift around lines 45 - 54, The
.shake case in CalloutSettingsCellView is leaving textLabel/detailTextLabel
unchanged, causing reused UITableViewCell instances to show stale
titles/subtitles; update the .shake branch to explicitly set or clear
textLabel?.text and detailTextLabel?.text (and ensure settingSwitch.isOn still
reads SettingsContext.shared.shakeCalloutsEnabled) so the cell fully resets when
reused.
🧹 Nitpick comments (1)
apps/ios/GuideDogs/Code/App/Settings/AutoCalloutSettingsProvider.swift (1)

30-31: Fix minor typo in the doc comment.

"enabled/" has a trailing slash; this should be cleaned up for clarity.

Suggested patch
-    /// Whether information callouts are enabled/
+    /// Whether information callouts are enabled
     var informationSenseEnabled: Bool { get set }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/ios/GuideDogs/Code/App/Settings/AutoCalloutSettingsProvider.swift`
around lines 30 - 31, The doc comment for the property informationSenseEnabled
contains a trailing slash; update the comment above var informationSenseEnabled
in AutoCalloutSettingsProvider.swift to remove the extraneous "/" so it reads
cleanly (e.g., "Whether information callouts are enabled").
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@apps/ios/GuideDogs/Code/Visual`
UI/Controls/Settings/CalloutSettingsCellView.swift:
- Around line 45-54: The .shake case in CalloutSettingsCellView is leaving
textLabel/detailTextLabel unchanged, causing reused UITableViewCell instances to
show stale titles/subtitles; update the .shake branch to explicitly set or clear
textLabel?.text and detailTextLabel?.text (and ensure settingSwitch.isOn still
reads SettingsContext.shared.shakeCalloutsEnabled) so the cell fully resets when
reused.

---

Nitpick comments:
In `@apps/ios/GuideDogs/Code/App/Settings/AutoCalloutSettingsProvider.swift`:
- Around line 30-31: The doc comment for the property informationSenseEnabled
contains a trailing slash; update the comment above var informationSenseEnabled
in AutoCalloutSettingsProvider.swift to remove the extraneous "/" so it reads
cleanly (e.g., "Whether information callouts are enabled").

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 55e890f7-0990-47e9-89dc-5e13f60d9c31

📥 Commits

Reviewing files that changed from the base of the PR and between d251695 and fe41a95.

📒 Files selected for processing (3)
  • apps/ios/GuideDogs/Assets/Localization/en-US.lproj/Localizable.strings
  • apps/ios/GuideDogs/Code/App/Settings/AutoCalloutSettingsProvider.swift
  • apps/ios/GuideDogs/Code/Visual UI/Controls/Settings/CalloutSettingsCellView.swift
✅ Files skipped from review due to trivial changes (1)
  • apps/ios/GuideDogs/Assets/Localization/en-US.lproj/Localizable.strings

@jchudge

jchudge commented Apr 21, 2026

Copy link
Copy Markdown

@YCK03 @MBtheOtaku quick question...re the work on tidying up the callouts experience, are you working together on this or separate from each other? Keen to avoid duplication of effort
Cc @wdturner @RDMurray

@YCK03

YCK03 commented Apr 23, 2026

Copy link
Copy Markdown
Contributor Author

I have been working seperatly from MBtheOtaku.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

♻️ Duplicate comments (1)
apps/ios/GuideDogs/Code/Visual UI/Controls/Settings/CalloutSettingsCellView.swift (1)

47-54: ⚠️ Potential issue | 🟡 Minor

Prevent stale reused cell text when switching back to .shake.

At Line 45-54, .soundEffects/.delays overwrite title/subtitle, but .shake does not. A reused cell can retain stale text/details when reconfigured as .shake. Please explicitly set (or reset) these fields for .shake as well.

Suggested fix
             case .shake:
+                textLabel?.text = GDLocalizedString("callouts.shake")
+                detailTextLabel?.text = GDLocalizedString("callouts.shake.info")
                 settingSwitch.isOn = SettingsContext.shared.shakeCalloutsEnabled
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/ios/GuideDogs/Code/Visual`
UI/Controls/Settings/CalloutSettingsCellView.swift around lines 47 - 54, The
.shake case in CalloutSettingsCellView currently doesn't set
textLabel/detailTextLabel, so reused UITableViewCell instances can show stale
text when reconfigured from .soundEffects or .delays; update the .shake branch
in the cell configuration (where .soundEffects and .delays are handled) to
explicitly set textLabel?.text and detailTextLabel?.text (and set
settingSwitch.isOn to SettingsContext.shared.calloutsShakeEnabled) so all three
cases (.shake, .soundEffects, .delays) fully initialize the visible fields and
prevent reuse artifacts.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@apps/ios/GuideDogs/Code/Visual`
UI/Controls/Settings/CalloutSettingsCellView.swift:
- Around line 47-54: The .shake case in CalloutSettingsCellView currently
doesn't set textLabel/detailTextLabel, so reused UITableViewCell instances can
show stale text when reconfigured from .soundEffects or .delays; update the
.shake branch in the cell configuration (where .soundEffects and .delays are
handled) to explicitly set textLabel?.text and detailTextLabel?.text (and set
settingSwitch.isOn to SettingsContext.shared.calloutsShakeEnabled) so all three
cases (.shake, .soundEffects, .delays) fully initialize the visible fields and
prevent reuse artifacts.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 0ae8efb6-fa98-4661-a5d4-2ae6c2230607

📥 Commits

Reviewing files that changed from the base of the PR and between fe41a95 and 7494276.

📒 Files selected for processing (4)
  • apps/ios/GuideDogs/Assets/Localization/en-US.lproj/Localizable.strings
  • apps/ios/GuideDogs/Code/App/Settings/AutoCalloutSettingsProvider.swift
  • apps/ios/GuideDogs/Code/Behaviors/Default/ExplorationGenerator.swift
  • apps/ios/GuideDogs/Code/Visual UI/Controls/Settings/CalloutSettingsCellView.swift
✅ Files skipped from review due to trivial changes (2)
  • apps/ios/GuideDogs/Assets/Localization/en-US.lproj/Localizable.strings
  • apps/ios/GuideDogs/Code/App/Settings/AutoCalloutSettingsProvider.swift

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.

3 participants