package com.khmelenko.lab.varis.fragment;
import android.app.Activity;
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.BranchesListAdapter;
import com.khmelenko.lab.varis.adapter.OnListItemListener;
import com.khmelenko.lab.varis.network.response.Branch;
import com.khmelenko.lab.varis.network.response.Branches;
import butterknife.Bind;
import butterknife.ButterKnife;
/**
* Fragment with repository branches
*
* @author Dmytro Khmelenko
*/
public class BranchesFragment extends Fragment implements OnListItemListener {
@Bind(R.id.list_refreshable_swipe_view)
SwipeRefreshLayout mSwipeRefreshLayout;
@Bind(R.id.list_refreshable_recycler_view)
RecyclerView mBranchesRecyclerView;
@Bind(R.id.progressbar)
ProgressBar mProgressBar;
@Bind(R.id.empty_text)
TextView mEmptyText;
private BranchesListAdapter mBranchesListAdapter;
private Branches mBranches;
private BranchesListener mListener;
/**
* Creates new instance of the fragment
*
* @return Fragment instance
*/
public static BranchesFragment newInstance() {
BranchesFragment fragment = new BranchesFragment();
return fragment;
}
public BranchesFragment() {
// Required empty public constructor
}
@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);
mBranchesRecyclerView.setHasFixedSize(true);
LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
mBranchesRecyclerView.setLayoutManager(layoutManager);
mBranchesListAdapter = new BranchesListAdapter(mBranches, this);
mBranchesRecyclerView.setAdapter(mBranchesListAdapter);
mSwipeRefreshLayout.setColorSchemeResources(R.color.swipe_refresh_progress);
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
mListener.onReloadBranches();
}
});
mProgressBar.setVisibility(View.VISIBLE);
return view;
}
/**
* Checks whether data existing or not
*/
private void checkIfEmpty() {
mEmptyText.setText(R.string.repo_details_branches_empty);
if (mBranches == null || mBranches.getBranches().isEmpty()) {
mEmptyText.setVisibility(View.VISIBLE);
} else {
mEmptyText.setVisibility(View.GONE);
}
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mListener = (BranchesListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement BranchesListener");
}
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
@Override
public void onItemSelected(int position) {
if (mListener != null) {
Branch branch = mBranches.getBranches().get(position);
mListener.onBranchSelected(branch.getId());
}
}
/**
* Sets branches data
*
* @param branches Branches
*/
public void setBranches(Branches branches) {
mSwipeRefreshLayout.setRefreshing(false);
mProgressBar.setVisibility(View.GONE);
if (branches != null) {
mBranches = branches;
mBranchesListAdapter.setBranches(mBranches);
mBranchesListAdapter.notifyDataSetChanged();
}
checkIfEmpty();
}
/**
* Interface for communication with this fragment
*/
public interface BranchesListener {
/**
* Handles selection of the branch
*
* @param buildId Id of the last build in branch
*/
void onBranchSelected(long buildId);
/**
* Handles request for reloading branches data
*/
void onReloadBranches();
}
}