lib: abstract some common activity code upwards into EventfulActivity