forked from upstream-mirrors/OpenTracks
Merge pull request #197 from OpenTracksApp/rgmf-issue#151
Merge issue#151.
This commit is contained in:
@@ -75,6 +75,7 @@ public class ChartFragment extends Fragment implements TrackDataListener {
|
||||
|
||||
//TODO Why is this needed?
|
||||
private int recordingDistanceInterval;
|
||||
private String category = "";
|
||||
|
||||
// Modes of operation
|
||||
private boolean chartByDistance;
|
||||
@@ -100,7 +101,7 @@ public class ChartFragment extends Fragment implements TrackDataListener {
|
||||
}
|
||||
}
|
||||
if (PreferencesUtils.isKey(getContext(), R.string.stats_rate_key, key)) {
|
||||
boolean reportSpeed = PreferencesUtils.isReportSpeed(getContext());
|
||||
boolean reportSpeed = PreferencesUtils.isReportSpeed(getContext(), category);
|
||||
if (reportSpeed != chartView.getReportSpeed()) {
|
||||
chartView.setReportSpeed(reportSpeed);
|
||||
chartView.applyReportSpeed();
|
||||
@@ -193,8 +194,16 @@ public class ChartFragment extends Fragment implements TrackDataListener {
|
||||
if (isResumed()) {
|
||||
if (track == null || track.getTrackStatistics() == null) {
|
||||
startTime = -1L;
|
||||
category = "";
|
||||
return;
|
||||
}
|
||||
|
||||
category = track.getCategory();
|
||||
boolean reportSpeed = PreferencesUtils.isReportSpeed(getContext(), category);
|
||||
if (reportSpeed != chartView.getReportSpeed()) {
|
||||
chartView.setReportSpeed(reportSpeed);
|
||||
chartView.applyReportSpeed();
|
||||
}
|
||||
startTime = track.getTrackStatistics().getStartTime_ms();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -510,7 +510,7 @@ public class StatsFragment extends Fragment implements TrackDataListener {
|
||||
String trackIconValue = TrackIconUtils.getIconValue(getContext(), category);
|
||||
|
||||
boolean metricUnits = PreferencesUtils.isMetricUnits(getContext());
|
||||
boolean reportSpeed = PreferencesUtils.isReportSpeed(getContext());
|
||||
boolean reportSpeed = PreferencesUtils.isReportSpeed(getContext(), category);
|
||||
boolean isRecording = isSelectedTrackRecording();
|
||||
|
||||
// Set total distance
|
||||
@@ -603,7 +603,7 @@ public class StatsFragment extends Fragment implements TrackDataListener {
|
||||
|
||||
private void setLocationValues() {
|
||||
boolean metricUnits = PreferencesUtils.isMetricUnits(getContext());
|
||||
boolean reportSpeed = PreferencesUtils.isReportSpeed(getContext());
|
||||
boolean reportSpeed = PreferencesUtils.isReportSpeed(getContext(), category);
|
||||
boolean isRecording = isSelectedTrackRecording();
|
||||
|
||||
// Set speed/pace
|
||||
@@ -643,7 +643,7 @@ public class StatsFragment extends Fragment implements TrackDataListener {
|
||||
|
||||
private void setSpeed(double speed) {
|
||||
boolean metricUnits = PreferencesUtils.isMetricUnits(getContext());
|
||||
boolean reportSpeed = PreferencesUtils.isReportSpeed(getContext());
|
||||
boolean reportSpeed = PreferencesUtils.isReportSpeed(getContext(), category);
|
||||
|
||||
speedLabel.setText(reportSpeed ? R.string.stats_speed : R.string.stats_pace);
|
||||
|
||||
|
||||
+10
-1
@@ -25,9 +25,13 @@ import android.util.Log;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import de.dennisguse.opentracks.R;
|
||||
import de.dennisguse.opentracks.content.data.Track;
|
||||
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
||||
import de.dennisguse.opentracks.services.TrackRecordingService;
|
||||
import de.dennisguse.opentracks.stats.TrackStatistics;
|
||||
import de.dennisguse.opentracks.util.AnnouncementUtils;
|
||||
import de.dennisguse.opentracks.util.PreferencesUtils;
|
||||
|
||||
/**
|
||||
* This class will periodically announce the user's {@link TrackStatistics}.
|
||||
@@ -47,6 +51,8 @@ public class AnnouncementPeriodicTask implements PeriodicTask {
|
||||
|
||||
private final AudioManager audioManager;
|
||||
|
||||
private ContentProviderUtils contentProviderUtils;
|
||||
|
||||
private final AudioManager.OnAudioFocusChangeListener audioFocusChangeListener = new AudioManager.OnAudioFocusChangeListener() {
|
||||
@Override
|
||||
public void onAudioFocusChange(int focusChange) {
|
||||
@@ -103,6 +109,7 @@ public class AnnouncementPeriodicTask implements PeriodicTask {
|
||||
AnnouncementPeriodicTask(Context context) {
|
||||
this.context = context;
|
||||
audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
|
||||
contentProviderUtils = new ContentProviderUtils(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -157,7 +164,9 @@ public class AnnouncementPeriodicTask implements PeriodicTask {
|
||||
Log.i(TAG, "Speech is not allowed at this time.");
|
||||
return;
|
||||
}
|
||||
String announcement = AnnouncementUtils.getAnnouncement(context, trackStatistics);
|
||||
Track track = contentProviderUtils.getTrack(PreferencesUtils.getRecordingTrackId(context));
|
||||
String category = track != null ? track.getCategory() : "";
|
||||
String announcement = AnnouncementUtils.getAnnouncement(context, trackStatistics, category);
|
||||
speakAnnouncement(announcement);
|
||||
}
|
||||
|
||||
|
||||
@@ -9,9 +9,9 @@ public class AnnouncementUtils {
|
||||
|
||||
private AnnouncementUtils() {}
|
||||
|
||||
public static String getAnnouncement(Context context, TrackStatistics trackStatistics) {
|
||||
public static String getAnnouncement(Context context, TrackStatistics trackStatistics, String category) {
|
||||
boolean metricUnits = PreferencesUtils.isMetricUnits(context);
|
||||
boolean reportSpeed = PreferencesUtils.isReportSpeed(context);
|
||||
boolean reportSpeed = PreferencesUtils.isReportSpeed(context, category);
|
||||
double distance = trackStatistics.getTotalDistance() * UnitConversions.M_TO_KM;
|
||||
double distancePerTime = trackStatistics.getAverageMovingSpeed() * UnitConversions.MS_TO_KMH;
|
||||
|
||||
|
||||
@@ -197,9 +197,14 @@ public class PreferencesUtils {
|
||||
return STATS_UNIT.equals(getString(context, R.string.stats_units_key, STATS_UNIT));
|
||||
}
|
||||
|
||||
public static boolean isReportSpeed(Context context) {
|
||||
public static boolean isReportSpeed(Context context, String category) {
|
||||
final String STATS_RATE_DEFAULT = context.getString(R.string.stats_rate_default);
|
||||
return STATS_RATE_DEFAULT.equals(getString(context, R.string.stats_rate_key, STATS_RATE_DEFAULT));
|
||||
String currentStatsRate = getString(context, R.string.stats_rate_key, STATS_RATE_DEFAULT);
|
||||
if (currentStatsRate.equals(getString(context, R.string.stats_rate_default_speed_or_pace, STATS_RATE_DEFAULT))) {
|
||||
return TrackIconUtils.isSpeedIcon(context, category);
|
||||
}
|
||||
|
||||
return currentStatsRate.equals(context.getString(R.string.stats_rate_speed));
|
||||
}
|
||||
|
||||
public static boolean isRecordingTrackPaused(Context context) {
|
||||
|
||||
@@ -59,6 +59,21 @@ public class TrackIconUtils {
|
||||
private static final int[] SNOW_BOARDING_LIST = new int[]{R.string.activity_type_snow_boarding};
|
||||
private static final int[] WALK_LIST = new int[]{R.string.activity_type_hiking, R.string.activity_type_off_trail_hiking, R.string.activity_type_speed_walking, R.string.activity_type_trail_hiking, R.string.activity_type_walking};
|
||||
|
||||
// List of icons whose sports associated use speed (in km/h or mi/h).
|
||||
private static final int[] SPEED_ICON = {
|
||||
// Unknown.
|
||||
R.string.activity_type_unknown,
|
||||
// All airplane categories.
|
||||
R.string.activity_type_airplane, R.string.activity_type_commercial_airplane, R.string.activity_type_rc_airplane,
|
||||
// All bike categories.
|
||||
R.string.activity_type_biking, R.string.activity_type_cycling, R.string.activity_type_dirt_bike, R.string.activity_type_motor_bike, R.string.activity_type_mountain_biking, R.string.activity_type_road_biking, R.string.activity_type_track_cycling,
|
||||
// All boat categories.
|
||||
R.string.activity_type_boat, R.string.activity_type_ferry, R.string.activity_type_motor_boating, R.string.activity_type_rc_boat,
|
||||
// All drive categories.
|
||||
R.string.activity_type_atv, R.string.activity_type_driving, R.string.activity_type_driving_bus, R.string.activity_type_driving_car,
|
||||
|
||||
};
|
||||
|
||||
private static final LinkedHashMap<String, Pair<Integer, Integer>> MAP = new LinkedHashMap<>();
|
||||
|
||||
static {
|
||||
@@ -192,4 +207,14 @@ public class TrackIconUtils {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if category is in the SPEED_ICON array. Otherwise returns false.
|
||||
*
|
||||
* @param context the context.
|
||||
* @param category the name of the category, activity type.
|
||||
*/
|
||||
public static boolean isSpeedIcon(Context context, String category) {
|
||||
return inList(context, category, SPEED_ICON);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,6 +93,8 @@
|
||||
<string name="description_sensor_cadence">Cadencia (rpm)</string>
|
||||
<string name="description_sensor_heart_rate">Frecuencia cardíaca (lpm)</string>
|
||||
<string name="description_sensor_power">Potencia (W)</string>
|
||||
<string name="description_default_speed_or_pace_imperial">Por Defecto</string>
|
||||
<string name="description_default_speed_or_pace_metric">Por Defecto</string>
|
||||
<string name="description_speed_imperial">Velocidad (mi/h)</string>
|
||||
<string name="description_speed_metric">Velocidad (km/h)</string>
|
||||
<string name="description_time">Tiempo</string>
|
||||
|
||||
@@ -93,6 +93,8 @@
|
||||
<string name="description_sensor_cadence">Cadència (rpm)</string>
|
||||
<string name="description_sensor_heart_rate">Freqüència cardíaca (bpm)</string>
|
||||
<string name="description_sensor_power">Potència (W)</string>
|
||||
<string name="description_default_speed_or_pace_imperial">Per Defecte</string>
|
||||
<string name="description_default_speed_or_pace_metric">Per Defecte</string>
|
||||
<string name="description_speed_imperial">Velocitat (mi/h)</string>
|
||||
<string name="description_speed_metric">Velocitat (km/h)</string>
|
||||
<string name="description_time">Temps</string>
|
||||
|
||||
@@ -170,19 +170,23 @@
|
||||
</string-array>
|
||||
|
||||
<string name="stats_rate_key" translatable="false">statsRate</string>
|
||||
<string name="stats_rate_default" translatable="false">@string/stats_rate_speed</string>
|
||||
<string name="stats_rate_default" translatable="false">@string/stats_rate_default_speed_or_pace</string>
|
||||
<string-array name="stats_rate_imperial_options">
|
||||
<item>@string/description_default_speed_or_pace_imperial</item>
|
||||
<item>@string/description_speed_imperial</item>
|
||||
<item>@string/description_pace_imperial</item>
|
||||
</string-array>
|
||||
<string-array name="stats_rate_metric_options">
|
||||
<item>@string/description_default_speed_or_pace_metric</item>
|
||||
<item>@string/description_speed_metric</item>
|
||||
<item>@string/description_pace_metric</item>
|
||||
</string-array>
|
||||
|
||||
<string name="stats_rate_default_speed_or_pace" translatable="false">DEFAULT</string>
|
||||
<string name="stats_rate_pace" translatable="false">PACE</string>
|
||||
<string name="stats_rate_speed" translatable="false">SPEED</string>
|
||||
<string-array name="stats_rate_values">
|
||||
<item>@string/stats_rate_default_speed_or_pace</item>
|
||||
<item>@string/stats_rate_speed</item>
|
||||
<item>@string/stats_rate_pace</item>
|
||||
</string-array>
|
||||
|
||||
@@ -191,6 +191,8 @@ limitations under the License.
|
||||
<string name="description_sensor_cadence">Cadence (rpm)</string>
|
||||
<string name="description_sensor_heart_rate">Heart rate (bpm)</string>
|
||||
<string name="description_sensor_power">Power (W)</string>
|
||||
<string name="description_default_speed_or_pace_imperial">By Default</string>
|
||||
<string name="description_default_speed_or_pace_metric">By Default</string>
|
||||
<string name="description_speed_imperial">Speed (mi/hr)</string>
|
||||
<string name="description_speed_metric">Speed (km/hr)</string>
|
||||
<string name="description_time">Time</string>
|
||||
|
||||
Reference in New Issue
Block a user