app/src/main/java/ch/epfl/swissteam/services/view/builders/PostAdapter.java
package ch.epfl.swissteam.services.view.builders;
import android.content.Intent;
import android.location.Location;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import com.squareup.picasso.Picasso;
import java.util.List;
import ch.epfl.swissteam.services.R;
import ch.epfl.swissteam.services.models.Post;
import ch.epfl.swissteam.services.providers.DBUtility;
import ch.epfl.swissteam.services.providers.LocationManager;
import ch.epfl.swissteam.services.view.activities.PostActivity;
import ch.epfl.swissteam.services.view.fragments.NearbyFragment;
/**
* Adapter for Posts in {@link NearbyFragment}
*
* @author Julie Giunta
*/
public class PostAdapter extends RecyclerView.Adapter<PostAdapter.PostViewHolder> {
public static final String POST_TAG = "ch.epfl.swissteam.services.post";
private List<Post> posts_;
/**
* Adapter for a list of Posts
*
* @param posts the list of Posts to be managed by the adapter
*/
public PostAdapter(List<Post> posts) {
this.posts_ = posts;
}
@NonNull
@Override
public PostAdapter.PostViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.post_layout, viewGroup, false);
return new PostViewHolder(v);
}
@Override
public void onBindViewHolder(PostViewHolder holder, int i) {
holder.titleView_.setText(posts_.get(holder.getAdapterPosition()).getTitle_());
holder.bodyView_.setText(posts_.get(holder.getAdapterPosition()).getBody_());
DBUtility.get().getUser(posts_.get(holder.getAdapterPosition()).getGoogleId_(), user -> {
if (user != null) {
Picasso.get().load(user.getImageUrl_()).into(holder.imageView_);
}
});
Location postLocation = new Location("");
postLocation.setLongitude(posts_.get(holder.getAdapterPosition()).getLongitude_());
postLocation.setLatitude(posts_.get(holder.getAdapterPosition()).getLatitude_());
Location userLocation = LocationManager.get().getCurrentLocation_();
if (userLocation != null) {
float distance = postLocation.distanceTo(userLocation) / LocationManager.M_IN_ONE_KM;
holder.distanceView_.setText(holder.parentLayout_.getContext().getResources().getString(R.string.homefragment_postdistance, distance));
} else {
holder.distanceView_.setText(holder.parentLayout_.getContext().getResources().getString(R.string.homefragment_postdistance, LocationManager.MAX_POST_DISTANCE / LocationManager.M_IN_ONE_KM));
}
holder.parentLayout_.setOnClickListener((view) -> {
Intent intent = new Intent(holder.itemView.getContext(), PostActivity.class);
intent.putExtra(POST_TAG, posts_.get(holder.getAdapterPosition()));
holder.itemView.getContext().startActivity(intent);
});
}
@Override
public int getItemCount() {
return posts_.size();
}
/**
* ViewHolder for Posts
*/
static class PostViewHolder extends RecyclerView.ViewHolder {
protected TextView titleView_;
protected TextView bodyView_;
protected TextView distanceView_;
protected ImageView imageView_;
protected FrameLayout parentLayout_;
/**
* Create a PostViewHolder
*
* @param v the current View
*/
protected PostViewHolder(View v) {
super(v);
titleView_ = v.findViewById(R.id.textview_postadapter_title);
bodyView_ = v.findViewById(R.id.textview_postadapter_body);
distanceView_ = v.findViewById(R.id.textview_postadapter_distance);
imageView_ = v.findViewById(R.id.imageview_postadapter_image);
parentLayout_ = v.findViewById(R.id.framelayout_post);
}
}
}