package com.gh4a.fragment; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.content.Loader; import android.view.View; import com.gh4a.R; import com.gh4a.activities.FileViewerActivity; import com.gh4a.activities.PullRequestDiffViewerActivity; import com.gh4a.loader.LoaderCallbacks; import com.gh4a.loader.LoaderResult; import com.gh4a.loader.PullRequestCommentsLoader; import com.gh4a.loader.PullRequestFilesLoader; import com.gh4a.utils.FileUtils; import org.eclipse.egit.github.core.CommitComment; import org.eclipse.egit.github.core.CommitFile; import java.util.List; public class PullRequestFilesFragment extends CommitFragment { public static PullRequestFilesFragment newInstance(String repoOwner, String repoName, int pullRequestNumber, String headSha) { PullRequestFilesFragment f = new PullRequestFilesFragment(); Bundle args = new Bundle(); args.putString("owner", repoOwner); args.putString("repo", repoName); args.putInt("number", pullRequestNumber); args.putString("head", headSha); f.setArguments(args); return f; } private static final int REQUEST_DIFF_VIEWER = 1000; public interface CommentUpdateListener { void onCommentsUpdated(); } private String mRepoOwner; private String mRepoName; private int mPullRequestNumber; private String mHeadSha; private List<CommitFile> mFiles; private List<CommitComment> mComments; private final LoaderCallbacks<List<CommitFile>> mPullRequestFilesCallback = new LoaderCallbacks<List<CommitFile>>(this) { @Override protected Loader<LoaderResult<List<CommitFile>>> onCreateLoader() { return new PullRequestFilesLoader(getActivity(), mRepoOwner, mRepoName, mPullRequestNumber); } @Override protected void onResultReady(List<CommitFile> result) { mFiles = result; populateViewIfReady(); } }; private final LoaderCallbacks<List<CommitComment>> mPullRequestCommentsCallback = new LoaderCallbacks<List<CommitComment>>(this) { @Override protected Loader<LoaderResult<List<CommitComment>>> onCreateLoader() { return new PullRequestCommentsLoader(getActivity(), mRepoOwner, mRepoName, mPullRequestNumber); } @Override protected void onResultReady(List<CommitComment> result) { mComments = result; populateViewIfReady(); } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final Bundle args = getArguments(); mRepoOwner = args.getString("owner"); mRepoName = args.getString("repo"); mPullRequestNumber = args.getInt("number"); mHeadSha = args.getString("head"); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mContentView.findViewById(R.id.iv_gravatar).setVisibility(View.GONE); mContentView.findViewById(R.id.tv_author).setVisibility(View.GONE); mContentView.findViewById(R.id.tv_timestamp).setVisibility(View.GONE); mContentView.findViewById(R.id.tv_title).setVisibility(View.GONE); mContentView.findViewById(R.id.iv_commit_gravatar).setVisibility(View.GONE); mContentView.findViewById(R.id.tv_commit_extra).setVisibility(View.GONE); mContentView.findViewById(R.id.tv_message).setVisibility(View.GONE); } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); setContentShown(false); getLoaderManager().initLoader(0, null, mPullRequestFilesCallback); getLoaderManager().initLoader(1, null, mPullRequestCommentsCallback); } @Override public void onRefresh() { mFiles = null; mComments = null; hideContentAndRestartLoaders(0, 1); } @Override protected void populateViewIfReady() { if (mComments != null && mFiles != null) { fillStats(mFiles, mComments); setContentShown(true); } } @Override protected void handleFileClick(CommitFile file) { final Intent intent; if (FileUtils.isImage(file.getFilename())) { intent = FileViewerActivity.makeIntent(getActivity(), mRepoOwner, mRepoName, mHeadSha, file.getFilename()); } else { intent = PullRequestDiffViewerActivity.makeIntent(getActivity(), mRepoOwner, mRepoName, mPullRequestNumber, mHeadSha, file.getFilename(), file.getPatch(), mComments, -1, -1, -1, false); } startActivityForResult(intent, REQUEST_DIFF_VIEWER); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_DIFF_VIEWER) { if (resultCode == Activity.RESULT_OK) { // reload comments getLoaderManager().getLoader(1).onContentChanged(); if (getActivity() instanceof CommentUpdateListener) { CommentUpdateListener l = (CommentUpdateListener) getActivity(); l.onCommentsUpdated(); } } } else { super.onActivityResult(requestCode, resultCode, data); } } }