No description provided.
forked from comaps/comaps
carplay-dashboard #19
Open
eisa01
wants to merge 22 commits from
carplay-dashboard into main
pull from: carplay-dashboard
merge into: eisa01:main
eisa01:main
eisa01:multi-surface-map-rendering
eisa01:private-testflight/2026-07-14
eisa01:carplay-dashboard-support
eisa01:modes-ui
eisa01:eisa01/carplay-road-shields
eisa01:carplay-0708
eisa01:forgejo-macos-runner
eisa01:create-venv
eisa01:carplay-0706
eisa01:carplay-0704-findings
eisa01:fable-review
eisa01:testflight/2026.06.30
eisa01:carplay-om-code-review
eisa01:carplay-code-review-jun28
eisa01:carplay-dashboard-mvp2
eisa01:car-follow-on-reacquire
eisa01:carplay-location-keepalive
eisa01:testflight/2026.06.20
eisa01:carplay-roundabout-exit-number
eisa01:carplay-destination
eisa01:carplay-dashboard-mvp
eisa01:name-cherry-picking
eisa01:om-pr-11243-2
eisa01:icu-cjk-fix
eisa01:simple-cjk-fix
eisa01:fix-crash-search
eisa01:scene-support
eisa01:om-carplay-button
eisa01:om-pr-10545
eisa01:submodule-main-branch
eisa01:improve-unit-testing-docs
eisa01
commented 2026年06月30日 22:25:47 +02:00
eisa01
added 22 commits 2026年06月30日 22:25:47 +02:00
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
Adds CarPlay dashboard support (live map in the dashboard tile, arrow centering and car visual scale) and the scene/app-lifecycle plumbing it needs: showing the map without a connected phone scene, keeping the map running while the phone is locked, maintaining a GPS fix, following the position on cold launch into the car screen, and driving the app lifecycle from aggregate UIApplication notifications via a single-layer lifecycle observer. Signed-off-by: eisa01 <eisa01@gmail.com> Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The car inherited whatever zoom level the phone was at (drape preserves meters-per-pixel across host switches), which reads too close on a car screen and especially in the small dashboard tile. Zoom out to level 15 once per CarPlay session, when the map first follows the position on a car screen and no route is active, leaving navigation auto-zoom and manual zooming alone. Adds FrameworkHelper.setZoomLevel using relative scaling, which unlike SetViewportCenter keeps the location follow mode intact. Signed-off-by: eisa01 <eisa01@gmail.com> Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
UpdateDependentParameters only rebuilt the 3D projection matrices when the perspective angle moved by more than kEps. At angle 0 SetRotationAngle builds a singular projection whose inverse (m_3dtoP) is NaN/Inf; that is only safe while m_isPerspective is false. If perspective turned on for a sub-kEps angle, the delta check skipped the rebuild and left the NaN matrix active, corrupting P3dtoP/PtoP3d and through them m_Org -> a NaN screen rect that trips the m2::Rect min<=max assert (rect2d.hpp:45). Rebuild whenever m_isPerspective flips, not just when the angle delta exceeds kEps. 🤖 Generated with [Claude Code](https://claude.ai/code) Signed-off-by: eisa01 <eisa01@gmail.com> Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Stress-testing CarPlay (rapid CarPlay<->phone switching, stop nav on the phone, then re-open the CoMaps CarPlay icon) reproducibly aborted the debug build: m2::Rect<double>::Rect(...) ASSERT(minX<=maxX && minY<=maxY) rect2d.hpp:45 +[MWMFrameworkHelper setVisibleViewport:scaleFactor:] CarPlayMapViewController.updateVisibleViewPortToNavigationState() CarPlayMapViewController.viewDidLayoutSubviews() -[CPWindow updateLayoutGuideWithInsets:] (layout-guide inset animation) During the layout-guide animation / scene handoff the inset rect is transiently degenerate or non-finite, so setVisibleViewport built an invalid m2::RectD whose min<=max assert aborted the app (and would silently corrupt the viewport in release). setVisibleViewport now validates its input before constructing the rect: it returns early unless scale is finite and > 0 and all four computed coordinates are finite with x1 > x0 and y1 > y0. This guards every caller, not just CarPlay. CarPlayMapViewController.updateVisibleViewPort additionally drops the frame up front when the origin/size are not finite or the content scale factor is not finite/positive; the previous width/height>0 check let a NaN origin through. 🤖 Generated with [Claude Code](https://claude.ai/code) Signed-off-by: eisa01 <eisa01@gmail.com> Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The CarPlay position-mode map button was built with a default glyph and relied on callers to sync its icon to the actual mode afterwards. Several template paths never did, so the button showed a stale icon — most visibly when changing follow/follow-and-rotate on the phone and returning to a car screen, but also on trip cancel and when starting navigation. Build the button from a single source of truth (current position mode) in buildMyPositionModeButton(), used by both base and navigation UI, so every template path is correct by construction. Re-sync the live button on re-host (dashboard/app switch) where no rebuild happens. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: eisa01 <eisa01@gmail.com>
This pull request has changes conflicting with the target branch.
- data/styles/outdoors/dark/style.mapcss
- data/styles/outdoors/light/style.mapcss
- data/styles/vehicle/dark/style.mapcss
- data/styles/vehicle/light/style.mapcss
- data/styles/walking/dark/symbols/planet-m.svg
- data/styles/walking/dark/symbols/planet-s.svg
- data/styles/walking/dark/symbols/shield-brazil-ac-scaled.svg
- data/styles/walking/dark/symbols/shield-brazil-ac.svg
- data/styles/walking/dark/symbols/shield-brazil-al-scaled.svg
- data/styles/walking/dark/symbols/shield-brazil-al.svg
- data/styles/walking/dark/symbols/shield-brazil-am-scaled.svg
- data/styles/walking/dark/symbols/shield-brazil-am.svg
- data/styles/walking/dark/symbols/shield-brazil-ap-scaled.svg
- data/styles/walking/dark/symbols/shield-brazil-ap.svg
- data/styles/walking/dark/symbols/shield-brazil-ba-scaled.svg
- data/styles/walking/dark/symbols/shield-brazil-ba.svg
- data/styles/walking/dark/symbols/shield-brazil-ce-scaled.svg
- data/styles/walking/dark/symbols/shield-brazil-ce.svg
- data/styles/walking/dark/symbols/shield-brazil-df-scaled.svg
- data/styles/walking/dark/symbols/shield-brazil-df.svg
- data/styles/walking/dark/symbols/shield-brazil-es-scaled.svg
- data/styles/walking/dark/symbols/shield-brazil-es.svg
- data/styles/walking/dark/symbols/shield-brazil-go-scaled.svg
- data/styles/walking/dark/symbols/shield-brazil-go.svg
- data/styles/walking/dark/symbols/shield-brazil-ma-scaled.svg
- data/styles/walking/dark/symbols/shield-brazil-ma.svg
- data/styles/walking/dark/symbols/shield-brazil-mg-scaled.svg
- data/styles/walking/dark/symbols/shield-brazil-mg.svg
- data/styles/walking/dark/symbols/shield-brazil-ms-scaled.svg
- data/styles/walking/dark/symbols/shield-brazil-ms.svg
- data/styles/walking/dark/symbols/shield-brazil-mt-scaled.svg
- data/styles/walking/dark/symbols/shield-brazil-mt.svg
- data/styles/walking/dark/symbols/shield-brazil-national-scaled.svg
- data/styles/walking/dark/symbols/shield-brazil-national.svg
- data/styles/walking/dark/symbols/shield-brazil-pa-scaled.svg
- data/styles/walking/dark/symbols/shield-brazil-pa.svg
- data/styles/walking/dark/symbols/shield-brazil-pb-scaled.svg
- data/styles/walking/dark/symbols/shield-brazil-pb.svg
- data/styles/walking/dark/symbols/shield-brazil-pe-scaled.svg
- data/styles/walking/dark/symbols/shield-brazil-pe.svg
- data/styles/walking/dark/symbols/shield-brazil-pi-scaled.svg
- data/styles/walking/dark/symbols/shield-brazil-pi.svg
- data/styles/walking/dark/symbols/shield-brazil-pr-scaled.svg
- data/styles/walking/dark/symbols/shield-brazil-pr.svg
- data/styles/walking/dark/symbols/shield-brazil-rj-scaled.svg
- data/styles/walking/dark/symbols/shield-brazil-rj.svg
- data/styles/walking/dark/symbols/shield-brazil-rn-scaled.svg
- data/styles/walking/dark/symbols/shield-brazil-rn.svg
- data/styles/walking/dark/symbols/shield-brazil-ro-scaled.svg
- data/styles/walking/dark/symbols/shield-brazil-ro.svg
- data/styles/walking/dark/symbols/shield-brazil-rr-scaled.svg
- data/styles/walking/dark/symbols/shield-brazil-rr.svg
- data/styles/walking/dark/symbols/shield-brazil-rs-scaled.svg
- data/styles/walking/dark/symbols/shield-brazil-rs.svg
- data/styles/walking/dark/symbols/shield-brazil-sc-scaled.svg
- data/styles/walking/dark/symbols/shield-brazil-sc.svg
- data/styles/walking/dark/symbols/shield-brazil-se-scaled.svg
- data/styles/walking/dark/symbols/shield-brazil-se.svg
- data/styles/walking/dark/symbols/shield-brazil-sp-scaled.svg
- data/styles/walking/dark/symbols/shield-brazil-sp.svg
- data/styles/walking/dark/symbols/shield-brazil-to-scaled.svg
- data/styles/walking/dark/symbols/shield-brazil-to.svg
- data/styles/walking/dark/symbols/stage-m.svg
- data/styles/walking/dark/symbols/toilets_private-m.svg
- data/styles/walking/light/symbols/planet-m.svg
- data/styles/walking/light/symbols/planet-s.svg
- data/styles/walking/light/symbols/shield-brazil-ac-scaled.svg
- data/styles/walking/light/symbols/shield-brazil-ac.svg
- data/styles/walking/light/symbols/shield-brazil-al-scaled.svg
- data/styles/walking/light/symbols/shield-brazil-al.svg
- data/styles/walking/light/symbols/shield-brazil-am-scaled.svg
- data/styles/walking/light/symbols/shield-brazil-am.svg
- data/styles/walking/light/symbols/shield-brazil-ap-scaled.svg
- data/styles/walking/light/symbols/shield-brazil-ap.svg
- data/styles/walking/light/symbols/shield-brazil-ba-scaled.svg
- data/styles/walking/light/symbols/shield-brazil-ba.svg
- data/styles/walking/light/symbols/shield-brazil-ce-scaled.svg
- data/styles/walking/light/symbols/shield-brazil-ce.svg
- data/styles/walking/light/symbols/shield-brazil-df-scaled.svg
- data/styles/walking/light/symbols/shield-brazil-df.svg
- data/styles/walking/light/symbols/shield-brazil-es-scaled.svg
- data/styles/walking/light/symbols/shield-brazil-es.svg
- data/styles/walking/light/symbols/shield-brazil-go-scaled.svg
- data/styles/walking/light/symbols/shield-brazil-go.svg
- data/styles/walking/light/symbols/shield-brazil-ma-scaled.svg
- data/styles/walking/light/symbols/shield-brazil-ma.svg
- data/styles/walking/light/symbols/shield-brazil-mg-scaled.svg
- data/styles/walking/light/symbols/shield-brazil-mg.svg
- data/styles/walking/light/symbols/shield-brazil-ms-scaled.svg
- data/styles/walking/light/symbols/shield-brazil-ms.svg
- data/styles/walking/light/symbols/shield-brazil-mt-scaled.svg
- data/styles/walking/light/symbols/shield-brazil-mt.svg
- data/styles/walking/light/symbols/shield-brazil-national-scaled.svg
- data/styles/walking/light/symbols/shield-brazil-national.svg
- data/styles/walking/light/symbols/shield-brazil-pa-scaled.svg
- data/styles/walking/light/symbols/shield-brazil-pa.svg
- data/styles/walking/light/symbols/shield-brazil-pb-scaled.svg
- data/styles/walking/light/symbols/shield-brazil-pb.svg
- data/styles/walking/light/symbols/shield-brazil-pe-scaled.svg
- data/styles/walking/light/symbols/shield-brazil-pe.svg
- data/styles/walking/light/symbols/shield-brazil-pi-scaled.svg
- data/styles/walking/light/symbols/shield-brazil-pi.svg
- data/styles/walking/light/symbols/shield-brazil-pr-scaled.svg
- data/styles/walking/light/symbols/shield-brazil-pr.svg
- data/styles/walking/light/symbols/shield-brazil-rj-scaled.svg
- data/styles/walking/light/symbols/shield-brazil-rj.svg
- data/styles/walking/light/symbols/shield-brazil-rn-scaled.svg
- data/styles/walking/light/symbols/shield-brazil-rn.svg
- data/styles/walking/light/symbols/shield-brazil-ro-scaled.svg
- data/styles/walking/light/symbols/shield-brazil-ro.svg
- data/styles/walking/light/symbols/shield-brazil-rr-scaled.svg
- data/styles/walking/light/symbols/shield-brazil-rr.svg
- data/styles/walking/light/symbols/shield-brazil-rs-scaled.svg
- data/styles/walking/light/symbols/shield-brazil-rs.svg
- data/styles/walking/light/symbols/shield-brazil-sc-scaled.svg
- data/styles/walking/light/symbols/shield-brazil-sc.svg
- data/styles/walking/light/symbols/shield-brazil-se-scaled.svg
- data/styles/walking/light/symbols/shield-brazil-se.svg
- data/styles/walking/light/symbols/shield-brazil-sp-scaled.svg
- data/styles/walking/light/symbols/shield-brazil-sp.svg
- data/styles/walking/light/symbols/shield-brazil-to-scaled.svg
- data/styles/walking/light/symbols/shield-brazil-to.svg
- data/styles/walking/light/symbols/stage-m.svg
- data/styles/walking/light/symbols/toilets_private-m.svg
- data/styles/walking_outdoor/include/priorities_3_FG.prio.txt
- data/styles/walking_outdoor/include/priorities_4_overlays.prio.txt
- iphone/Maps/Classes/CarPlay/Template Builders/MapTemplateBuilder.swift
- iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/RoutePreview/MWMiPhoneRoutePreview.xib
- iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/RoutePreview/RoutePreviewStatus/BaseRoutePreviewStatus.swift
- iphone/Maps/Maps.xcodeproj/project.pbxproj
View command line instructions
Manual merge helper
Use this merge commit message when completing the merge manually.
Checkout
From your project repository, check out a new branch and test the changes.git fetch -u origin carplay-dashboard:carplay-dashboard
git switch carplay-dashboard
Merge
Merge the changes and update on Forgejo.Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.
git switch main
git merge --no-ff carplay-dashboard
git switch carplay-dashboard
git rebase main
git switch main
git merge --ff-only carplay-dashboard
git switch carplay-dashboard
git rebase main
git switch main
git merge --no-ff carplay-dashboard
git switch main
git merge --squash carplay-dashboard
git switch main
git merge --ff-only carplay-dashboard
git switch main
git merge carplay-dashboard
git push origin main
Sign in to join this conversation.
No reviewers
Labels
Clear labels
No items
No labels
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set.
Reference
eisa01/comaps!19
Loading...
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "carplay-dashboard"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?