diff --git a/MyTracks/res/values/strings.xml b/MyTracks/res/values/strings.xml index 784e74d5c..782bee946 100644 --- a/MyTracks/res/values/strings.xml +++ b/MyTracks/res/values/strings.xml @@ -1684,129 +1684,131 @@ limitations under the License. Recording - Auto-resume - - Maximum time after which a previously recording track will not be resumed after device reboot. + + Maximum time after which a previously recording track will not be resumed after reboot. - Default activity + setting."> Default activity type for a new track. - - Distance interval + Max distance - - Smallest distance between two recordings of your position. + + New segment is created if the distance since the last recorded location is greater than this. - + Min distance + + + GPS location is ignored if the distance since the last recorded location is less than this. + + + Location frequency + + + Time between two GPS locations. + + GPS accuracy - - GPS position will be ignored if it is not this accurate. + setting.."> + GPS location is ignored if it is not this accurate. - - Time interval - - - Smallest time interval between two recordings of your position. - - - Max interval - - - Maximum distance between two recordings of your position. If two positions are further than - this, the track will be split. - - - Track name + + Time/distance between two split markers. Date (ISO 8601) Date (local) Location Number + + Track name + - Default track name + translation_description="In the 'Recording' settings, the summary for the 'Track name' + setting."> + Way to name a new track. + + + Time/distance between two voice announcements. @@ -2040,12 +2042,6 @@ limitations under the License. Show - - - Time/distance between two split markers - - - Time/distance between two voice announcements - - + android:title="@string/settings_recording_track_name_title" /> + android:title="@string/settings_recording_default_activity_title" /> + android:title="@string/settings_recording_min_recording_interval_title" /> + android:title="@string/settings_recording_min_recording_distance_title" /> + android:title="@string/settings_recording_max_recording_distance_title" /> + android:title="@string/settings_recording_min_required_accuracy_title" /> + android:title="@string/settings_recording_auto_resume_track_timeout_title" /> \ No newline at end of file diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java index 8dc192754..c4151a709 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java @@ -358,13 +358,12 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Del return true; case R.id.track_detail_voice_frequency: FrequencyDialogFragment.newInstance(R.string.voice_frequency_key, - PreferencesUtils.VOICE_FREQUENCY_DEFAULT, - R.string.settings_voice_frequency_title) + PreferencesUtils.VOICE_FREQUENCY_DEFAULT, R.string.menu_voice_frequency) .show(getSupportFragmentManager(), FrequencyDialogFragment.FREQUENCY_DIALOG_TAG); return true; case R.id.track_detail_split_frequency: FrequencyDialogFragment.newInstance(R.string.split_frequency_key, - PreferencesUtils.SPLIT_FREQUENCY_DEFAULT, R.string.settings_split_frequency_title) + PreferencesUtils.SPLIT_FREQUENCY_DEFAULT, R.string.menu_split_frequency) .show(getSupportFragmentManager(), FrequencyDialogFragment.FREQUENCY_DIALOG_TAG); return true; case R.id.track_detail_send_google: diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/FrequencyDialogFragment.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/FrequencyDialogFragment.java index 6cfd17113..f84f99c14 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/fragments/FrequencyDialogFragment.java +++ b/MyTracks/src/com/google/android/apps/mytracks/fragments/FrequencyDialogFragment.java @@ -82,7 +82,7 @@ public class FrequencyDialogFragment extends DialogFragment { private String[] getFrequencyDisplayOptions() { boolean metricUnits = PreferencesUtils.getBoolean( activity, R.string.metric_units_key, PreferencesUtils.METRIC_UNITS_DEFAULT); - return StringUtils.getFrequencyDisplayOptions(activity, metricUnits); + return StringUtils.getFrequencyOptions(activity, metricUnits); } /** diff --git a/MyTracks/src/com/google/android/apps/mytracks/settings/RecordingSettingsActivity.java b/MyTracks/src/com/google/android/apps/mytracks/settings/RecordingSettingsActivity.java index cf7be09c1..e6812a26b 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/settings/RecordingSettingsActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/settings/RecordingSettingsActivity.java @@ -23,6 +23,7 @@ import com.google.android.maps.mytracks.R; import android.os.Bundle; import android.preference.ListPreference; +import android.preference.Preference; /** * An activity for accessing recording settings. @@ -40,43 +41,138 @@ public class RecordingSettingsActivity extends AbstractSettingsActivity { boolean metricUnits = PreferencesUtils.getBoolean( this, R.string.metric_units_key, PreferencesUtils.METRIC_UNITS_DEFAULT); + int voiceFrequencyValue = PreferencesUtils.getInt( + this, R.string.voice_frequency_key, PreferencesUtils.VOICE_FREQUENCY_DEFAULT); ListPreference voiceFrequencyListPreference = (ListPreference) findPreference( getString(R.string.voice_frequency_key)); - voiceFrequencyListPreference.setEntries( - StringUtils.getFrequencyDisplayOptions(this, metricUnits)); + configurePreference(voiceFrequencyListPreference, + StringUtils.getFrequencyOptions(this, metricUnits), + getResources().getStringArray(R.array.frequency_values), + R.string.settings_recording_voice_frequency_summary, String.valueOf(voiceFrequencyValue)); + int splitFrequencyValue = PreferencesUtils.getInt( + this, R.string.split_frequency_key, PreferencesUtils.SPLIT_FREQUENCY_DEFAULT); ListPreference splitFrequencyListPreference = (ListPreference) findPreference( getString(R.string.split_frequency_key)); - splitFrequencyListPreference.setEntries( - StringUtils.getFrequencyDisplayOptions(this, metricUnits)); + configurePreference(splitFrequencyListPreference, + StringUtils.getFrequencyOptions(this, metricUnits), + getResources().getStringArray(R.array.frequency_values), + R.string.settings_recording_split_frequency_summary, String.valueOf(splitFrequencyValue)); + String trackNameValue = PreferencesUtils.getString( + this, R.string.track_name_key, PreferencesUtils.TRACK_NAME_DEFAULT); + ListPreference trackNameListPreference = (ListPreference) findPreference( + getString(R.string.track_name_key)); + configurePreference(trackNameListPreference, + getResources().getStringArray(R.array.track_name_options), + getResources().getStringArray(R.array.track_name_values), + R.string.settings_recording_track_name_summary, trackNameValue); + + String defaultActivityValue = PreferencesUtils.getString( + this, R.string.default_activity_key, PreferencesUtils.DEFAULT_ACTIVITY_DEFAULT); + Preference defaultActivityPreference = findPreference(getString(R.string.default_activity_key)); + configurePreference(defaultActivityPreference, null, null, + R.string.settings_recording_default_activity_summary, defaultActivityValue); + + int minRecordingIntervalValue = PreferencesUtils.getInt( + this, R.string.min_recording_interval_key, PreferencesUtils.MIN_RECORDING_INTERVAL_DEFAULT); ListPreference minRecordingIntervalListPreference = (ListPreference) findPreference( getString(R.string.min_recording_interval_key)); - minRecordingIntervalListPreference.setEntries(getMinRecordingIntervalDisplayOptions()); + configurePreference(minRecordingIntervalListPreference, getMinRecordingIntervalOptions(), + getResources().getStringArray(R.array.min_recording_interval_values), + R.string.settings_recording_min_recording_interval_summary, + String.valueOf(minRecordingIntervalValue)); + int minRecordingDistanceValue = PreferencesUtils.getInt( + this, R.string.min_recording_distance_key, PreferencesUtils.MIN_RECORDING_DISTANCE_DEFAULT); ListPreference minRecordingDistanceListPreference = (ListPreference) findPreference( getString(R.string.min_recording_distance_key)); - minRecordingDistanceListPreference.setEntries( - getMinRecordingDistanceDisplayOptions(metricUnits)); + configurePreference(minRecordingDistanceListPreference, + getMinRecordingDistanceOptions(metricUnits), + getResources().getStringArray(R.array.min_recording_distance_values), + R.string.settings_recording_min_recording_distance_summary, + String.valueOf(minRecordingDistanceValue)); + int maxRecordingDistanceValue = PreferencesUtils.getInt( + this, R.string.max_recording_distance_key, PreferencesUtils.MAX_RECORDING_DISTANCE_DEFAULT); ListPreference maxRecordingDistanceListPreference = (ListPreference) findPreference( getString(R.string.max_recording_distance_key)); - maxRecordingDistanceListPreference.setEntries( - getMaxRecordingDistanceDisplayOptions(metricUnits)); + configurePreference(maxRecordingDistanceListPreference, + getMaxRecordingDistanceOptions(metricUnits), + getResources().getStringArray(R.array.max_recording_distance_values), + R.string.settings_recording_max_recording_distance_summary, + String.valueOf(maxRecordingDistanceValue)); + int minRequiredAcuracyValue = PreferencesUtils.getInt( + this, R.string.min_required_accuracy_key, PreferencesUtils.MIN_REQUIRED_ACCURACY_DEFAULT); ListPreference minRequiredAccuracyListPreference = (ListPreference) findPreference( getString(R.string.min_required_accuracy_key)); - minRequiredAccuracyListPreference.setEntries(getMinRequiredAccuracyDisplayOptions(metricUnits)); + configurePreference(minRequiredAccuracyListPreference, + getMinRequiredAccuracyOptions(metricUnits), + getResources().getStringArray(R.array.min_required_accuracy_values), + R.string.settings_recording_min_required_accuracy_summary, + String.valueOf(minRequiredAcuracyValue)); + int autoResumeTrackTimeoutValue = PreferencesUtils.getInt(this, + R.string.auto_resume_track_timeout_key, PreferencesUtils.AUTO_RESUME_TRACK_TIMEOUT_DEFAULT); ListPreference autoResumeTrackTimeoutListPreference = (ListPreference) findPreference( getString(R.string.auto_resume_track_timeout_key)); - autoResumeTrackTimeoutListPreference.setEntries(getAutoResumeTrackTimeoutDisplayOptions()); + configurePreference(autoResumeTrackTimeoutListPreference, getAutoResumeTrackTimeoutOptions(), + getResources().getStringArray(R.array.auto_resume_track_timeout_values), + R.string.settings_recording_auto_resume_track_timeout_summary, + String.valueOf(autoResumeTrackTimeoutValue)); + } + + private void configurePreference(final Preference preference, final String[] options, + final String[] values, final int summaryId, String value) { + if (options != null) { + ((ListPreference) preference).setEntries(options); + } + preference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference pref, Object newValue) { + updatePreferenceSummary(pref, options, values, summaryId, (String) newValue); + return true; + } + }); + updatePreferenceSummary(preference, options, values, summaryId, value); + } + + private void updatePreferenceSummary( + Preference listPreference, String[] options, String[] values, int summaryId, String value) { + String summary = getString(summaryId); + String option; + if (options != null && values != null) { + option = getOption(options, values, value); + } else { + option = value != null && value.length() != 0 ? value : getString(R.string.value_unknown); + } + if (option != null) { + summary += "\n" + option; + } + listPreference.setSummary(summary); + } + + /** + * Gets the display option for a stored value. + * + * @param options list of the display options + * @param values list of the stored values + * @param value the store value + */ + private String getOption(String[] options, String[] values, String value) { + for (int i = 0; i < values.length; i++) { + if (value.equals(values[i])) { + return options[i]; + } + } + return null; } /** * Gets the min recording interval display options. */ - private String[] getMinRecordingIntervalDisplayOptions() { + private String[] getMinRecordingIntervalOptions() { String[] values = getResources().getStringArray(R.array.min_recording_interval_values); String[] options = new String[values.length]; for (int i = 0; i < values.length; i++) { @@ -104,20 +200,20 @@ public class RecordingSettingsActivity extends AbstractSettingsActivity { * * @param metricUnits true to display metric units */ - private String[] getMinRecordingDistanceDisplayOptions(boolean metricUnits) { + private String[] getMinRecordingDistanceOptions(boolean metricUnits) { String[] values = getResources().getStringArray(R.array.min_recording_distance_values); String[] options = new String[values.length]; for (int i = 0; i < values.length; i++) { int value = Integer.parseInt(values[i]); if (metricUnits) { - options[i] = getString(value == PreferencesUtils.MIN_RECORDING_DISTANCE_DEFAULT - ? R.string.value_integer_meter_recommended - : R.string.value_integer_meter, value); + options[i] = getString( + value == PreferencesUtils.MIN_RECORDING_DISTANCE_DEFAULT ? R.string.value_integer_meter_recommended + : R.string.value_integer_meter, value); } else { int feet = (int) (value * UnitConversions.M_TO_FT); - options[i] = getString(value == PreferencesUtils.MIN_RECORDING_DISTANCE_DEFAULT - ? R.string.value_integer_feet_recommended - : R.string.value_integer_feet, feet); + options[i] = getString( + value == PreferencesUtils.MIN_RECORDING_DISTANCE_DEFAULT ? R.string.value_integer_feet_recommended + : R.string.value_integer_feet, feet); } } return options; @@ -128,21 +224,21 @@ public class RecordingSettingsActivity extends AbstractSettingsActivity { * * @param metricUnits true to display metric units */ - private String[] getMaxRecordingDistanceDisplayOptions(boolean metricUnits) { + private String[] getMaxRecordingDistanceOptions(boolean metricUnits) { String[] values = getResources().getStringArray(R.array.max_recording_distance_values); String[] options = new String[values.length]; for (int i = 0; i < values.length; i++) { int value = Integer.parseInt(values[i]); if (metricUnits) { - options[i] = getString(value == PreferencesUtils.MAX_RECORDING_DISTANCE_DEFAULT - ? R.string.value_integer_meter_recommended - : R.string.value_integer_meter, value); + options[i] = getString( + value == PreferencesUtils.MAX_RECORDING_DISTANCE_DEFAULT ? R.string.value_integer_meter_recommended + : R.string.value_integer_meter, value); } else { int feet = (int) (value * UnitConversions.M_TO_FT); if (feet < 2000) { - options[i] = getString(value == PreferencesUtils.MAX_RECORDING_DISTANCE_DEFAULT - ? R.string.value_integer_feet_recommended - : R.string.value_integer_feet, feet); + options[i] = getString( + value == PreferencesUtils.MAX_RECORDING_DISTANCE_DEFAULT ? R.string.value_integer_feet_recommended + : R.string.value_integer_feet, feet); } else { double mile = feet * UnitConversions.FT_TO_MI; options[i] = getString(R.string.value_float_mile, mile); @@ -157,7 +253,7 @@ public class RecordingSettingsActivity extends AbstractSettingsActivity { * * @param metricUnits true to display metric units */ - private String[] getMinRequiredAccuracyDisplayOptions(boolean metricUnits) { + private String[] getMinRequiredAccuracyOptions(boolean metricUnits) { String[] values = getResources().getStringArray(R.array.min_required_accuracy_values); String[] options = new String[values.length]; for (int i = 0; i < values.length; i++) { @@ -191,9 +287,9 @@ public class RecordingSettingsActivity extends AbstractSettingsActivity { } } else { double mile = feet * UnitConversions.FT_TO_MI; - options[i] = getString(value == PreferencesUtils.MIN_REQUIRED_ACCURACY_POOR - ? R.string.value_float_mile_poor_gps - : R.string.value_float_mile, mile); + options[i] = getString( + value == PreferencesUtils.MIN_REQUIRED_ACCURACY_POOR ? R.string.value_float_mile_poor_gps + : R.string.value_float_mile, mile); } } } @@ -203,7 +299,7 @@ public class RecordingSettingsActivity extends AbstractSettingsActivity { /** * Gets the auto resume track timeout display options. */ - private String[] getAutoResumeTrackTimeoutDisplayOptions() { + private String[] getAutoResumeTrackTimeoutOptions() { String[] values = getResources().getStringArray(R.array.auto_resume_track_timeout_values); String[] options = new String[values.length]; for (int i = 0; i < values.length; i++) { diff --git a/MyTracks/src/com/google/android/apps/mytracks/util/PreferencesUtils.java b/MyTracks/src/com/google/android/apps/mytracks/util/PreferencesUtils.java index d503bd29d..780e2d227 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/util/PreferencesUtils.java +++ b/MyTracks/src/com/google/android/apps/mytracks/util/PreferencesUtils.java @@ -84,6 +84,9 @@ public class PreferencesUtils { public static final int TRACK_COLOR_MODE_MEDIUM_DEFAULT = 15; public static final int TRACK_COLOR_MODE_PERCENTAGE_DEFAULT = 25; public static final int TRACK_COLOR_MODE_SLOW_DEFAULT = 9; + + public static final String TRACK_NAME_DEFAULT = "LOCATION"; + public static final int VOICE_FREQUENCY_DEFAULT = 0; private PreferencesUtils() {} diff --git a/MyTracks/src/com/google/android/apps/mytracks/util/StringUtils.java b/MyTracks/src/com/google/android/apps/mytracks/util/StringUtils.java index 06c5fade5..a69319e02 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/util/StringUtils.java +++ b/MyTracks/src/com/google/android/apps/mytracks/util/StringUtils.java @@ -291,7 +291,7 @@ public class StringUtils { * @param context the context * @param metricUnits true to display in metric units */ - public static String[] getFrequencyDisplayOptions(Context context, boolean metricUnits) { + public static String[] getFrequencyOptions(Context context, boolean metricUnits) { String[] values = context.getResources().getStringArray(R.array.frequency_values); String[] options = new String[values.length]; for (int i = 0; i < values.length; i++) { diff --git a/MyTracks/src/com/google/android/apps/mytracks/util/TrackNameUtils.java b/MyTracks/src/com/google/android/apps/mytracks/util/TrackNameUtils.java index 15a818cfd..6def459d9 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/util/TrackNameUtils.java +++ b/MyTracks/src/com/google/android/apps/mytracks/util/TrackNameUtils.java @@ -52,7 +52,7 @@ public class TrackNameUtils { public static String getTrackName( Context context, long trackId, long startTime, Location location) { String trackName = PreferencesUtils.getString(context, R.string.track_name_key, - context.getString(R.string.settings_recording_track_name_location_value)); + PreferencesUtils.TRACK_NAME_DEFAULT); if (trackName.equals( context.getString(R.string.settings_recording_track_name_date_local_value))) {