[Agent] Replace SideNavigationController with SwiftUI side menu container#3608
[Agent] Replace SideNavigationController with SwiftUI side menu container#3608github-actions[bot] wants to merge 2 commits into
Conversation
|
🤖 PR created. AI review starting automatically. |
|
@claude please do a self-review pass on this PR: Verify all changed files compile (check for unresolved symbols, missing imports, type mismatches) |
✅ Self-Review Complete — No Issues FoundReview Summary
FindingsNo issues were introduced by this PR. Pre-existing issues noted (out of scope). Completed: 2026-03-30 |
🔍 Self-Review ResultsSummaryReviewed all 9 changed files (5 modified, 4 deleted, 1 new). The PR is clean — no compile errors, no broken imports, and complete removal of the old ✅ Verified: Compile / Symbol Resolution
✅ Verified: No Residual References to Deleted Types
✅ Verified: Multi-Platform Guards
✅ Verified:
|
01c8d36 to
eb42927
Compare
8d42ea4 to
4a4fd93
Compare
4a4fd93 to
6f19766
Compare
|
@claude please do a self-review pass on this PR: Verify all changed files compile (check for unresolved symbols, missing imports, type mismatches) |
🔍 Self-Review Results — PR #3608Reviewed all changed files on branch ✅ Files Reviewed
Compilation Verification
Multi-Platform Compatibility
Platform Guard Audit
Dead Code / Unused VariablesNone introduced by this PR. New code in
Pre-existing Issues (out of scope, not introduced by this PR)
ConclusionNo issues introduced by this PR. The implementation is clean, type-safe, multi-platform compatible, and all deleted code has been properly removed with no dangling references. No fixes required. |
adf8336 to
cf503fc
Compare
4fbeb0d to
8512815
Compare
44ed497 to
d44beed
Compare
61b1d2d to
8f9e1dd
Compare
Replace the UIKit `SideNavigationController` slide-out panel with `PVSwiftUISideMenuContainer` — a UIViewController that hosts the main content and overlays the side menu as a pure-SwiftUI animated panel. - Add `PVSwiftUISideMenuContainer` with `UIHostingController`-backed `SideMenuOverlayView` for spring-animated slide-in/out - Dimming overlay with tap-to-dismiss and swipe-left-to-close gestures - Left-edge `UIScreenEdgePanGestureRecognizer` to open menu on iOS - Orientation-aware menu width (30% iPad, 70% iPhone portrait, 40% landscape) - Focus/status-bar forwarding for iOS and tvOS - Remove `SideNavigationController`, nested types, UIViewController extension, and empty `SideMenuNavigationController` - Simplify `showMenu()`/`closeMenu()` in `PVRootViewController` to only update `viewModel.isMenuVisible`; remove UIKit side nav calls - Update `PVRootViewNavigationController` parent-type check to use new container Part of #3601 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…nController Observer was added unconditionally in _initThemeListener() but the deinit only removed it when iOS < 17.0, which is never true on our iOS 17+ target. Observer now always removed on dealloc. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Summary
Replaces the UIKit
SideNavigationControllerslide-out menu withPVSwiftUISideMenuContainer— aUIViewControllerwhose side-menu overlay is implemented as a pure-SwiftUI animated panel.What Changed
New file:
PVSwiftUISideMenuContainer.swiftPVSwiftUISideMenuContainer: top-level container that embeds the main content as a full-screen child and overlays the side menu viaUIHostingController<SideMenuOverlayView>SideMenuOverlayView(SwiftUI): spring-animated slide panel + dimming overlay driven byPVRootViewModel.isMenuVisibleUIScreenEdgePanGestureRecognizer(iOS) to initiate menu openpreferredFocusEnvironmentsforwarding to the menu when visible; gamepad events handled by existingPVRootViewControllercodeModified files:
PVRootViewController:showMenu()/closeMenu()now only setviewModel.isMenuVisible; gamepad toggle usesviewModel.isMenuVisibleinstead of the oldsideNavigationController?.visibleSideViewControllercheckPVRootViewNavigationController: parent-type check updated fromSideNavigationController→PVSwiftUISideMenuContainerPVAppDelegate:setupSideNavigation()replaced withsetupSwiftUISideMenu()returningPVSwiftUISideMenuContainerDeleted files (UIKit
SideNavigationControllerstack):SideNavigationController/SideNavigationController.swiftSideNavigationController/SideNavigationController+NestedTypes.swiftSideNavigationController/UIViewController+SideNavigationController.swiftSideMenu/SideMenuNavigationController.swift(was already mostly commented out)Design Decisions
SideMenuViewkeeps itsUINavigationControllerwrapper (viaSideMenuView.instantiate()) so theUISearchController-based search bar continues to work.SideMenuOverlayViewbridges the UIKit navigation controller viaUIViewControllerRepresentable, allowing SwiftUI to manage the slide animation while UIKit manages the internal navigation stack.isUserInteractionEnabled = falseand is toggled on/off via Combine subscription toviewModel.$isMenuVisible, so touches pass through to main content when the menu is closed.Phase 2 (future)
Phase 2 (replace
PVRootViewControllerandPVRootViewNavigationControllerwith SwiftUINavigationStack) is tracked in the parent epic #3601.Part of #3601
Test Plan
DragGesture/UIScreenEdgePanGestureRecognizercompile errors🤖 Generated with Claude Code