package support.ui.content; import android.support.annotation.Nullable; import android.view.View; public class ReflectionContentPresenterFactory implements ContentPresenterFactory { private Class<View> loadViewClass; private Class<View> emptyViewClass; private Class<View> errorViewClass; @Nullable @SuppressWarnings("unchecked") public static ReflectionContentPresenterFactory fromViewClass(Class<?> viewClass) { RequiresContent annotation = viewClass.getAnnotation(RequiresContent.class); //noinspection unchecked Class<View> loadViewClass = annotation == null ? null : (Class<View>) annotation.loadView(); Class<View> emptyViewClass = annotation == null ? null : (Class<View>) annotation.emptyView(); Class<View> errorViewClass = annotation == null ? null : (Class<View>) annotation.errorView(); return new ReflectionContentPresenterFactory(loadViewClass, emptyViewClass, errorViewClass); } public ReflectionContentPresenterFactory(Class<View> loadViewClass, Class<View> emptyViewClass, Class<View> errorViewClass) { this.loadViewClass = loadViewClass; this.emptyViewClass = emptyViewClass; this.errorViewClass = errorViewClass; } @Override public ContentPresenter createContentPresenter() { try { return new ContentPresenter(loadViewClass, emptyViewClass, errorViewClass); } catch (Exception e) { throw new RuntimeException(e); } } }