package nz.co.android.cowseye.activity;
import java.util.List;
import nz.co.android.cowseye.R;
import nz.co.android.cowseye.RiverWatchApplication;
import nz.co.android.cowseye.common.Constants;
import nz.co.android.cowseye.database.Incident;
import nz.co.android.cowseye.event.GetImageEvent;
import nz.co.android.cowseye.service.GetImageAsyncTask;
import nz.co.android.cowseye.view.RiverWatchGallery.ViewHolder;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.TextView;
import android.widget.FrameLayout.LayoutParams;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ProgressBar;
public class GridIncidentGalleryActivity extends Activity {
private Button backButton;
private RiverWatchApplication myApplication;
private LayoutInflater inflater;
private List<Incident> incidents;
private Handler handler;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.grid_incident_gallery_layout);
myApplication = (RiverWatchApplication) getApplication();
incidents = myApplication.getDatabaseAdapter().getAllIncidents();
this.handler = new Handler();
// Cache the LayoutInflate to avoid asking for a new one each time.
inflater = LayoutInflater.from(this);
GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(new ImageAdapter(this));
gridview.setOnItemClickListener(new OnItemClickListener() {
Intent intent = new Intent(GridIncidentGalleryActivity.this,
IncidentGalleryActivity.class);
@Override
public void onItemClick(AdapterView<?> arg0, View view,
int position, long arg3) {
intent.putExtra("Page Number", position);
startActivity(intent);
}
});
backButton = (Button) findViewById(R.id.backButton);
backButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
onBackPressed();
}
});
}
private class ImageAdapter extends BaseAdapter {
private Context mContext;
public ImageAdapter(Context c) {
mContext = c;
}
public int getCount() {
return incidents.size();
}
public Incident getItem(int position) {
return incidents.get(position);
}
public long getItemId(int position) {
return position;
}
// create a new ImageView for each item referenced by the Adapter
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) { // if it's not recycled, initialize some
// attributes
convertView = inflater.inflate(R.layout.incident_layout_cellwithouttext, null);
holder = new ViewHolder();
holder.imageView = (ImageView) convertView.findViewById(R.id.incident_image);
holder.descriptionView = (TextView)convertView.findViewById(R.id.incident_description);
holder.progressBar = (ProgressBar) convertView.findViewById(R.id.incident_progress_bar);
holder.imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
holder.imageView.setPadding(8, 8, 8, 8);
convertView.setTag(holder);
} else {
// Get the ViewHolder back to get fast access to the View
holder = (ViewHolder) convertView.getTag();
}
buildView(position, holder);
return convertView;
}
}
public class ViewHolder {
ProgressBar progressBar;
ImageView imageView;
TextView descriptionView;
}
/* Build a View for the MyGalleryImage adapter */
public void buildView(int position, final ViewHolder holder) {
Incident incident = incidents.get(position);
// try to get from local storage
String localImageUri = incident.getLocalThumbnailUrl();
if (localImageUri != null && !localImageUri.equals("")){
setImage(holder, localImageUri, position);
}
else {
/**
* If fails to get from local storage, put a progress bar in and
* download
*/
// launch asynctask to get image
GetImageEvent event = new GetImageEvent(incident.getThumbnailUrl());
new GetImageAsyncTask(myApplication, this, holder, event, position, incident.getId()).execute();
}
}
public void setImage(ViewHolder holder, String pathName, int positionInArray) {
if (pathName != null && !pathName.equals("")) {
incidents.get(positionInArray).setLocalThumbnailUrl(pathName);
Bitmap bm = BitmapFactory.decodeFile(pathName);
holder.imageView.setImageBitmap(bm);
holder.progressBar.setVisibility(View.INVISIBLE);
}
}
}