package com.rthoni.stssaguenay.ui.fragments; import android.app.ProgressDialog; import android.graphics.Color; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; 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 android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.amulyakhare.textdrawable.TextDrawable; import com.luticate.utils.business.LuConsumer; import com.luticate.utils.business.LuPromise; import com.luticate.utils.dbo.LuPromiseError; import com.rthoni.stssaguenay.R; import com.rthoni.stssaguenay.business.RoutesBusiness; import com.rthoni.stssaguenay.business.STSBusiness; import com.rthoni.stssaguenay.business.SchedulesBusiness; import com.rthoni.stssaguenay.dbo.RoutesDbo; import com.rthoni.stssaguenay.dbo.SchedulesDbo; import com.rthoni.stssaguenay.dbo.StopsDbo; import com.rthoni.stssaguenay.dbo.UserFavouriteStopsDbo; import org.joda.time.DateTimeZone; import org.joda.time.LocalDateTime; import java.util.List; import java.util.TimeZone; import java.util.Vector; import butterknife.BindView; import butterknife.ButterKnife; /** * Created by robin on 10/6/16. */ public class StopViewerFragment extends Fragment { @BindView(R.id.textView) TextView _textStop; @BindView(R.id.listRoutes) RecyclerView _listRoutes; private StopsDbo _stopsDbo; private RoutesAdapter _adapter; public static class ViewHolder extends RecyclerView.ViewHolder { public ImageView _imageView; public TextView _textView; public TextView _textView2; public View _view; public ViewHolder(View v) { super(v); _view = v; } } public class RoutesAdapter extends RecyclerView.Adapter { private List _routes; private List _schedules; @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.route_schedules_recycler_view_item, parent, false); ViewHolder vh = new ViewHolder(v); vh._imageView = (ImageView) v.findViewById(R.id.imageView); vh._textView = (TextView) v.findViewById(R.id.textView); vh._textView2 = (TextView) v.findViewById(R.id.textView2); return vh; } @Override public void onBindViewHolder(ViewHolder holder, int position) { final RoutesDbo routeDbo = _routes.get(position); TextDrawable drawable = TextDrawable.builder() .beginConfig() .textColor(Color.parseColor("#" + routeDbo.getFgColor())) .endConfig() .buildRound(routeDbo.getId(), Color.parseColor("#" + routeDbo.getBgColor())); holder._imageView.setImageDrawable(drawable); holder._textView.setText(routeDbo.getName()); SchedulesDbo schedules = null; if (_schedules != null) { for (SchedulesDbo schedulesDbo : _schedules) { if (schedulesDbo.getRouteId().equals(routeDbo.getId())) { schedules = schedulesDbo; break; } } } if (schedules != null) { StringBuilder text = new StringBuilder(); for (int i = 0; i < schedules.getSchedules().size(); ++i) { if (i > 0) { text.append(", "); } text.append(schedules.getSchedules().get(i).toString("HH:mm")); } holder._textView2.setText(text.toString()); } else { holder._textView2.setText(""); } } @Override public int getItemCount() { return _routes == null ? 0 : _routes.size(); } public void setRoutes(List routes) { _routes = routes; notifyDataSetChanged(); } public List getRoutes() { return _routes; } public void setSchedules(List schedules) { _schedules = schedules; notifyDataSetChanged(); } } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_stop_viewer, container, false); ButterKnife.bind(this, v); _textStop.setText(_stopsDbo.getFullName()); _adapter = new RoutesAdapter(); _listRoutes.setAdapter(_adapter); _listRoutes.setLayoutManager(new LinearLayoutManager(getContext())); loadRoutesAndSchedules(); return v; } public void loadRoutesAndSchedules() { final ProgressDialog progressDialog = new ProgressDialog(getContext()); progressDialog.setIndeterminate(true); progressDialog.setCancelable(false); progressDialog.show(); progressDialog.setTitle(R.string.loading); progressDialog.setMessage(getString(R.string.loading_routes)); RoutesBusiness.getAll(STSBusiness.getConfig(getContext())) .then(new LuConsumer>() { @Override public void execute(List data) { progressDialog.dismiss(); List routes = RoutesBusiness.getRoutesDbos(data, _stopsDbo.getRoutes()); _adapter.setRoutes(routes); loadSchedules(); } }, new LuConsumer() { @Override public void execute(LuPromiseError data) { progressDialog.dismiss(); _adapter.setRoutes(new Vector()); Toast.makeText(getContext(), data.getError(), Toast.LENGTH_LONG).show(); } }); } public void loadSchedules() { final ProgressDialog progressDialog = new ProgressDialog(getContext()); progressDialog.setIndeterminate(true); progressDialog.setCancelable(false); progressDialog.show(); progressDialog.setTitle(R.string.loading); progressDialog.setMessage(getString(R.string.loading_schedules)); UserFavouriteStopsDbo favouriteStopsDbo = new UserFavouriteStopsDbo(); favouriteStopsDbo.setStop(_stopsDbo); favouriteStopsDbo.setRoutes(_adapter.getRoutes()); List favouriteStopsDbos = new Vector<>(); favouriteStopsDbos.add(favouriteStopsDbo); DateTimeZone dtz = DateTimeZone.forOffsetMillis(TimeZone.getDefault().getRawOffset() + TimeZone.getDefault().getDSTSavings()); LocalDateTime date = LocalDateTime.now(dtz).plusMinutes(-30); SchedulesBusiness.getMultiple(STSBusiness.getConfig(getContext()), favouriteStopsDbos, date, 20) .then(new LuConsumer>() { @Override public void execute(List data) { progressDialog.dismiss(); _adapter.setSchedules(data); } }, new LuConsumer() { @Override public void execute(LuPromiseError data) { progressDialog.dismiss(); // _routesAdapter.setRoutes(new Vector()); TODO Toast.makeText(getContext(), data.getError(), Toast.LENGTH_LONG).show(); } }); } public void setStopsDbo(StopsDbo stopsDbo) { _stopsDbo = stopsDbo; } }