Repository navigation
iOS: prevent toolbar flash when switching primary tabs #15712
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
118 commits
Select commit
Hold shift + click to select a range
1bc9f25
ios: keep tab navigation chrome mounted
azooz2003-bit 54ae5dc
test(ios): cover notification tab toolbar switching
azooz2003-bit 4feb145
fix(ios): keep compact toolbar mounted across tabs
azooz2003-bit 5a23cd4
Merge main (7d177547949b) into feat-ios-tab-toolbar-flash
teamleaderleo 335ff5d
Merge main (3ed1d77ebb02) into pin2-15712
teamleaderleo 1f56e1b
fix(ios): unmount inactive primary tab stacks
azooz2003-bit 602eb9b
fix(ios): centralize notification confirmation and tab hits
azooz2003-bit e495a1e
Merge commit '152174b6d8f47065e562ba5ac731dca01d2f0880' into feat-ios…
azooz2003-bit 751e1ce
Merge main (75bb022b5749) into feat-ios-tab-toolbar-flash
azooz2003-bit a81dd26
fix(ios): hide nested compact navigation bars
azooz2003-bit ae333b9
fix(ios): preserve compact tab state across switches
azooz2003-bit 6ff89ad
fix(ios): refresh active notification feed copies
azooz2003-bit fafde81
fix(ios): gate inactive notification lifecycle
azooz2003-bit 3dd5242
fix(ios): refresh agent feed on activation
azooz2003-bit 2178698
fix(ios): restore feed lifecycle on navigation
azooz2003-bit c048f94
fix(ios): scope tab content to active selection
azooz2003-bit 49e0f44
fix(ios): retain compact task composer
azooz2003-bit 68cd2bd
fix(ios): close inactive search lifecycle
azooz2003-bit 13eb0c2
fix(ios): cancel inactive notification opens
azooz2003-bit 1decc2f
fix(ios): gate inactive tab work
azooz2003-bit 1333880
fix(ios): bound feed activation refreshes
azooz2003-bit ab5e65d
fix(ios): bound feed refresh recovery
azooz2003-bit 7755b0d
fix(ios): rely on bounded feed requests
azooz2003-bit 1c8bbb3
fix(ios): keep tab bar hit region clear
azooz2003-bit 00cba5a
fix(ios): preserve tab bar hit testing
azooz2003-bit 577bd6f
fix(ios): restart notification preview on selection
azooz2003-bit 88b7da7
fix(ios): keep search host in native search tab
azooz2003-bit f8c324c
fix(ios): keep tab controls above content layer
azooz2003-bit d26320b
Merge main (71bb553867ca) into feat-ios-tab-toolbar-flash
azooz2003-bit 2b45d5d
fix(ios): keep primary tabs in native navigation
azooz2003-bit eb8417a
Merge main (02b80fecc984) into feat-ios-tab-toolbar-flash
azooz2003-bit 831f1da
fix(ios): scope tab switch animation suppression
azooz2003-bit 02a497d
Merge main (b520727d0c19) into feat-ios-tab-toolbar-flash
azooz2003-bit deb45a2
test(ios): probe rendered link position
azooz2003-bit a9aeaac
Merge main (4e9d77988827) into feat-ios-tab-toolbar-flash
azooz2003-bit 7943e3b
fix(ios): preserve search and notification refresh paths
azooz2003-bit 58ce74c
fix(ios): close tab review gaps
azooz2003-bit 3dd39a1
test: restore configurable main queue drain helper
azooz2003-bit 4120832
fix: bound agent feed refresh requests
azooz2003-bit f729dfc
test: keep configurable queue drain in close-tab suite
azooz2003-bit d1dfa05
fix: hide nested search navigation chrome
azooz2003-bit 02f68fd
test: restore pane resize controller binding
azooz2003-bit 99acc5c
Merge main (22f7c10093f0) into feat-ios-tab-toolbar-flash
azooz2003-bit 397a7af
test: keep last-surface queue drain bounded
azooz2003-bit ff8b2cb
Merge main (612389b3bdf9) into feat-ios-tab-toolbar-flash
azooz2003-bit 33feb1a
fix: restore updater accent environment
azooz2003-bit c6102f9
Merge main (70c83fd8423f) into feat-ios-tab-toolbar-flash
azooz2003-bit 9c46f00
Merge main (6c26fc34b1b0) into feat-ios-tab-toolbar-flash
azooz2003-bit 43b8b06
Merge main (974d0a0c9412) into feat-ios-tab-toolbar-flash
azooz2003-bit f5a58f3
Merge main (64bb5e9f3fb) into feat-ios-tab-toolbar-flash
azooz2003-bit 6b21ac4
Merge main (f2526b0fc42b) into feat-ios-tab-toolbar-flash
azooz2003-bit 763c567
fix: keep pane resize controller binding after merge
azooz2003-bit 2d4cdd3
Merge main (8395a5b4301c) into feat-ios-tab-toolbar-flash
azooz2003-bit a124f6e
fix: remove duplicate updater accent binding
azooz2003-bit 3d67943
Merge main (a20ed74ca17b) into feat-ios-tab-toolbar-flash
azooz2003-bit 6872b5a
fix: resolve merge compile and search compatibility
azooz2003-bit 671bf1d
fix: resolve notification accent color
azooz2003-bit 78ec4be
fix: keep pre-iOS search in one navigation bar
azooz2003-bit 2ad1aac
fix: restore test window geometry reset
azooz2003-bit cca9d50
fix: unwrap browser restoration URL
azooz2003-bit ac07000
test: sample toolbar during repeated tab switches
azooz2003-bit 370abca
fix: enable repeated switch fixture in toolbar test
azooz2003-bit 679edde
fix: repair exact-head verification and base compile drift
azooz2003-bit 1cbedf2
Merge main (6aa634361c91) into feat-ios-tab-toolbar-flash
azooz2003-bit 1a670c9
fix: keep notification search controls on legacy iOS
azooz2003-bit 6010a94
fix: preserve legacy search root controls
azooz2003-bit bb805fc
test: synchronize toolbar sampling with tab selection
azooz2003-bit 311fb01
test: let tab switch fixture reach the active test
azooz2003-bit b18130d
test: use the existing hidden anchor lookup
azooz2003-bit e2a4fe5
test: repair cmux test helper call sites
azooz2003-bit 86e3442
refactor: isolate shared iOS toolbar types
azooz2003-bit 9480fa6
test: bind sidebar indicator query before expect
azooz2003-bit 35b4c10
test: include CLIError in CLI test target
azooz2003-bit 2c4672c
Revert "test: include CLIError in CLI test target"
azooz2003-bit bae1810
fix: make tmux parser errors target neutral
azooz2003-bit 5317de2
fix: keep tmux parser validation target neutral
azooz2003-bit 95115c4
Merge main (43ea79cc3d09) into feat-ios-tab-toolbar-flash
azooz2003-bit 9dc9995
test: repair hosted macOS CI fixtures
azooz2003-bit 6f36d19
test: align notification tab switch timing
azooz2003-bit 8efae4c
fix(cli): preserve typed tmux argument errors
azooz2003-bit eda9650
fix(cli): keep tmux argument error type target neutral
azooz2003-bit e1b7b04
fix(cli): isolate tmux argument error type
azooz2003-bit f69a82a
fix(cli): keep parser error type with parser
azooz2003-bit 04c4a4b
Merge origin/main into feat-ios-tab-toolbar-flash
azooz2003-bit 840da0b
fix(cli): use shared CLI error contract
azooz2003-bit d31cb74
fix(ci): preserve runtime source root in CLI hooks
azooz2003-bit c6d3a12
fix(tests): remove duplicate Codex environment helper
azooz2003-bit 5466e35
fix(tests): keep XCTest JSON assertions
azooz2003-bit 375824d
fix(tests): keep Codex fixture helper in XCTest suite
azooz2003-bit 29d34c7
Merge main (874ed61e2218) into feat-ios-tab-toolbar-flash
azooz2003-bit 2232206
fix(tests): mark unused Codex session id
azooz2003-bit 305aef3
Merge main into feat-ios-tab-toolbar-flash
azooz2003-bit c282eb4
fix(ios): retain cloud routes with shared tab shell
azooz2003-bit a9db8f4
fix: restore cloud workspace routing
azooz2003-bit 779d6b2
Merge remote-tracking branch 'origin/main' into feat-ios-tab-toolbar-…
azooz2003-bit 0519f3e
fix(cli): keep auto-naming parser helper static
azooz2003-bit 0d7c43e
fix(cli): bind cloud transfer retry error
azooz2003-bit b1f0abb
test: retain multi-message inbox coverage
azooz2003-bit d226835
Merge green main into feat-ios-tab-toolbar-flash
azooz2003-bit c84cb40
Merge main (337861cfd05e) into feat-ios-tab-toolbar-flash
azooz2003-bit 3eaef72
fix: handle cloud tab in notification preview
azooz2003-bit 8ed060d
fix: restore workspace destination return
azooz2003-bit 2ed9205
Merge main (984179e9c187) into feat-ios-tab-toolbar-flash
azooz2003-bit 319fe4c
fix(ios): use deployment-safe toolbar visibility
azooz2003-bit 584e73c
test: drop the uncompilable CLI half of the Cloud link-failure copy test
teamleaderleo 2259c1c
fix: preserve cloud and recovery toolbar behavior
azooz2003-bit 2b7821a
chore: drop unrelated XCTest fixture edits
azooz2003-bit 370d99f
test: exercise unavailable Cloud link copy
azooz2003-bit 7086bfa
Merge remote-tracking branch 'origin/main' into feat-ios-tab-toolbar-…
azooz2003-bit 2aed0e6
fix: preserve public Foundation import after main merge
azooz2003-bit 8e6edd7
fix: compile sidebar usage owner selection
azooz2003-bit 81f2755
fix: use local SSH shell quoting helper
azooz2003-bit c589cbf
Merge remote-tracking branch 'origin/main' into feat-ios-tab-toolbar-…
azooz2003-bit b21a41a
fix: restore custom sidebar preview assets
azooz2003-bit 8e13af3
fix: restore custom upload drop path
azooz2003-bit d35b2ad
Merge remote-tracking branch 'origin/main' into feat-ios-tab-toolbar-…
azooz2003-bit d064649
test: isolate CLI routing fixture home
azooz2003-bit 964cefa
Merge current main into toolbar fix
azooz2003-bit File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
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
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
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
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
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
17 changes: 17 additions & 0 deletions
17
...MobileShellUI/Sources/CmuxMobileShellUI/MobilePrimarySearchTabBarVisibilityModifier.swift
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,17 @@ | ||
| #if os(iOS) | ||
| import SwiftUI | ||
|
|
||
| struct MobilePrimarySearchTabBarVisibilityModifier: ViewModifier { | ||
| let isEnabled: Bool | ||
| let visibility: Visibility | ||
|
|
||
| @ViewBuilder | ||
| func body(content: Content) -> some View { | ||
| if isEnabled { | ||
| content.mobileToolbarVisibility(visibility, for: .tabBar) | ||
| } else { | ||
| content | ||
| } | ||
| } | ||
| } | ||
| #endif |
37 changes: 37 additions & 0 deletions
37
...ages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/MobilePrimaryTabNavigationHost.swift
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,37 @@ | ||
| #if os(iOS) | ||
| import CmuxMobileSupport | ||
| import SwiftUI | ||
|
|
||
| /// Keeps the compact tab bar and its root navigation chrome in one hierarchy. | ||
| /// The tab contents still keep their own navigation paths, but they no longer | ||
| /// compete to install the root toolbar as selection changes. | ||
| struct MobilePrimaryTabNavigationHost<Content: View, Toolbar: ToolbarContent>: View { | ||
| let content: Content | ||
| let toolbar: Toolbar | ||
| let toolbarVisibility: Visibility | ||
| let tabBarVisibility: Visibility | ||
|
|
||
| init( | ||
| toolbarVisibility: Visibility, | ||
| tabBarVisibility: Visibility = .automatic, | ||
| @ToolbarContentBuilder toolbar: () -> Toolbar, | ||
| @ViewBuilder content: () -> Content | ||
| ) { | ||
| self.content = content() | ||
| self.toolbar = toolbar() | ||
| self.toolbarVisibility = toolbarVisibility | ||
| self.tabBarVisibility = tabBarVisibility | ||
| } | ||
|
|
||
| var body: some View { | ||
| NavigationStack { | ||
| content | ||
| .toolbar { | ||
| toolbar | ||
| } | ||
| .mobileToolbarVisibility(toolbarVisibility, for: .navigationBar) | ||
| .mobileToolbarVisibility(tabBarVisibility, for: .tabBar) | ||
| } | ||
| } | ||
| } | ||
| #endif |
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
35 changes: 35 additions & 0 deletions
35
Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/NotificationFeedFilterMenu.swift
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,35 @@ | ||
| #if os(iOS) | ||
| import CmuxMobileShellModel | ||
| import CmuxMobileSupport | ||
| import SwiftUI | ||
|
|
||
| /// The feed twin of `WorkspaceListFilterMenu`: read state lives in a toolbar | ||
| /// menu instead of a segmented bar above the list, and the icon fills while a | ||
| /// narrowing filter is active, mirroring Mail. | ||
| struct NotificationFeedFilterMenu: View { | ||
| @Binding var selection: MobileNotificationFeedFilter | ||
|
|
||
| var body: some View { | ||
| Menu { | ||
| Picker( | ||
| L10n.string("mobile.notificationFeed.filter.label", defaultValue: "Notification filter"), | ||
| selection: $selection | ||
| ) { | ||
| Text(L10n.string( | ||
| "mobile.notificationFeed.filter.allNotifications", | ||
| defaultValue: "All Notifications" | ||
| )) | ||
| .tag(MobileNotificationFeedFilter.all) | ||
| Text(L10n.string("mobile.notificationFeed.filter.unread", defaultValue: "Unread")) | ||
| .tag(MobileNotificationFeedFilter.unread) | ||
| } | ||
| } label: { | ||
| Image(systemName: selection == .unread | ||
| ? "line.3.horizontal.decrease.circle.fill" | ||
| : "line.3.horizontal.decrease.circle") | ||
| } | ||
| .accessibilityLabel(L10n.string("mobile.notificationFeed.filter", defaultValue: "Filter")) | ||
| .accessibilityIdentifier("MobileNotificationFeedFilterMenu") | ||
| } | ||
| } | ||
| #endif |
Oops, something went wrong.
Oops, something went wrong.
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.
Uh oh!
There was an error while loading. Please reload this page.