package com.alorma.github.ui.fragment.commit; import android.os.Bundle; import android.view.LayoutInflater; import com.alorma.github.R; import com.alorma.github.sdk.bean.dto.response.CommitComment; import com.alorma.github.sdk.bean.info.CommitInfo; import com.alorma.github.sdk.services.client.GithubListClient; import com.alorma.github.sdk.services.commit.GetCommitCommentsClient; import com.alorma.github.ui.adapter.commit.CommitCommentAdapter; import com.alorma.github.ui.fragment.base.LoadingListFragment; import com.alorma.gitskarios.core.Pair; import com.mikepenz.octicons_typeface_library.Octicons; import java.util.List; import rx.Observer; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Func1; import rx.schedulers.Schedulers; public class CommitCommentsFragment extends LoadingListFragment<CommitCommentAdapter> implements Observer<List<CommitComment>> { private static final String INFO = "INFO"; private CommitInfo info; public static CommitCommentsFragment newInstance(CommitInfo info) { CommitCommentsFragment f = new CommitCommentsFragment(); Bundle b = new Bundle(); b.putParcelable(INFO, info); f.setArguments(b); return f; } @Override protected void executeRequest() { super.executeRequest(); if (info != null) { setAction(new GetCommitCommentsClient(info)); } } @Override protected int getLightTheme() { return R.style.AppTheme_Repository; } @Override protected int getDarkTheme() { return R.style.AppTheme_Dark_Repository; } @Override protected void executePaginatedRequest(int page) { super.executePaginatedRequest(page); if (info != null) { setAction(new GetCommitCommentsClient(info, page)); } } private void setAction(GithubListClient<List<CommitComment>> client) { client.observable() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .map(new Func1<Pair<List<CommitComment>, Integer>, List<CommitComment>>() { @Override public List<CommitComment> call(Pair<List<CommitComment>, Integer> listIntegerPair) { setPage(listIntegerPair.second); return listIntegerPair.first; } }) .subscribe(this); } @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(List<CommitComment> commitComments) { if (commitComments != null && commitComments.size() > 0) { hideEmpty(); if (getAdapter() != null) { getAdapter().addAll(commitComments); } else { CommitCommentAdapter commentsAdapter = new CommitCommentAdapter(LayoutInflater.from(getActivity()), info.repoInfo); setAdapter(commentsAdapter); } } else if (getAdapter() == null || getAdapter().getItemCount() == 0) { setEmpty(); } } @Override protected void loadArguments() { info = (CommitInfo) getArguments().getParcelable(INFO); } @Override protected Octicons.Icon getNoDataIcon() { return Octicons.Icon.oct_comment_discussion; } @Override protected int getNoDataText() { return R.string.no_commit_comments; } }