/******************************************************************************* * All rights reserved. This program and the accompanying materials * Copyright (c) 2015 StreetFoodSquare - http://www.streetfoodsquare.org. * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html * * Contributors: * StreetFoodSquare Team - first release API and implementation * Massimiliano Leone - second app release: added comparable features for actionbar sort menu; added support for colored rating bar ******************************************************************************/ package net.iubris.ulysses.ui.list.adapter; import in.flashbulb.coloredratingbar.ColoredRatingBar; import java.util.Comparator; import java.util.List; import javax.inject.Inject; import jp.wasabeef.recyclerview.animators.holder.AnimateViewHolder; import net.iubris.apollus.ui.list.OnItemClickListener; import net.iubris.apollus.ui.list.RecyclerViewArrayAdapter; import net.iubris.apollus.ui.map.MarkerShowable; import net.iubris.apollus.ui.tabspager.selectable.FragmentSelectable; import net.iubris.ulysses.R; import net.iubris.ulysses.engine.model.PlaceEnhanced; import roboguice.RoboGuice; import android.annotation.SuppressLint; import android.content.Context; import android.support.v4.view.ViewCompat; import android.support.v4.view.ViewPropertyAnimatorListener; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; public class ListFragmentRecyclerViewAdapter extends // RecyclerView.Adapter<SfeRecyclerViewAdapter.MyViewHolder> RecyclerViewArrayAdapter<PlaceEnhanced, ListFragmentRecyclerViewAdapter.ViewHolder> implements Clickable { private final LayoutInflater inflater; @Inject private ImageLoaderDisplayer imageLoaderDisplayer; private OnItemClickListener onItemClickListener; private MarkerShowable markerShowable; private FragmentSelectable fragmentSelectable; public ListFragmentRecyclerViewAdapter(Context context, List<PlaceEnhanced> sfeList) { super(sfeList); this.inflater = LayoutInflater.from(context); RoboGuice.getInjector(context).injectMembersWithoutViews(this); } public List<PlaceEnhanced> getData() { return data; } @SuppressLint("DefaultLocale") @Override public void onBindViewHolder(ViewHolder holder, int position) { String pathImage = null; // StreetFoodEstablishment streetFoodEstablishment = data.get(position); /*if (streetFoodEstablishment.getImagesStreetFoodEstablishments().size() != 0) { pathImage = "assets://"+ streetFoodEstablishment.getImagesStreetFoodEstablishments().get(0).getImageFile(); } if (pathImage != null) { imageLoaderDisplayer.display(pathImage, holder.logoSfe); }*/ /* String businessName = streetFoodEstablishment.getBusinessName(); holder.businessName.setText(businessName); holder.sfeId = streetFoodEstablishment.getId(); if (data.get(position).getOutletType() != null) { holder.outletType.setText(streetFoodEstablishment.getOutletType().getType()); } if ( streetFoodEstablishment.hasLocation() ) { float distanceInMeters = streetFoodEstablishment.getDistanceFromUserLocation(); if ( distanceInMeters != StreetFoodEstablishment.DEFAULT_UNBELIEVABLE_DISTANCE ) { // Ln.d(businessName+": "+distanceInMeters); holder.distance.setVisibility(View.VISIBLE); holder.buttonToMap.setVisibility(View.VISIBLE); if (distanceInMeters < 1000) { String trailZero = StringUtil.trailZeroFromMeters( distanceInMeters ); holder.distance.setText( trailZero+" m" ); } else { String trailZero = StringUtil.trailZeroFromKM( distanceInMeters/1000 ); holder.distance.setText( trailZero+" km" ); } } else { // Ln.d(businessName+": "+distanceInMeters); holder.distance.setVisibility(View.GONE); holder.buttonToMap.setVisibility(View.GONE); } } else { holder.distance.setVisibility(View.GONE); holder.buttonToMap.setVisibility(View.GONE); } if (ratingProvidable.isExistingRating()) { Float rating = streetFoodEstablishment.getRating(); holder.ratingBar.setRating(rating); holder.ratingBar.setVisibility(View.VISIBLE); } else { holder.ratingBar.setVisibility(View.GONE); }*/ } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int position) { View view = inflater.inflate(R.layout.list_item, parent, false); ViewHolder holder = new ViewHolder(view); return holder; } class ViewHolder extends /*RecyclerView.ViewHolder*/ AnimateViewHolder implements View.OnClickListener/*, View.OnLongClickListener*/ { Long sfeId; ImageView logoSfe; TextView businessName; TextView outletType; ColoredRatingBar ratingBar; TextView distance; ImageButton buttonToMap; public ViewHolder(View itemView) { super(itemView); // RESTORE // logoSfe = (ImageView) itemView.findViewById(R.id.list_sfe_image); // businessName = (TextView) itemView.findViewById(R.id.business_name_text); // outletType = (TextView) itemView.findViewById(R.id.outlet_type_text); // ratingBar = (ColoredRatingBar) itemView.findViewById(R.id.list_rating_bar); // distance = (TextView) itemView.findViewById(R.id.list_distance); // buttonToMap = (ImageButton) itemView.findViewById(R.id.button_list_to_map); buttonToMap.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { markerShowable.showMarker(sfeId.intValue()); fragmentSelectable.setCurrentItem(1, true); } }); itemView.setOnClickListener(this); } @Override public void onClick(View v) { if (onItemClickListener != null) { onItemClickListener.onItemClick(v, getPosition()); } } // animation zone - start @Override public void animateRemoveImpl(ViewPropertyAnimatorListener listener) { ViewCompat.animate(itemView) .translationY(-itemView.getHeight() * 0.3f) .alpha(0) .setDuration(1000) .setListener(listener) .start(); } @Override public void preAnimateAddImpl() { ViewCompat.setTranslationY(itemView, -itemView.getHeight() * 0.3f); ViewCompat.setAlpha(itemView, 0); } @Override public void animateAddImpl(ViewPropertyAnimatorListener listener) { ViewCompat.animate(itemView) .translationY(0) .alpha(1) .setDuration(1000) .setListener(listener) .start(); } // animation zone - end } @Override public void setOnItemClickListener(final OnItemClickListener onItemClickListener) { this.onItemClickListener = onItemClickListener; } @Override public void sort(Comparator<? super PlaceEnhanced> comparator) { super.sort(comparator); notifyDataSetChanged(); } // @Override public void setMarkerShowable(MarkerShowable markerShowable, FragmentSelectable fragmentSelectable) { this.markerShowable = markerShowable; this.fragmentSelectable = fragmentSelectable; } }