@@ -54,7 +54,7 @@
import de .j4velin .pedometer .util .Logger ;
import de .j4velin .pedometer .util .Util ;
public class FragmentOverviewController extends Fragment implements SensorEventListener {
public class FragmentOverviewController extends Fragment {
private TextView stepsView , totalView , averageView ;
@@ -92,7 +92,6 @@ public View onCreateView(final LayoutInflater inflater, final ViewGroup containe
@ Override
public void onClick (final View view ) {
showSteps = !showSteps ;
stepsDistanceChanged ();
}
});
@@ -102,80 +101,6 @@ public void onClick(final View view) {
return v ;
}
@ Override
public void onResume () {
super .onResume ();
getActivity ().getActionBar ().setDisplayHomeAsUpEnabled (false );
DatabaseManager db = DatabaseManager .getInstance (getActivity ());
if (BuildConfig .DEBUG ) db .logState ();
// read todays offset
todayOffset = db .getSteps (Util .getToday ());
SharedPreferences prefs =
getActivity ().getSharedPreferences ("pedometer" , Context .MODE_MULTI_PROCESS );
goal = prefs .getInt ("goal" , FragmentSettings .DEFAULT_GOAL );
since_boot = db .getCurrentSteps (); // do not use the value from the sharedPreferences
int pauseDifference = since_boot - prefs .getInt ("pauseCount" , since_boot );
// register a sensorlistener to live update the UI if a step is taken
if (!prefs .contains ("pauseCount" )) {
SensorManager sm =
(SensorManager ) getActivity ().getSystemService (Context .SENSOR_SERVICE );
sm .registerListener (this , sm .getDefaultSensor (Sensor .TYPE_STEP_COUNTER ),
SensorManager .SENSOR_DELAY_UI , 0 );
}
since_boot -= pauseDifference ;
total_start = db .getTotalWithoutToday ();
total_days = db .getDays ();
db .close ();
stepsDistanceChanged ();
}
/**
* Call this method if the Fragment should update the "steps"/"km" text in
* the pie graph as well as the pie and the bars graphs.
*/
private void stepsDistanceChanged () {
if (showSteps ) {
((TextView ) getView ().findViewById (R .id .unit )).setText (getString (R .string .steps ));
} else {
String unit =
getActivity ().getSharedPreferences ("pedometer" , Context .MODE_MULTI_PROCESS )
.getString ("stepsize_unit" , FragmentSettings .DEFAULT_STEP_UNIT );
if (unit .equals ("cm" )) {
unit = "km" ;
} else {
unit = "mi" ;
}
((TextView ) getView ().findViewById (R .id .unit )).setText (unit );
}
updatePie ();
updateBars ();
}
@ Override
public void onPause () {
super .onPause ();
try {
SensorManager sm =
(SensorManager ) getActivity ().getSystemService (Context .SENSOR_SERVICE );
sm .unregisterListener (this );
} catch (Exception e ) {
e .printStackTrace ();
}
DatabaseManager db = DatabaseManager .getInstance (getActivity ());
db .saveCurrentSteps (since_boot );
db .close ();
}
@ Override
public void onCreateOptionsMenu (final Menu menu , final MenuInflater inflater ) {
inflater .inflate (R .menu .main , menu );
@@ -196,60 +121,16 @@ public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
@ Override
public boolean onOptionsItemSelected (final MenuItem item ) {
switch (item .getItemId ()) {
case R .id .action_split_count :
DialogSplit .getDialog (getActivity (),
total_start + Math .max (todayOffset + since_boot , 0 )).show ();
return true ;
case R .id .action_pause :
SensorManager sm =
(SensorManager ) getActivity ().getSystemService (Context .SENSOR_SERVICE );
Drawable d ;
if (getActivity ().getSharedPreferences ("pedometer" , Context .MODE_MULTI_PROCESS )
.contains ("pauseCount" )) { // currently paused -> now resumed
sm .registerListener (this , sm .getDefaultSensor (Sensor .TYPE_STEP_COUNTER ),
SensorManager .SENSOR_DELAY_UI , 0 );
item .setTitle (R .string .pause );
d = getResources ().getDrawable (R .drawable .ic_pause );
} else {
sm .unregisterListener (this );
item .setTitle (R .string .resume );
d = getResources ().getDrawable (R .drawable .ic_resume );
}
d .setColorFilter (Color .WHITE , PorterDuff .Mode .SRC_ATOP );
item .setIcon (d );
getActivity ().startService (new Intent (getActivity (), PedometerManager .class )
.putExtra ("action" , PedometerManager .ACTION_PAUSE ));
return true ;
default :
return ((ActivityMain ) getActivity ()).optionsItemSelected (item );
}
}
@ Override
public void onAccuracyChanged (final Sensor sensor , int accuracy ) {
// won't happen
}
@ Override
public void onSensorChanged (final SensorEvent event ) {
if (BuildConfig .DEBUG )
Logger .log ("UI - sensorChanged | todayOffset: " + todayOffset + " since boot: " +
event .values [0 ]);
if (event .values [0 ] > Integer .MAX_VALUE || event .values [0 ] == 0 ) {
return ;
}
if (todayOffset == Integer .MIN_VALUE ) {
// no values for today
// we dont know when the reboot was, so set todays steps to 0 by
// initializing them with -STEPS_SINCE_BOOT
todayOffset = -(int ) event .values [0 ];
DatabaseManager db = DatabaseManager .getInstance (getActivity ());
db .insertNewDay (Util .getToday (), (int ) event .values [0 ]);
db .close ();
}
since_boot = (int ) event .values [0 ];
updatePie ();
}
/**
* Updates the pie graph to show todays steps/distance as well as the
@@ -300,65 +181,4 @@ private void updatePie() {
}
}
/**
* Updates the bar graph to show the steps/distance of the last week. Should
* be called when switching from step count to distance.
*/
private void updateBars () {
DatabaseManager db = DatabaseManager .getInstance (getActivity ());
Calendar yesterday = Calendar .getInstance ();
yesterday .setTimeInMillis (Util .getToday ());
yesterday .add (Calendar .DAY_OF_YEAR , -1 );
BarChart barChart = (BarChart ) getView ().findViewById (R .id .bargraph );
if (barChart .getData ().size () > 0 ) barChart .clearChart ();
SimpleDateFormat df = new SimpleDateFormat ("E" , Locale .getDefault ());
yesterday .add (Calendar .DAY_OF_YEAR , -6 );
int steps ;
float distance , stepsize = FragmentSettings .DEFAULT_STEP_SIZE ;
boolean stepsize_cm = true ;
if (!showSteps ) {
// load some more settings if distance is needed
SharedPreferences prefs =
getActivity ().getSharedPreferences ("pedometer" , Context .MODE_MULTI_PROCESS );
stepsize = prefs .getFloat ("stepsize_value" , FragmentSettings .DEFAULT_STEP_SIZE );
stepsize_cm = prefs .getString ("stepsize_unit" , FragmentSettings .DEFAULT_STEP_UNIT )
.equals ("cm" );
}
barChart .setShowDecimal (!showSteps ); // show decimal in distance view only
BarModel bm ;
for (int i = 0 ; i < 7 ; i ++) {
steps = db .getSteps (yesterday .getTimeInMillis ());
if (steps > 0 ) {
bm = new BarModel (df .format (new Date (yesterday .getTimeInMillis ())), 0 ,
steps > goal ? Color .parseColor ("#99CC00" ) : Color .parseColor ("#0099cc" ));
if (showSteps ) {
bm .setValue (steps );
} else {
distance = steps * stepsize ;
if (stepsize_cm ) {
distance /= 100000 ;
} else {
distance /= 5280 ;
}
distance = Math .round (distance * 1000 ) / 1000f ; // 3 decimals
bm .setValue (distance );
}
barChart .addBar (bm );
}
yesterday .add (Calendar .DAY_OF_YEAR , 1 );
}
if (barChart .getData ().size () > 0 ) {
barChart .setOnClickListener (new OnClickListener () {
@ Override
public void onClick (final View v ) {
DialogStatistics .getDialog (getActivity (), since_boot ).show ();
}
});
barChart .startAnimation ();
} else {
barChart .setVisibility (View .GONE );
}
db .close ();
}
}