Skip to content

[WIP] Adopt iOS 26 Liquid Glass across the app - #108

Open
AndrewG828 wants to merge 1 commit into
mainfrom
user/andrew/liquid-glass
Open

[WIP] Adopt iOS 26 Liquid Glass across the app#108
AndrewG828 wants to merge 1 commit into
mainfrom
user/andrew/liquid-glass

Conversation

@AndrewG828

@AndrewG828 AndrewG828 commented Aug 12, 2026

Copy link
Copy Markdown
Member

Overview

  • Working branch iOS refactor to liquid glass
  • Bump minimum deployment target to iOS 26.0
  • Remove the global opaque-white UINavigationBarAppearance so native glass navigation bars render everywhere; system back buttons replace the custom BackButton on most screens (app-wide resellPurple tint)
  • Replace the custom tab bar with a native TabView: floating glass bar, SF Symbol tabs, native unread badge, minimize-on-scroll
  • Tab-root toolbars (wordmark/search/bell, Messages title, settings/ calendar) are defined on the TabView switching on selection, since items inside non-initial tabs don't propagate to the nav bar
  • PurpleButton/NavigationPurpleButton become .glassProminent tinted CTAs
  • ExpandableAddButton is a tinted glass FAB whose options morph via GlassEffectContainer + glassEffectID; it drops into the freed corner when the tab bar minimizes and rises when it expands, driven by a shared scroll-breakpoint state machine in MainViewModel (including manual pill-tap expansion detected by a passive window tap observer)
  • Messages: floating glass input bar (photo/field/send + action chips) via safeAreaInset; native glass toolbar; native Menu replaces the custom options overlay on posts, profiles, and chat
  • Product details: glass overlay back/ellipsis/save controls, glass page-dot lozenge, native share/report/delete Menu
  • Sheets: native drag indicators and backgrounds replace hand-drawn handles, presentationBackground(.clear) hacks, and opaque overrides; FilterView's hand-rolled sort popup becomes a native Menu
  • Search surfaces pinned via safeAreaInset get glass capsules so content scrolls beneath them

Summary by CodeRabbit

  • New Features
    • Added responsive tab-bar behavior that minimizes while scrolling and expands when switching tabs or interacting with it.
    • Added native menus for sorting, reporting, sharing, blocking, and product actions.
  • Improvements
    • Refreshed navigation across the app with standard system controls.
    • Updated search, filters, chats, listings, and product details with clearer layouts and improved safe-area handling.
    • Introduced a consistent glass-style visual design for buttons, controls, menus, sheets, and image actions.
    • Improved accessibility and tap areas for key controls.

- Bump minimum deployment target to iOS 26.0
- Remove the global opaque-white UINavigationBarAppearance so native
  glass navigation bars render everywhere; system back buttons replace
  the custom BackButton on most screens (app-wide resellPurple tint)
- Replace the custom tab bar with a native TabView: floating glass bar,
  SF Symbol tabs, native unread badge, minimize-on-scroll
- Tab-root toolbars (wordmark/search/bell, Messages title, settings/
  calendar) are defined on the TabView switching on selection, since
  items inside non-initial tabs don't propagate to the nav bar
- PurpleButton/NavigationPurpleButton become .glassProminent tinted CTAs
- ExpandableAddButton is a tinted glass FAB whose options morph via
  GlassEffectContainer + glassEffectID; it drops into the freed corner
  when the tab bar minimizes and rises when it expands, driven by a
  shared scroll-breakpoint state machine in MainViewModel (including
  manual pill-tap expansion detected by a passive window tap observer)
- Messages: floating glass input bar (photo/field/send + action chips)
  via safeAreaInset; native glass toolbar; native Menu replaces the
  custom options overlay on posts, profiles, and chat
- Product details: glass overlay back/ellipsis/save controls, glass
  page-dot lozenge, native share/report/delete Menu
- Sheets: native drag indicators and backgrounds replace hand-drawn
  handles, presentationBackground(.clear) hacks, and opaque overrides;
  FilterView's hand-rolled sort popup becomes a native Menu
- Search surfaces pinned via safeAreaInset get glass capsules so content
  scrolls beneath them

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The project now targets iOS 26.0 and version 46. Navigation uses native tab bars and system toolbars. Scroll position controls tab-bar minimization. Screens and shared controls adopt Liquid Glass styling, system symbols, safe-area layouts, and native menus.

Changes

Platform settings

Layer / File(s) Summary
Platform and version settings
Resell.xcodeproj/project.pbxproj
Project and test deployment targets now use iOS 26.0. The Resell project version is 46.

Tab navigation and UI

Layer / File(s) Summary
Native tab navigation and tab-bar state
Resell/ViewModels/MainViewModel.swift, Resell/Views/MainTabView.swift, Resell/Views/MainView.swift, Resell/Views/Home/HomeView.swift, Resell/Views/Chats/ChatsView.swift, Resell/Views/NewListing/*, Resell/Views/NewRequest/NewRequestView.swift
Native TabView navigation replaces the custom tab bar. Scroll offsets, tab selection, safe-area insets, and minimized-bar taps control tab-bar state and add-button placement.
Shared Liquid Glass controls
Resell/Views/Components/*
Buttons, menus, search controls, pagination indicators, image controls, and expandable actions use Liquid Glass effects and system symbols.
Screen layouts and sheet presentation
Resell/Views/Chats/MessagesView.swift, Resell/Views/Home/FilterView.swift, Resell/Views/Home/DetailedFilterView.swift, Resell/Views/Home/SearchView.swift
Chat, filter, and search layouts use safe-area headers, native menus, updated toolbars, Liquid Glass controls, and visible sheet drag indicators.
Navigation toolbar migration
Resell/Views/ProductDetails/*, Resell/Views/Report/*, Resell/Views/Settings/*, Resell/Views/Home/NotificationsView.swift, Resell/Views/Home/ProfileView.swift, Resell/Views/Home/SavedView.swift
Custom back buttons and toolbar overlays are removed. System navigation bars and native menus provide navigation and actions. Product details also consolidate save-button behavior and update sheet presentation.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
    participant HomeView
    participant MainViewModel
    participant MainTabView
    participant TabView

    HomeView->>MainViewModel: Report scroll offset
    MainViewModel->>MainTabView: Update minimized state
    MainTabView->>TabView: Apply tab-bar state
    TabView->>MainTabView: Report tab selection
    MainTabView->>MainViewModel: Request expansion pulse
Loading
🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Description check ⚠️ Warning The description clearly explains the scope and major changes but omits the template's explicit Changes Made and Test Coverage sections. Add a Changes Made section with organized details and a Test Coverage section that documents the tests performed or explains why testing is pending.
✅ Passed checks (3 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly and concisely describes the main change: adopting iOS 26 Liquid Glass across the app.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch user/andrew/liquid-glass

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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@Resell/Views/Home/FilterView.swift`:
- Around line 230-234: Update the Button action around
FiltersViewModel.applyFilters so request failures are distinguishable from
successful applications. Propagate the failure or return an explicit success
result, dismissing the filter sheet via isPresented only after success;
otherwise keep it open and display an error to the user.

In `@Resell/Views/Home/SearchView.swift`:
- Around line 33-35: Update the empty-search guard in searchItems to set
searchViewModel.isSearching to false before returning, so a focused field with
no searchText does not continue rendering searchHistoryView; preserve the
existing behavior for non-empty submissions.

In `@Resell/Views/MainTabView.swift`:
- Around line 270-279: Update TapObserverUIView.didMoveToWindow to remove the
existing recognizer from its previous UIWindow when the view leaves or changes
windows, then clear recognizer before returning; also remove and clear the
recognizer in dismantleUIView so SwiftUI teardown cannot leave stale or
duplicate window gestures.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 51973469-52fe-457a-a768-aaf398f88f80

📥 Commits

Reviewing files that changed from the base of the PR and between 2a3bb90 and ebaf9b3.

📒 Files selected for processing (35)
  • Resell.xcodeproj/project.pbxproj
  • Resell/ViewModels/MainViewModel.swift
  • Resell/Views/Chats/ChatsView.swift
  • Resell/Views/Chats/MessagesView.swift
  • Resell/Views/Components/BackButton.swift
  • Resell/Views/Components/CustomPageControlIndicatorView.swift
  • Resell/Views/Components/ExpandableAddButton.swift
  • Resell/Views/Components/OptionsMenuView.swift
  • Resell/Views/Components/PaginatedImageView.swift
  • Resell/Views/Components/PurpleButton.swift
  • Resell/Views/Components/SearchBar.swift
  • Resell/Views/Home/DetailedFilterView.swift
  • Resell/Views/Home/FilterView.swift
  • Resell/Views/Home/HomeView.swift
  • Resell/Views/Home/NotificationsView.swift
  • Resell/Views/Home/ProfileView.swift
  • Resell/Views/Home/SavedView.swift
  • Resell/Views/Home/SearchView.swift
  • Resell/Views/MainTabView.swift
  • Resell/Views/MainView.swift
  • Resell/Views/NewListing/NewListingDetailsView.swift
  • Resell/Views/NewListing/NewListingImagesView.swift
  • Resell/Views/NewListing/NewRequestView.swift
  • Resell/Views/ProductDetails/CompletedTransactionView.swift
  • Resell/Views/ProductDetails/ExternalProfileView.swift
  • Resell/Views/ProductDetails/FollowListView.swift
  • Resell/Views/ProductDetails/ProductDetailsView.swift
  • Resell/Views/Report/ReportConfirmationView.swift
  • Resell/Views/Report/ReportDetailsView.swift
  • Resell/Views/Report/ReportOptionsView.swift
  • Resell/Views/Settings/AvailabilitySettingsView.swift
  • Resell/Views/Settings/BlockedUsersView.swift
  • Resell/Views/Settings/EditProfileView.swift
  • Resell/Views/Settings/SendFeedbackView.swift
  • Resell/Views/Settings/SettingsView.swift
💤 Files with no reviewable changes (11)
  • Resell/Views/Report/ReportOptionsView.swift
  • Resell/Views/Home/NotificationsView.swift
  • Resell/Views/Settings/AvailabilitySettingsView.swift
  • Resell/Views/Report/ReportDetailsView.swift
  • Resell/Views/ProductDetails/CompletedTransactionView.swift
  • Resell/Views/Settings/SendFeedbackView.swift
  • Resell/Views/Home/SavedView.swift
  • Resell/Views/Settings/BlockedUsersView.swift
  • Resell/Views/Settings/SettingsView.swift
  • Resell/Views/Settings/EditProfileView.swift
  • Resell/Views/Components/BackButton.swift

Comment thread Resell/Views/Home/FilterView.swift
Comment thread Resell/Views/Home/SearchView.swift
Comment thread Resell/Views/MainTabView.swift
@AndrewG828
AndrewG828 force-pushed the user/andrew/liquid-glass branch from 04059d5 to ebaf9b3 Compare August 12, 2026 06:07
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