package in.vesely.eclub.yodaqa.view;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.EFragment;
import org.androidannotations.annotations.ViewById;
import java.util.ArrayList;
import java.util.List;
import in.vesely.eclub.yodaqa.R;
import in.vesely.eclub.yodaqa.adapters.AnswersExpandableRecyclerViewAdapter;
import in.vesely.eclub.yodaqa.restclient.YodaAnswer;
import in.vesely.eclub.yodaqa.restclient.YodaAnswersResponse;
import in.vesely.eclub.yodaqa.view.utils.SimpleDividerItemDecoration;
@EFragment(R.layout.fragment_answers)
public class AnswersFragment extends ResponseFragment {
@ViewById(R.id.recyclerView)
protected RecyclerView recyclerView;
protected List<YodaAnswer> answers;
private AnswersExpandableRecyclerViewAdapter adapter;
private Bundle savedData;
public AnswersFragment() {
}
@Override
protected void responseChanged(YodaAnswersResponse response) {
if (response == null) {
adapter.clearAll();
return;
}
adapter.setGlobalData(response.isFinished());
List<YodaAnswer> newAnswers = response.getAllAnswers();
int i;
for (i = 0; i < answers.size() && i < newAnswers.size(); i++) {
answers.set(i, newAnswers.get(i));
adapter.notifyParentItemChanged(i);
}
if (i < answers.size())/*newAnswers has less items*/ {
for (int j = answers.size() - 1; j >= i; j--) {
answers.remove(j);
adapter.notifyParentItemRemoved(j);
}
} else if (i < newAnswers.size())/*newAnswers has more items*/ {
for (int j = i; j < newAnswers.size(); j++) {
answers.add(newAnswers.get(j));
adapter.notifyParentItemInserted(j);
}
}
if (savedData != null) {
adapter.onRestoreInstanceState(savedData);
savedData = null;
}
}
@AfterViews
protected void afterViews() {
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false));
recyclerView.addItemDecoration(new SimpleDividerItemDecoration(getActivity()));
answers = new ArrayList<>();
adapter = new AnswersExpandableRecyclerViewAdapter(answers);
recyclerView.setAdapter(adapter);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
savedData = savedInstanceState;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (!refreshLayout.isRefreshing()) {
adapter.onSaveInstanceState(outState);
}
}
}