package uk.co.traintrackapp.traintrack.fragment; import android.content.SharedPreferences; import android.location.Location; import android.os.AsyncTask; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v4.app.Fragment; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.baoyz.widget.PullRefreshLayout; import java.util.ArrayList; import java.util.Collections; import uk.co.traintrackapp.traintrack.R; import uk.co.traintrackapp.traintrack.TrainTrack; import uk.co.traintrackapp.traintrack.adapter.StationRowAdapter; import uk.co.traintrackapp.traintrack.model.Station; import uk.co.traintrackapp.traintrack.utils.Utils; public class StationsListFragment extends Fragment { private static final String NEARBY = "Nearby"; private static final String FAVOURITES = "Favourites"; private static final String RECENT = "Recent"; private StationRowAdapter adapter; private ArrayList<Station> stations; private PullRefreshLayout refresh; private String tab; public static ArrayList<Fragment> getFragments() { ArrayList<Fragment> fragments = new ArrayList<>(); String[] tabs = { NEARBY, FAVOURITES, RECENT }; for (String tab : tabs) { StationsListFragment fragment = new StationsListFragment(); Bundle args = new Bundle(); args.putString(Utils.ARGS_PAGE_TITLE, tab); fragment.setArguments(args); fragments.add(fragment); } return fragments; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_stations_list, container, false); tab = getArguments().getString(Utils.ARGS_PAGE_TITLE); stations = new ArrayList<>(); RecyclerView list = (RecyclerView) v.findViewById(R.id.list); list.setLayoutManager(new LinearLayoutManager(getActivity())); list.setItemAnimator(new DefaultItemAnimator()); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); String distanceUnit = prefs.getString("pref_distance_units", "km"); adapter = new StationRowAdapter(stations, distanceUnit); list.setAdapter(adapter); refresh = (PullRefreshLayout) v.findViewById(R.id.refresh); refresh.setOnRefreshListener(new PullRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { new GetStationList().execute(); } }); refresh.setRefreshing(true); new GetStationList().execute(); return v; } class GetStationList extends AsyncTask<String, String, ArrayList<Station>> { @Override protected ArrayList<Station> doInBackground(String... strings) { Utils.log("Getting stations for " + tab + "..."); ArrayList<Station> newStations = new ArrayList<>(); TrainTrack app = (TrainTrack) getActivity().getApplication(); switch (tab) { case NEARBY: Location gps = ((StationsFragment) getParentFragment()).getGps(); for (Station station : app.getStations()) { if ((station.getLatitude() != 0) && (station.getLongitude() != 0)) { Location stationLocation = new Location(""); stationLocation.setLatitude(station.getLatitude()); stationLocation.setLongitude(station.getLongitude()); if (gps != null) { station.setDistance((int) gps.distanceTo(stationLocation)); } newStations.add(station); } } Collections.sort(newStations); break; case FAVOURITES: newStations.addAll(app.getUser().getFavouriteStations()); break; case RECENT: newStations.addAll(app.getUser().getRecentStations()); break; } return newStations; } @Override protected void onPostExecute(ArrayList<Station> newStations) { super.onPostExecute(newStations); Utils.log("Got stations for " + tab + "."); stations.clear(); stations.addAll(newStations); adapter.notifyDataSetChanged(); refresh.setRefreshing(false); } } }