package com.papagiannis.tuberun.binders; import java.util.HashMap; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageView; import android.widget.SimpleAdapter.ViewBinder; import android.widget.TextView; import com.papagiannis.tuberun.BusDeparturesActivity; import com.papagiannis.tuberun.DeparturesActivity; import com.papagiannis.tuberun.FavoritesActivity; import com.papagiannis.tuberun.LinePresentation; import com.papagiannis.tuberun.LineType; import com.papagiannis.tuberun.R; import com.papagiannis.tuberun.RailDeparturesActivity; import com.papagiannis.tuberun.Station; import com.papagiannis.tuberun.favorites.DeparturesFavorite; import com.papagiannis.tuberun.favorites.Favorite; import com.papagiannis.tuberun.fetchers.DeparturesBusFetcher; import com.papagiannis.tuberun.fetchers.DeparturesDLRFetcher; import com.papagiannis.tuberun.fetchers.DeparturesFetcher; import com.papagiannis.tuberun.fetchers.Fetcher; import com.papagiannis.tuberun.fetchers.StatusesFetcher; public class FavoritesBinder implements ViewBinder, OnClickListener { private final FavoritesActivity activity; private final int red; public FavoritesBinder (FavoritesActivity activity) { super(); red=activity.getResources().getColor(R.drawable.tuberun_red_bright); this.activity=activity; } LineType last_lt; @Override public boolean setViewValue(View view, Object o, String s) { final int id=view.getId(); switch (id) { case R.id.linee_favorites: last_lt=LinePresentation.getLineTypeRespresentation(s); view.setBackgroundColor(LinePresentation.getBackgroundColor(last_lt)); return true; case R.id.icon_favorites: ImageView iv=(ImageView) view; int icon=(Integer) o; if (icon==R.drawable.buses) icon=R.drawable.buses_inverted; Bitmap bmp = BitmapFactory.decodeResource( activity.getResources(), icon); Bitmap resizedbitmap = Bitmap.createScaledBitmap(bmp, bmp.getWidth() / 2, bmp.getHeight() / 2, true); iv.setImageBitmap(resizedbitmap); return true; case R.id.remove_favorite: view.setOnClickListener(this); view_favorite_indexes.put(view, Integer.parseInt(s)); return true; } TextView tv = (TextView) view; if (id==R.id.platform_favorites) { tv.setVisibility(View.VISIBLE); tv.setTextColor(red); try { final int index=Integer.parseInt(s); tv.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { showFavorite(index); } }); return true; } catch(Exception e){ } } else if (s.equals("") || s.equals(DeparturesDLRFetcher.none_msg)) { tv.setVisibility(View.GONE); tv.setOnClickListener(null); } else { tv.setVisibility(View.VISIBLE); tv.setOnClickListener(null); } return false; // continue with the text } private HashMap<View,Integer> view_favorite_indexes=new HashMap<View, Integer>(); int delete_index; @Override public void onClick(View v) { delete_index=view_favorite_indexes.get(v); AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.setMessage("Are you sure you want to delete this favorite?") .setCancelable(false) .setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { view_favorite_indexes.clear(); Favorite.removeIndex(delete_index, activity); activity.create(); } }) .setNegativeButton("No", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); AlertDialog alert = builder.create(); alert.show(); } private void showFavorite(int i) { try { Favorite fav=Favorite.getFavorites(activity).get(i); Fetcher f= fav.getFetcher(); if (f instanceof DeparturesFetcher) { DeparturesFavorite dfav=(DeparturesFavorite) fav; showTubeDepartures(fav.getLine(), fav.getIdentification(), dfav.getStation_nice()); } else if (f instanceof DeparturesBusFetcher) { DeparturesFavorite dfav=(DeparturesFavorite) fav; showBusDepartures(fav.getIdentification(), dfav.getStation_nice() ); } else if (f instanceof StatusesFetcher) { //nothing for these guys } } catch (Exception e) { Log.w(getClass().toString(),e); } } public void showBusDepartures(String code, String snippet) { Intent i=new Intent(activity, BusDeparturesActivity.class); i.putExtra("code", code); i.putExtra("name", snippet); activity.startActivity(i); } public void showTubeDepartures(LineType lt, String code, String nice) { if (lt==LineType.RAIL) { showRailDepartures(code, nice); return; } Intent i=new Intent(activity, DeparturesActivity.class); i.putExtra("stationcode", code); i.putExtra("stationnice", nice); i.putExtra("line", LinePresentation.getStringRespresentation(lt)); activity.startActivity(i); } private void showRailDepartures(String code, String nice) { if (code==null || nice==null) return; Station s=new Station(nice, code); s.addLineTypeForDepartures(LineType.RAIL); Intent i=new Intent(activity, RailDeparturesActivity.class); i.putExtra("station", s); activity.startActivity(i); } }