Drop the pairing page and the OnActivated / OnDeactivating
lifecycle hooks. Keep the Toolbox entry for offline account
activation, with a localized save-loss warning before writing
an account ID.
Drive visibility from SettingPage.OnActivated and
Application.FocusActiveScene instead of UIManager.Active plus
SceneBase.ActualVisible. Pair success now pops the page the same
way timeout does, and missing Mono methods are treated as optional
capabilities rather than disabling the whole poller.
Hook trampoline pointers such as boot_orig, oOnPress and CaptureScreen_orig
were declared in hooked_funcs.hpp and then re-declared verbatim in the
translation units that use them, so a signature change would not fail the
build at the duplicate site.
Remove the redundant local externs, include hooked_funcs.hpp from
hook_onpress.cpp instead of hand-declaring oOnPress, and move OnRender_orig,
Orig_ReloadApp and set_value_method into the header alongside the pointers
they sit next to.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Queue a one-shot NPXS40002 ReloadApp after hooks are ready and drain it
from OnRender so title IDs show without a manual toggle. Gate on hooks
ready plus UI thread, not wall-clock delay or onion_ready markers.
Allocate unique near trampolines without MAP_FIXED, gate hooks until
install completes, and make pt_attach/pt_call wait and stack alignment
fail-closed so controller use during inject cannot corrupt ShellUI.