package uk.co.imallan.tuchongdaily.ui.adapter;
import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.support.v7.widget.RecyclerView;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
import uk.co.imallan.tuchongdaily.R;
import uk.co.imallan.tuchongdaily.db.Table;
import uk.co.imallan.tuchongdaily.ui.activity.ImagePagerActivity;
import uk.co.imallan.tuchongdaily.utils.ImageUtils;
/**
* Created by allan on 15/2/25.
*/
public class PostImagesRecyclerViewAdapter extends RecyclerView.Adapter<PostImagesRecyclerViewAdapter.ViewHolder> {
private Context mContext;
private Cursor mCursor;
private long mLastClick = 0;
private ArrayList<String> mIds;
public PostImagesRecyclerViewAdapter(Context context) {
this.mContext = context;
}
public Cursor swapCursor(Cursor cursor) {
Cursor oldCursor = mCursor;
mCursor = cursor;
updateServerIds();
notifyDataSetChanged();
return oldCursor;
}
private void updateServerIds() {
ArrayList<String> ids = new ArrayList<>();
for (int i = 0; i < mCursor.getCount(); i++) {
if (mCursor.moveToPosition(i)) {
ids.add(mCursor.getString(mCursor.getColumnIndex(Table.Image.COLUMN_ID)));
}
}
this.mIds = ids;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(mContext);
View itemView = inflater.inflate(R.layout.view_item_post_image, parent, false);
final ViewHolder viewHolder = new ViewHolder(itemView);
return viewHolder;
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
if (mCursor.moveToPosition(position)) {
if (position == 0) {
holder.itemView.setPadding(
0,
0,
0,
0
);
holder.image.requestLayout();
} else {
holder.itemView.setPadding(
(int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1f, mContext.getResources().getDisplayMetrics()),
0,
0,
0
);
holder.image.requestLayout();
}
final int width = mCursor.getInt(mCursor.getColumnIndex(Table.Image.COLUMN_WIDTH));
final int height = mCursor.getInt(mCursor.getColumnIndex(Table.Image.COLUMN_HEIGHT));
if (width != 0 && height != 0) {
final float ratio = width / (float) height;
holder.image.post(new Runnable() {
@Override
public void run() {
holder.image.getLayoutParams().width = (int) (holder.image.getHeight() * ratio);
holder.image.requestLayout();
}
});
}
final String largeImageURL = mCursor.getString(mCursor.getColumnIndex(Table.Image.COLUMN_URL_LARGE));
Picasso.with(mContext)
.load(largeImageURL)
.transform(new ImageUtils.LimitImageSizeTransformation(ImageUtils.LimitImageSizeTransformation.QUALITY.QUALITY_1080P))
.into(holder.image);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
long current = System.currentTimeMillis();
if (current - mLastClick <= 1000) {
return;
}
mLastClick = current;
ImagePagerActivity.startActivity((Activity) mContext, mIds, position, holder.image);
}
});
}
}
@Override
public int getItemCount() {
return mCursor == null ? 0 : mCursor.getCount();
}
public class ViewHolder extends RecyclerView.ViewHolder {
ImageView image;
public ViewHolder(View itemView) {
super(itemView);
image = (ImageView) itemView.findViewById(R.id.image_post_image);
}
public ImageView getImage() {
return image;
}
}
}