Skip to content

Add General / Permissions / About panes to redesigned Settings#364

Merged
FuJacob merged 2 commits into
mainfrom
feat/settings-redesign-general-perms-about
May 28, 2026
Merged

Add General / Permissions / About panes to redesigned Settings#364
FuJacob merged 2 commits into
mainfrom
feat/settings-redesign-general-perms-about

Conversation

@FuJacob
Copy link
Copy Markdown
Owner

@FuJacob FuJacob commented May 28, 2026

Re-opened after base branch was deleted by the PR #356 merge. Same content as the closed #357, rebased onto current main (incorporates the tooltip-removal PR #362 — every .cotabbyHelp(...) chain is gone) plus the Greptile fixes for scene-active refresh and safer URL handling.

Validation

  • xcodebuild build → BUILD SUCCEEDED
  • swiftlint --quiet → clean

Risk / rollout

Stacked: depends on PR #356 being on main, which it now is. Next in the stack will rebase onto this.

Greptile Summary

Promotes three Settings panes — General, Permissions, and About — from the PlaceholderPaneView stub to their real implementations, and adds an Acknowledgements modal sheet accessible from the About pane.

  • GeneralPaneView lifts the existing toggles and ghost-text controls out of the legacy settings view into the new SettingsPaneScaffold layout, preserving all bindings and setters unchanged.
  • PermissionsPaneView renders live Accessibility / Input Monitoring / Screen Recording rows with a dual-refresh strategy (onAppear for initial load and scenePhase .active for return-from-System-Settings).
  • AboutPaneView / AcknowledgementsView consolidate the app header, support link, GitHub links, and a third-party attribution sheet; appVersionText correctly handles all four combinations of CFBundleShortVersionString and CFBundleVersion.

Confidence Score: 4/5

Safe to merge; changes are additive UI panes with no shared state mutations or new persistence logic.

All three panes are straightforward SwiftUI views that delegate to pre-existing, already-tested model objects. The only nit is that AcknowledgementEntry stores its URL as a raw String, which could silently hide a link icon if a future entry contains a typo — no present misbehaviour, just a latent maintenance trap.

No files require special attention; AcknowledgementsView.swift has the minor URL-typing concern noted in the inline comment.

Important Files Changed

Filename Overview
Cotabby/UI/Settings/Panes/AboutPaneView.swift New About pane with app header, support/links sections, and an Acknowledgements modal sheet; logic is straightforward and hardcoded URL guards are safe
Cotabby/UI/Settings/Panes/AcknowledgementsView.swift New modal listing third-party dependencies; url stored as String rather than URL means a future typo silently hides the link icon
Cotabby/UI/Settings/Panes/GeneralPaneView.swift New General pane lifted from legacy settings; bindings, ghost-color swatch logic, and opacity label are all correct
Cotabby/UI/Settings/Panes/PermissionsPaneView.swift New Permissions pane with correct dual-refresh strategy: onAppear for initial/re-navigation and scenePhase.active for return from System Settings
Cotabby/UI/Settings/SettingsContainerView.swift Switch updated to route .general, .permissions, and .about to real panes instead of PlaceholderPaneView; remaining unimplemented cases still correctly fall through to placeholder
Cotabby.xcodeproj/project.pbxproj Four new Swift files correctly registered in Sources build phase and PBXGroup; no stale references

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    SCV[SettingsContainerView] -->|selection == .general| GPV[GeneralPaneView]
    SCV -->|selection == .permissions| PPV[PermissionsPaneView]
    SCV -->|selection == .about| APV[AboutPaneView]
    SCV -->|other cases| PH[PlaceholderPaneView]

    GPV -->|reads/writes| SSM[SuggestionSettingsModel]
    GPV -->|callback| OWC[onShowWelcome]

    PPV -->|observes| PM[PermissionManager]
    PPV -->|onAppear| PM
    PPV -->|scenePhase .active| PM

    APV -->|checkForUpdates| AUM[AppUpdateManager]
    APV -->|isShowingAcknowledgements| ACV[AcknowledgementsView sheet]
    ACV -->|static entries| ACE[AcknowledgementEntry list]
Loading

Comments Outside Diff (1)

  1. Cotabby/UI/Settings/Panes/AcknowledgementsView.swift, line 311-314 (link)

    P2 url stored as String silently drops link icons on typo

    AcknowledgementEntry.url is a raw String. In AcknowledgementRow the if let url = URL(string: entry.url) guard silently omits the external-link icon if the string isn't a valid URL. All four current entries are valid, but a future maintainer adding a typo'd URL (e.g. a missing scheme) would get a link-less row with no compile-time or runtime warning. Storing the value as URL instead would catch mistakes at the call site and remove the defensive if let in the row view.

    Fix in Codex Fix in Claude Code

Fix All in Codex Fix All in Claude Code

Reviews (1): Last reviewed commit: "Address Greptile feedback: scene-active ..." | Re-trigger Greptile

@FuJacob FuJacob merged commit 80489ea into main May 28, 2026
4 checks passed
@FuJacob FuJacob deleted the feat/settings-redesign-general-perms-about branch May 28, 2026 10:36
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.

1 participant