use `this` instead of `activity` to minimize the closure scope