package com.mechinn.android.ouralliance.fragment; import com.mechinn.android.ouralliance.Prefs; import com.mechinn.android.ouralliance.R; import com.mechinn.android.ouralliance.data.MatchScouting; import com.mechinn.android.ouralliance.data.EventTeam; import com.mechinn.android.ouralliance.data.frc2014.MatchScouting2014; import com.mechinn.android.ouralliance.gson.OurAllianceGson; import com.mechinn.android.ouralliance.gson.frc2015.ExportJsonEventMatchScouting2015; import com.mechinn.android.ouralliance.gson.frc2015.ExportJsonEventTeamScouting2015; import com.mechinn.android.ouralliance.gson.frc2015.ImportJsonEventMatchScouting2015; import com.mechinn.android.ouralliance.gson.frc2015.ImportJsonEventTeamScouting2015; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v7.app.ActionBarActivity; import android.util.Log; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.TextView; import de.greenrobot.event.EventBus; import de.greenrobot.event.util.AsyncExecutor; import timber.log.Timber; public abstract class MatchDetailFragment extends Fragment { public static final String TAG = "MatchDetailFragment"; public static final String SCOUTING_ARG = "team"; public static final int OPEN_DOCUMENT_REQUEST_CODE = 5002; public static final int CREATE_DOCUMENT_CSV_REQUEST_CODE = 5003; public static final int CREATE_DOCUMENT_JSON_REQUEST_CODE = 5004; private Prefs prefs; private long scoutingId; private View rootView; private TextView notes; private LinearLayout season; private MatchScouting match; public View getRootView() { return rootView; } public void setRootView(View rootView) { this.rootView = rootView; } public long getScoutingId() { return scoutingId; } public void setScoutingId(long scoutingId) { this.scoutingId = scoutingId; } public LinearLayout getSeason() { return season; } public void setSeason(LinearLayout season) { this.season = season; } public MatchScouting getMatch() { return match; } public void setMatch(MatchScouting match) { this.match = match; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); prefs = new Prefs(this.getActivity()); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); setRetainInstance(true); // If activity recreated (such as from screen rotate), restore // the previous article selection set by onSaveInstanceState(). // This is primarily necessary when in the two-pane layout. if (savedInstanceState != null) { scoutingId = savedInstanceState.getLong(EventTeam.TAG, 0); Timber.d( "team: "+ scoutingId); } // OnClickListener teamButton = new OnClickListener() { // public void onClick(View v) { // Team team = (Team) v.getTag(); // Intent intent = new Intent(MatchDetailFragment.this.getActivity(), TeamScoutingActivity.class); // Bundle args = new Bundle(); // args.putString(TeamScoutingActivity.MATCHNAME_ARG, match.toString()); // args.putLong(TeamScoutingActivity.MATCH_ARG,match.getId()); // args.putLong(TeamScoutingActivity.TEAM_ARG,team.getId()); // intent.putExtras(args); // startActivity(intent); // } // }; rootView = inflater.inflate(R.layout.fragment_match_detail, container, false); notes = (TextView) rootView.findViewById(R.id.matchNotes); season = (LinearLayout) rootView.findViewById(R.id.season); return rootView; } @Override public void onStart() { super.onStart(); // During startup, check if there are arguments passed to the fragment. // onStart is a good place to do this because the layout has already been // applied to the fragment at this point so we can safely call the method // below that sets the article text. Bundle args = getArguments(); if (args != null) { scoutingId = getArguments().getLong(SCOUTING_ARG, 0); Timber.d( "team: " + scoutingId); } EventBus.getDefault().register(this); } @Override public void onResume() { super.onResume(); Timber.d( "team: " + getScoutingId()); loadMatchScouting(); } @Override public void onPause() { Timber.d("pausing"); if(null!=getMatch()) { Timber.d("saving "+getMatch()); updateMatch(); this.getMatch().asyncSave(); } super.onPause(); } @Override public void onStop() { EventBus.getDefault().unregister(this); super.onStop(); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putLong(SCOUTING_ARG, scoutingId); } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle item selection switch (item.getItemId()) { case R.id.backupMatchListScouting: switch(prefs.getYear()) { case 2015: final Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType(OurAllianceGson.TYPE); intent.putExtra(Intent.EXTRA_TITLE, "match.json"); startActivityForResult(intent, CREATE_DOCUMENT_JSON_REQUEST_CODE); break; } return true; case R.id.restoreMatchListScouting: switch(prefs.getYear()) { case 2015: final Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType(OurAllianceGson.TYPE); startActivityForResult(intent, OPEN_DOCUMENT_REQUEST_CODE); break; } return true; default: return super.onOptionsItemSelected(item); } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if(OPEN_DOCUMENT_REQUEST_CODE == requestCode && Activity.RESULT_OK == resultCode && null!=data) { final Uri uri = data.getData(); Timber.d("Uri: " + uri.toString()); AsyncExecutor.create().execute(new ImportJsonEventMatchScouting2015(this.getActivity(), uri)); } else if(CREATE_DOCUMENT_JSON_REQUEST_CODE == requestCode && Activity.RESULT_OK == resultCode && null!=data) { final Uri uri = data.getData(); Timber.d("Uri: " + uri.toString()); AsyncExecutor.create().execute(new ExportJsonEventMatchScouting2015(this.getActivity(), uri)); } super.onActivityResult(requestCode, resultCode, data); } public void setView() { ((ActionBarActivity)this.getActivity()).getSupportActionBar().setTitle(match.getTeamScouting().getTeam().toString()); notes.setText(match.getNotes()); } public void updateMatch() { match.setNotes(notes.getText().toString()); } public abstract void loadMatchScouting(); }