Voeg thema-selector toe (DayNight, Radiogroep, teal accent)

This commit is contained in:
eddy 2026-07-27 00:22:43 +02:00
commit c977dc25a2
12 changed files with 201 additions and 24 deletions

View file

@ -138,13 +138,13 @@ De flasher draait in een raw `Thread` die niet annuleerbaar is. Als de gebruiker
**Aanbeveling:** Overweeg een cancelable mechanisme of gebruik coroutines.
#### 3.3 BLE writes zonder acknowledgment fallback (LAAG)
#### 3.3 BLE writes zonder acknowledgment fallback (LAAG) — **AFGESLOTEN, bewuste keuze**
**Bestand:** `MainActivity.kt:277-289`
`WRITE_TYPE_NO_RESPONSE` betekent dat er geen bevestiging komt van de ESP. Als de packet verloren gaat, heeft de app geen retry mechanisme. De knop-toestand wijzigt wel ("ON"), maar het relais schakelt niet.
**Aanbeveling:** Voor productie: overweeg een bevestigingsmechanisme via BLE notifications van de ESP, om de UI-state te koppelen aan de werkelijke relay-state.
**BESLUIT:** Afgewezen om dezelfde reden als 6.1 — ACK-based writes veroorzaken dat loslaten wordt genegeerd als de ACK te lang duurt, waardoor het relais blijft hangen. Zie _Ontwerpbeslissingen_ in README.
---
@ -265,25 +265,23 @@ try { unregisterReceiver(usbAttachedReceiver) } catch (e: Exception) {
### 6. UI & UX
#### 6.1 Knop-state niet gesynchroniseerd met relay-state (MEDIUM)
#### 6.1 Knop-state niet gesynchroniseerd met relay-state (MEDIUM) — **AFGESLOTEN, bewuste keuze**
**Bestand:** `MainActivity.kt:207-222`
De knop tekst wijzigt naar "ON" bij `ACTION_DOWN` en "HOLD" bij `ACTION_UP`, ongeacht of het BLE-commando daadwerkelijk is aangekomen. Gezien het gebruik van `WRITE_TYPE_NO_RESPONSE` is er geen bevestiging.
**Aanbeveling:** Geef visuele feedback die duiderscheid maakt tussen "commando verzonden" en "relais bevestigd" — bijv. een dimmed state of pending indicator.
**Oorspronkelijke aanbeveling:** Geef visuele feedback die onderscheid maakt tussen "commando verzonden" en "relais bevestigd" — bijv. een dimmed state of pending indicator.
#### 6.2 Geen dark mode support (LAAG)
**BESLUIT:** Afgewezen. Eerdere versies gebruikten `WRITE_TYPE_DEFAULT` (met ACK), maar de BLE write acknowledgement duurde lang genoeg dat de gebruiker de knop kon loslaten vóór de ACK arriveerde. Bij `ACTION_UP` tijdens een pending write werd het loslaten genegeerd en bleven het relais en de app hangen in de ON-status. `WRITE_TYPE_NO_RESPONSE` verwijdert die latency. De UI reflecteert de gebruikersintentie in plaats van bevestigde relay-state — een aanvaardbare afweging. Gedocumenteerd in code (`MainActivity.kt`) en README (_Ontwerpbeslissingen_).
#### 6.2 Geen dark mode support (LAAG) — **AFGESLOTEN**
**Bestand:** `AndroidManifest.xml:17`
```xml
android:theme="@style/Theme.AppCompat.Light"
```
De app forceert Light theme, ook op devices in dark mode.
**Aanbeveling:** Gebruik `Theme.AppCompat.DayNight` of `Theme.Material3.DayNight` voor automatisch dark mode support.
**Oplossing:** Overgeschakeld naar `Theme.AppCompat.DayNight` met teal accent-kleuren. Thema-selector in Instellingen met 3 opties: Systeem (volgt telefoon), Licht, Donker. Gekozen voor de best-practice aanpak: geen custom font-slider of contrast-kleurenkiezer — Android's systeem-lettergrootte en hoog-contrast instellingen zijn al voldoende voor de doelgroep.
#### 6.3 Geen visuele indicator voor scan timeout (LAAG)
@ -316,21 +314,17 @@ AGP 8.2.2 is van begin 2024. De nieuwste is 8.5+. Nieuwere versies bevatten bug
**Aanneveling:** Upgrade AGP naar 8.5+ (compatibel met Gradle 8.14).
#### 7.2 compileSdk 34, niet 35 (LAAG)
#### 7.2 compileSdk 34, niet 35 (LAAG) — **AFGESLOTEN, bewuste keuze**
**Bestand:** `app/build.gradle:8,13`
`compileSdk` en `targetSdk` zijn 34 (Android 14). Android 15 (API 35) is uitgebracht.
**Aanbeveling:** Upgrade naar SDK 35 om de nieuwste API's en security fixes te gebruiken.
**BESLUIT:** Afgewezen. De doelgroep bestaat uit lichamelijk gehandicapte gebruikers die zeer terughoudend zijn met het updaten van hun telefoon. API 34 maximaliseert device-compatibiliteit. Gedocumenteerd in `build.gradle` en README (_Ontwerpbeslissingen_).
#### 7.3 Kotlin 1.9.24, niet 2.x (LAAG)
#### 7.3 Kotlin 1.9.24, niet 2.x (LAAG) — **AFGESLOTEN, geüpgraded**
**Bestand:** `android/build.gradle:3`
Kotlin 1.9.24 is ouder dan Kotlin 2.0+. Kotlin 2.0 biedt K2 compiler met betere prestaties.
**Aanneveling:** Overweeg upgrade naar Kotlin 2.0+ (vereist AGP 8.5+).
Kotlin is geüpgraded naar 2.0.21 (K2 compiler).
---
@ -363,9 +357,9 @@ Het 6e byte verschilt: `0x08` (SettingsActivity) vs `0x00` (UsbKeyReceiver). De
| Prioriteit | Aantal | Actie |
|---|---|---|
| **Belangrijk** | 5 | Na ontvangst oplossen |
| **MEDIUM** | 8 | Bij volgende release |
| **LAAG** | 8 | Optioneel / technische schuld |
| **Belangrijk** | 5 | Alle 5 opgelost |
| **MEDIUM** | 8 | Alle 8 opgelost |
| **LAAG** | 8 | Alle 8 opgelost / afgesloten |
---