package com.monitorabrasil.participacidadao.views;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.CollapsingToolbarLayout;
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 com.monitorabrasil.participacidadao.R;
import com.monitorabrasil.participacidadao.actions.ActionsCreator;
import com.monitorabrasil.participacidadao.dispatcher.Dispatcher;
import com.monitorabrasil.participacidadao.stores.ProjetoStore;
import com.monitorabrasil.participacidadao.views.adapters.ProjetoAdapter;
import com.monitorabrasil.participacidadao.views.interfaces.RecyclerViewOnClickListenerHack;
import com.squareup.otto.Bus;
import com.squareup.otto.Subscribe;
/**
* A fragment representing a single Vereador detail screen.
* This fragment is either contained in a {@link VereadorListActivity}
* in two-pane mode (on tablets) or a {@link VereadorDetailActivity}
* on handsets.
*/
public class VereadorProjetosFragment extends Fragment implements RecyclerViewOnClickListenerHack {
public static final String ID_POLITICO = "idPolitico";
private Dispatcher dispatcher;
private ActionsCreator actionsCreator;
private ProjetoStore projetoStore;
private SwipeRefreshLayout mSwipeRefreshLayout;
private int previousTotal = 0;
private boolean loading = true;
private int visibleThreshold = 2;
int firstVisibleItem, visibleItemCount, totalItemCount;
private RecyclerView mRecyclerView;
private ProjetoAdapter mAdapter;
private String idPolitico;
public VereadorProjetosFragment() {
}
public static VereadorProjetosFragment newInstance( String idPolitico) {
VereadorProjetosFragment fragment = new VereadorProjetosFragment();
Bundle args = new Bundle();
args.putString(ID_POLITICO, idPolitico);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
idPolitico = getArguments().getString(ID_POLITICO);
}
Activity activity = this.getActivity();
CollapsingToolbarLayout appBarLayout = (CollapsingToolbarLayout) activity.findViewById(R.id.toolbar_layout);
// if (appBarLayout != null) {
// appBarLayout.setTitle(mItem.content);
// }
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.proposicoes_list, container, false);
initDependencies();
setupView(rootView);
actionsCreator.getAllProjetos(idPolitico, null, previousTotal);
return rootView;
}
private void initDependencies() {
dispatcher = Dispatcher.get(new Bus());
actionsCreator = ActionsCreator.get(dispatcher);
projetoStore = ProjetoStore.get(dispatcher);
}
private void setupView(View view) {
mSwipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.swipe);
//tableview
mRecyclerView = (RecyclerView) view.findViewById(R.id.proposicoes_list);
// use this setting to improve performance if you know that changes
// in content do not change the layout size of the RecyclerView
mRecyclerView.setHasFixedSize(true);
final LinearLayoutManager llm = new LinearLayoutManager(getContext());
llm.setOrientation(LinearLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(llm);
mAdapter = new ProjetoAdapter(actionsCreator);
mRecyclerView.setAdapter(mAdapter);
// mAdapter.setRecyclerViewOnClickListenerHack(getContext());
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
visibleItemCount = mRecyclerView.getChildCount();
totalItemCount = llm.getItemCount();
firstVisibleItem = llm.findFirstVisibleItemPosition();
if (loading) {
if (totalItemCount > previousTotal) {
loading = false;
previousTotal = totalItemCount;
}
}
if (!loading && (totalItemCount - visibleItemCount)
<= (firstVisibleItem + visibleThreshold)) {
//carregar mais projetos
actionsCreator.getAllProjetos(idPolitico, null, previousTotal);
loading = true;
}
}
});
}
private void updateUI() {
mAdapter.setItems(projetoStore.getProjetos());
mSwipeRefreshLayout.setRefreshing(false);
}
/**
* Atualiza a UI depois de uma action
* @param event
*/
@Subscribe
public void onTodoStoreChange(ProjetoStore.ProjetoStoreChangeEvent event) {
updateUI();
}
@Override
public void onClickListener(View view, int position) {
Intent intent = new Intent(getContext(), ProposicoesDetailActivity.class);
intent.putExtra(ProposicoesDetailFragment.ID_PROPOSICAO,projetoStore.getProjetos().get(position).getObjectId());
intent.putExtra(ProposicoesDetailFragment.NM_PROPOSICAO,projetoStore.getProjetos().get(position).getString("numero"));
startActivity(intent);
}
@Override
public void onResume() {
super.onResume();
dispatcher.register(this);
dispatcher.register(projetoStore);
}
@Override
public void onPause() {
super.onPause();
dispatcher.unregister(this);
dispatcher.unregister(projetoStore);
}
}