package me.ccrama.redditslide.Adapters;
import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.graphics.Typeface;
import android.net.Uri;
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.AdapterView;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import com.afollestad.materialdialogs.AlertDialogWrapper;
import com.devspark.robototextview.util.RobotoTypefaceManager;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.List;
import me.ccrama.redditslide.Activities.Album;
import me.ccrama.redditslide.Activities.MediaView;
import me.ccrama.redditslide.Activities.Tumblr;
import me.ccrama.redditslide.ContentType;
import me.ccrama.redditslide.ImgurAlbum.Image;
import me.ccrama.redditslide.R;
import me.ccrama.redditslide.Reddit;
import me.ccrama.redditslide.SettingValues;
import me.ccrama.redditslide.SpoilerRobotoTextView;
import me.ccrama.redditslide.Tumblr.Photo;
import me.ccrama.redditslide.Visuals.FontPreferences;
import me.ccrama.redditslide.util.SubmissionParser;
public class TumblrView extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private final List<Photo> users;
private final Activity main;
public boolean paddingBottom;
public int height;
public String subreddit;
public TumblrView(final Activity context, final List<Photo> users, int height, String subreddit) {
this.height = height;
main = context;
this.users = users;
this.subreddit = subreddit;
paddingBottom = main.findViewById(R.id.toolbar) == null;
if (context.findViewById(R.id.grid) != null)
context.findViewById(R.id.grid).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LayoutInflater l = context.getLayoutInflater();
View body = l.inflate(R.layout.album_grid_dialog, null, false);
AlertDialogWrapper.Builder b = new AlertDialogWrapper.Builder(context);
GridView gridview = (GridView) body.findViewById(R.id.images);
gridview.setAdapter(new ImageGridAdapterTumblr(context, users));
b.setView(body);
final Dialog d = b.create();
gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
if (context instanceof Tumblr) {
((LinearLayoutManager) ((Tumblr) context).album.album.recyclerView.getLayoutManager()).scrollToPositionWithOffset(position + 1, context.findViewById(R.id.toolbar).getHeight());
} else {
((LinearLayoutManager) ((RecyclerView) context.findViewById(R.id.images)).getLayoutManager()).scrollToPositionWithOffset(position + 1, context.findViewById(R.id.toolbar).getHeight());
}
d.dismiss();
}
});
d.show();
}
});
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == 1) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.album_image, parent, false);
return new AlbumViewHolder(v);
} else {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.spacer, parent, false);
return new SpacerViewHolder(v);
}
}
public double getHeightFromAspectRatio(int imageHeight, int imageWidth, int viewWidth) {
double ratio = (double) imageHeight / (double) imageWidth;
return (viewWidth * ratio);
}
@Override
public int getItemViewType(int position) {
int SPACER = 6;
if (!paddingBottom && position == 0) {
return SPACER;
} else if (paddingBottom && position == getItemCount() - 1) {
return SPACER;
} else {
return 1;
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder2, int i) {
if (holder2 instanceof AlbumViewHolder) {
final int position = paddingBottom ? i : i - 1;
AlbumViewHolder holder = (AlbumViewHolder) holder2;
final Photo user = users.get(position);
((Reddit) main.getApplicationContext()).getImageLoader().displayImage(user.getOriginalSize().getUrl(), holder.image, ImageGridAdapter.options);
holder.body.setVisibility(View.VISIBLE);
holder.text.setVisibility(View.VISIBLE);
View imageView = holder.image;
if (imageView.getWidth() == 0) {
holder.image.setLayoutParams(new LinearLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT));
} else {
holder.image.setLayoutParams(new LinearLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, (int) getHeightFromAspectRatio(user.getOriginalSize().getHeight(), user.getOriginalSize().getWidth(), imageView.getWidth())));
}
{
int type = new FontPreferences(holder.body.getContext()).getFontTypeComment().getTypeface();
Typeface typeface;
if (type >= 0) {
typeface = RobotoTypefaceManager.obtainTypeface(holder.body.getContext(), type);
} else {
typeface = Typeface.DEFAULT;
}
holder.body.setTypeface(typeface);
}
{
int type = new FontPreferences(holder.body.getContext()).getFontTypeTitle().getTypeface();
Typeface typeface;
if (type >= 0) {
typeface = RobotoTypefaceManager.obtainTypeface(holder.body.getContext(), type);
} else {
typeface = Typeface.DEFAULT;
}
holder.text.setTypeface(typeface);
}
{
holder.text.setVisibility(View.GONE);
}
{
if (user.getCaption() != null) {
List<String> text = SubmissionParser.getBlocks(user.getCaption());
setTextWithLinks(text.get(0), holder.body);
if (holder.body.getText().toString().isEmpty()) {
holder.body.setVisibility(View.GONE);
}
} else {
holder.body.setVisibility(View.GONE);
}
}
View.OnClickListener onGifImageClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
if (SettingValues.image ) {
Intent myIntent = new Intent(main, MediaView.class);
myIntent.putExtra(MediaView.SUBREDDIT, subreddit);
myIntent.putExtra(MediaView.EXTRA_URL, user.getOriginalSize().getUrl());
main.startActivity(myIntent);
} else {
Reddit.defaultShare(user.getOriginalSize().getUrl(), main);
}
}
};
try {
if (ContentType.isGif(new URI(user.getOriginalSize().getUrl()))) {
holder.body.setVisibility(View.VISIBLE);
holder.body.setSingleLine(false);
holder.body.setTextHtml(holder.text.getText() + main.getString(R.string.submission_tap_gif).toUpperCase()); //got rid of the \n thing, because it didnt parse and it was already a new line so...
holder.body.setOnClickListener(onGifImageClickListener);
}
} catch (URISyntaxException e) {
e.printStackTrace();
}
holder.itemView.setOnClickListener(onGifImageClickListener);
} else if (holder2 instanceof SpacerViewHolder) {
holder2.itemView.findViewById(R.id.height).setLayoutParams(new LinearLayout.LayoutParams(holder2.itemView.getWidth(), paddingBottom ? height : main.findViewById(R.id.toolbar).getHeight()));
}
}
public static void setTextWithLinks(String s, SpoilerRobotoTextView text) {
String[] parts = s.split("\\s+");
StringBuilder b = new StringBuilder();
for (String item : parts)
try {
URL url = new URL(item);
b.append(" <a href=\"").append(url).append("\">").append(url).append("</a>");
} catch (MalformedURLException e) {
b.append(" ").append(item);
}
text.setTextHtml(b.toString(), "no sub");
}
@Override
public int getItemCount() {
return users == null ? 0 : users.size() + 1;
}
public class SpacerViewHolder extends RecyclerView.ViewHolder {
public SpacerViewHolder(View itemView) {
super(itemView);
}
}
public static class AlbumViewHolder extends RecyclerView.ViewHolder {
final SpoilerRobotoTextView text;
final SpoilerRobotoTextView body;
final ImageView image;
public AlbumViewHolder(View itemView) {
super(itemView);
text = (SpoilerRobotoTextView) itemView.findViewById(R.id.imagetitle);
body = (SpoilerRobotoTextView) itemView.findViewById(R.id.imageCaption);
image = (ImageView) itemView.findViewById(R.id.image);
}
}
}