package com.mechinn.android.ouralliance.fragment;
import com.mechinn.android.ouralliance.Prefs;
import com.mechinn.android.ouralliance.R;
import com.mechinn.android.ouralliance.adapter.MatchTeamAdapter;
import com.mechinn.android.ouralliance.data.MatchScouting;
import com.mechinn.android.ouralliance.event.SelectMatchTeamEvent;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.ListFragment;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;
import java.util.List;
import de.greenrobot.event.EventBus;
import timber.log.Timber;
public abstract class MatchTeamListFragment extends ListFragment {
public static final String TAG = "MatchTeamListFragment";
public static final String MATCH_ARG = "match";
private static final String STATE_ACTIVATED_POSITION = "activated_position";
private Prefs prefs;
private MatchTeamAdapter<? extends MatchScouting> adapter;
private long matchId;
public MatchTeamAdapter<? extends MatchScouting> getAdapter() {
return adapter;
}
public void setAdapter(MatchTeamAdapter<? extends MatchScouting> adapter) {
this.adapter = adapter;
}
public long getMatchId() {
return matchId;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((ActionBarActivity)this.getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
prefs = new Prefs(this.getActivity());
matchId = this.getArguments().getLong(MATCH_ARG);
Timber.d("match: " + matchId);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setRetainInstance(true);
registerForContextMenu(getListView());
getListView().setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectItem(position);
}
});
getListView().setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
DialogFragment dialog = new MatchTeamDialogFragment();
Bundle dialogArgs = new Bundle();
dialogArgs.putLong(MatchTeamDialogFragment.MATCHSCOUTING_ARG, adapter.getItem(position).getId());
dialogArgs.putLong(MatchTeamDialogFragment.TEAM_ARG, adapter.getItem(position).getTeamScouting().getTeam().getId());
dialog.setArguments(dialogArgs);
dialog.show(getFragmentManager(), adapter.getItem(position).getTeamScouting().toString());
return true;
}
});
if (savedInstanceState != null && savedInstanceState.containsKey(STATE_ACTIVATED_POSITION)) {
int position = savedInstanceState.getInt(STATE_ACTIVATED_POSITION);
if (position == ListView.INVALID_POSITION) {
getListView().setItemChecked(this.getSelectedItemPosition(), false);
} else {
getListView().setItemChecked(position, true);
this.setSelection(position);
}
}
adapter = new MatchTeamAdapter(getActivity(), null);
setListAdapter(adapter);
}
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
// this.getActivity().registerForContextMenu(this.getListView());
// When in two-pane layout, set the listview to highlight the selected list item
// (We do this during onStart because at the point the listview is available.)
if (getFragmentManager().findFragmentById(R.id.list_fragment) != null) {
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
}
}
@Override
public void onResume() {
super.onResume();
if(0!=getMatchId()) {
load();
}
}
public abstract void load();
@Override
public void onStop() {
EventBus.getDefault().unregister(this);
super.onStop();
}
private void selectItem(int position) {
// Notify the parent activity of selected item
EventBus.getDefault().post(new SelectMatchTeamEvent(adapter.getItem(position).getId()));
// Set the item as checked to be highlighted when in two-pane layout
getListView().setItemChecked(position, true);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
try {
if (this.getSelectedItemPosition() != ListView.INVALID_POSITION) {
// Serialize and persist the activated item position.
outState.putInt(STATE_ACTIVATED_POSITION, this.getSelectedItemPosition());
}
} catch (IllegalStateException e) {
Timber.d(e,e.getMessage());
}
}
}