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.Button; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.amulyakhare.textdrawable.TextDrawable; import com.luticate.utils.business.LuPromise; import com.rthoni.stssaguenay.R; import com.rthoni.stssaguenay.business.RoutesBusiness; import com.rthoni.stssaguenay.business.STSBusiness; import com.rthoni.stssaguenay.dbo.UserFavouriteStopsDbo; import com.rthoni.stssaguenay.dbo.RoutesDbo; import com.rthoni.stssaguenay.dbo.StopsDbo; import java.util.List; import java.util.Vector; import butterknife.BindView; import butterknife.ButterKnife; /** * Created by robin on 9/29/16. */ public class StopRoutesPickerFragment extends Fragment { @BindView(R.id.textView) TextView _textView; @BindView(R.id.listRoutes) RecyclerView _listRoutes; @BindView(R.id.btnSave) Button _btnSave; private StopsDbo _stopsDbo; private RoutesAdapter _routesAdapter; private LuPromise.LuConsumer _onRoutesSelected; public static class ViewHolder extends RecyclerView.ViewHolder { public ImageView _imageView; public TextView _textView; public View _view; public ViewHolder(View v) { super(v); _view = v; } } public class RoutesAdapter extends RecyclerView.Adapter { private List _routes; private List _selectRoutes; @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.route_recycler_view_item, parent, false); ViewHolder vh = new ViewHolder(v); vh._textView = (TextView) v.findViewById(R.id.textView); vh._imageView = (ImageView) v.findViewById(R.id.imageView); 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()); holder._view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (_selectRoutes.contains(routeDbo)) { _selectRoutes.remove(routeDbo); v.setSelected(false); } else { _selectRoutes.add(routeDbo); v.setSelected(true); } _btnSave.setEnabled(_selectRoutes.size() != 0); } }); } @Override public int getItemCount() { return _routes == null ? 0 : _routes.size(); } public void setRoutes(List routes) { _routes = routes; _selectRoutes = new Vector<>(); notifyDataSetChanged(); } public List getSelectRoutes() { return _selectRoutes; } } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_stop_route_picker, container, false); ButterKnife.bind(this, v); _textView.setText(getResources().getString(R.string.pick_routes, _stopsDbo.getFullName())); _routesAdapter = new RoutesAdapter(); _listRoutes.setAdapter(_routesAdapter); _listRoutes.setLayoutManager(new LinearLayoutManager(getContext())); _listRoutes.setHasFixedSize(true); _btnSave.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { save(); } }); loadRoutes(); return v; } public void setStopsDbo(StopsDbo stopsDbo) { _stopsDbo = stopsDbo; } public void loadRoutes() { 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 LuPromise.LuConsumer>() { @Override public void execute(List data) { progressDialog.dismiss(); List routes = RoutesBusiness.getRoutesDbos(data, _stopsDbo.getRoutes()); _routesAdapter.setRoutes(routes); } }, new LuPromise.LuConsumer() { @Override public void execute(LuPromise.LuPromiseError data) { progressDialog.dismiss(); _routesAdapter.setRoutes(new Vector()); Toast.makeText(getContext(), data.getError(), Toast.LENGTH_LONG).show(); } }); } public void save() { if (_onRoutesSelected != null) { UserFavouriteStopsDbo favourite = new UserFavouriteStopsDbo(); favourite.setStop(_stopsDbo); favourite.setRoutes(_routesAdapter.getSelectRoutes()); _onRoutesSelected.execute(favourite); } } public void setOnRoutesSelected(LuPromise.LuConsumer onRoutesSelected) { _onRoutesSelected = onRoutesSelected; } }