Feature/swarm mode#101
Open
diegurrio wants to merge 2 commits into
Open
Conversation
Staging now copies the whole batch to tmp files and only renames them live (and prunes stale extras) after every copy succeeds, so a mid-batch I/O failure leaves the inbox exactly as the unchanged .ready token describes. The wheel projection treats a consumed release as ending the snapshot, closing the one-poll reopen window when a fresh release seq arrives paired with a stale OPEN phase. The native loader also resets the gesture machine on session swap, the wheel item swap moved into a SideEffect, and system back now exits library selection mode before leaving the screen.
Collaborator
Author
|
Hry @MikePehel take a look. Let me know if you want an .apk |
There was a problem hiding this comment.
Pull request overview
This PR expands Hawkeye to support multi-log “swarm mode” and related UX/telemetry improvements, including an Android Compose shell that can stage and launch multiple logs together and a native wheel-gesture state machine for fast drone switching.
Changes:
- Add a pure C tap-and-hold wheel gesture state machine plus unit tests, and bridge it to Android via a lock-free JNI snapshot/control surface.
- Add live-session marker parsing (
inbox/.live=<millis> <port>) with tests, and improve MAVLink telemetry requests + relative-alt handling to avoid bad origins on reconnect. - Introduce/expand Android modular Clean Architecture setup (build-logic conventions, feature modules, Room-backed replay library, DataStore settings, Compose UI, instrumentation/unit tests).
Reviewed changes
Copilot reviewed 45 out of 45 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| tests/test_theme.c | Initialize asset path resolution in theme/trail tests. |
| tests/test_live_marker.c | Add unit tests for parsing the .live marker format. |
| tests/CMakeLists.txt | Register new unit tests and link asset-path code into theme tests. |
| src/wheel_gesture.h | Add pure C tap-and-hold gesture state machine for the wheel menu. |
| src/vehicle.c | Switch MTL parsing to Raylib LoadFileText and adjust origin/altitude handling for reconnects. |
| src/theme.c | Resolve theme directory via asset_path() rather than ./themes. |
| src/mavlink_receiver.h | Extend telemetry state with relative-alt fields/validity. |
| src/mavlink_receiver.c | Generalize command sending and request standard telemetry streams + reset relative-alt validity on connect. |
| src/live_marker.h | Add pure parser for the .live inbox marker (<millis> [port]). |
| src/hud.h | Add HUD flags for transport visibility and an extra scale multiplier. |
| src/hud.c | Apply show_transport and scale_mul to HUD layout/scale. |
| src/asset_path.h | Define ASSET_MAX_PATH constant for asset path buffers. |
| android/settings.gradle.kts | Include build-logic and register new Android modules. |
| android/gradle/wrapper/gradle-wrapper.properties | Update Gradle wrapper version. |
| android/gradle.properties | Add opt-in to allow KSP-generated sources via Kotlin source sets. |
| android/feature/settings/presentation/src/test/kotlin/com/px4/hawkeye/feature/settings/presentation/SettingsViewModelTest.kt | Add unit tests for Settings state/actions and port validation behavior. |
| android/feature/settings/presentation/src/test/kotlin/com/px4/hawkeye/feature/settings/presentation/FakeSettingsRepository.kt | Add a fake SettingsRepository for presentation tests. |
| android/feature/settings/presentation/src/main/res/values/strings.xml | Add Settings UI strings. |
| android/feature/settings/presentation/src/main/kotlin/com/px4/hawkeye/feature/settings/presentation/SettingsViewModel.kt | Add Settings ViewModel with validation/persistence behavior. |
| android/feature/settings/presentation/src/main/kotlin/com/px4/hawkeye/feature/settings/presentation/SettingsState.kt | Add Settings state model including raw port input + error. |
| android/feature/settings/presentation/src/main/kotlin/com/px4/hawkeye/feature/settings/presentation/SettingsAction.kt | Add Settings actions (theme/unit/port updates). |
| android/feature/settings/presentation/src/main/kotlin/com/px4/hawkeye/feature/settings/presentation/di/SettingsPresentationModule.kt | Register Settings presentation DI and navigation entry installer. |
| android/feature/settings/presentation/build.gradle.kts | Configure Settings presentation module. |
| android/feature/settings/domain/src/test/kotlin/com/px4/hawkeye/feature/settings/domain/ThemeResolutionTest.kt | Add tests for theme-mode resolution. |
| android/feature/settings/domain/src/main/kotlin/com/px4/hawkeye/feature/settings/domain/ThemeResolution.kt | Add theme-mode resolution helper. |
| android/feature/settings/domain/src/main/kotlin/com/px4/hawkeye/feature/settings/domain/ThemeMode.kt | Add theme-mode enum. |
| android/feature/settings/domain/src/main/kotlin/com/px4/hawkeye/feature/settings/domain/SettingsRepository.kt | Add SettingsRepository contract. |
| android/feature/settings/domain/src/main/kotlin/com/px4/hawkeye/feature/settings/domain/DistanceUnit.kt | Add distance-unit enum. |
| android/feature/settings/domain/src/main/kotlin/com/px4/hawkeye/feature/settings/domain/AppSettings.kt | Add AppSettings domain model. |
| android/feature/settings/domain/build.gradle.kts | Configure Settings domain module. |
| android/feature/settings/data/src/test/kotlin/com/px4/hawkeye/feature/settings/data/SettingsParsingTest.kt | Add tests for settings parsing helpers. |
| android/feature/settings/data/src/main/kotlin/com/px4/hawkeye/feature/settings/data/di/SettingsDataModule.kt | Provide SettingsRepository via DataStore implementation. |
| android/feature/settings/data/src/main/kotlin/com/px4/hawkeye/feature/settings/data/DataStoreSettingsRepository.kt | Implement settings persistence using DataStore Preferences. |
| android/feature/settings/data/build.gradle.kts | Configure Settings data module dependencies. |
| android/feature/replay/presentation/src/test/kotlin/com/px4/hawkeye/feature/replay/presentation/LibraryEntryUiMapperTest.kt | Add tests for size/date formatting. |
| android/feature/replay/presentation/src/test/kotlin/com/px4/hawkeye/feature/replay/presentation/FakeReplayLibraryRepository.kt | Add fake replay library repository for presentation tests. |
| android/feature/replay/presentation/src/main/res/values/strings.xml | Add Replay library strings (multi-select + swarm cap). |
| android/feature/replay/presentation/src/main/kotlin/com/px4/hawkeye/feature/replay/presentation/ReplayLibraryViewModel.kt | Add Replay library ViewModel (import, select, stage, launch). |
| android/feature/replay/presentation/src/main/kotlin/com/px4/hawkeye/feature/replay/presentation/ReplayLibraryState.kt | Add Replay library UI state models. |
| android/feature/replay/presentation/src/main/kotlin/com/px4/hawkeye/feature/replay/presentation/ReplayLibraryEvent.kt | Add Replay library events (picker, launch, error). |
| android/feature/replay/presentation/src/main/kotlin/com/px4/hawkeye/feature/replay/presentation/ReplayLibraryAction.kt | Add Replay library actions including multi-select play-together. |
| android/feature/replay/presentation/src/main/kotlin/com/px4/hawkeye/feature/replay/presentation/LibraryEntryUiMapper.kt | Map domain library entries to UI (size/date formatting). |
| android/feature/replay/presentation/src/main/kotlin/com/px4/hawkeye/feature/replay/presentation/di/ReplayPresentationModule.kt | Register Replay presentation DI. |
| android/feature/replay/presentation/build.gradle.kts | Configure Replay presentation module. |
| android/feature/replay/data/src/test/kotlin/com/px4/hawkeye/feature/replay/data/FakeReplayLibraryDao.kt | Add in-memory DAO fake mirroring Room ordering. |
| android/feature/replay/data/src/test/kotlin/com/px4/hawkeye/feature/replay/data/FakeReplayFileManager.kt | Add fake file manager for repository tests. |
| android/feature/replay/data/src/main/kotlin/com/px4/hawkeye/feature/replay/data/RoomReplayLibraryRepository.kt | Implement Room+filesystem replay library repository (import/delete/stage). |
| android/feature/replay/data/src/main/kotlin/com/px4/hawkeye/feature/replay/data/ReplayFileManager.kt | Define platform-abstract file manager contract. |
| android/feature/replay/data/src/main/kotlin/com/px4/hawkeye/feature/replay/data/LibraryEntryMappers.kt | Add mappers between Room entities and domain models. |
| android/feature/replay/data/src/main/kotlin/com/px4/hawkeye/feature/replay/data/di/ReplayDataModule.kt | Provide Room DB, DAO, file store, and repository via DI. |
| android/feature/replay/data/src/main/kotlin/com/px4/hawkeye/feature/replay/data/db/ReplayLibraryDao.kt | Add Room DAO for replay library entries. |
| android/feature/replay/data/src/main/kotlin/com/px4/hawkeye/feature/replay/data/db/ReplayDatabase.kt | Add Room database definition for replay library. |
| android/feature/replay/data/src/main/kotlin/com/px4/hawkeye/feature/replay/data/db/LibraryEntryEntity.kt | Add Room entity representing a library entry. |
| android/feature/replay/data/src/main/kotlin/com/px4/hawkeye/feature/replay/data/AndroidReplayFileManager.kt | Implement SAF-based file import/name resolution for Android. |
| android/feature/replay/data/schemas/com.px4.hawkeye.feature.replay.data.db.ReplayDatabase/1.json | Add Room exported schema. |
| android/feature/replay/data/build.gradle.kts | Configure replay data module and Room/KSP schema output. |
| android/feature/live/presentation/src/test/kotlin/com/px4/hawkeye/feature/live/presentation/LiveSetupViewModelTest.kt | Add tests for Live setup endpoint building and events. |
| android/feature/live/presentation/src/test/kotlin/com/px4/hawkeye/feature/live/presentation/FakeDeviceIpProvider.kt | Add fake device IP provider for tests. |
| android/feature/live/presentation/src/main/res/values/strings.xml | Add Live setup screen strings. |
| android/feature/live/presentation/src/main/kotlin/com/px4/hawkeye/feature/live/presentation/LiveSetupViewModel.kt | Add Live setup ViewModel (device IP + launch event). |
| android/feature/live/presentation/src/main/kotlin/com/px4/hawkeye/feature/live/presentation/LiveSetupState.kt | Add Live setup UI state (endpoint string). |
| android/feature/live/presentation/src/main/kotlin/com/px4/hawkeye/feature/live/presentation/LiveSetupEvent.kt | Add Live setup events. |
| android/feature/live/presentation/src/main/kotlin/com/px4/hawkeye/feature/live/presentation/LiveSetupAction.kt | Add Live setup actions. |
| android/feature/live/presentation/src/main/kotlin/com/px4/hawkeye/feature/live/presentation/di/LivePresentationModule.kt | Register parameterized Live setup ViewModel via Koin. |
| android/feature/live/presentation/build.gradle.kts | Configure Live presentation module. |
| android/feature/live/domain/src/main/kotlin/com/px4/hawkeye/feature/live/domain/LiveConnectionState.kt | Add connection state enum for live overlays. |
| android/feature/live/domain/build.gradle.kts | Configure Live domain module. |
| android/feature/live/data/src/main/kotlin/com/px4/hawkeye/feature/live/data/di/LiveDataModule.kt | Provide DeviceIpProvider via DI. |
| android/feature/live/data/src/main/kotlin/com/px4/hawkeye/feature/live/data/AndroidDeviceIpProvider.kt | Implement permission-free IPv4 discovery using NetworkInterface. |
| android/feature/live/data/build.gradle.kts | Configure Live data module. |
| android/feature/home/presentation/src/test/kotlin/com/px4/hawkeye/feature/home/presentation/UsesWidePaneTest.kt | Add tests for responsive breakpoint helper. |
| android/feature/home/presentation/src/test/kotlin/com/px4/hawkeye/feature/home/presentation/HomeViewModelTest.kt | Add tests for Home navigation/events and recents. |
| android/feature/home/presentation/src/test/kotlin/com/px4/hawkeye/feature/home/presentation/FakeReplayLibraryRepository.kt | Add fake replay library repo for Home tests. |
| android/feature/home/presentation/src/main/res/values/strings.xml | Add Home screen strings. |
| android/feature/home/presentation/src/main/res/layout/home_video_player.xml | Add Media3 PlayerView layout for background video. |
| android/feature/home/presentation/src/main/kotlin/com/px4/hawkeye/feature/home/presentation/RecentFlightUiMapper.kt | Add mapping for recents subtitle/date. |
| android/feature/home/presentation/src/main/kotlin/com/px4/hawkeye/feature/home/presentation/HomeViewModel.kt | Add Home ViewModel consuming library recents and emitting events. |
| android/feature/home/presentation/src/main/kotlin/com/px4/hawkeye/feature/home/presentation/HomeVideoBackground.kt | Add lifecycle-aware looping background video composable. |
| android/feature/home/presentation/src/main/kotlin/com/px4/hawkeye/feature/home/presentation/HomeState.kt | Add Home UI state models. |
| android/feature/home/presentation/src/main/kotlin/com/px4/hawkeye/feature/home/presentation/HomeEvent.kt | Add Home events (navigate/connect/play recent/error). |
| android/feature/home/presentation/src/main/kotlin/com/px4/hawkeye/feature/home/presentation/HomeAction.kt | Add Home actions. |
| android/feature/home/presentation/src/main/kotlin/com/px4/hawkeye/feature/home/presentation/di/HomePresentationModule.kt | Register Home ViewModel via DI. |
| android/feature/home/presentation/build.gradle.kts | Configure Home presentation module dependencies. |
| android/core/presentation/src/main/res/values/strings.xml | Add shared error strings for UI mapping. |
| android/core/presentation/src/main/kotlin/com/px4/hawkeye/core/presentation/UiText.kt | Add UiText abstraction for dynamic vs resource strings. |
| android/core/presentation/src/main/kotlin/com/px4/hawkeye/core/presentation/ReplayPlaybackLauncher.kt | Add seam for launching native renderer in replay mode. |
| android/core/presentation/src/main/kotlin/com/px4/hawkeye/core/presentation/ObserveAsEvents.kt | Add helper to collect event flows with lifecycle. |
| android/core/presentation/src/main/kotlin/com/px4/hawkeye/core/presentation/LivePlaybackLauncher.kt | Add seam for launching native renderer in live mode. |
| android/core/presentation/src/main/kotlin/com/px4/hawkeye/core/presentation/DataErrorToUiText.kt | Map domain data errors to UI strings. |
| android/core/presentation/build.gradle.kts | Configure core presentation module. |
| android/core/navigation/src/test/kotlin/com/px4/hawkeye/core/navigation/NavBackStacksTest.kt | Add tests for multi-stack shell navigation behavior. |
| android/core/navigation/src/main/kotlin/com/px4/hawkeye/core/navigation/NavKey.kt | Define top-level destinations and navigation keys. |
| android/core/navigation/src/main/kotlin/com/px4/hawkeye/core/navigation/NavBackStacks.kt | Add snapshot-state-backed per-tab back stacks. |
| android/core/navigation/src/main/kotlin/com/px4/hawkeye/core/navigation/EntryProviderInstaller.kt | Add DI seam for feature NavEntry installers. |
| android/core/navigation/src/main/kotlin/com/px4/hawkeye/core/navigation/di/NavigationModule.kt | Add shell navigation DI module placeholder and documentation. |
| android/core/navigation/build.gradle.kts | Configure navigation module and serialization/plugin deps. |
| android/core/domain/src/test/kotlin/com/px4/hawkeye/core/domain/LivePortTest.kt | Add unit tests for listen-port validation. |
| android/core/domain/src/main/kotlin/com/px4/hawkeye/core/domain/Result.kt | Add a typed Result + helpers (map, onSuccess, onFailure). |
| android/core/domain/src/main/kotlin/com/px4/hawkeye/core/domain/ReplayLibraryRepository.kt | Define replay library repository contract in core domain. |
| android/core/domain/src/main/kotlin/com/px4/hawkeye/core/domain/LivePort.kt | Add default live port, range, and validation function. |
| android/core/domain/src/main/kotlin/com/px4/hawkeye/core/domain/LibraryEntry.kt | Add core domain model for imported replay logs. |
| android/core/domain/src/main/kotlin/com/px4/hawkeye/core/domain/Error.kt | Add marker interface for domain errors. |
| android/core/domain/src/main/kotlin/com/px4/hawkeye/core/domain/DeviceIpProvider.kt | Add provider interface for LAN IP lookup. |
| android/core/domain/src/main/kotlin/com/px4/hawkeye/core/domain/DataError.kt | Add domain data error types. |
| android/core/domain/build.gradle.kts | Configure core domain module. |
| android/core/design-system/src/test/kotlin/com/px4/hawkeye/core/designsystem/wheel/WheelMenuGeometryTest.kt | Add geometry tests for wheel slice selection and clamping. |
| android/core/design-system/src/test/kotlin/com/px4/hawkeye/core/designsystem/DronePaletteTest.kt | Add tests verifying 16-color palette and spot-check against native theme. |
| android/core/design-system/src/main/kotlin/com/px4/hawkeye/core/designsystem/wheel/WheelMenuItem.kt | Add wheel menu item/style models and defaults. |
| android/core/design-system/src/main/kotlin/com/px4/hawkeye/core/designsystem/wheel/WheelMenuGestures.kt | Add reference Compose gesture producer for wheel menu. |
| android/core/design-system/src/main/kotlin/com/px4/hawkeye/core/designsystem/wheel/WheelMenuGeometry.kt | Add pure slice math used by wheel menu + tests. |
| android/core/design-system/src/main/kotlin/com/px4/hawkeye/core/designsystem/Theme.kt | Add Material3 theme setup and glass-surface token. |
| android/core/design-system/src/main/kotlin/com/px4/hawkeye/core/designsystem/DronePalette.kt | Add shared drone palette matching native theme defaults. |
| android/core/design-system/src/main/kotlin/com/px4/hawkeye/core/designsystem/DesignTokens.kt | Centralize spacing/alpha/scrim/shadow tokens. |
| android/core/design-system/build.gradle.kts | Configure design-system compose module and test deps. |
| android/build.gradle.kts | Expand top-level plugin aliases for multi-module project. |
| android/build-logic/settings.gradle.kts | Define build-logic composite build and version catalog wiring. |
| android/build-logic/convention/src/main/kotlin/JvmLibraryConventionPlugin.kt | Add JVM library convention plugin (JUnit5, assertk, turbine, coroutines test). |
| android/build-logic/convention/src/main/kotlin/com/px4/hawkeye/buildlogic/Libs.kt | Add helper accessors for version catalog in convention plugins. |
| android/build-logic/convention/src/main/kotlin/com/px4/hawkeye/buildlogic/AndroidCompose.kt | Add common Compose configuration/dependencies for convention plugins. |
| android/build-logic/convention/src/main/kotlin/com/px4/hawkeye/buildlogic/AndroidCommon.kt | Centralize compile/min/target SDK and Java compatibility config. |
| android/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt | Add Android library convention plugin. |
| android/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt | Add Android library + Compose convention plugin. |
| android/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt | Add feature module convention plugin (Compose + Koin + lifecycle deps). |
| android/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt | Add Android app convention plugin. |
| android/build-logic/convention/build.gradle.kts | Register convention plugins as a Gradle plugin bundle. |
| android/app/src/test/java/com/px4/hawkeye/android/shell/NavSuiteLayoutTypeTest.kt | Add tests for nav suite layout selection logic. |
| android/app/src/test/java/com/px4/hawkeye/android/render/transport/TransportViewModelTest.kt | Add tests for transport polling and actions. |
| android/app/src/test/java/com/px4/hawkeye/android/render/transport/FakeReplayController.kt | Add fake replay controller for transport tests. |
| android/app/src/test/java/com/px4/hawkeye/android/render/swarm/FakeSwarmController.kt | Add fake swarm controller for wheel tests. |
| android/app/src/test/java/com/px4/hawkeye/android/render/RenderSessionMarkerTest.kt | Add tests for writing .live marker file. |
| android/app/src/test/java/com/px4/hawkeye/android/render/LiveStatusDecodeTest.kt | Add tests for decoding native live status float array. |
| android/app/src/test/java/com/px4/hawkeye/android/render/live/LiveStatusViewModelTest.kt | Add tests for live status polling/view model behavior. |
| android/app/src/main/res/values/themes.xml | Simplify activity theme (Compose handles UI theming). |
| android/app/src/main/res/values/strings.xml | Add shell/overlay strings (nav, transport, live status, swarm wheel). |
| android/app/src/main/res/values/colors.xml | Remove legacy MaterialComponents color resources. |
| android/app/src/main/res/values-night/themes.xml | Remove legacy night theme override. |
| android/app/src/main/res/mipmap-anydpi/ic_launcher.xml | Point monochrome layer to a dedicated themed-icon asset. |
| android/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml | Point monochrome layer to a dedicated themed-icon asset. |
| android/app/src/main/res/drawable/ic_launcher_monochrome.xml | Add monochrome adaptive icon vector for Android themed icons. |
| android/app/src/main/res/drawable/ic_launcher_foreground.xml | Remove legacy launcher foreground vector. |
| android/app/src/main/java/com/px4/hawkeye/android/shell/ShellViewModel.kt | Add ViewModel to keep nav back stacks across config changes. |
| android/app/src/main/java/com/px4/hawkeye/android/replay/AndroidReplayPlaybackLauncher.kt | Implement replay launcher seam to start renderer with drone labels. |
| android/app/src/main/java/com/px4/hawkeye/android/render/transport/TransportViewModel.kt | Add transport overlay ViewModel (poll status, forward actions). |
| android/app/src/main/java/com/px4/hawkeye/android/render/transport/TransportState.kt | Add transport overlay state model. |
| android/app/src/main/java/com/px4/hawkeye/android/render/transport/TransportScreen.kt | Add Compose UI for transport overlay bar. |
| android/app/src/main/java/com/px4/hawkeye/android/render/transport/TransportAction.kt | Define transport actions. |
| android/app/src/main/java/com/px4/hawkeye/android/render/SwarmController.kt | Add swarm controller interface + JNI-backed implementation + snapshot model. |
| android/app/src/main/java/com/px4/hawkeye/android/render/swarm/SwarmWheelViewModel.kt | Add swarm wheel overlay ViewModel (poll native gesture, build items, select). |
| android/app/src/main/java/com/px4/hawkeye/android/render/swarm/SwarmWheelState.kt | Add swarm wheel overlay state + item UI model. |
| android/app/src/main/java/com/px4/hawkeye/android/render/swarm/SwarmWheelAction.kt | Define swarm wheel actions. |
| android/app/src/main/java/com/px4/hawkeye/android/render/RenderMode.kt | Add render-mode enum (REPLAY vs LIVE). |
| android/app/src/main/java/com/px4/hawkeye/android/render/RendererLauncher.kt | Centralize renderer launch + .live marker writing for live mode. |
| android/app/src/main/java/com/px4/hawkeye/android/render/NativeReplayController.kt | Add replay controller JNI surface + status model. |
| android/app/src/main/java/com/px4/hawkeye/android/render/NativeLiveStatusController.kt | Add live status JNI surface + decoder + model. |
| android/app/src/main/java/com/px4/hawkeye/android/render/live/LiveStatusViewModel.kt | Add ViewModel polling native live status. |
| android/app/src/main/java/com/px4/hawkeye/android/render/live/LiveStatusScreen.kt | Add Compose UI for live connection status strip. |
| android/app/src/main/java/com/px4/hawkeye/android/MainActivity.kt | Add Compose launcher activity using settings-driven theme mode. |
| android/app/src/main/java/com/px4/hawkeye/android/live/AndroidLivePlaybackLauncher.kt | Implement live launcher seam (port + resolved device IP). |
| android/app/src/main/java/com/px4/hawkeye/android/HawkeyeApp.kt | Start Koin only in main process to avoid Room contention with renderer process. |
| android/app/src/main/java/com/px4/hawkeye/android/di/AppModule.kt | Wire app-level DI (shell VM + launchers). |
| android/app/src/main/cpp/swarm_jni.c | Implement JNI bridge and publish/take functions for swarm control. |
| android/app/src/main/cpp/swarm_control.h | Define lock-free snapshot/request bridge for swarm wheel overlay. |
| android/app/src/main/cpp/replay_control.h | Extend/define lock-free replay/live status bridge header. |
| android/app/src/main/cpp/CMakeLists.txt | Expand native build sources to include replay, HUD, MAVLink, and JNI bridges. |
| android/app/src/main/AndroidManifest.xml | Add INTERNET permission, introduce MainActivity launcher, isolate renderer process/activity. |
| android/app/src/androidTest/java/com/px4/hawkeye/android/ShellNavigationTest.kt | Add instrumentation test for shell navigation + rotation resilience. |
| android/app/src/androidTest/java/com/px4/hawkeye/android/SettingsPortFieldTest.kt | Add instrumentation test verifying port-field error rendering. |
| android/app/src/androidTest/java/com/px4/hawkeye/android/LiveStatusScreenTest.kt | Add instrumentation tests for live status strip text per state. |
| android/app/src/androidTest/java/com/px4/hawkeye/android/LiveSetupScreenTest.kt | Add instrumentation tests for live setup screen rendering/actions. |
| android/app/src/androidTest/java/com/px4/hawkeye/android/LibraryRecentsMultiItemTest.kt | Add device test seeding Room DAO and verifying Home/Replay recents behavior. |
| android/app/build.gradle.kts | Switch to convention plugin and add module dependencies/test setup. |
| .gitignore | Ignore an additional Android docs path. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Contributor
Yeah, send me a .apk. |
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
This PR allows a user to open multiple logs at the same time to visualize each log opened in swarm mode. The change from drone to drone we're using a tap and hold gesture to make use of our menu wheel.
Video Example
Screen_recording_20260612_105640.mp4
Next steps
I want to refine the log picker screen a bit so you can tap and hold to select. Currently the tap and hold gesture on that screen opens up a dialog which was the standar pattern when we could only open a single file.