package edu.cmsc434.paintdrip.paintdripprototype.Feed;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.ScaleAnimation;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.parse.CountCallback;
import com.parse.ParseException;
import com.parse.ParseFile;
import com.parse.ParseImageView;
import com.parse.ParseObject;
import com.parse.ParseQuery;
import com.parse.ParseQueryAdapter;
import com.parse.ParseUser;
import com.parse.SaveCallback;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import edu.cmsc434.paintdrip.paintdripprototype.R;
public class PaintingListAdapter extends ParseQueryAdapter<Painting> {
private static final int FRIENDS_FRAGMENT = 0;
private static final int GLOBAL_FRAGMENT = 1;
private static final int ME_FRAGMENT = 2;
Context mContext;
FeedItemListener mListener;
public PaintingListAdapter(Context context, final int feedID, FeedItemListener listener) {
super(context, new ParseQueryAdapter.QueryFactory<Painting>() {
public ParseQuery<Painting> create() {
ParseQuery query = new ParseQuery("Painting");
if (feedID == ME_FRAGMENT) {
query.whereEqualTo("authorId", ParseUser.getCurrentUser().getObjectId());
query.orderByDescending("createdAt");
return query;
} else {
query.orderByDescending("createdAt");
return query;
}
}
});
mContext = context;
mListener = listener;
setPaginationEnabled(false);
}
// Customize the layout by overriding getItemView
@Override
public View getItemView(final Painting painting, View convertView, ViewGroup parent) {
final ViewHolder viewHolder;
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(mContext);
convertView = inflater.inflate(R.layout.feed_item, parent, false);
viewHolder = new ViewHolder();
viewHolder.smallHeart = (ImageView) convertView.findViewById(R.id.heart_image);
viewHolder.largeHeart = (ImageView) convertView.findViewById(R.id.heart_in_painting);
viewHolder.menuImage = (ImageView) convertView.findViewById(R.id.feed_item_menu);
viewHolder.paintingImage = (ParseImageView) convertView.findViewById(R.id.painting_image);
viewHolder.userName = (TextView) convertView.findViewById(R.id.username_view);
viewHolder.likesText = (TextView) convertView.findViewById(R.id.likes_text);
viewHolder.description = (TextView) convertView.findViewById(R.id.description_view);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
View.OnClickListener likesClickedListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
togglePaintingLike(painting, viewHolder, false);
}
};
viewHolder.likesText.setOnClickListener(likesClickedListener);
viewHolder.smallHeart.setOnClickListener(likesClickedListener);
viewHolder.menuImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.menuClicked(painting);
}
});
viewHolder.largeHeart.setVisibility(View.INVISIBLE);
viewHolder.largeHeart.clearAnimation();
viewHolder.paintingImage.setOnClickListener(new View.OnClickListener() {
boolean clicked = false;
long lastClickedTime = -1;
@Override
public void onClick(View v) {
// Checks for a double-tap
long time = System.currentTimeMillis();
if (clicked && time - lastClickedTime < 300) {
clicked = false;
togglePaintingLike(painting, viewHolder, true);
} else {
clicked = true;
lastClickedTime = time;
}
}
});
// Add and download the image
ParseFile imageFile = painting.getPhotoFile();
if (imageFile != null) {
viewHolder.paintingImage.setMinimumHeight(
mContext.getResources().getDisplayMetrics().widthPixels);
viewHolder.paintingImage.setParseFile(imageFile);
viewHolder.paintingImage.loadInBackground();
} else {
System.out.println("");
}
if (painting.isLiked()) {
viewHolder.smallHeart.setImageBitmap(
BitmapFactory.decodeResource(mContext.getResources(), R.drawable.heart_selected));
} else {
viewHolder.smallHeart.setImageBitmap(
BitmapFactory.decodeResource(mContext.getResources(), R.drawable.heart_deselected));
}
if (ParseUser.getCurrentUser() != null && ParseUser.getCurrentUser().getUsername().equals(painting.getUsername())) {
viewHolder.menuImage.setVisibility(View.VISIBLE);
} else {
viewHolder.menuImage.setVisibility(View.INVISIBLE);
}
viewHolder.userName.setText(painting.getUsername());
viewHolder.likesText.setText(painting.getLikesCount() + " ");
viewHolder.description.setText(painting.getDescription());
return convertView;
}
private void togglePaintingLike(final Painting p, final ViewHolder v, boolean forceLiked) {
if (!p.isLiked()) {
p.likePainting();
animateLike(v.largeHeart);
v.smallHeart.setImageBitmap(
BitmapFactory.decodeResource(mContext.getResources(), R.drawable.heart_selected));
} else if (forceLiked) {
animateLike(v.largeHeart);
v.smallHeart.setImageBitmap(
BitmapFactory.decodeResource(mContext.getResources(), R.drawable.heart_selected));
} else {
p.unlikePainting();
v.smallHeart.setImageBitmap(
BitmapFactory.decodeResource(mContext.getResources(), R.drawable.heart_deselected));
}
p.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
v.likesText.setText(p.getLikesCount() + "");
}
});
}
private void animateLike(ImageView heart) {
Animation a = new AlphaAnimation(1.0f, 0.0f);
a.setDuration(1000);
Animation b = new ScaleAnimation(
0.8f, 1f, // Start and end values for the X axis scaling
0.8f, 1f, // Start and end values for the Y axis scaling
Animation.RELATIVE_TO_SELF, 0.5f, // Pivot point of X scaling
Animation.RELATIVE_TO_SELF, 0.5f); // Pivot point of Y scaling
b.setDuration(1000);
AnimationSet anims = new AnimationSet(true);
anims.addAnimation(a);
anims.addAnimation(b);
heart.clearAnimation();
heart.startAnimation(anims);
}
static class ViewHolder {
ImageView smallHeart;
ImageView largeHeart;
ImageView menuImage;
ParseImageView paintingImage;
TextView userName;
TextView likesText;
TextView description;
public ViewHolder () {
}
}
}