diff --git a/AGENTS.md b/AGENTS.md index f5bc3f4..dc3835c 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -35,9 +35,9 @@ Repository: `ssh://git@git.stinnesbeck.com:2222/nils/mg4.git` (remote `origin`), `secrets.example.yaml` holds `CHANGE-ME` placeholders only. Stage files explicitly, check the index for changes that are not yours (the owner works in parallel), and scan the staged diff for secrets before every commit. Never print a token. -3. **Telemetry is read-only.** The app never writes a vehicle setting. The one system setting it - writes is `policy_control` (CarPlay full screen), only when the driver switches it on, and only - its own entry. +3. **Telemetry is read-only.** The app never writes a vehicle setting. The only system setting it + touches is `policy_control`, and only to remove the CarPlay entry the withdrawn full-screen + experiment (2.19.2–2.19.5) may have left. 4. **A failed read is not a zero.** Unreadable values are `null`, omitted from payloads and shown as "—". Sending 0 for SOC tells ABRP the battery is empty. 5. **Fail closed.** Updates (origin, SHA-256, package, signature), credentials, unknown state. @@ -59,6 +59,10 @@ Repository: `ssh://git@git.stinnesbeck.com:2222/nils/mg4.git` (remote `origin`), paint colour (only `ro.build.mtk2712.vehicle_type = AS28`). See `SPECS.md`, `FIRMWARE.md`. - No third-party apps in the MG launcher: the app opens by a double press of the voice key. - Its internet comes from the car itself (no Wi-Fi needed). +- CarPlay is Allgo's `com.allgo.carplay.service` (`/system/app/AllgoCarplay_EH32`). Its picture + is hard-coded at 1920×640, 80 px below the top (constants in its code and layout), so it cannot + be made full screen from an app. Installs from an app's own session are refused ("Not allowed + to install non-system apps on internal storage"): updates end on the installer screen. ## The app @@ -68,7 +72,7 @@ Repository: `ssh://git@git.stinnesbeck.com:2222/nils/mg4.git` (remote `origin`), | Consumption / Charging | period totals, daily log, charging sessions and curve | | Live data | on/off, ABRP API key and user token, upload frequency | | Server | URL, pairing by QR, ingest token, installation ID (read-only), config import | -| Settings | full screen, voice key, CarPlay full screen (experiment), tyre unit, accent colour, battery, charging price, version, update check, install from USB, About | +| Settings | full screen, voice key, tyre unit, accent colour, battery, charging price, version, update check, install from USB, About | | Logs | upload log | Key classes (`app/src/main/java/com/evsuite/abrp/`): `AbrpUploadService` (foreground service, diff --git a/README.md b/README.md index 67f3924..0d0ab67 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,7 @@ with the server using a token of its own, obtained by pairing with a phone (belo | **Charging** | The current session (SOC, voltage, current, power, energy into the battery and from the grid, time, cost) and its SOC/power curve | | **Live data** | Live data on/off, ABRP credentials for sending directly from the car, upload frequency | | **Server** | Server URL, pairing by QR code, ingest token, installation ID, config import | -| **Settings** | Full screen, voice key, CarPlay full screen (experiment), tyre pressure unit, accent colour, battery (manual SoH, usable capacity), charging price, entry on the phone, version, update check, install from USB stick, About | +| **Settings** | Full screen, voice key, tyre pressure unit, accent colour, battery (manual SoH, usable capacity), charging price, entry on the phone, version, update check, install from USB stick, About | | **Logs** | Upload log | - **Opening the app:** the MG4 launcher does not list third-party apps. **Double-press the diff --git a/SPECS.md b/SPECS.md index 6597b11..f6489e7 100644 --- a/SPECS.md +++ b/SPECS.md @@ -118,6 +118,11 @@ tyre pressures, GPS (lat, lon, elevation, heading) and the is_* flags. It does * confirmed car facts, app structure, UI conventions, build/test/ship, documents. It replaces upstream's EVABRPUploader text. The test emulator is now in the flake: `nix run .#car-emulator` (Android 9 AOSP at 1920×720, 160 dpi; the car build installs as the system user — checked). +- 2026-10-23 — App 2.19.6: the CarPlay full-screen switch and the "Export CarPlay data" button are + removed (CarPlay's size is fixed, see below). On start, the car build takes the CarPlay entry out + of `policy_control` if the switch was left on, and leaves anything else there alone — checked on + the emulator. The Foreground apps card stays as a diagnostic. AGENTS.md lists the CarPlay and + install findings among the confirmed car facts. - 2026-10-23 — CarPlay full screen: not possible on this firmware (SWI68). The export from the car showed CarPlay's window at 1920×720 with both SAIC bars hidden (policy_control on), and its video SurfaceView at (0,80), 1920×640, with a 1920×640 buffer: the grey strip is the window's own diff --git a/app/build.gradle b/app/build.gradle index cf0cf47..80cd101 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -34,8 +34,8 @@ android { applicationId "com.stinnesbeck.nilsmg4" minSdk 27 targetSdk 36 - versionCode 104 - versionName "2.19.5" + versionCode 105 + versionName "2.19.6" // Nothing about the server ships in the APK: its URL and ingest token are entered in // the app's Server tab (ServerConfig), and the database is only reachable by the server. diff --git a/app/src/main/java/com/evsuite/abrp/CarPlayExport.java b/app/src/main/java/com/evsuite/abrp/CarPlayExport.java deleted file mode 100644 index a41d0cd..0000000 --- a/app/src/main/java/com/evsuite/abrp/CarPlayExport.java +++ /dev/null @@ -1,234 +0,0 @@ -package com.evsuite.abrp; - -import android.content.Context; -import android.content.pm.ApplicationInfo; -import android.os.Environment; -import android.util.Log; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.nio.charset.StandardCharsets; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Locale; -import java.util.concurrent.TimeUnit; -import java.util.regex.Pattern; - -/** - * Read-only diagnostic for the CarPlay resolution question: copies what decides CarPlay's size - * to a folder on the USB stick, for reading on a computer. It reads the car and writes only to - * the stick. - * - * What it writes to {@code /Android/data//files/nilsmg4-carplay-