private void displayTags(List<Tag> tags_) { List<Tag> tags = inMemoryCacheService.enhanceTags(feedItem.getId(), tags_); this.tags = ImmutableList.copyOf(tags); // show tags now infoLineView.setTags(toMap(tags, tag -> Vote.NEUTRAL)); // and update tags with votes later. voteService .getTagVotes(tags) .filter(votes -> !votes.isEmpty()) .onErrorResumeNext(Observable.<Map<Long, Vote>>empty()) .compose(bindToLifecycle()) .subscribe( votes -> infoLineView.setTags( toMap(tags, tag -> firstNonNull(votes.get(tag.getId()), Vote.NEUTRAL)))); hideProgressIfLoop(tags); }
@SuppressWarnings("CodeBlock2Expr") private void initializeInfoLine() { // get the vote from the service Observable<Vote> cachedVote = voteService.getVote(feedItem).compose(bindToLifecycle()); //noinspection ConstantConditions infoLineView = ButterKnife.findById(getView(), R.id.infoview); if (infoLineView == null) { infoLineView = new InfoLineView(getActivity()); adapter.addAdapter(SingleViewAdapter.ofView(infoLineView)); } boolean isSelfPost = userService .getName() .transform(name -> name.equalsIgnoreCase(feedItem.getUser())) .or(false); // display the feed item in the view infoLineView.setFeedItem(feedItem, isSelfPost, cachedVote); infoLineView.setOnDetailClickedListener(this); // register the vote listener infoLineView.setOnVoteListener( vote -> { Runnable action = () -> { showPostVoteAnimation(vote); voteService .vote(feedItem, vote) .compose(bindToLifecycle()) .subscribe(Actions.empty(), defaultOnError()); }; Runnable retry = () -> infoLineView.getVoteView().setVote(vote); return doIfAuthorizedHelper.run(action, retry); }); // and a vote listener vor voting tags. infoLineView.setTagVoteListener( (tag, vote) -> { Runnable action = () -> { voteService .vote(tag, vote) .compose(bindToLifecycle()) .subscribe(Actions.empty(), defaultOnError()); }; return doIfAuthorizedHelper.run(action, action); }); infoLineView.setOnAddTagClickedListener( () -> { NewTagDialogFragment dialog = new NewTagDialogFragment(); dialog.show(getChildFragmentManager(), null); }); }