package org.softeg.slartus.forpdaplus.listfragments.adapters;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.LinearLayout;
import android.widget.TextView;
import org.softeg.slartus.forpdaapi.FavTopic;
import org.softeg.slartus.forpdaapi.IListItem;
import org.softeg.slartus.forpdaplus.App;
import org.softeg.slartus.forpdaplus.R;
import java.util.ArrayList;
/*
* Created by slartus on 21.02.14.
*/
public class ListAdapter extends BaseAdapter implements Filterable {
private final LayoutInflater mInflater;
protected ArrayList<? extends IListItem> mData;
private boolean showSubMain;
public ListAdapter(Context context, ArrayList<? extends IListItem> data, boolean showSubMain) {
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mData = data;
this.showSubMain = showSubMain;
}
public void setData(ArrayList<? extends IListItem> data) {
mData = data;
}
@Override
public int getCount() {
return mData == null ? 0 : mData.size();
}
@Override
public Object getItem(int i) {
return mData.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
private final int ITEM_TYPE = 0;
private final int ITEM_NEW_TYPE = 1;
private final int ITEM_OLD_TYPE = 2;
private final int ITEM_PROGRESS_TYPE = 3;
private final int ITEM_PROGRESS_NEW_TYPE = 4;
private final int ITEM_PROGRESS_OLD_TYPE = 5;
@Override
public int getItemViewType(int position) {
IListItem topic = mData.get(position);
if (topic.isInProgress()) {
switch (topic.getState()) {
case IListItem.STATE_GREEN:
return ITEM_PROGRESS_NEW_TYPE;
case IListItem.STATE_RED:
return ITEM_PROGRESS_OLD_TYPE;
default:
return ITEM_PROGRESS_TYPE;
}
} else {
switch (topic.getState()) {
case IListItem.STATE_GREEN:
return ITEM_NEW_TYPE;
case IListItem.STATE_RED:
return ITEM_OLD_TYPE;
default:
return ITEM_TYPE;
}
}
}
@Override
public int getViewTypeCount() {
return 6;
}
@Override
public android.view.View getView(int position, android.view.View view, android.view.ViewGroup parent) {
final ViewHolder holder;
if (view == null) {
switch (getItemViewType(position)) {
case ITEM_TYPE:
view = mInflater.inflate(R.layout.list_item, parent, false);
break;
case ITEM_NEW_TYPE:
view = mInflater.inflate(R.layout.list_item_green, parent, false);
break;
case ITEM_OLD_TYPE:
view = mInflater.inflate(R.layout.list_item_red, parent, false);
break;
case ITEM_PROGRESS_TYPE:
view = mInflater.inflate(R.layout.list_item_progress, parent, false);
break;
case ITEM_PROGRESS_NEW_TYPE:
view = mInflater.inflate(R.layout.list_item_progress_green, parent, false);
break;
case ITEM_PROGRESS_OLD_TYPE:
view = mInflater.inflate(R.layout.list_item_progress_red, parent, false);
break;
}
holder = new ViewHolder();
assert view != null;
holder.Flag = (LinearLayout) view.findViewById(R.id.imgFlag);
holder.TopLeft = (TextView) view.findViewById(R.id.txtTopLeft);
holder.TopRight = (TextView) view.findViewById(R.id.txtTopRight);
holder.Main = (TextView) view.findViewById(R.id.txtMain);
holder.SubMain = (TextView) view.findViewById(R.id.txtSubMain);
holder.progress = view.findViewById(R.id.progressBar);
holder.isPinned = view.findViewById(R.id.pinned);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
IListItem topic = mData.get(position);
holder.TopLeft.setText(topic.getTopLeft());
holder.TopRight.setText(topic.getTopRight());
holder.Main.setText(topic.getMain());
if (topic.getSubMain().equals("") | showSubMain) {
holder.SubMain.setVisibility(View.GONE);
} else {
holder.SubMain.setVisibility(View.VISIBLE);
holder.SubMain.setText(topic.getSubMain());
}
setVisibility(holder.progress, topic.isInProgress() ? View.VISIBLE : View.INVISIBLE);
try {
setVisibility(holder.isPinned, ((FavTopic) topic).isPinned() ? View.VISIBLE : View.GONE);
} catch (ClassCastException ex) {
}
switch (topic.getState()) {
case IListItem.STATE_GREEN:
if (App.getInstance().getPreferences().getBoolean("oldIndicator", false)) {
setVisibility(holder.Flag, View.VISIBLE);
holder.Flag.setBackgroundColor(App.getContext().getResources().getColor(R.color.new_flag));
}
break;
case IListItem.STATE_RED:
setVisibility(holder.Flag, View.VISIBLE);
holder.Flag.setBackgroundColor(App.getContext().getResources().getColor(R.color.old_flag));
break;
default:
setVisibility(holder.Flag, View.INVISIBLE);
}
return view;
}
private void setVisibility(View v, int visibility) {
if (v.getVisibility() != visibility)
v.setVisibility(visibility);
}
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
mData = (ArrayList<IListItem>) results.values;
ListAdapter.super.notifyDataSetChanged();
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
ArrayList<IListItem> FilteredArrayNames = new ArrayList<IListItem>();
constraint = constraint.toString().toLowerCase();
for (int i = 0; i < mData.size(); i++) {
IListItem item = mData.get(i);
if (item.getMain().toString().contains(constraint)) {
FilteredArrayNames.add(item);
}
}
results.count = FilteredArrayNames.size();
results.values = FilteredArrayNames;
return results;
}
};
return filter;
}
@Override
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
}
class ViewHolder {
LinearLayout Flag;
View progress;
TextView TopLeft;
TextView TopRight;
TextView Main;
TextView SubMain;
View isPinned;
}
}