package ar.rulosoft.mimanganu.adapters;
import android.app.Activity;
import android.content.Context;
import android.support.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.ProgressBar;
import android.widget.TextView;
import java.util.ArrayList;
import ar.rulosoft.mimanganu.R;
import ar.rulosoft.mimanganu.services.ChapterDownload;
import ar.rulosoft.mimanganu.services.DownloadPoolService;
import ar.rulosoft.mimanganu.services.DownloadsChangesListener;
import ar.rulosoft.mimanganu.utils.Util;
public class DownloadAdapter extends ArrayAdapter<ChapterDownload> implements DownloadsChangesListener {
private static String[] states;
private static int listItem = R.layout.listitem_descarga;
private ArrayList<ChapterDownload> downloads = new ArrayList<>();
private LayoutInflater li;
private boolean darkTheme;
private Activity mActivity;
public DownloadAdapter(Context context, Activity activity, boolean darkTheme) {
super(context, listItem);
states = context.getResources().getStringArray(R.array.estados_descarga);
li = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mActivity = activity;
this.darkTheme = darkTheme;
downloads = DownloadPoolService.chapterDownloads;
DownloadPoolService.setDownloadsChangesListener(this);
}
@Override
public ChapterDownload getItem(int position) {
return downloads.get(position);
}
@Override
public int getCount() {
return downloads.size();
}
@Override
public void add(ChapterDownload object) {
downloads.add(object);
}
@Override
public View getView(int position, View convertView, @NonNull ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = li.inflate(listItem, null);
holder = new ViewHolder(convertView, darkTheme);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
final ChapterDownload item = getItem(position);
if (item != null) {
String textInfo = " " + states[item.status.ordinal()];
holder.textViewName.setText(Util.getInstance().fromHtml(item.getChapter().getTitle() + textInfo));
holder.loadingProgressBar.setMax(item.getChapter().getPages());
holder.loadingProgressBar.setProgress(item.getProgress());
holder.buttonImageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
DownloadPoolService.removeDownload(item.chapter.getId(), mActivity);
}
});
}
return convertView;
}
public void onPause() {
DownloadPoolService.setDownloadsChangesListener(null);
}
@Override
public void onProgressChanged(int idx, ChapterDownload cd) {
downloads.set(idx, cd);
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
notifyDataSetChanged();
}
});
}
@Override
public void onStatusChanged(int idx, ChapterDownload cd) {
if (idx >= 0) {
downloads.set(idx, cd);
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
notifyDataSetChanged();
}
});
}
}
@Override
public void onChapterAdded(boolean atStart, ChapterDownload cd) {
if (atStart) {
downloads.add(0, cd);
} else {
downloads.add(cd);
}
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
notifyDataSetChanged();
}
});
}
@Override
public void onChapterRemoved(int idx) {
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
notifyDataSetChanged();
}
});
}
@Override
public void onChaptersRemoved(ArrayList<ChapterDownload> toRemove) {
downloads.removeAll(toRemove);
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
notifyDataSetChanged();
}
});
}
public static class ViewHolder {
private TextView textViewName;
private ProgressBar loadingProgressBar;
private ImageButton buttonImageView;
public ViewHolder(View v, boolean darkTheme) {
this.textViewName = (TextView) v.findViewById(R.id.nombre);
this.buttonImageView = (ImageButton) v.findViewById(R.id.boton);
this.loadingProgressBar = (ProgressBar) v.findViewById(R.id.progreso);
if (darkTheme)
this.buttonImageView.setImageResource(R.drawable.ic_action_x_dark);
}
}
}