package com.ucb.dcm.list;
import android.app.Activity;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.ucb.dcm.R;
import com.ucb.dcm.data.Performance;
import com.ucb.dcm.data.Show;
import com.ucb.dcm.data.Venue;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
/**
* Created by kurtguenther on 6/9/13.
*/
public class ShowAdapter extends BaseAdapter {
LayoutInflater mInflater;
ArrayList<DataAdapter> items;
Show mShow;
public ShowAdapter(LayoutInflater inflater, Show show){
mInflater = inflater;
mShow = show;
//Hook up the show data
items = new ArrayList<DataAdapter>();
items.add(new SummaryAdapter(mShow));
//Showtimes
items.add(new HeaderAdapter("Showtimes"));
Cursor c = show.getPerformances();
while(c.moveToNext()){
Performance p = new Performance(c);
Venue v = new Venue(c);
items.add(new PerformanceAdapter(p,v));
}
//Cast
items.add(new HeaderAdapter("Cast"));
ArrayList<String> perfs = mShow.getPerformers();
for(int i = 0; i < perfs.size(); i++){
items.add(new PerformerAdapter(perfs.get(i)));
}
}
@Override
public boolean isEnabled(int position) {
return false;
}
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int i) {
return items.get(i);
}
@Override
public long getItemId(int i) {
//TODO ahoy hoy?
return 0;
}
@Override
public View getView(int i, View view, ViewGroup parent) {
return items.get(i).getView(i, view, parent);
}
public interface DataAdapter {
View getView(int i, View view, ViewGroup parent);
}
private class SummaryAdapter implements DataAdapter{
Show mShow;
public SummaryAdapter(Show show){
this.mShow = show;
}
private class ImageSetter implements Runnable{
Bitmap bmp;
ImageView image;
public ImageSetter(ImageView image, Bitmap bmp){
this.image = image;
this.bmp = bmp;
}
@Override
public void run() {
image.setImageBitmap(bmp);
}
}
private void hideImage(final ImageView image){
Activity aaa = (Activity) image.getContext();
aaa.runOnUiThread(new Runnable() {
@Override
public void run() {
image.setVisibility(View.GONE);
}
});
}
public View getView(int i, View view, ViewGroup parent) {
View retVal = mInflater.inflate(R.layout.list_show_summary, parent, false);
TextView title = (TextView) retVal.findViewById(R.id.show_title);
title.setText(mShow.name);
TextView city = (TextView) retVal.findViewById(R.id.show_city);
city.setText(mShow.city);
TextView promo = (TextView) retVal.findViewById(R.id.show_promo);
promo.setText(mShow.promo);
if(mShow.image != null){
final ImageView image = (ImageView) retVal.findViewById(R.id.show_image);
image.setVisibility(View.VISIBLE);
AsyncTask<String, Integer, String> o = new AsyncTask<String, Integer, String>() {
@Override
protected String doInBackground(String... params) {
try {
Bitmap bitmap = BitmapFactory
.decodeStream((InputStream) new URL(params[0])
.getContent());
if(bitmap != null){
Activity aaa = (Activity) image.getContext();
aaa.runOnUiThread(new ImageSetter(image, bitmap));
}
else {
//problem downloading?
hideImage(image);
}
} catch (MalformedURLException e) {
e.printStackTrace();
hideImage(image);
} catch (IOException e) {
e.printStackTrace();
hideImage(image);
} catch (OutOfMemoryError e){
e.printStackTrace();
hideImage(image);
}
return null;
}
};
o.execute(mShow.image);
}
return retVal;
}
}
private class HeaderAdapter implements DataAdapter{
String headerText;
public HeaderAdapter(String text){
headerText = text;
}
public View getView(int i, View view, ViewGroup parent) {
View retVal = mInflater.inflate(R.layout.list_show_header, parent, false);
TextView title = (TextView) retVal.findViewById(R.id.header_title);
title.setText(headerText);
return retVal;
}
}
private class PerformanceAdapter implements DataAdapter{
Performance p;
Venue v;
public PerformanceAdapter(Performance performance, Venue venue){
p = performance;
v = venue;
}
public View getView(int i, View view, ViewGroup parent) {
View retVal = mInflater.inflate(R.layout.list_show_performance, parent, false);
TextView time = (TextView) retVal.findViewById(R.id.show_performance_time);
Date date = new Date(((long)p.start_date) * 1000);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEEE hh:mm a");
String display = simpleDateFormat.format(date);
time.setText(display);
TextView venue = (TextView) retVal.findViewById(R.id.show_performance_venue);
venue.setText(v.short_name);
return retVal;
}
}
private class PerformerAdapter implements DataAdapter{
String name;
public PerformerAdapter(String name){
this.name = name;
}
public View getView(int i, View view, ViewGroup parent) {
View retVal = mInflater.inflate(R.layout.list_show_performer, parent, false);
TextView nameView = (TextView) retVal.findViewById(R.id.show_performer_name);
nameView.setText(name);
return retVal;
}
}
}