Update the TripStatisticsUpdater after change the activity type of current recording calorie. Using the activity type but calorie value to determine whether show activity set button or not.

This commit is contained in:
youtaol
2013-10-10 19:19:02 +08:00
parent e228918cca
commit 651034e2a8
8 changed files with 100 additions and 20 deletions
@@ -18,7 +18,6 @@ package com.google.android.apps.mytracks.util;
import com.google.android.apps.mytracks.content.MyTracksProviderUtils;
import com.google.android.apps.mytracks.content.MyTracksProviderUtils.LocationIterator;
import com.google.android.apps.mytracks.content.Track;
import com.google.android.apps.mytracks.stats.TripStatistics;
import com.google.android.maps.mytracks.R;
import com.google.common.annotations.VisibleForTesting;
@@ -220,7 +219,7 @@ public class CalorieUtils {
public static double getCalorie(Location start, Location stop, double grade, int weight,
ActivityType activityType) {
if (activityType == ActivityType.INVALID) {
return TripStatistics.CALORIE_UNDEFINED;
return 0.0;
}
return ActivityType.CYCLING == activityType ? calculateCalorieCycling(start, stop, grade,
weight) : calculateCalorieFoot(start, stop, grade, weight);
@@ -259,7 +258,7 @@ public class CalorieUtils {
* @param category the category of track
* @return activityType the activity type of track.
*/
private static ActivityType getActivityType(Context context, String category) {
public static ActivityType getActivityType(Context context, String category) {
ActivityType activityType = ActivityType.INVALID;
if (category.equals(context.getString(R.string.activity_type_walking))
|| category.equals(context.getString(R.string.activity_type_running))) {
@@ -282,7 +281,7 @@ public class CalorieUtils {
public static double calculateTrackCalorie(Context context, Track track, String category) {
ActivityType activityType = getActivityType(context, category);
if (activityType == ActivityType.INVALID) {
return TripStatistics.CALORIE_UNDEFINED;
return 0.0;
}
double calorie = 0.0;
@@ -303,4 +302,5 @@ public class CalorieUtils {
}
return calorie;
}
}
@@ -17,7 +17,9 @@
package com.google.android.apps.mytracks.util;
import com.google.android.apps.mytracks.TrackEditActivity;
import com.google.android.apps.mytracks.content.MyTracksProviderUtils;
import com.google.android.apps.mytracks.stats.TripStatistics;
import com.google.android.apps.mytracks.util.CalorieUtils.ActivityType;
import com.google.android.maps.mytracks.R;
import android.app.Activity;
@@ -186,6 +188,9 @@ public class StatsUtils {
View calorieContainer = activity.findViewById(R.id.stats_calorie_container);
if (showCalorie) {
if(trackId == PreferencesUtils.RECORDING_TRACK_ID_DEFAULT) {
return;
}
calorieHorizontalLine.setVisibility(View.VISIBLE);
calorieContainer.setVisibility(View.VISIBLE);
double calories = Double.NaN;
@@ -353,8 +358,11 @@ public class StatsUtils {
String calorieString;
View view = activity.findViewById(itemId);
Button button = (Button) activity.findViewById(R.id.stats_calorie_setup);
MyTracksProviderUtils providerUtils = MyTracksProviderUtils.Factory.get(activity);
ActivityType activityType = CalorieUtils.getActivityType(activity,
providerUtils.getTrack(trackId).getCategory());
// Current activity type is not supported.
if (calorie == TripStatistics.CALORIE_UNDEFINED) {
if (activityType == ActivityType.INVALID) {
button.setVisibility(View.VISIBLE);
view.setVisibility(View.GONE);
@@ -193,4 +193,24 @@ public class TrackRecordingServiceConnectionUtils {
Toast.makeText(context, R.string.marker_add_error, Toast.LENGTH_LONG).show();
return -1L;
}
/**
* Updates the calorie of current recording track.
*/
public static void updateCalorie(TrackRecordingServiceConnection trackRecordingServiceConnection,
double calorie) {
ITrackRecordingService trackRecordingService = trackRecordingServiceConnection
.getServiceIfBound();
if (trackRecordingService == null) {
Log.d(TAG, "Unable to update calorie, no track recording service");
} else {
try {
trackRecordingService.updateCalorie(calorie);
} catch (RemoteException e) {
Log.e(TAG, "Unable to update calorie", e);
} catch (IllegalStateException e) {
Log.e(TAG, "Unable to update calorie.", e);
}
}
}
}