package com.papagiannis.tuberun;
import java.util.ArrayList;
import java.util.HashMap;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.GradientDrawable;
import android.graphics.drawable.GradientDrawable.Orientation;
import android.location.Location;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import com.papagiannis.tuberun.cyclehire.CycleHireStation;
import com.papagiannis.tuberun.cyclehire.NearbyCyclesBinder;
import com.papagiannis.tuberun.cyclehire.StationsCycleHireFetcher;
import com.papagiannis.tuberun.fetchers.Observer;
public class NearbyCycleStationsListFragment extends ListFragment implements
Observer {
StationsCycleHireFetcher fetcher;
boolean has_moved = false;
boolean has_moved_accurate = false;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v=null;
try {
v=inflater.inflate(R.layout.cycle_hire_list, null);
}
catch (Exception e) {
e.printStackTrace();
String s=e.toString();
s=s+s;
}
return v;
}
@Override
public void onPause() {
super.onPause();
if (fetcher!=null) fetcher.abort();
}
Location lastKnownLocation;
public void locationChanged(Location l) {
lastKnownLocation = l;
if (fetcher == null) {
fetcher = new StationsCycleHireFetcher();
fetcher.registerCallback(this);
}
fetcher.setLocation(lastKnownLocation);
fetcher.update();
}
ArrayList<HashMap<String, Object>> to_display = new ArrayList<HashMap<String,Object>>();
ArrayList<CycleHireStation> stations_nearby=new ArrayList<CycleHireStation>();
ArrayList<CycleHireStation> prev_result = new ArrayList<CycleHireStation>();
/**
* Called when the background thread has finished the calculation of nearby
* stations
**/
@Override
public void update() {
to_display = new ArrayList<HashMap<String, Object>>();
stations_nearby = fetcher.getResult();
for (CycleHireStation s : stations_nearby) {
HashMap<String, Object> m = new HashMap<String, Object>();
m.put("name", s.getName());
m.put("distance",
(int) s.getLocation().distanceTo(lastKnownLocation));
m.put("nAvailableBikes", ""+ s.getnAvailableBikes());
m.put("nEmptyDocks", ""+ s.getnEmptyDocks());
m.put("nTotalDocks", ""+ s.getnTotalDocks());
to_display.add(m);
}
updateList();
}
private void updateList() {
if (to_display.size()==0) return;
Activity a=getActivity();
if (a==null) return;
SimpleAdapter adapter = new SimpleAdapter(a, to_display,
R.layout.nearby_cycle_status, new String[] { "name", "distance",
"nAvailableBikes","nEmptyDocks"},
new int[] { R.id.nearby_name, R.id.nearby_distance,
R.id.available_bikes_textview,
R.id.empty_docks_textview});
adapter.setViewBinder(new NearbyCyclesBinder(getActivity()));
setListAdapter(adapter);
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
try {
Station s = stations_nearby.get(position);
Intent i = new Intent(getActivity(), DirectionsMapActivity.class);
i.putExtra("station", s);
i.putExtra("type", "cyclehire");
i.putExtra("user_longtitude",
(int) (lastKnownLocation.getLongitude() * 1000000));
i.putExtra("user_latitude",
(int) (lastKnownLocation.getLatitude() * 1000000));
startActivity(i);
} catch (Exception e) {
}
}
public void showAllInMap() {
if (stations_nearby.size()>0) {
Intent i=new Intent(getActivity(), NearbyMapActivity.class);
i.putExtra("type", "cyclehire");
i.putExtra("stations", stations_nearby);
startActivity(i);
}
}
@Override
public void onResume() {
super.onResume();
ListView lv=getListView();
int[] colors = {0, Color.GRAY, 0}; // red for the example
lv.setDivider(new GradientDrawable(Orientation.RIGHT_LEFT, colors));
lv.setDividerHeight(1);
updateList();
}
}