Files
jpolo1224 c88b18eb74 Android: make the stick's extra button a real layout widget; autosave BIOS NVRAM
The extra analog button (sprint/jump) was a satellite of the left stick:
drawn inside StickWidget, positioned only by distance/angle sliders in Pad
settings. The touch layout editor never knew it existed, so it had no
selection box and could not be dragged -- which is what everyone means by
"adjustable". Promote it to TouchButtonId.ANALOG_EXTRA (Kind.ANALOGEXTRA)
with entries in both default layouts, so it drags and resizes like any
other control and splices into saved layouts. The stick keeps the glide
hit test -- a finger locked onto the stick is the only pointer that
reaches that handler after it leaves the stick -- but now tests the
button's OWN circle wherever the user dragged it, lifting the local
pointer into overlay space via OverlayDims (which now carries density).
Two gestures can hold the button at once, so holders are counted and the
keycode is emitted only on 0<->1 transitions. Distance/angle sliders drop
out; dragging replaces them.

BIOS NVRAM reached disk only on a clean VMManager::Shutdown, and the pause
JNI's flush sat in the Running branch, so backgrounding while already
paused skipped it. That is exactly how you leave a game that booted into
the BIOS browser -- and on a never-configured console the BIOS runs its
setup and then parks in the browser, wanting a power cycle before it will
boot the disc, as real hardware does. With the config never written, every
full boot was the first one: "Skip BIOS off opens the memory card manager
instead of the game", permanently. Flush on the paused branch too, and
autosave properly -- cdvdWriteNVM sets a dirty flag, cdvdVsync flushes it
once a second. The compare-before-write in cdvdSaveNVRAM keeps that cheap.

Log the boot shape (fast_boot, CDVD source, disc type, .nvm presence) once
per boot so the next report of this names which of the four it is.
2026-08-05 00:44:23 -04:00
..