package com.papagiannis.tuberun; import java.util.ArrayList; import java.util.HashMap; import android.graphics.Color; 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.LinearLayout; import android.widget.ListView; import android.widget.SimpleAdapter; import com.papagiannis.tuberun.binders.StatusesBinder; import com.papagiannis.tuberun.favorites.Favorite; import com.papagiannis.tuberun.fetchers.Observer; import com.papagiannis.tuberun.fetchers.StatusesFetcher; public class StatusesFragment extends ListFragment implements Observer { private StatusesFetcher fetcher; private final ArrayList<HashMap<String, Object>> status_list = new ArrayList<HashMap<String, Object>>(); private boolean isWeekend = false; private LinearLayout emptyLayout; /** 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.statuses_list, null); emptyLayout = (LinearLayout) v.findViewById(R.id.empty_layout); } catch (Exception e) { e.printStackTrace(); String s = e.toString(); s = s + s; } return v; } public StatusesFragment setFetcher(StatusesFetcher f) { fetcher = f; isWeekend = fetcher.forWeekend(); return this; } public void onClick() { emptyLayout.setVisibility(View.GONE); // setListShown(false); setListAdapter(null); fetcher.update(); } @Override public void update() { status_list.clear(); ListView listView = getListView(); listView.setCacheColorHint(Color.TRANSPARENT); for (LineType lt : LineType.allStatuses()) { HashMap<String, Object> m = new HashMap<String, Object>(); Status s = fetcher.getStatus(lt); if (s == null || s.short_status == null || s.short_status.equalsIgnoreCase("Failed")) break; m.put("line", LinePresentation.getStringRespresentation(lt)); m.put("status", s.short_status); String long_status = s.long_status; if (long_status.equals("")) long_status = "No further information available"; m.put("details", long_status); Favorite f = new Favorite(lt, null); f.setIdentification(Boolean.toString(isWeekend)); Boolean isFavorite = Favorite.isFavorite(f); m.put("favorite", Boolean.toString(isFavorite)); status_list.add(m); } if (status_list.size() == 0) { emptyLayout.setVisibility(View.VISIBLE); } else { emptyLayout.setVisibility(View.GONE); } SimpleAdapter adapter = new SimpleAdapter(getActivity(), status_list, R.layout.line_status, new String[] { "line", "status", "details", "favorite" }, new int[] { R.id.line_label, R.id.status_label, R.id.details_label, R.id.add_favorite }); adapter.setViewBinder(new StatusesBinder(isWeekend, getActivity(), this)); setListAdapter(adapter); // setListShown(true); } @Override public void onPause() { super.onPause(); if (fetcher != null) fetcher.deregisterCallback(this); } @Override public void onResume() { super.onResume(); if (fetcher != null) fetcher.registerCallback(this); } public void scrollMyListViewToBottom() { getListView().post(new Runnable() { @Override public void run() { // Select the last row so it will scroll into view... getListView().setSelection(getListAdapter().getCount() - 1); } }); } }