Skip to content

feat: add idle logo visibility setting#34

Open
justice-hwan wants to merge 2 commits into
ericjypark:mainfrom
justice-hwan:feat/hide-island-logos
Open

feat: add idle logo visibility setting#34
justice-hwan wants to merge 2 commits into
ericjypark:mainfrom
justice-hwan:feat/hide-island-logos

Conversation

@justice-hwan

@justice-hwan justice-hwan commented Jun 2, 2026

Copy link
Copy Markdown

Summary

  • Add an Idle logos setting on the Display tab.
  • When disabled, only the compact/rest island hides the Claude/Codex logos and shrinks to the notch width.
  • Keep hover peek and expanded layouts unchanged so provider context remains visible outside idle mode.

Why

  • Lets users reduce the idle menu-bar footprint around the hardware notch without losing logos during hover or expanded usage views.
  • Keeps loading sweeps and alert glow aligned to the compact notch-sized silhouette when idle logos are hidden.

Fixes #28

Testing

  • ./scripts/verify.sh
  • Launched locally in CODEXISLAND_DEMO=1 and checked idle/hover/expanded behavior during iteration.

Summary by CodeRabbit

  • New Features

    • Added an "Idle logos" toggle in Display settings to control provider logo visibility when the app is compact/idle.
    • Provider logos can now appear before hover/expand based on the new setting.
  • Behavior Changes

    • Compact/idle display respects device notch and the new toggle when showing or hiding provider logos.
  • Localization

    • Added English and Simplified Chinese strings for the new options.

Adds an Idle logos setting that affects only the compact rest state, preserving hover peek and expanded layouts while allowing the resting island to shrink to the notch width.

Constraint: Issue ericjypark#28 asks to reduce idle notch-adjacent logo footprint without changing hover, expanded, sync, or alert behavior.

Rejected: Hide logos in peek or expanded states | those states still need provider context and existing geometry.

Confidence: high

Scope-risk: narrow

Directive: Keep sync sweep and alert glow tied to compact model.size so hidden idle logos still fit the physical notch.

Tested: ./scripts/verify.sh
@coderabbitai

coderabbitai Bot commented Jun 2, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 5c374f67-5c1e-4670-b55d-2b184659b592

📥 Commits

Reviewing files that changed from the base of the PR and between fce95a6 and da5ac95.

📒 Files selected for processing (3)
  • Sources/Model/IslandModel.swift
  • Sources/Model/LogoVisibilityStore.swift
  • Sources/Views/SettingsView.swift
🚧 Files skipped from review as they are similar to previous changes (2)
  • Sources/Views/SettingsView.swift
  • Sources/Model/LogoVisibilityStore.swift

📝 Walkthrough

Walkthrough

Adds a persisted "Idle logos" preference and UI toggle; LogoVisibilityStore publishes changes, IslandModel subscribes and updates compact layout widths, IslandRootView passes state to LogoOverlay which gates provider logo visibility in compact mode, and localization strings are added for English and Chinese.

Changes

Logo Visibility Control Feature

Layer / File(s) Summary
Logo Visibility Persistence Store
Sources/Model/LogoVisibilityStore.swift
New @MainActor singleton ObservableObject LogoVisibilityStore.shared with @Published var visible; persists to UserDefaults and initializes from seeded defaults.
Model State Tracking and Layout Animation
Sources/Model/IslandModel.swift
Snapshots store preference into compactLogoPreferenceVisible, subscribes to LogoVisibilityStore.shared.$visible with .openMorph animation, recomputes size only when in .compact, introduces compactLogoTabWidth and compactLogosVisible computed properties used by layout.
Logo Overlay Visibility Gating
Sources/Views/IslandRootView.swift
LogoOverlay API extended to accept state and compactLogosVisible; visibility logic requires `(state != .compact
Settings UI Toggle Control
Sources/Views/SettingsView.swift
Adds @ObservedObject logos = LogoVisibilityStore.shared, conditionally inserts restChromeSection on notched displays, and provides an "Idle logos" toggle bound to logos.visible.
Localization Strings
Resources/en.lproj/Localizable.strings, Resources/zh-Hans.lproj/Localizable.strings
Add "Show provider logos before hover or expand." and "Idle logos" keys with English and Simplified Chinese translations.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

🐰✨
In quiet notches logos sleep,
A toggle saves the topmost sweep.
I nudge the switch with gentle paws,
Compact breaths free of tiny claws.
Hooray — more room for code and cause!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 25.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat: add idle logo visibility setting' accurately describes the main change - adding a new setting to control idle logo visibility in the UI.
Linked Issues check ✅ Passed The PR fully implements issue #28 requirements: adds UI toggle to hide Claude/Codex logos in idle state, reduces top-area clutter, preserves visibility in hover/expanded modes.
Out of Scope Changes check ✅ Passed All changes are directly scoped to implementing the idle logo visibility feature; no unrelated modifications present beyond the feature requirements.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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.

@ericjypark ericjypark left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Two findings from runtime verification of this PR (built + ran in demo on a built-in notched display and an external monitor). Both are about behavior introduced by the idle-logos toggle; neither blocks the core feature, but #2 is worth a look since it's on-by-default on the display class where it looks worst.

Comment thread Sources/Views/IslandRootView.swift
Comment thread Sources/Views/SettingsView.swift Outdated
Treat the idle-logo preference as effective only on physical-notch targets so external displays never collapse into an empty synthetic pill.

Constraint: Maintainer review found the toggle was exposed and effective on non-notched displays, where hiding logos leaves an empty black pill.

Rejected: Delay hover logo animations | review called it minor polish and it would widen scope.

Confidence: high

Scope-risk: narrow

Directive: Keep hover peek and expanded geometry unchanged; only compact notched displays should shrink.

Tested: ./scripts/verify.sh
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.

Option to hide logos

2 participants