Leggo che il codice in quel link lo posso mettere anche in una classe a sé stante, bene.
"puoi", "potresti" ma non è obbligatorio. Direi di semplificare la cosa e scrivere il codice direttamente nella B4XMainPage.
Se crei quella classe come nell'esempio, RequestDrawOverPermission, poi devi dichiarare una variabile (meglio privata) nella Process_Globals della B4XMainPage, inizializzarla (preferibilmente nella Sub Initialize della B4XMainPage stessa) e poi invocarne il metodo come in quell'esempio:
' "c" è il pessimo nome della variabile di tipo RequestDrawOverPermission
Wait For (c.GetPermission) Complete (Success As Boolean)
praticamente quasi dove vuoi, in una btn_click, come nell'esempio, ma anche nella B4XPage_Appear o B4XPage_Created.
Comunque la cosa non mi è chiara affatto, dovrei "studiarla"
almeno un po' (fino ad oggi non mi è interessato il "Draw on top of other apps") e in quel thread si parla di StartActivityForResult - ergo di Activities, ergo problema: i progetti B4XPages solitamente hanno un'unica Activity - ma non è vietato aggiungerne altre, è solo sconsigliabile.