Skip to content

ADFA-4842: module management stops the server + blocks the whole UI#255

Draft
luisguzman-adfa wants to merge 1 commit into
mainfrom
feat/ADFA-4842-module-mgmt
Draft

ADFA-4842: module management stops the server + blocks the whole UI#255
luisguzman-adfa wants to merge 1 commit into
mainfrom
feat/ADFA-4842-module-mgmt

Conversation

@luisguzman-adfa

Copy link
Copy Markdown
Collaborator

Installing a module runs ./runrole in an app-side proot that modifies system packages/config. On a live system that collides with the running server over the shared rootfs (data-corruption risk). Content ops avoid a 2nd proot via the in-server engine (ADFA-4838); a runrole can't, so instead we quiesce the server around it.

  • InstallService: before the module queue, stop the server's services (pdsm stop, idempotent) so no runrole runs alongside a live server writing the same DBs/config. The server is brought back after the queue.
  • LibraryActivity: while the queue runs, block the entire library UI behind the full-screen (match_parent, clickable) boot gate — every tab (Library, Connect, Clone, Settings) and the nav bar, not just the cards — showing "Modules are being installed. Please wait." + the current module. On finish, drop the block and restart the server (guarded by canStartServer, so never a 2nd proot).

Reuses existing strings (server_shutting_down, install_busy_modules). Ships via APK (no rootfs change). Needs on-device verification.

Caveat: if the queue runs entirely while LibraryActivity is destroyed, the restart falls back to the ADFA-4837 "couldn't start — tap to retry" affordance (recoverable, not broken).

…no live-rootfs corruption)

Installing a module runs ./runrole in an app-side proot that modifies system
packages/config. On a live system that collided with the running server over the
shared rootfs (corruption risk). Content ops avoid a 2nd proot via the in-server
engine; a runrole can't, so instead we quiesce the server around it.

- InstallService: before the module queue, stop the server's services (pdsm stop,
  idempotent) so no runrole ever runs alongside a live server writing the same
  DBs/config. The server is brought back after the queue.
- LibraryActivity: while the queue runs, block the ENTIRE library UI behind the
  full-screen (match_parent, clickable) boot gate — every tab (Library, Connect,
  Clone, Settings) and the nav bar, not just the cards — showing 'Modules are being
  installed. Please wait.' + the current module. When the queue finishes, drop the
  block and restart the server (guarded by canStartServer, so never a 2nd proot).

Reuses existing strings (server_shutting_down, install_busy_modules). Needs on-device
verification. Note: if the queue runs entirely while LibraryActivity is destroyed, the
restart falls back to the ADFA-4837 'couldn't start - tap to retry' affordance.
@luisguzman-adfa
luisguzman-adfa marked this pull request as draft July 24, 2026 03:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant