From ca3e4d73a55608c7bf541a555e43f03dfa98e8cb Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sun, 14 Jun 2026 08:34:34 +0100 Subject: [PATCH] feat: implement telemetry persistence, data visualization, and improved bluetooth stream parsing with frame statistics (#9) Reviewed-on: https://git.i3omb.com/gronod/esp32-aldl-android/pulls/9 Co-authored-by: Gandalf Co-committed-by: Gandalf --- .github/workflows/release.yml | 56 ++ .gitignore | 1 + .idea/appInsightsSettings.xml | 26 + .idea/deploymentTargetSelector.xml | 7 + .idea/gradle.xml | 1 + .idea/planningMode.xml | 11 + 24_INT10_mod.adx | 786 ++++++++++++++++++ LICENSE | 21 + README.md | 149 ++-- app/build.gradle.kts | 12 + app/src/main/AndroidManifest.xml | 10 + .../esp32aldldashboard/AldlApplication.kt | 41 + .../example/esp32aldldashboard/Navigation.kt | 2 +- .../bluetooth/BluetoothForegroundService.kt | 136 +++ .../bluetooth/BluetoothService.kt | 190 ++++- .../data/database/SessionEntity.kt | 13 + .../data/database/TelemetryDao.kt | 31 + .../data/database/TelemetryDataPointEntity.kt | 47 ++ .../data/database/TelemetryDatabase.kt | 29 + .../esp32aldldashboard/logging/CsvLogger.kt | 100 +++ .../logging/RawStreamLogger.kt | 98 +++ .../esp32aldldashboard/parser/ALDLParser.kt | 311 ++++--- .../parser/DerivedTelemetry.kt | 22 + .../parser/TroubleCodeDictionary.kt | 36 + .../repository/BLMTableRepository.kt | 122 +++ .../repository/ChartPreferencesRepository.kt | 96 +++ .../repository/SettingsRepository.kt | 205 +++++ .../repository/TelemetryRepository.kt | 144 ++++ .../ui/blm/BLMTableScreen.kt | 229 +++++ .../ui/blm/BLMTableViewModel.kt | 32 + .../ui/charts/ChartParameter.kt | 84 ++ .../ui/charts/ChartsScreen.kt | 347 ++++++++ .../ui/components/Gauges.kt | 125 +++ .../ui/main/DashboardScreen.kt | 511 ++++++++++++ .../esp32aldldashboard/ui/main/MainScreen.kt | 710 ++-------------- .../ui/main/MainScreenViewModel.kt | 44 +- .../ui/main/MainScreenViewModelFactory.kt | 20 + .../ui/settings/LogFilesDialog.kt | 137 +++ .../ui/settings/SettingsScreen.kt | 143 ++++ .../esp32aldldashboard/ALDLParserTest.kt | 97 ++- .../esp32aldldashboard/RingBufferTest.kt | 27 + .../ui/main/MainScreenViewModelTest.kt | 65 +- build.gradle.kts | 1 + gradle.properties | 1 + gradle/libs.versions.toml | 16 +- ksp_versions.xml | 169 ++++ 46 files changed, 4505 insertions(+), 956 deletions(-) create mode 100644 .github/workflows/release.yml create mode 100644 .idea/appInsightsSettings.xml create mode 100644 .idea/planningMode.xml create mode 100644 24_INT10_mod.adx create mode 100644 LICENSE create mode 100644 app/src/main/java/com/example/esp32aldldashboard/AldlApplication.kt create mode 100644 app/src/main/java/com/example/esp32aldldashboard/bluetooth/BluetoothForegroundService.kt create mode 100644 app/src/main/java/com/example/esp32aldldashboard/data/database/SessionEntity.kt create mode 100644 app/src/main/java/com/example/esp32aldldashboard/data/database/TelemetryDao.kt create mode 100644 app/src/main/java/com/example/esp32aldldashboard/data/database/TelemetryDataPointEntity.kt create mode 100644 app/src/main/java/com/example/esp32aldldashboard/data/database/TelemetryDatabase.kt create mode 100644 app/src/main/java/com/example/esp32aldldashboard/logging/CsvLogger.kt create mode 100644 app/src/main/java/com/example/esp32aldldashboard/logging/RawStreamLogger.kt create mode 100644 app/src/main/java/com/example/esp32aldldashboard/parser/DerivedTelemetry.kt create mode 100644 app/src/main/java/com/example/esp32aldldashboard/parser/TroubleCodeDictionary.kt create mode 100644 app/src/main/java/com/example/esp32aldldashboard/repository/BLMTableRepository.kt create mode 100644 app/src/main/java/com/example/esp32aldldashboard/repository/ChartPreferencesRepository.kt create mode 100644 app/src/main/java/com/example/esp32aldldashboard/repository/SettingsRepository.kt create mode 100644 app/src/main/java/com/example/esp32aldldashboard/repository/TelemetryRepository.kt create mode 100644 app/src/main/java/com/example/esp32aldldashboard/ui/blm/BLMTableScreen.kt create mode 100644 app/src/main/java/com/example/esp32aldldashboard/ui/blm/BLMTableViewModel.kt create mode 100644 app/src/main/java/com/example/esp32aldldashboard/ui/charts/ChartParameter.kt create mode 100644 app/src/main/java/com/example/esp32aldldashboard/ui/charts/ChartsScreen.kt create mode 100644 app/src/main/java/com/example/esp32aldldashboard/ui/components/Gauges.kt create mode 100644 app/src/main/java/com/example/esp32aldldashboard/ui/main/DashboardScreen.kt create mode 100644 app/src/main/java/com/example/esp32aldldashboard/ui/main/MainScreenViewModelFactory.kt create mode 100644 app/src/main/java/com/example/esp32aldldashboard/ui/settings/LogFilesDialog.kt create mode 100644 app/src/main/java/com/example/esp32aldldashboard/ui/settings/SettingsScreen.kt create mode 100644 app/src/test/java/com/example/esp32aldldashboard/RingBufferTest.kt create mode 100644 ksp_versions.xml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..e4632d6 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,56 @@ +name: Build and Release APK + +on: + push: + branches: + - main + - master + - v2 + +jobs: + build-and-release: + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: 'temurin' + + - name: Setup Android SDK + uses: android-actions/setup-android@v3 + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v3 + + - name: Make gradlew executable + run: chmod +x ./gradlew + + - name: Run Unit Tests + run: ./gradlew test + + - name: Build Debug APK + run: ./gradlew assembleDebug + + - name: Get Short SHA + id: vars + run: echo "short_sha=$(git rev-parse --short HEAD)" >> $GITHUB_ENV + + - name: Rename APK + run: | + mv app/build/outputs/apk/debug/app-debug.apk app/build/outputs/apk/debug/esp32-aldl-dashboard-${{ env.short_sha }}.apk + + - name: Create Gitea Release + uses: softprops/action-gh-release@v2 + with: + tag_name: "build-${{ env.short_sha }}" + name: "Build ${{ env.short_sha }}" + files: app/build/outputs/apk/debug/esp32-aldl-dashboard-${{ env.short_sha }}.apk + prerelease: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index aa724b7..0a2467a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ .externalNativeBuild .cxx local.properties +.windsurf/workflows/gitea-interaction.md diff --git a/.idea/appInsightsSettings.xml b/.idea/appInsightsSettings.xml new file mode 100644 index 0000000..371f2e2 --- /dev/null +++ b/.idea/appInsightsSettings.xml @@ -0,0 +1,26 @@ + + + + + + \ No newline at end of file diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml index ca16a99..b9263f9 100644 --- a/.idea/deploymentTargetSelector.xml +++ b/.idea/deploymentTargetSelector.xml @@ -4,6 +4,13 @@ diff --git a/.idea/gradle.xml b/.idea/gradle.xml index cdbc250..02c4aa5 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -1,5 +1,6 @@ +