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))) {