package org.wikipedia.feed.news;
import android.graphics.Typeface;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.text.Spanned;
import android.text.style.StyleSpan;
import org.wikipedia.dataclient.WikiSite;
import org.wikipedia.feed.model.Card;
import org.wikipedia.feed.model.CardType;
import org.wikipedia.feed.model.FeedPageSummary;
import org.wikipedia.richtext.RichTextUtil;
import org.wikipedia.util.StringUtil;
import org.wikipedia.util.log.L;
import java.util.List;
public class NewsItemCard extends Card {
@NonNull private NewsItem newsItem;
@NonNull private WikiSite wiki;
NewsItemCard(@NonNull NewsItem item, @NonNull WikiSite wiki) {
this.newsItem = item;
this.wiki = wiki;
}
@NonNull public NewsItem item() {
return newsItem;
}
@NonNull public WikiSite wikiSite() {
return wiki;
}
@Nullable @Override public Uri image() {
return newsItem.thumb();
}
@NonNull @Override public CardType type() {
return CardType.NEWS_ITEM;
}
@NonNull public CharSequence text() {
return removeImageCaption(StringUtil.fromHtml(newsItem.story()));
}
@NonNull public List<FeedPageSummary> links() {
return newsItem.links();
}
/* Remove the in-Wikitext thumbnail caption, which will almost certainly not apply here */
@NonNull private CharSequence removeImageCaption(@NonNull Spanned text) {
Object[] spans = RichTextUtil.getSpans(text, 0, text.length());
for (Object span : spans) {
if (span instanceof StyleSpan && ((StyleSpan) span).getStyle() == Typeface.ITALIC) {
int start = text.getSpanStart(span);
int end = text.getSpanEnd(span);
if (text.charAt(start) == '(' && text.charAt(end - 1) == ')') {
L.v("Removing spanned text: " + text.subSequence(start, end));
return RichTextUtil.remove(text, start, end);
}
}
}
return text;
}
}