diff --git a/src/main/java/de/dennisguse/opentracks/fragments/ChartFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/ChartFragment.java index 4194f2b7e..4a54b3382 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/ChartFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/ChartFragment.java @@ -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(); } } diff --git a/src/main/java/de/dennisguse/opentracks/fragments/StatsFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/StatsFragment.java index 6d1110caa..4fd9d7fba 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/StatsFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/StatsFragment.java @@ -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); diff --git a/src/main/java/de/dennisguse/opentracks/services/tasks/AnnouncementPeriodicTask.java b/src/main/java/de/dennisguse/opentracks/services/tasks/AnnouncementPeriodicTask.java index 45a4e21bf..21b8476e5 100644 --- a/src/main/java/de/dennisguse/opentracks/services/tasks/AnnouncementPeriodicTask.java +++ b/src/main/java/de/dennisguse/opentracks/services/tasks/AnnouncementPeriodicTask.java @@ -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); } diff --git a/src/main/java/de/dennisguse/opentracks/util/AnnouncementUtils.java b/src/main/java/de/dennisguse/opentracks/util/AnnouncementUtils.java index 34f7cbe2e..dff5714d3 100644 --- a/src/main/java/de/dennisguse/opentracks/util/AnnouncementUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/AnnouncementUtils.java @@ -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; diff --git a/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java index 4f8c671ce..53548c027 100644 --- a/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java @@ -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) { diff --git a/src/main/java/de/dennisguse/opentracks/util/TrackIconUtils.java b/src/main/java/de/dennisguse/opentracks/util/TrackIconUtils.java index 650a74407..3af1a0f30 100644 --- a/src/main/java/de/dennisguse/opentracks/util/TrackIconUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/TrackIconUtils.java @@ -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> 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); + } } diff --git a/src/main/res/values-b+es+419/strings.xml b/src/main/res/values-b+es+419/strings.xml index 37041defc..f053d9c59 100644 --- a/src/main/res/values-b+es+419/strings.xml +++ b/src/main/res/values-b+es+419/strings.xml @@ -93,6 +93,8 @@ Cadencia (rpm) Frecuencia cardíaca (lpm) Potencia (W) + Por Defecto + Por Defecto Velocidad (mi/h) Velocidad (km/h) Tiempo diff --git a/src/main/res/values-ca/strings.xml b/src/main/res/values-ca/strings.xml index c3e4d7161..6db97a348 100644 --- a/src/main/res/values-ca/strings.xml +++ b/src/main/res/values-ca/strings.xml @@ -93,6 +93,8 @@ Cadència (rpm) Freqüència cardíaca (bpm) Potència (W) + Per Defecte + Per Defecte Velocitat (mi/h) Velocitat (km/h) Temps diff --git a/src/main/res/values/settings.xml b/src/main/res/values/settings.xml index 8ec4230e1..7393aeec5 100644 --- a/src/main/res/values/settings.xml +++ b/src/main/res/values/settings.xml @@ -170,19 +170,23 @@ statsRate - @string/stats_rate_speed + @string/stats_rate_default_speed_or_pace + @string/description_default_speed_or_pace_imperial @string/description_speed_imperial @string/description_pace_imperial + @string/description_default_speed_or_pace_metric @string/description_speed_metric @string/description_pace_metric + DEFAULT PACE SPEED + @string/stats_rate_default_speed_or_pace @string/stats_rate_speed @string/stats_rate_pace diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index e3d67e16c..310360e9f 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -191,6 +191,8 @@ limitations under the License. Cadence (rpm) Heart rate (bpm) Power (W) + By Default + By Default Speed (mi/hr) Speed (km/hr) Time