feat: give window closing its own Pencereler tab

The window switch sat on the Upload Service page, which implied a relationship
that does not exist: closing windows needs no ABRP token, no GPS, no upload
interval, and runs in its own service whether or not uploading is on. It is now
a sixth page of the pager, between Araç and Wi-Fi.

Splitting it in two while it moved, because the new page has room the card did
not: the switch and status stay together, and the event log gets its own card,
monospaced and no longer capped at four lines.

setOffscreenPageLimit switches from a hardcoded 4 to panes.length - 1. It was
already one short of the page count and would have gone stale again here.
refreshWindowClose runs on the two-second tick and dereferences views on a page
that may not be on screen, so the pager must not be free to detach them.

Six tabs share the bar where five did. Widget.EV.NavTab already autosizes down
to a 12sp floor, so the labels shrink rather than truncate.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
TCFDONMEZ
2026-09-25 14:01:57 +03:00
co-authored by Claude Opus 5
parent 444732438d
commit 322ebcc4c0
7 changed files with 136 additions and 61 deletions
+4 -3
View File
@@ -136,9 +136,10 @@ put them in a text file and tap **Import file** — see [Config file](#config-fi
## Configuration
On the **Upload Service** page, **Kapı açılınca camları kapat** enables the WinClose
integration independently of ABRP. It is off by default and restarts with the head unit
once enabled; no ABRP token, GPS permission, speed threshold or driving timer is needed.
On its own **Pencereler** page — not under Upload Service, since it shares nothing with
ABRP — **Kapı açılınca camları kapat** enables the WinClose integration. It is off by
default and restarts with the head unit once enabled; no ABRP token, GPS permission,
speed threshold or driving timer is needed.
The integration is adapted from the sibling WinClose `WindowHardware.kt`: SWI69
`CarStateClient` door callback (transaction 6, value 0) triggers the VSM's