package org.petabytes.awesomeblogs.feeds; import android.content.Context; import android.content.res.Configuration; import android.graphics.Typeface; import android.support.annotation.NonNull; import android.text.Html; import android.view.View; import android.widget.TextView; import com.annimon.stream.IntStream; import org.jsoup.Jsoup; import org.petabytes.api.source.local.Entry; import org.petabytes.awesomeblogs.AwesomeBlogsApp; import org.petabytes.awesomeblogs.R; import org.petabytes.awesomeblogs.summary.SummaryActivity; import org.petabytes.awesomeblogs.util.Views; import org.petabytes.coordinator.Coordinator; import java.util.List; import java.util.concurrent.TimeUnit; import butterknife.BindViews; import butterknife.OnClick; import rx.Observable; import rx.schedulers.Schedulers; class EntryRowsCoordinator extends Coordinator { @BindViews({R.id.title_1, R.id.title_2, R.id.title_3, R.id.title_4}) TextView[] titleViews; @BindViews({R.id.author_1, R.id.author_2, R.id.author_3, R.id.author_4}) TextView[] authorViews; @BindViews({R.id.summary_1, R.id.summary_2, R.id.summary_3, R.id.summary_4}) TextView[] summaryViews; private final Context context; private final List<Entry> entries; EntryRowsCoordinator(@NonNull Context context, @NonNull List<Entry> entries) { this.context = context; this.entries = entries; } @Override public void attach(@NonNull View view) { super.attach(view); boolean isPortrait = context.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE; Views.setVisibleOrGone(view.findViewById(R.id.row_4), isPortrait); IntStream.range(0, entries.size()) .forEach(i -> { titleViews[i].setTypeface(titleViews[i].getTypeface(), Typeface.BOLD); bind(AwesomeBlogsApp.get().api() .isRead(entries.get(i).getLink()), isRead -> { titleViews[i].setText(Html.fromHtml(entries.get(i).getTitle())); titleViews[i].setTextColor(context.getResources().getColor(isRead ? R.color.grey : R.color.black)); authorViews[i].setText(Entry.getFormattedAuthorUpdatedAt(entries.get(i))); }); bind(Observable.just(entries.get(i).getSummary()) .map(summary -> Jsoup.parse(summary).text()) .map(summary -> summary.substring(0, Math.min(200, summary.length()))) .delay(50, TimeUnit.MILLISECONDS) .subscribeOn(Schedulers.io()), summary -> { summaryViews[i].setText(summary.trim()); summaryViews[i].setMaxLines((isPortrait ? 4 : 3) - titleViews[i].getLineCount()); }); }); } @OnClick({R.id.row_1, R.id.row_2, R.id.row_3, R.id.row_4}) void onRowClick(View view) { Entry entry; switch (view.getId()) { case R.id.row_1: entry = entries.get(0); break; case R.id.row_2: entry = entries.get(1); break; case R.id.row_3: entry = entries.get(2); break; case R.id.row_4: entry = entries.get(3); break; default: throw new RuntimeException("Invalid id"); } context.startActivity(SummaryActivity.intent(context, entry.getLink())); } }