Skip to content

refactor(camera): declarative keyframe tour, reverse-trig stationary tracking & 3-way framework parity - #59

Merged
dkhawk merged 4 commits into
feature/new_features_with_0.2.2_sdkfrom
feat/advance_camera_animation_refactor
Aug 28, 2026
Merged

dkhawk merged 4 commits into
feature/new_features_with_0.2.2_sdkfrom
feat/advance_camera_animation_refactor

Conversation

@LoyalAbbas

@LoyalAbbas LoyalAbbas commented Aug 28, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Refactors the Advanced Camera Animation sample into a clean, educational 5-layer architecture with 100% functional, visual, and architectural parity across Kotlin Views, Java Views, and Jetpack Compose.

Introduces the Reverse-Trigonometry Stationary Camera Tracking Engine (StationaryCameraTracker), a declarative 5-Step Keyframe Tour, Material 3 controls, single-source HTML help dialogs, framework indicators, and a comprehensive Truth-asserted JVM unit test suite.


Key Changes & Enhancements

📐 1. Reverse-Trig Stationary Camera Tracking Engine

  • Implemented StationaryCameraTracker in local East-North-Up (ENU) coordinates using inverse spherical trigonometry to lock a stationary 3D spatial eye while tracking a moving entity across San Francisco Bay.
  • Full literate programming documentation with LaTeX derivations for line-of-sight vectors, range, heading, and tilt.
  • Added comprehensive unit test suite in StationaryCameraTrackerTest.kt verifying $<5\text{cm}$ spatial drift across multi-kilometer flights.

✈️ 2. 5-Step Keyframe Queue Tour

  • Declarative keyframe sequence combining 4 distinct camera paradigms:
    1. Step 1: High-Altitude Swoop In from SF panorama down to Golden Gate Bridge (3.5s).
    2. Step 2: Mid-Air Inspection Pause (2.0s).
    3. Step 3: 360° Orbital Revolution around the airplane (6.0s).
    4. Step 4: Stationary Vantage Tracking Flight across San Francisco Bay (6.0s).
    5. Step 5: Native Transit Flight to Coit Tower (4.0s) arriving at heading = 286.2° (facing back along the incoming flight corridor).

🎨 3. UI Modernization & Framework Parity

  • Replaced horizontal chip carousel with Material 3 OutlinedButton + DropdownMenu popup.
  • Shared single-source HTML documentation from strings.xml (help_dialog_advanced_animation_message) rendered with HtmlCompat across all 3 frameworks.
  • Added framework subtitle badges (Kotlin Views, Java Views, Jetpack Compose) on the control panel header and app bar.
  • Implemented 3.5s idle auto-fade to dim controls to 35% opacity for unobstructed 3D map viewing.

⏱️ 4. Stability, Timing & Model Rendering Fixes

  • glTF Asset Coordinate Convention: Applied consistent $+180^\circ$ yaw normalization to align Airplane.glb (modeled along hBcZ$) with geodetic navigation bearings.
  • Midpoint Jump & Destination Persistence: Repositions the airplane model at = 2.5\text{s}$ during low-CPU mode and locks the final parked pose at Coit Tower upon flight completion.
  • Compose Recomposition State Hoisting: Hoisted currentCamera state to eliminate camera snapping on recomposition.
  • Initialization Workaround Documentation: Documented the postDelayed(..., 350L) timing workaround in SampleBaseActivity and activities.

🧪 5. Unit Test Pyramid

  • Added unit tests with Google Truth assertions covering StationaryCameraTrackerTest, EntityAnimatorTest, WorldControllerTest, TourPlaybackControllerTest, and AdvancedCameraAnimationViewModelTest.

@LoyalAbbas
LoyalAbbas requested review from dkhawk and kikoso and removed request for dkhawk August 28, 2026 12:16
@LoyalAbbas LoyalAbbas changed the title efactor(Advanced Camera Animation): MVVM, add architecture standards & stability fixes refactor(Advanced Camera Animation): MVVM, add architecture standards & stability fixes Aug 28, 2026
@LoyalAbbas
LoyalAbbas changed the base branch from feat/drawsOccludedSegments_flag_aca_ui_improvement to feature/new_features_with_0.2.2_sdk August 28, 2026 14:39
@LoyalAbbas
LoyalAbbas force-pushed the feat/advance_camera_animation_refactor branch from a824ea5 to df21588 Compare August 28, 2026 17:47
dkhawk added 3 commits August 28, 2026 15:18
…tationary tracking

- Implement StationaryCameraTracker math controller with ENU inverse spherical trigonometry for fixed-vantage camera tracking
- Add 5-step keyframe queue tour (high-altitude swoop, dwell pause, 360 orbit, stationary vantage tracking flight, and native flyTo transition to Coit Tower)
- Modernize UI controls with Material 3 dropdown menu button and structured HTML help dialog across Kotlin Views, Java Views, and Jetpack Compose
- Ensure consistent glTF model coordinate alignment, midpoint jump teleportation, and post-flight destination persistence
- Add comprehensive unit test coverage with Google Truth assertions across domain controllers
… subtitles

- Add framework indicator subtitles (Kotlin Views, Java Views, Jetpack Compose) to control panel headers and top toolbars
- Fix LiveData approach button label and sub-options observation in Java Views Activity
- Correct chase camera heading for High-Rate Frame Dispatcher to follow flight path bearing (106.2°)
- Add delayed onMap3DViewReady initialization workaround to ensure reliable initial camera and entity setup
@dkhawk
dkhawk force-pushed the feat/advance_camera_animation_refactor branch from df21588 to 2b6e6b0 Compare August 28, 2026 21:59
@dkhawk dkhawk changed the title refactor(Advanced Camera Animation): MVVM, add architecture standards & stability fixes refactor(camera): declarative keyframe tour, reverse-trig stationary tracking & 3-way framework parity Aug 28, 2026
@dkhawk
dkhawk merged commit cb51137 into feature/new_features_with_0.2.2_sdk Aug 28, 2026
2 checks passed
@dkhawk
dkhawk deleted the feat/advance_camera_animation_refactor branch August 28, 2026 22:09
dkhawk added a commit that referenced this pull request Aug 28, 2026
…llowing, Data Viz, Roadmap Mode, FOV) (#50)

* Add sample demos for Cloud Styling, Roadmap Mode, Data Visualization, Field of View, Path Following, and Advanced Camera Animation

* feat(samples): polish 0.2.2 showcase features and apply spotless formatting

- Add showcase demos for Advanced Camera Animation, Path Following, Data Visualization, Roadmap Mode, and Field of View
- Synchronize hardware frame loops to VSYNC and improve touch-fade UX
- Format codebase using spotless to adhere to 4-space ktlint rules

* test(visual): optimize visual test synchronization using MapSteady listener

* fix(compose): preserve Cloud Styling skeleton placeholder to match main baseline

* feat(compose): implement Data Visualization (Flood Fill) demo in ComposeDemos

* refactor(samples): polish 0.2.2 showcase samples with collapsible UI, auto-fade, and literate docs (#54)

* Enhance Advanced Camera Animation and Path Following samples

- Advanced Camera Animation:
  - Add modular step animation pipeline (FlyToStep, OrbitStep, DwellStep, FlyAroundStep, KeyframeStep).
  - Add high-altitude San Francisco starting camera view.
  - Implement full reset and continuous orbit support.
  - Sync Java, Kotlin, and Jetpack Compose implementations.

- Path Following:
  - Implement two-polyline progress tracking with wide blue base route (lower z-index) and narrow purple progress route (higher z-index).
  - Use in-place fixed polyline IDs to eliminate rendering flickering.
  - Default altitude mode to 'Clamp to Ground' with support for Relative to Ground, Relative to Mesh, and Absolute.
  - Add dynamic path height slider to avoid z-fighting with terrain.
  - Add collapsible control panel with explicit collapse/expand button, auto-slide dismissal, and subtle idle opacity.
  - Extract all hardcoded strings into strings.xml resources.
  - Align Java and Kotlin implementations.

* feat(fieldofview,datavisualization): polish FOV and Data Visualization with collapsible cards and literate docs

* feat(roadmapmode): polish Roadmap Mode with collapsible header and literate docs

* feat(routes): polish Routes API sample with collapsible control panel, auto-fade, and literate docs

* docs(samples): augment literate comments explaining 3D coordinates, extrusion, and smoothing

* build: untrack and gitignore gradle-daemon-jvm.properties

* docs: update copyright headers to 2026 for camera animation step classes

* fix(samples): address PR review feedback on animation timing, tour resume, onPause, and TransitionManager collapse

* fix(lint): resolve github-advanced-security warnings for text size, layout hierarchy, and KTX color parsing (#55)

* refactor(path-following): clean MVVM architecture, custom 3D gesture engine, and modern UI controls (#58)

* refactor(path-following): clean MVVM architecture, custom 3D gesture engine, and modern UI controls

* test(path-following): add unit test suites for PathEngine and PathFollowingViewModel

* refactor(path-following): clean PathPlaybackState data class and remove unused strings

* refactor(camera): declarative keyframe tour, reverse-trig stationary tracking & 3-way framework parity (#59)

* feat(camera): implement declarative keyframe tour with reverse-trig stationary tracking

- Implement StationaryCameraTracker math controller with ENU inverse spherical trigonometry for fixed-vantage camera tracking
- Add 5-step keyframe queue tour (high-altitude swoop, dwell pause, 360 orbit, stationary vantage tracking flight, and native flyTo transition to Coit Tower)
- Modernize UI controls with Material 3 dropdown menu button and structured HTML help dialog across Kotlin Views, Java Views, and Jetpack Compose
- Ensure consistent glTF model coordinate alignment, midpoint jump teleportation, and post-flight destination persistence
- Add comprehensive unit test coverage with Google Truth assertions across domain controllers

* fix(camera): synchronize UI state across frameworks and add framework subtitles

- Add framework indicator subtitles (Kotlin Views, Java Views, Jetpack Compose) to control panel headers and top toolbars
- Fix LiveData approach button label and sub-options observation in Java Views Activity
- Correct chase camera heading for High-Rate Frame Dispatcher to follow flight path bearing (106.2°)
- Add delayed onMap3DViewReady initialization workaround to ensure reliable initial camera and entity setup

* docs(camera): document onMap3DViewReady initialization delay workaround

* docs(camera): clean KDoc math formatting for Android Studio and Dokka compatibility

---------

Co-authored-by: Dale Hawkins <107309+dkhawk@users.noreply.github.com>

* fix(lint): resolve StringFormatInvalid and SuspiciousIndentation warnings

* fix(lint): resolve version catalog, hardcoded text, and accessibility warnings

* feat(branding): add framework-specific Google Maps 3D launcher icons for Kotlin, Java, and Compose

---------

Co-authored-by: Dale Hawkins <107309+dkhawk@users.noreply.github.com>
googlemaps-bot pushed a commit that referenced this pull request Aug 28, 2026
# [1.10.0](v1.9.0...v1.10.0) (2026-08-28)

### Features

* **samples:** add 0.2.2 showcase features (Camera Animation, Path Following, Data Viz, Roadmap Mode, FOV) ([#50](#50)) ([b87b16c](b87b16c)), closes [#54](#54) [#55](#55) [#58](#58) [#59](#59)
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.

2 participants