Second responsive pass: fix ProjectDetailView + refactor grids to in-place mutation#774
Merged
dangershony merged 7 commits intomainfrom Apr 22, 2026
Merged
Second responsive pass: fix ProjectDetailView + refactor grids to in-place mutation#774dangershony merged 7 commits intomainfrom
dangershony merged 7 commits intomainfrom
Conversation
… mutation ProjectDetailView: add missing x:Names (StickyNavBar, ProjectNamePill, ContentStack, NavSpacer, TopSectionGrid, TopLeftCard, TopRightCard, StatsGrid, StatCard0-2, InvestInfoGrid, FundInfoGrid, SubInfoGrid) so FindControl resolves them at runtime. Refactor ApplyResponsiveLayout from banned Clear()+Add() pattern to in-place Width = GridLength(...) mutation with pre-declared RowDefinitions in XAML. Fixes stats cards that stayed in 3-column layout on window resize. InvestmentDetailView, InvestPageView, FundsView: port responsive layout sections (NavBar, ProgressSteps, stats grids, info grids, mobile submit button) using the same in-place mutation pattern. SettingsView: port responsive layout logic. SendFundsModal: unify modal sizing to MinWidth=320 MaxWidth=1030 MaxHeight=720 Margin=16 to match other overlays. InvestPageViewModel: add SubmitOpacity computed property so the submit button dims via Opacity binding when !CanSubmit (works around Border :disabled pseudo-class limitations).
Border:disabled pseudo-class was unreliable; use [IsEnabled=False] attribute selector instead, applied to both desktop and mobile submit buttons. Drop the subscription pattern1 auto-select so the CTA stays disabled until the user picks a plan (matches Fund/Invest paths). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Add a second grid row and move the action-button StackPanel into it when LayoutModeService.IsCompact so buttons don't get clipped on phone widths. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
On Release Android, managed code was running via the Mono interpreter/JIT because RunAOTCompilation was off — the single biggest cause of the desktop-vs-mobile perf gap for top-level navigation and first-frame layout. Flip RunAOTCompilation=true with AndroidEnableProfiledAot=true so only the hot paths are AOTed, limiting APK size growth. Bump Avalonia to 11.3.14 to pick up the virtualization ghost-item fixes (#20700, #20784, #20870), VSP buffer cache (#18646), glyph cache rewrite (#17727), layout perf (#18315), effect render perf (#20191) and the Android duplicated-pointer-event fix (#19440). Patch-level only, no breaking changes. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
.NET Android rejects RunAOTCompilation=true unless PublishTrimmed=true (error XA1030). TrimMode=partial only trims assemblies explicitly marked [IsTrimmable]=true — Avalonia and the BCL are annotated, Angor.Sdk and other third-party packages are not, so reflection paths there stay intact. APK size went from ~28.5 MB → 27.7 MB despite adding AOT because partial trim offsets the AOT code bloat. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…or AOT)" This reverts commit 0f9a1bf.
…→11.3.14" This reverts commit 9f2e1bc.
dangershony
approved these changes
Apr 21, 2026
Member
dangershony
left a comment
There was a problem hiding this comment.
looks good I just need to test
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
ProjectDetailViewnot collapsing to single-column on resize — root cause was missingx:Nameattributes (TopSectionGrid,StatsGrid,InvestInfoGrid,FundInfoGrid,SubInfoGrid,StatCard0-2,TopLeftCard,TopRightCard,StickyNavBar,ProjectNamePill,ContentStack,NavSpacer) soFindControlreturned null andApplyResponsiveLayoutsilently did nothing.ProjectDetailView,InvestPageView,FundsView) from the bannedColumnDefinitions.Clear() + Add()pattern to SIGABRT-safe in-placeWidth = GridLength(...)mutation, with pre-declaredRowDefinitionsin XAML to support compact stacked rows.InvestmentDetailView,SettingsView, andInvestPageView(mobile header stats, mobile submit button,SubmitOpacitycomputed property for Border :disabled workaround).SendFundsModalsizing toMinWidth=320 MaxWidth=1030 MaxHeight=720 Margin=16to match the other overlays.Test plan
io.angor.app-Signed.apkand spot-check project detail, invest, funds pages render in mobile layout