package com.florianmski.tracktoid.containers; import android.support.v7.widget.RecyclerView; import android.webkit.WebView; import android.widget.AbsListView; import android.widget.GridView; import android.widget.ListView; import android.widget.ScrollView; import com.florianmski.tracktoid.R; import com.florianmski.tracktoid.adapters.AbstractAdapter; import com.florianmski.tracktoid.adapters.AdapterInterface; import com.florianmski.tracktoid.adapters.RecyclerAdapter; public abstract class ViewContainer<E, V, A extends AdapterInterface<E>> extends Container<V> implements ContainerInterface.ViewContainerInterface<E, V, A> { public static class RecyclerViewContainer<E> extends ViewContainer<E, RecyclerView, RecyclerAdapter<E, ?>> { @Override public void setAdapter(RecyclerAdapter<E, ?> adapter) { data.setAdapter(adapter); } @Override public RecyclerAdapter<E, ?> getAdapter() { return (RecyclerAdapter<E, ?>) data.getAdapter(); } @Override public int getLayoutId() { return R.layout.view_recycler; } } public static abstract class AbsListViewContainer<E, V extends AbsListView> extends ViewContainer<E, V, AbstractAdapter<E>> { @Override public void setAdapter(AbstractAdapter<E> adapter) { data.setAdapter(adapter); } @Override public AbstractAdapter<E> getAdapter() { return (AbstractAdapter<E>) data.getAdapter(); } public static class ListViewContainer<E> extends AbsListViewContainer<E, ListView> { @Override public int getLayoutId() { return R.layout.view_list; } } public static class GridViewContainer<E> extends AbsListViewContainer<E, GridView> { @Override public int getLayoutId() { return R.layout.view_grid; } } } public static class ScrollViewContainer<E, V extends ScrollView> extends ViewContainer<E, V, AbstractAdapter<E>> { // TODO something not really clean here, refactor so we don't have those two useless functions @Override public void setAdapter(AbstractAdapter<E> adapter) { // nothing to do here } @Override public AbstractAdapter<E> getAdapter() { throw new UnsupportedOperationException(); } @Override public int getLayoutId() { return R.layout.view_scrollview; } } public static class WebViewContainer<E, V extends WebView> extends ViewContainer<E, V, AbstractAdapter<E>> { // TODO something not really clean here, refactor so we don't have those two useless functions @Override public void setAdapter(AbstractAdapter<E> adapter) { // nothing to do here } @Override public AbstractAdapter<E> getAdapter() { throw new UnsupportedOperationException(); } @Override public int getLayoutId() { return R.layout.view_webview; } } }