package net.pocketmine.forum;
import java.io.InputStream;
import java.util.ArrayList;
import net.pocketmine.server.R;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.RatingBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class GridAdapter extends BaseAdapter {
private Context ctx;
private LayoutInflater inflater;
private ArrayList<PluginsActivity.Plugin> src;
public GridAdapter(Context c, ArrayList<PluginsActivity.Plugin> plugins) {
ctx = c;
src = plugins;
inflater = (LayoutInflater) c
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
return src.size();
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
public View getView(int position, View convertView, ViewGroup parent) {
View view;
if (convertView == null) {
view = createCard(inflater, parent, R.layout.plugin_card);
} else {
view = convertView;
if (view.getTag() != null
&& view.getTag() instanceof DownloadImageTask) {
DownloadImageTask task = (DownloadImageTask) view.getTag();
task.cancel = true; // there's no problem, with finishing it to
// download; just do not change correct
// image
}
}
PluginsActivity.Plugin plugin = src.get(position);
fillData((Activity) ctx, view, plugin, true);
return view;
}
public static View createCard(LayoutInflater inflater, ViewGroup parent,
int resId) {
View view = inflater.inflate(resId, parent, false);
return view;
}
static boolean touched = false;
public static void fillData(final Activity a, View view,
final PluginsActivity.Plugin plugin, Boolean dlImage) {
final RelativeLayout card = (RelativeLayout) view
.findViewById(R.id.plugin_card);
view.setOnTouchListener(new OnTouchListener() {
boolean cancel = false;
@Override
public boolean onTouch(View v, MotionEvent e) {
if (e.getAction() == MotionEvent.ACTION_DOWN && !touched) {
cancel = false;
card.postDelayed(new Runnable() {
@Override
public void run() {
if (!cancel) {
card.setBackgroundResource(R.drawable.bg_selected_drawable);
} else {
cancel = false;
}
}
}, 100);
touched = true;
return true;
} else if (touched
&& (e.getAction() == MotionEvent.ACTION_UP || e
.getAction() == MotionEvent.ACTION_CANCEL)) {
if (e.getAction() == MotionEvent.ACTION_UP) {
Log.d("GridAdapter", "View clicked.");
card.setBackgroundResource(R.drawable.bg_selected_drawable);
Intent i = new Intent(a, DetailsActivity.class);
i.putExtra("id", plugin.id);
a.startActivity(i);
}
card.postDelayed(new Runnable() {
@Override
public void run() {
touched = false;
card.setBackgroundResource(R.drawable.bg_drawable);
}
}, 50);
cancel = true;
}
return false;
}
});
TextView name = (TextView) view.findViewById(R.id.plugin_name);
name.setText(plugin.name);
TextView author = (TextView) view.findViewById(R.id.plugin_author);
author.setText(plugin.author);
RatingBar rate = (RatingBar) view.findViewById(R.id.plugin_rate);
rate.setRating(Double.valueOf(plugin.rated).floatValue());
TextView rateCount = (TextView) view
.findViewById(R.id.plugin_rate_count);
rateCount.setText("" + plugin.ratedTimes);
ImageView more = (ImageView) view.findViewById(R.id.plugin_more);
more.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.d("GridAdapter", "More clicked.");
}
});
ImageView image = (ImageView) view.findViewById(R.id.plugin_icon);
if (plugin.image != null) {
image.setImageBitmap(plugin.image);
} else {
image.setImageResource(R.drawable.ic_launcher);
if (dlImage)
view.setTag(new DownloadImageTask(image).execute(plugin));
}
}
public static class DownloadImageTask extends
AsyncTask<PluginsActivity.Plugin, Void, Bitmap> {
ImageView imageView;
public Boolean cancel = false;
public DownloadImageTask(ImageView imageView) {
this.imageView = imageView;
}
protected Bitmap doInBackground(PluginsActivity.Plugin... plugins) {
if (plugins[0].image != null)
return plugins[0].image;
Bitmap icon = null;
try {
InputStream in = new java.net.URL(
"http://forums.pocketmine.net/data/resource_icons/0/"
+ plugins[0].id + ".jpg").openStream();
icon = BitmapFactory.decodeStream(in);
} catch (Exception e) {
e.printStackTrace();
}
plugins[0].image = icon;
return icon;
}
protected void onPostExecute(Bitmap result) {
if (!cancel) {
if (result != null) {
imageView.setImageBitmap(result);
} else {
imageView.setImageResource(R.drawable.ic_launcher);
}
}
}
}
}