package com.gk.reports;
import android.app.Activity;
import android.app.LoaderManager;
import android.content.Context;
import android.content.CursorLoader;
import android.content.Intent;
import android.content.Loader;
import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.SimpleCursorAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import com.gk.datacontrol.DBClass;
import com.gk.simpleworkoutjournal.R;
public class ReportConfigurator extends Activity implements LoaderManager.LoaderCallbacks<Cursor> {
final String APP_NAME = "SWJournal";
private static final boolean DEBUG_FLAG = false;
DBClass dbmediator;
SimpleCursorAdapter exChooserAdapter;
Spinner wPointChooser;
Spinner rPointChooser;
@Override
protected void onCreate(Bundle savedInstanceState) {
if (DEBUG_FLAG) Log.v(APP_NAME, "onCreate :: creating ReportConfigurator");
super.onCreate(savedInstanceState);
setContentView(R.layout.report_configurator);
Spinner periodChooser = (Spinner) findViewById( R.id.periodChooser );
ArrayAdapter<CharSequence> periodAdapter = ArrayAdapter.createFromResource( this, R.array.periods, R.layout.period_chooser_spinner);
periodAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
periodChooser.setAdapter(periodAdapter);
wPointChooser = (Spinner) findViewById( R.id.weightPointChooser );
ArrayAdapter<CharSequence> wPointAdapter= ArrayAdapter.createFromResource( this, R.array.points_w, R.layout.period_chooser_spinner);
wPointAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
wPointChooser.setAdapter(wPointAdapter);
wPointChooser.setEnabled(false);
rPointChooser = (Spinner) findViewById( R.id.repsPointChooser );
ArrayAdapter<CharSequence> rPointAdapter= ArrayAdapter.createFromResource( this, R.array.points_r, R.layout.period_chooser_spinner);
rPointAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
rPointChooser.setAdapter(rPointAdapter);
rPointChooser.setEnabled(false);
Spinner exChooser = (Spinner) findViewById( R.id.exerciseChooser );
String[] from = new String[] { DBClass.KEY_ID };
int[] to = new int[] { R.id.periodChooserItem };
dbmediator = new DBClass(this);
exChooserAdapter = new SimpleCursorAdapter(this, R.layout.exercise_chooser_spinner, null, from, to, 0);
exChooserAdapter.setDropDownViewResource( R.layout.exercise_chooser_spinner);
exChooser.setAdapter(exChooserAdapter);
getLoaderManager().initLoader(0, null, this);
}
@Override
public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
return new MyCursorLoader(this, dbmediator);
}
@Override
public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
exChooserAdapter.swapCursor(cursor);
}
@Override
public void onLoaderReset(Loader<Cursor> cursorLoader) {
}
public void onChbClick(View v) {
if (DEBUG_FLAG) Log.v(APP_NAME, "onChbClick :: started");
Spinner targetSpinner;
TextView targetLabel;
boolean checked = ((CheckBox) v).isChecked();
switch ( v.getId() )
{
case R.id.show_weight_checkbox:
targetSpinner = wPointChooser;
targetLabel = (TextView) findViewById( R.id.weights_per_date_label);
break;
case R.id.show_rep_checkbox:
targetSpinner = rPointChooser;
targetLabel = (TextView) findViewById( R.id.reps_per_date_label);
break;
default:
Log.e(APP_NAME, "onChbClick :: unknown source ID");
return;
}
targetSpinner.setEnabled( checked );
targetLabel.setEnabled( checked );
}
int getPeriodInMonths()
{
if (DEBUG_FLAG) Log.v(APP_NAME, "getPeriodInMonths :: started");
int months;
switch ( ( (Spinner) findViewById(R.id.periodChooser)).getSelectedItemPosition() )
{
case 0:
months = 1;
break;
case 1:
months = 3;
break;
case 2:
months = 6;
break;
case 3:
months = 12;
break;
case 4:
months = 24;
break;
default:
Log.e(APP_NAME, "createReport :: unknown period");
return -1;
}
return months;
}
int getWeightPointType()
{
if (DEBUG_FLAG) Log.v(APP_NAME, "getWeightPointType :: started");
if ( ((CheckBox) findViewById(R.id.show_weight_checkbox) ).isChecked() )
{
return ((Spinner) findViewById(R.id.weightPointChooser)).getSelectedItemPosition();
}
else
{
return -1;
}
}
int getRepsPointType()
{
if (DEBUG_FLAG) Log.v(APP_NAME, "getRepsPointType :: started");
if ( ((CheckBox) findViewById(R.id.show_rep_checkbox) ).isChecked() )
{
return ((Spinner) findViewById(R.id.repsPointChooser)).getSelectedItemPosition();
}
else
{
return -1;
}
}
void createReport()
{
if (DEBUG_FLAG) Log.v(APP_NAME, "createReport :: started");
Cursor selectedExCs = (Cursor) ((Spinner) findViewById(R.id.exerciseChooser)).getSelectedItem();
String exName;
if ( selectedExCs == null ) {
Toast.makeText(this, R.string.no_ex_selected,Toast.LENGTH_SHORT).show();
return;
} else {
exName = selectedExCs.getString(selectedExCs.getColumnIndex(DBClass.KEY_ID));
}
int months = getPeriodInMonths();
int weightType = getWeightPointType();
int repsType = getRepsPointType();
if ( weightType < 0 && repsType < 0)
{
//error
Log.e(APP_NAME, "createReport :: no reps and weight selected. Must select at least one.");
Toast.makeText(this, R.string.need_include_reps_or_weights,Toast.LENGTH_SHORT).show();
return;
}
Intent reportConfigurator = new Intent( this, ExerciseReportContainer.class );
reportConfigurator.putExtra( "exName" , exName );
reportConfigurator.putExtra( "months" , months );
reportConfigurator.putExtra( "weightType", weightType );
reportConfigurator.putExtra( "repsType" , repsType );
startActivityForResult(reportConfigurator, 0);
}
public void onBtnClick( View view) {
if (DEBUG_FLAG) Log.v(APP_NAME, "onBtnClick :: started");
switch ( view.getId() )
{
case R.id.gen_rep_btn:
createReport();
break;
case R.id.cancel_report:
finish();
break;
default:
Log.e(APP_NAME, "onBtnClick :: unknown source ID");
}
}
static class MyCursorLoader extends CursorLoader {
DBClass db;
public MyCursorLoader(Context context, DBClass db) {
super(context);
this.db = db;
}
@Override
public Cursor loadInBackground() {
return db.fetchExerciseNames( "" );
}
}
}