package com.papagiannis.tuberun.binders; import java.util.ArrayList; import java.util.HashMap; import android.app.Activity; import android.graphics.Color; import android.view.View; import android.view.View.OnClickListener; import android.widget.SimpleAdapter.ViewBinder; import android.widget.TextView; import android.widget.ToggleButton; import com.papagiannis.tuberun.LinePresentation; import com.papagiannis.tuberun.LineType; import com.papagiannis.tuberun.R; import com.papagiannis.tuberun.StatusesFragment; import com.papagiannis.tuberun.favorites.Favorite; import com.papagiannis.tuberun.fetchers.StatusesFetcher; public class StatusesBinder implements ViewBinder, OnClickListener { private boolean beforeStatus = true; private int index = 1; HashMap<View, LineType> togglebutton_lines = new HashMap<View, LineType>(); LineType last_lt; Boolean isWeekend; Activity activity; StatusesFragment fragment=null; public StatusesBinder(Boolean isWeekend, Activity activity) { super(); this.isWeekend=isWeekend; this.activity=activity; } public StatusesBinder(Boolean isWeekend, Activity activity, StatusesFragment fragment) { super(); this.isWeekend=isWeekend; this.activity=activity; this.fragment=fragment; } @Override public boolean setViewValue(View view, Object o, String s) { if (view.getId() == R.id.add_favorite) { ToggleButton tb=(ToggleButton)view; tb.setChecked(Boolean.parseBoolean(s)); tb.setOnClickListener(this); togglebutton_lines.put(tb, last_lt); return true; } TextView tv = (TextView) view; if (LinePresentation.isValidLine(s)) { tv.setVisibility(View.VISIBLE); LineType l = LinePresentation.getLineTypeRespresentation(s); last_lt=l; tv.setBackgroundColor(LinePresentation.getBackgroundColor(l)); tv.setTextColor(LinePresentation.getForegroundColor(l)); } else if (beforeStatus) { beforeStatus = false; if (s.equalsIgnoreCase("Good Service")) { tv.setVisibility(View.VISIBLE); tv.setBackgroundColor(Color.TRANSPARENT); tv.setTextColor(Color.WHITE); } else { tv.setVisibility(View.VISIBLE); tv.setBackgroundColor(Color.BLUE); tv.setTextColor(Color.WHITE); } } else { beforeStatus = true; tv.setTextColor(Color.WHITE); // tv.setBackgroundColor(R.drawable.tuberun_semitransparent); tv.setVisibility(View.GONE); } tv.setOnClickListener(this); if (index++ % 3 == 0) { subjects.put(temp.get(0), tv); subjects.put(temp.get(1), tv); subjects.put(tv, tv); if (last_lt==LineType.DLR) { lastView=temp.get(1); preLastView=temp.get(0); } temp.clear(); } else temp.add(tv); return false; // continue with the text } HashMap<View, View> subjects = new HashMap<View, View>(); ArrayList<View> temp = new ArrayList<View>(); View lastView=null; //this one must scroll View preLastView=null; //this as well :-) @Override public void onClick(View v) { if (v.getId() == R.id.add_favorite) { ToggleButton tb=(ToggleButton)v; if (tb.isChecked()) { LineType lt=togglebutton_lines.get(v); Favorite f=new Favorite(lt,new StatusesFetcher()); f.setIdentification(Boolean.toString(isWeekend)); Favorite.addFavorite(f, activity); } else { LineType lt=togglebutton_lines.get(v); Favorite f=new Favorite(lt,null); f.setIdentification(Boolean.toString(isWeekend)); Favorite.removeFavorite(f, activity); } } else { TextView msgView = (TextView) subjects.get(v); if (msgView.getText().equals("")) return; if (msgView.getVisibility() == View.GONE) { if (isLastElement(v) && fragment!=null) fragment.scrollMyListViewToBottom(); msgView.setVisibility(View.VISIBLE); } else msgView.setVisibility(View.GONE); } } private boolean isLastElement(View v) { return (lastView!=null && v==lastView) || (preLastView!=null && v==preLastView); } }