package me.ccrama.redditslide.Adapters;
/**
* Created by ccrama on 3/22/2015.
*/
import android.app.Activity;
import android.graphics.Typeface;
import android.support.v4.content.res.ResourcesCompat;
import android.support.v7.widget.RecyclerView;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.style.ForegroundColorSpan;
import android.text.style.RelativeSizeSpan;
import android.text.style.StyleSpan;
import android.text.style.TypefaceSpan;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import net.dean.jraw.models.ModAction;
import me.ccrama.redditslide.Authentication;
import me.ccrama.redditslide.OpenRedditLink;
import me.ccrama.redditslide.R;
import me.ccrama.redditslide.SettingValues;
import me.ccrama.redditslide.SpoilerRobotoTextView;
import me.ccrama.redditslide.TimeUtils;
import me.ccrama.redditslide.Views.RoundedBackgroundSpan;
import me.ccrama.redditslide.Visuals.Palette;
public class ModLogAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
implements BaseAdapter {
private final int SPACER = 6;
public static final int MESSAGE = 2;
public final Activity mContext;
private final RecyclerView listView;
public ModLogPosts dataSet;
public ModLogAdapter(Activity mContext, ModLogPosts dataSet, RecyclerView listView) {
this.mContext = mContext;
this.listView = listView;
this.dataSet = dataSet;
}
@Override
public void setError(Boolean b) {
listView.setAdapter(new ErrorAdapter());
}
@Override
public void undoSetError() {
listView.setAdapter(this);
}
@Override
public int getItemViewType(int position) {
if (position == 0 && !dataSet.posts.isEmpty()) {
return SPACER;
} else if (!dataSet.posts.isEmpty()) {
position -= 1;
}
return MESSAGE;
}
public class SpacerViewHolder extends RecyclerView.ViewHolder {
public SpacerViewHolder(View itemView) {
super(itemView);
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
if (i == SPACER) {
View v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.spacer, viewGroup, false);
return new SpacerViewHolder(v);
} else {
View v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.mod_action, viewGroup, false);
return new ModLogViewHolder(v);
}
}
public static class ModLogViewHolder extends RecyclerView.ViewHolder {
SpoilerRobotoTextView body;
ImageView icon;
public ModLogViewHolder(View itemView) {
super(itemView);
body = (SpoilerRobotoTextView) itemView.findViewById(R.id.body);
icon = (ImageView) itemView.findViewById(R.id.action);
}
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder firstHold, final int pos) {
int i = pos != 0 ? pos - 1 : pos;
if (firstHold instanceof ModLogViewHolder) {
ModLogViewHolder holder = (ModLogViewHolder) firstHold;
final ModAction a = dataSet.posts.get(i);
SpannableStringBuilder b = new SpannableStringBuilder();
SpannableStringBuilder titleString = new SpannableStringBuilder();
String spacer = mContext.getString(R.string.submission_properties_seperator);
String timeAgo = TimeUtils.getTimeAgo(a.getCreated().getTime(), mContext);
String time = ((timeAgo == null || timeAgo.isEmpty()) ? "just now"
: timeAgo); //some users were crashing here
titleString.append(time);
titleString.append(spacer);
if (a.getSubreddit() != null) {
String subname = a.getSubreddit();
SpannableStringBuilder subreddit = new SpannableStringBuilder("/r/" + subname);
if ((SettingValues.colorSubName
&& Palette.getColor(subname) != Palette.getDefaultColor())) {
subreddit.setSpan(new ForegroundColorSpan(Palette.getColor(subname)), 0,
subreddit.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
subreddit.setSpan(new StyleSpan(Typeface.BOLD), 0, subreddit.length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
titleString.append(subreddit);
}
b.append(titleString);
b.append(spacer);
SpannableStringBuilder author = new SpannableStringBuilder(a.getModerator());
final int authorcolor = Palette.getFontColorUser(a.getModerator());
author.setSpan(new TypefaceSpan("sans-serif-condensed"), 0, author.length(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
author.setSpan(new StyleSpan(Typeface.BOLD), 0, author.length(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
if (Authentication.name != null && a.getModerator()
.toLowerCase()
.equals(Authentication.name.toLowerCase())) {
author.replace(0, author.length(), " " + a.getModerator() + " ");
author.setSpan(new RoundedBackgroundSpan(mContext, R.color.white,
R.color.md_deep_orange_300, false), 0, author.length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
} else if (authorcolor != 0) {
author.setSpan(new ForegroundColorSpan(authorcolor), 0, author.length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
author.setSpan(new RelativeSizeSpan(0.8f), 0, author.length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
b.append(author);
b.append("\n\n");
b.append(a.getAction() + " " + (!a.getDataNode().get("target_title").isNull() ?
"\""
+ a.getDataNode().get("target_title").asText()
+ "\"" : "") + (a.getTargetAuthor() != null ? " by /u/"
+ a.getTargetAuthor() : ""));
if (a.getTargetPermalink() != null) {
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
OpenRedditLink.openUrl(mContext, a.getTargetPermalink(), true);
}
});
}
if (a.getDetails() != null) {
SpannableStringBuilder description =
new SpannableStringBuilder(" (" + a.getDetails() + ")");
description.setSpan(new StyleSpan(Typeface.ITALIC), 0, description.length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
description.setSpan(new RelativeSizeSpan(0.8f), 0, description.length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
b.append(description);
}
holder.body.setText(b);
String action = a.getAction();
if (action.equals("removelink")) {
holder.icon.setImageDrawable(
ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.close,
null));
} else if (action.equals("approvecomment")) {
holder.icon.setImageDrawable(
ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.support,
null));
} else if (action.equals("removecomment")) {
holder.icon.setImageDrawable(ResourcesCompat.getDrawable(mContext.getResources(),
R.drawable.commentchange, null));
} else if (action.equals("approvelink")) {
holder.icon.setImageDrawable(
ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.support,
null));
} else if (action.equals("editflair")) {
holder.icon.setImageDrawable(
ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.flair,
null));
} else if (action.equals("distinguish")) {
holder.icon.setImageDrawable(ResourcesCompat.getDrawable(mContext.getResources(),
R.drawable.iconstarfilled, null));
} else if (action.equals("sticky")) {
holder.icon.setImageDrawable(
ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.lock,
null));
} else if (action.equals("unsticky")) {
holder.icon.setImageDrawable(
ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.lock,
null));
} else if (action.equals("ignorereports")) {
holder.icon.setImageDrawable(
ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.ignore,
null));
} else if (action.equals("unignorereports")) {
holder.icon.setImageDrawable(
ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.unignore,
null));
} else if (action.equals("marknsfw")) {
holder.icon.setImageDrawable(
ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.hide,
null));
} else if (action.equals("unmarknsfw")) {
holder.icon.setImageDrawable(
ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.hide,
null));
} else {
holder.icon.setImageDrawable(
ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.mod, null));
}
}
if (firstHold instanceof SpacerViewHolder) {
firstHold.itemView.findViewById(R.id.height)
.setLayoutParams(new LinearLayout.LayoutParams(firstHold.itemView.getWidth(),
mContext.findViewById(R.id.header).getHeight()));
}
}
@Override
public int getItemCount() {
if (dataSet.posts == null || dataSet.posts.isEmpty()) {
return 0;
} else {
return dataSet.posts.size() + 1;
}
}
}