UX changes for notch presentation and DynamicNotchKit pin update#265
UX changes for notch presentation and DynamicNotchKit pin update#265
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b3cca70d00
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| let resolvedScreen = screen ?? self.preferredPresentationScreen() | ||
| self.currentScreenSupportsCompactPresentation = self.supportsCompactPresentation(on: resolvedScreen) |
There was a problem hiding this comment.
Derive policy from active overlay screen
refreshNotchPresentationPolicy falls back to preferredPresentationScreen() (mouse location) when no screen is provided, and capability getters (for example canShowExpandedCommandOutput) call it on each access. On multi-display setups this causes the policy to flip as the cursor moves between displays with and without compact-notch support, so compact-mode command expansion/actions can be enabled or disabled mid-session even though the overlay is already attached to a specific screen. Bind policy evaluation to the screen used when the notch was shown instead of recomputing from pointer location.
Useful? React with 👍 / 👎.
| private var enableNotchFeatures: Bool { | ||
| SettingsStore.shared.overlayPosition == .top || self.supportsCommandNotchUI |
There was a problem hiding this comment.
Decouple bottom command sync from notch style
shouldSyncCommandConversationToNotch is gated by enableNotchFeatures, which returns false when overlayPosition is .bottom and compact mode disables command UI. This means a user can select Compact in top mode, switch to bottom overlay, and then lose command conversation syncing/expanded command output entirely because a hidden top-notch style flag is still applied. Bottom overlay command behavior should not depend on the top-notch presentation mode.
Useful? React with 👍 / 👎.
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: cdb0906cf6
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| private var processingStatusText: String { | ||
| let t = self.contentState.transcriptionText.trimmingCharacters(in: .whitespacesAndNewlines) | ||
| return t.isEmpty ? self.processingLabel : t | ||
| guard Self.transientOverlayStatusTexts.contains(t) else { return self.processingLabel } |
There was a problem hiding this comment.
Accept current processing tokens in status matcher
This new strict guard only returns transcriptionText when it exactly matches transientOverlayStatusTexts, but ContentView now writes "Transcribing"/"Refining" (without ellipses). In bottom-overlay dictation flows, "Transcribing" is rejected here and the UI falls back to "Refining...", so users see the wrong processing phase text during final transcription. Include the non-ellipsis variants (or avoid exact-match filtering) so phase labels remain accurate.
Useful? React with 👍 / 👎.
| guard self.shouldSyncCommandNotchState else { | ||
| NotchContentState.shared.clearCommandOutput() | ||
| return |
There was a problem hiding this comment.
Preserve command history when notch sync is temporarily disabled
When sync is disabled by presentation policy, this branch clears all notch command output state. If the user later re-enables standard notch mode, there is no automatic settings-change resync path, so expanded command output remains empty (and cannot open from existing history) until a new message or chat reload occurs. This makes mode toggling appear to lose the current conversation in notch UI.
Useful? React with 👍 / 👎.
Co-authored-by: Codex <[email protected]>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 395472ea18
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| guard self.shouldShowOrTrackLivePreviewText else { | ||
| if !NotchContentState.shared.transcriptionText.isEmpty { | ||
| NotchContentState.shared.updateTranscription("") | ||
| } | ||
| return | ||
| } |
There was a problem hiding this comment.
Preserve processing status updates when live preview is off
The new guard drops all updateTranscriptionText writes whenever enableStreamingPreview is false, but dictation stop-flow still relies on these writes ("Transcribing"/"Refining") to drive accurate phase text. In bottom-overlay mode this causes processingStatusText to miss the transient token and fall back to the generic label ("Refining..."), so users with Live Preview disabled see the wrong processing phase during final transcription. Keep phase/status tokens flowing independently from live-preview text suppression.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 8d66139c43
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| private func showExpandedNotchIfNeeded() { | ||
| guard self.enableNotchOutput else { return } | ||
| guard self.shouldSyncCommandNotchState else { return } | ||
| guard NotchOverlayManager.shared.canShowExpandedCommandOutput else { return } |
There was a problem hiding this comment.
Allow bottom overlay to open expanded command output
Fresh evidence in this revision is the new showExpandedNotchIfNeeded guard on canShowExpandedCommandOutput: when a user previously selected Compact notch style and then switches to bottom overlay, this guard prevents expanded command output from opening even though bottom mode still syncs command messages. Because bottom overlay still has no in-place command history surface, command responses become inaccessible until the style is changed back or a different path re-syncs UI state.
Useful? React with 👍 / 👎.
| private static let transientOverlayStatusTexts: Set<String> = [ | ||
| "Transcribing", | ||
| "Refining", | ||
| "Thinking", | ||
| "Working", |
There was a problem hiding this comment.
Include reprocessing status in transient token allowlist
The new exact-match status filter excludes "Reprocessing...", but reprocessDictationText still writes that token to the overlay state. In reprocess flows, the matcher rejects it and falls back to the generic processing label, so users see the wrong phase text instead of the explicit reprocessing state.
Useful? React with 👍 / 👎.
Description
UX changes for compact notch presentation, plus a DynamicNotchKit pin update for faster notch opening. Also merges latest
mainand addresses the Codex review feedback around overlay screen policy, bottom overlay command sync, and processing labels.Type of Change
Related Issues
Testing
swiftlint --strict --config .swiftlint.yml Sources/swiftformat --config .swiftformat Sourcessh build_incremental.shNotes
1.5.13-beta.1; release notes are gitignored.Screenshots / Video
Add screenshots or video recording of the app after you have made your changes.