Nit: I try to avoid having top-level classes themselves implement listener interfaces because it leaks an implementation detail into the public interface. My preference is to define listeners as anonymous inner class fields.