package org.techbooster.app.abc.fragments;
import android.os.Bundle;
import android.widget.ListView;
import com.android.volley.VolleyError;
import com.devspark.progressfragment.ProgressFragment;
import com.google.gson.reflect.TypeToken;
import com.sys1yagi.indirectinjector.IndirectInjector;
import org.techbooster.app.abc.R;
import org.techbooster.app.abc.loaders.ConferenceSessionLoader;
import org.techbooster.app.abc.models.ConferenceSession;
import org.techbooster.app.abc.tools.GsonParcer;
import org.techbooster.app.abc.views.ConferenceSessionAdapter;
import java.util.Collection;
import java.util.List;
import butterknife.ButterKnife;
import butterknife.InjectView;
public class ConferenceSessionFragment extends ProgressFragment {
private final static String STATE_KEY_TRACK_SESSION = "track_session";
private final static String ARGS_URL = "url";
public static ConferenceSessionFragment newInstance(String url) {
ConferenceSessionFragment fragment = new ConferenceSessionFragment();
Bundle args = new Bundle();
args.putString(ARGS_URL, url);
fragment.setArguments(args);
return fragment;
}
private String mUrl;
@InjectView(R.id.list_view)
ListView mListView;
private List<ConferenceSession> mConferenceSessions;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mUrl = getArguments().getString(ARGS_URL);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
IndirectInjector.inject(getActivity(), this);
setContentView(R.layout.fragment_conference_session);
ButterKnife.inject(this, getView());
setContentShown(false);
if (savedInstanceState != null) {
if (savedInstanceState.containsKey(STATE_KEY_TRACK_SESSION)) {
mConferenceSessions =
GsonParcer.unwrap(savedInstanceState.getParcelable(STATE_KEY_TRACK_SESSION),
new TypeToken<Collection<ConferenceSession>>() {
}
);
}
}
if (mConferenceSessions == null || mConferenceSessions.isEmpty()) {
new ConferenceSessionLoader(getActivity()).getSessions(mUrl,
new ConferenceSessionLoader.Listener() {
@Override
public void onSuccess(List<ConferenceSession> sessions) {
if (isResumed() && getActivity() != null) {
mConferenceSessions = sessions;
setupSessionList(sessions);
}
}
@Override
public void onError(VolleyError error) {
setEmptyText(getString(R.string.network_error));
}
}
);
}
else{
setupSessionList(mConferenceSessions);
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (mConferenceSessions != null && !mConferenceSessions.isEmpty()) {
outState.putParcelable(STATE_KEY_TRACK_SESSION, GsonParcer.wrap(mConferenceSessions));
}
}
private void setupSessionList(List<ConferenceSession> sessions) {
final ConferenceSessionAdapter adapter = new ConferenceSessionAdapter(getActivity());
for (ConferenceSession session : sessions) {
adapter.add(session);
}
mListView.setAdapter(adapter);
setContentShown(true);
}
}