package com.erakk.lnreader.adapter; import android.app.Activity; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.ImageView; import android.widget.TextView; import com.erakk.lnreader.Constants; import com.erakk.lnreader.R; import com.erakk.lnreader.helper.Util; import com.erakk.lnreader.model.FindMissingModel; import java.util.ArrayList; import java.util.Collection; import java.util.List; public class FindMissingAdapter extends ArrayAdapter<FindMissingModel> { protected static final String TAG = FindMissingAdapter.class.toString(); private final int layoutResourceId; private final Context context; private List<FindMissingModel> data; public FindMissingModel[] originalData = new FindMissingModel[0]; private final String mode; private boolean showDownloaded = false; private boolean showEverythingElse = true; public FindMissingAdapter(Context context, int resourceId, List<FindMissingModel> objects, String extra, boolean dowloadSelected, boolean elseSelected) { super(context, resourceId, objects); this.layoutResourceId = resourceId; this.context = context; this.showDownloaded = dowloadSelected; this.showEverythingElse = elseSelected; this.mode = extra; this.data = objects; this.originalData = data.toArray(originalData); filterData(); } public List<FindMissingModel> getItems() { return data; } @Override public void addAll(Collection<? extends FindMissingModel> objects) { synchronized (this) { if (data == null) { data = new ArrayList<FindMissingModel>(); } data.addAll(objects); this.notifyDataSetChanged(); } } @Override public void addAll(FindMissingModel... objects) { synchronized (this) { if (data == null) { data = new ArrayList<FindMissingModel>(); } for (FindMissingModel item : objects) { data.add(item); } this.notifyDataSetChanged(); } } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { LayoutInflater inflater = ((Activity) context).getLayoutInflater(); convertView = inflater.inflate(layoutResourceId, parent, false); } FindMissingModelHolder holder = new FindMissingModelHolder(); final FindMissingModel model = data.get(position); holder.txtTitle = (TextView) convertView.findViewById(R.id.title); if (holder.txtTitle != null) { holder.txtTitle.setText(model.getTitle()); if (mode.equalsIgnoreCase(Constants.PREF_MISSING_CHAPTER)) holder.txtTitle.setTextColor(Constants.COLOR_MISSING); else if (mode.equalsIgnoreCase(Constants.PREF_REDLINK_CHAPTER)) holder.txtTitle.setTextColor(Constants.COLOR_REDLINK); else { holder.txtTitle.setTextColor(Constants.COLOR_READ); } } holder.txtDetails = (TextView) convertView.findViewById(R.id.details); if (holder.txtDetails != null) { String details = model.getDetails(); if (Util.isStringNullOrEmpty(details)) details = String.format("%s (%s)", model.getPage(), model.getId()); holder.txtDetails.setText(details); } holder.imgIsDownloaded = (ImageView) convertView.findViewById(R.id.is_downloaded); if (holder.imgIsDownloaded != null) { if (model.isDownloaded()) { holder.imgIsDownloaded.setVisibility(View.VISIBLE); } else { holder.imgIsDownloaded.setVisibility(View.GONE); } } holder.chkSelection = (CheckBox) convertView.findViewById(R.id.chk_selection); if (holder.chkSelection != null) { holder.chkSelection.setChecked(model.isSelected()); holder.chkSelection.setVisibility(View.VISIBLE); holder.chkSelection.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { model.setSelected(isChecked); } }); } convertView.setTag(holder); return convertView; } public void filterDownloaded(boolean value) { this.showDownloaded = value; filterData(); } public void filterEverythingElse(boolean value) { this.showEverythingElse = value; filterData(); } private void filterData() { synchronized (this) { this.clear(); data.clear(); for (FindMissingModel item : originalData) { if (item.isDownloaded() && this.showDownloaded) { data.add(item); } else if (!item.isDownloaded() && this.showEverythingElse) { data.add(item); } } this.notifyDataSetChanged(); } } static class FindMissingModelHolder { TextView txtTitle; TextView txtDetails; ImageView imgIsDownloaded; CheckBox chkSelection; } }