package de.itemis.base;
import android.app.ListActivity;
import android.graphics.drawable.Drawable;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import de.itemis.itemisapp.R;
public abstract class RowAdapter<T> extends AbstractRowAdapter {
private final T item;
private TextView textView;
private TextView detailsView;
private ImageView imageView;
public RowAdapter(T item) {
this.item = item;
}
public T getItem() {
return item;
}
@Override
protected void beforePopulateRowView() {
super.beforePopulateRowView();
textView = null;
detailsView = null;
imageView = null;
}
@Override
protected void afterPopulateRowView() {
applyVisibility(textView, getTextView());
applyVisibility(detailsView, getDetailsView());
applyVisibility(imageView, getImageView());
super.afterPopulateRowView();
}
private void applyVisibility(View viewWithState, View viewToChange) {
if(viewToChange == null)
return;
if(viewWithState != null)
viewToChange.setVisibility(View.VISIBLE);
else
viewToChange.setVisibility(View.GONE);
}
public abstract int getViewResourceID();
@Override
public View createView(ListActivity activity) {
return activity.getLayoutInflater().inflate(getViewResourceID(), null);
}
protected void setImageURL(String url) {
Drawable drawable = Cache.getDrawable(getActivity(), url, "@drawable/loading_photo");
getImageView().setImageDrawable(drawable);
}
protected ImageView getImageView() {
if (imageView == null) {
imageView = (ImageView) getRowView().findViewById(de.itemis.itemisapp.R.id.image);
}
return imageView;
}
public void setText(String text) {
getTextView().setText(text);
}
public TextView getTextView() {
if (textView == null) {
textView = (TextView) getRowView().findViewById(de.itemis.itemisapp.R.id.text);
}
return textView;
}
public void setDetails(String details) {
getDetailsView().setText(details);
}
protected TextView getDetailsView() {
if (detailsView == null) {
detailsView = (TextView) getRowView().findViewById(de.itemis.itemisapp.R.id.details);
}
return detailsView;
}
public void setQuery(String query) {
// TODO: find a more generic way to determine dimensions of image
int width = 120;
int height = 120;
if(query==null)
query = "";
String url = "http://maps.google.com/maps/api/staticmap?"
+ "center=" + StringUtils.urlconform(query) + "&"
+ "maptype=roadmap&sensor=false&"
+ "size=" + width + "x" + height + "&zoom=15";
setImageURL(url);
}
public abstract static class Default<T> extends RowAdapter<T> {
public Default(T item) {
super(item);
}
@Override
public int getViewResourceID() {
return R.layout.default_item;
}
}
public abstract static class DefaultWithDisclosure<T> extends Default<T> {
public DefaultWithDisclosure(T item) {
super(item);
}
}
public abstract static class Subtitle<T> extends Default<T> {
public Subtitle(T item) {
super(item);
}
}
public abstract static class Value2<T> extends RowAdapter<T> {
public Value2(T item) {
super(item);
}
@Override
public int getViewResourceID() {
return R.layout.value2_item;
}
}
public abstract static class Map<T> extends RowAdapter<T> {
public Map(T item) {
super(item);
}
@Override
public int getViewResourceID() {
return R.layout.map_item;
}
}
}