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.BuildListAdapter;
import com.khmelenko.lab.varis.adapter.OnListItemListener;
import com.khmelenko.lab.varis.network.response.Build;
import com.khmelenko.lab.varis.network.response.BuildHistory;
import butterknife.Bind;
import butterknife.ButterKnife;
/**
* Repository Build history
*
* @author Dmytro Khmelenko
*/
public class BuildHistoryFragment extends Fragment implements OnListItemListener {
@Bind(R.id.list_refreshable_swipe_view)
SwipeRefreshLayout mSwipeRefreshLayout;
@Bind(R.id.list_refreshable_recycler_view)
RecyclerView mBuildHistoryRecyclerView;
@Bind(R.id.progressbar)
ProgressBar mProgressBar;
@Bind(R.id.empty_text)
TextView mEmptyText;
private BuildListAdapter mBuildListAdapter;
private BuildHistory mBuildHistory;
private BuildHistoryListener mListener;
/**
* Creates new instance of the fragment
*
* @return Fragment instance
*/
public static BuildHistoryFragment newInstance() {
BuildHistoryFragment fragment = new BuildHistoryFragment();
return fragment;
}
public BuildHistoryFragment() {
// 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);
mBuildHistoryRecyclerView.setHasFixedSize(true);
LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
mBuildHistoryRecyclerView.setLayoutManager(layoutManager);
mBuildListAdapter = new BuildListAdapter(mBuildHistory, this);
mBuildHistoryRecyclerView.setAdapter(mBuildListAdapter);
mSwipeRefreshLayout.setColorSchemeResources(R.color.swipe_refresh_progress);
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
mListener.onReloadBuildHistory();
}
});
mProgressBar.setVisibility(View.VISIBLE);
return view;
}
/**
* Checks whether data existing or not
*/
private void checkIfEmpty() {
mEmptyText.setText(R.string.repo_details_builds_empty);
if (mBuildHistory == null || mBuildHistory.getBuilds().isEmpty()) {
mEmptyText.setVisibility(View.VISIBLE);
} else {
mEmptyText.setVisibility(View.GONE);
}
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mListener = (BuildHistoryListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement BuildHistoryListener");
}
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
@Override
public void onItemSelected(int position) {
if (mListener != null) {
Build build = mBuildHistory.getBuilds().get(position);
mListener.onBuildSelected(build.getId());
}
}
/**
* Sets build history
*
* @param buildHistory Build history
*/
public void setBuildHistory(BuildHistory buildHistory) {
mSwipeRefreshLayout.setRefreshing(false);
mProgressBar.setVisibility(View.GONE);
if (buildHistory != null) {
mBuildHistory = buildHistory;
mBuildListAdapter.setBuildHistory(mBuildHistory);
mBuildListAdapter.notifyDataSetChanged();
}
checkIfEmpty();
}
/**
* Interface for communication with this fragment
*/
public interface BuildHistoryListener {
/**
* Handles build selection
*
* @param buildNumber Build number
*/
void onBuildSelected(long buildNumber);
/**
* Handles reload data request
*/
void onReloadBuildHistory();
}
}