package com.khmelenko.lab.varis.fragment; import android.content.Context; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ProgressBar; import android.widget.TextView; import com.khmelenko.lab.varis.R; import com.khmelenko.lab.varis.adapter.OnListItemListener; import com.khmelenko.lab.varis.adapter.PullRequestsListAdapter; import com.khmelenko.lab.varis.network.response.RequestData; import com.khmelenko.lab.varis.network.response.Requests; import java.util.ArrayList; import java.util.List; import butterknife.Bind; import butterknife.ButterKnife; /** * Repository pull requests * * @author Dmytro Khmelenko */ public class PullRequestsFragment extends Fragment implements OnListItemListener { @Bind(R.id.list_refreshable_swipe_view) SwipeRefreshLayout mSwipeRefreshLayout; @Bind(R.id.list_refreshable_recycler_view) RecyclerView mPullRequestsRecyclerView; @Bind(R.id.progressbar) ProgressBar mProgressBar; @Bind(R.id.empty_text) TextView mEmptyText; private PullRequestsListAdapter mPullRequestsListAdapter; private Requests mRequests; private List<RequestData> mPullRequests; private PullRequestsListener mListener; public PullRequestsFragment() { // Required empty public constructor } /** * Creates new instance of the fragment * * @return Fragment instance */ public static PullRequestsFragment newInstance() { return new PullRequestsFragment(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_list_refreshable, container, false); ButterKnife.bind(this, view); mPullRequestsRecyclerView.setHasFixedSize(true); LinearLayoutManager layoutManager = new LinearLayoutManager(getContext()); mPullRequestsRecyclerView.setLayoutManager(layoutManager); mPullRequestsListAdapter = new PullRequestsListAdapter(mRequests, this); mPullRequestsRecyclerView.setAdapter(mPullRequestsListAdapter); mSwipeRefreshLayout.setColorSchemeResources(R.color.swipe_refresh_progress); mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { mListener.onReloadPullRequests(); } }); mProgressBar.setVisibility(View.VISIBLE); return view; } /** * Fetches pull requests */ private List<RequestData> fetchPullRequests(Requests requests) { List<RequestData> pullRequest = new ArrayList<>(); if (mRequests != null) { for (RequestData request : requests.getRequests()) { if (request.isPullRequest() && !pullRequest.contains(request)) { pullRequest.add(request); } } } return pullRequest; } /** * Checks whether data existing or not */ private void checkIfEmpty() { mEmptyText.setText(R.string.repo_details_pull_request_empty); if (mPullRequests == null || mPullRequests.isEmpty()) { mEmptyText.setVisibility(View.VISIBLE); } else { mEmptyText.setVisibility(View.GONE); } } @Override public void onAttach(Context context) { super.onAttach(context); try { mListener = (PullRequestsListener) context; } catch (ClassCastException e) { throw new ClassCastException(context.toString() + " must implement PullRequestsListener"); } } @Override public void onDetach() { super.onDetach(); mListener = null; } @Override public void onItemSelected(int position) { if (mListener != null) { RequestData requestData = mPullRequests.get(position); mListener.onPullRequestSelected(requestData.getBuildId()); } } /** * Sets pull request data * * @param request Pull requests */ public void setPullRequests(Requests request) { mSwipeRefreshLayout.setRefreshing(false); mProgressBar.setVisibility(View.GONE); if (request != null) { mRequests = request; mPullRequests = fetchPullRequests(mRequests); mPullRequestsListAdapter.setRequests(mRequests, mPullRequests); mPullRequestsListAdapter.notifyDataSetChanged(); } checkIfEmpty(); } /** * Interface for communication with this fragment */ public interface PullRequestsListener { /** * Handles selection of the pull request * * @param buildId ID of the build of the pull request */ void onPullRequestSelected(long buildId); /** * Handles reload action for pull request */ void onReloadPullRequests(); } }