1- # AGENTS.md — MG4 Swipe Launcher
1+ # AGENTS.md — EVSwipe
22
3- Swipe-up-from-the-bottom app launcher for the SAIC MG4 head unit. Part of ** MG4Suite **
4- alongside [ MG4Control ] ( ../MG4Control ) , [ MG4Tasker ] ( ../MG4Tasker ) ,
5- [ MG4ABRPUploader ] ( ../MG4ABRPUploader ) and [ MG4 Simple Launcher ] ( ../MG4SimpleLauncher ) .
3+ Swipe-up-from-the-bottom app launcher for the SAIC MG4 head unit. Part of ** EVSuite **
4+ alongside [ EVProfile ] ( ../EVProfile ) , [ EVTasker ] ( ../EVTasker ) ,
5+ [ EVABRPUploader ] ( ../EVABRPUploader ) and [ EVLauncher ] ( ../EVLauncher ) .
66
77The workspace ` AGENTS.md ` and normative workspace ` DESIGN.md ` apply; this file contains
88only launcher-specific additions.
99
10- Fork of [ Tommasov/MG4_Swipe_Launcher ] ( https://github.com/Tommasov/MG4_Swipe_Launcher ) —
10+ Fork of [ Tommasov/EV_Swipe_Launcher ] ( https://github.com/Tommasov/EV_Swipe_Launcher ) —
1111see [ ` LICENSE.md ` ] ( LICENSE.md ) , the licence situation is not the usual one.
1212
1313Commit author: malys.training@gmail.com
@@ -29,24 +29,25 @@ Widening either declaration is a security change: justify it in the PR and updat
2929[ ` SECURITY.md ` ] ( SECURITY.md ) .
3030
3131** It never touches the vehicle.** No ` android.car.* ` permission, no ` sharedUserId ` , no IPC
32- to MG4Control . Vehicle reads and writes belong in MG4Control ; automation in MG4Tasker .
32+ to EVProfile . Vehicle reads and writes belong in EVProfile ; automation in EVTasker .
3333
3434## Two channels, separated by source set
3535
3636| | stable | unstable |
3737| ---| ---| ---|
38- | Application id | ` com.mg4.launcher. swipe ` | ` com.mg4.launcher .swipe.unstable ` |
38+ | Application id | ` com.evsuite. swipe ` | ` com.evsuite .swipe.unstable ` |
3939| Published by | ` v* ` tag → ` release.yml ` | push to ` master ` → ` unstable.yml ` , rolling ` unstable ` tag |
4040| ` INTERNET ` | absent from the manifest | declared in ` src/unstable/AndroidManifest.xml ` |
41- | ` BuildConfig.OTA_ENABLED ` | ` false ` | ` true ` |
42- | Updater | ` src/stable/.../UpdateHook.kt ` — a no-op | ` src/unstable/.../{ UpdateHook,OtaUpdater,ApkSignature}.kt ` |
41+ | ` BuildConfig.OTA_ENABLED ` | ` false ` | ` true ` (hook audit-suspended) |
42+ | Updater | ` src/stable/.../UpdateHook.kt ` — a no-op | policy code retained; ` UpdateHook ` inert during audit |
4343
4444` UpdateHook ` is the flavour-aware seam: ` MainActivity ` calls it without knowing which
4545channel it was built into, and the stable variant does nothing. The stable APK is fully
4646offline — the updater code is not in it. Keep it that way: nothing network-shaped in
4747` src/main/ ` .
4848
49- The unstable OTA path is automatic: it downloads into app-private ` cacheDir ` , validates
49+ The unstable OTA trigger is suspended while the suite safety and legal audit is open. Its
50+ retained policy downloads into app-private ` cacheDir ` , validates
5051` https ` plus the GitHub allowlist at every redirect, verifies the APK against the running
5152app certificate, then runs ` /system/bin/pm install -r ` . Success requires both exit code 0
5253and ` Success ` in the command output; the APK is always deleted afterwards. The unstable
@@ -77,12 +78,12 @@ picker.
7778
7879## Reference patterns (shared with the suite)
7980
80- - ** Signing** : the MG4 suite platform key, path + passwords from env vars (CI) or
81+ - ** Signing** : the EVSuite platform key, path + passwords from env vars (CI) or
8182 ` gradle.properties ` (local); the ` signingConfig ` is created only if the keystore file
8283 exists. Never a literal secret in a build file.
8384- ** Security CI** : ` .github/workflows/security.yml ` — blocking permission-drift gate +
8485 gitleaks, plus informational SARIF from mobsfscan / semgrep / dependency-check.
85- - ** Theme** : dark Material 3 on the shared ` mg4_ *` colour and spacing tokens, 64 dp touch
86+ - ** Theme** : dark Material 3 on the shared ` ev_ *` colour and spacing tokens, 64 dp touch
8687 targets. Dark is imposed, not system-following — glare on a windscreen at night.
8788- ** Language** : English by default (code, comments, commits, docs).
8889
@@ -91,7 +92,7 @@ picker.
9192` mise run build | build-unstable | test | check | permissions | run ` . JDK 17, AGP 8.6,
9293Gradle 8.7, ` minSdk 28 ` / ` targetSdk 34 ` . Emulator: ` mise run emulator-setup ` then
9394` emulator-screen ` (API 28 at panel geometry) or ` emulator-car ` (API 33 Automotive); AVDs
94- are named ` mg4swipe -*` , per-repo like the sibling projects. Overlay and accessibility are
95+ are named ` evswipe -*` , per-repo like the sibling projects. Overlay and accessibility are
9596special permissions that ` adb install -g ` does not grant — ` mise run grant-permissions `
9697sets them on a throwaway emulator, and nothing in the app should ever attempt the same at
9798runtime.
0 commit comments