diff --git a/MyTracks/AndroidManifest.xml b/MyTracks/AndroidManifest.xml
index 6162cfcdd..0a7e83581 100755
--- a/MyTracks/AndroidManifest.xml
+++ b/MyTracks/AndroidManifest.xml
@@ -208,7 +208,7 @@ limitations under the License.
-
+
diff --git a/MyTracks/res/values/arrays_do_not_translate.xml b/MyTracks/res/values/arrays_do_not_translate.xml
index 6afb23b62..d97c63fbe 100644
--- a/MyTracks/res/values/arrays_do_not_translate.xml
+++ b/MyTracks/res/values/arrays_do_not_translate.xml
@@ -15,6 +15,7 @@ See the License for the specific language governing permissions and
limitations under the License.
-->
+
- @string/activity_type_airplane
@@ -160,32 +161,37 @@ limitations under the License.
- 5000
- - @string/value_none
- - @string/settings_sensor_type_ant
- @string/settings_sensor_type_polar
- @string/settings_sensor_type_zephyr
+ - @string/settings_sensor_type_ant
+ - @string/value_none
- - @string/sensor_type_value_none
- - @string/sensor_type_value_ant
- @string/sensor_type_value_polar
- @string/sensor_type_value_zephyr
+ - @string/sensor_type_value_ant
+ - @string/sensor_type_value_none
- - @string/value_none
- @string/settings_sensor_type_polar
- @string/settings_sensor_type_zephyr
+ - @string/value_none
- - @string/sensor_type_value_none
- @string/sensor_type_value_polar
- @string/sensor_type_value_zephyr
+ - @string/sensor_type_value_none
- @string/settings_map_track_color_mode_single
- @string/settings_map_track_color_mode_fixed
- @string/settings_map_track_color_mode_dynamic
+
+ - @string/settings_map_track_color_mode_single
+ - @string/settings_map_track_color_mode_fixed_summary
+ - @string/settings_map_track_color_mode_dynamic_summary
+
- @string/settings_map_track_color_mode_single_value
- @string/settings_map_track_color_mode_fixed_value
@@ -256,4 +262,5 @@ limitations under the License.
- @string/waypoint_type_water_fountain
- @string/waypoint_type_waypoint
+
\ No newline at end of file
diff --git a/MyTracks/res/values/keys.xml b/MyTracks/res/values/keys.xml
index 631f15b66..ed696f8b2 100644
--- a/MyTracks/res/values/keys.xml
+++ b/MyTracks/res/values/keys.xml
@@ -71,8 +71,7 @@ limitations under the License.
settingsBackup
- settingsBackupNow
- settingsBackupRestore
+ settingsBackupReset
settingsChart
settingsGoogle
settingsMap
@@ -81,6 +80,7 @@ limitations under the License.
settingsMapSlowDisplay
settingsRecording
settingsReset
+ settingsRestore
settingsSensor
settingsSensorAnt
settingsSensorAntResetBikeCadenceSensor
diff --git a/MyTracks/res/values/strings.xml b/MyTracks/res/values/strings.xml
index 7abf8dbaf..5e7db06cf 100644
--- a/MyTracks/res/values/strings.xml
+++ b/MyTracks/res/values/strings.xml
@@ -1585,7 +1585,7 @@ limitations under the License.
- Not available while recording a track.
+ Not available while recording a track
- Backup
+ Backup & reset
Backup now
@@ -1616,15 +1615,15 @@ limitations under the License.
Unable to backup.
+ translation_description="In the 'Backup and reset' settings, after pressing the 'Backup now'
+ option, the progress message telling the user that it is writing all tracks and settings to
+ the external storage.">
Writing all tracks and settings…
- Write a full copy of all your tracks and settings to the external storage.
+ translation_description="In the 'Backup and reset' settings, the summary for the 'Backup now'
+ option explaining that all tracks and settings will be written to the external storage.">
+ Write a full copy of all your tracks and settings to the external storage
@@ -1633,16 +1632,16 @@ limitations under the License.
Restore now
+ translation_description="In the 'Backup and reset' settings, after pressing the 'Restore now'
+ option, the message in the alert dialog asking the user to confirm that he wants to restore
+ from a backup and it will overwrite all the current tracks and settings.">
Restoring a backup from the external storage will overwrite all your current tracks and
settings.
@@ -1651,25 +1650,26 @@ limitations under the License.
Unable to restore from backup.
+ translation_description="In the 'Backup and reset' settings, after pressing the 'Restore now'
+ option, the message in the alert dialog informing the user that there is no backup to restore
+ from.">
No backup found.
+ translation_description="In the 'Backup and reset' settings, after pressing the 'Restore now'
+ option, the progress message informing that My Tracks is reading all tracks and settings from
+ the backup on the external storage.">
Reading all tracks and settings…
+ translation_description="In the 'Backup and reset' settings, after pressing the 'Restore now'
+ option, the title in the picker dialog asking the user to select a backup.">
Select a backup to restore
- Restore all tracks and settings from the external storage.
+ translation_description="In the 'Backup and reset' settings, the summary for the 'Restore now'
+ option explaining that it restores all tracks and settings from the external storage.">
+ Restore all tracks and settings from the external storage
@@ -1820,73 +1820,84 @@ limitations under the License.
Recording
+
+ Always resume a recording after reboot
+
+
+ Never resume a recording after reboot
+
+
+ Resume a recording after reboot if the last recorded loation was within the last %1$s
+
Auto-resume
-
- Recording is resumed after reboot if the last recorded time is within this.
-
- Default activity
+ Default activity type
-
- Default activity type for a new track.
+
+ %1$s between recorded locations
+
+
+ A new segment is created if the distance between two locations is greater than %1$s
Max distance
-
- Maximum distance between locations in the same segment.
-
- Min distance
-
-
- Minimum distance between recorded locations.
+ Recording distance interval
- Location frequency
+ Recording time interval
-
- Time between two GPS locations.
+
+ Location is ignored if its accuracy is less than %1$s
GPS accuracy
-
- GPS location is ignored if it is not this accurate.
-
-
- Time/distance between two split markers.
-
Date (ISO 8601)
Date (local)
Location
Number
- Track name
-
-
- Way to name a new track.
-
-
- Time/distance between two voice announcements.
+ Default track name
Reset
- All your settings will be erased and reverted to the default values. Saved tracks will be
- preserved.
+ translation_description="In the 'Backup and reset' settings, after pressing the 'Reset' option,
+ the confirmation dialog message informing the user that all settings will be reverted.">
+ All settings will be erased and reverted to the default values. Saved tracks will be preserved.
- All settings have been reverted to their defaults.
+ translation_description="In the 'Backup and reset' settings, after pressing the 'Reset' option,
+ the confirmation dialog informing the user that all settings have been reverted to the default
+ values.">
+ All settings have been reverted to the default values.
- Revert all your settings to the default values.
+ translation_description="In the 'Backup and reset' settings, the summary for the 'Reset' option
+ explaining it will revert all settings to the default values.">
+ Revert all your settings to the default values
Sensor
-
- ANT+ options
+
+ Not connected
- Paired with: %1$d
+ Paired with %1$d
Reset bike cadence
Reset combined bike
Reset heart rate
Reset foot pod
-
- Bluetooth options
+ Bluetooth
Bluetooth pairing
- Open Android\'s Bluetooth settings to pair a device.
+ translation_description="In the 'Sensor' settings, under the 'Bluetooth' section, the summary
+ for the 'Bluetooth pairing' option explaining that it will open the Android's Bluetooth
+ settings to pair a sensor.">
+ Open Android\'s Bluetooth settings to pair a sensor
Bluetooth sensor
-
- The Bluetooth sensor to connect to.
-
+ %1$s: sensor name. E.g., 'Polar Bluetooth'.">
Connected to %1$s
-
- Not connected.
-
Sensor type
ANT+
Polar Bluetooth
-
- The type of sensor to connect to.
-
Zephyr Bluetooth
@@ -2660,6 +2633,10 @@ limitations under the License.
translation_description="In a setting picker, the value to turn off the feature.">
Off
+
+ Smallest
+
diff --git a/MyTracks/res/xml/backup_settings.xml b/MyTracks/res/xml/backup_reset_settings.xml
similarity index 76%
rename from MyTracks/res/xml/backup_settings.xml
rename to MyTracks/res/xml/backup_reset_settings.xml
index e336832e9..f4341c29b 100644
--- a/MyTracks/res/xml/backup_settings.xml
+++ b/MyTracks/res/xml/backup_reset_settings.xml
@@ -15,13 +15,17 @@ See the License for the specific language governing permissions and
limitations under the License.
-->
+ android:title="@string/settings_backup_reset" >
+
\ No newline at end of file
diff --git a/MyTracks/res/xml/sensor_settings.xml b/MyTracks/res/xml/sensor_settings.xml
index e79307e31..40d1d4335 100644
--- a/MyTracks/res/xml/sensor_settings.xml
+++ b/MyTracks/res/xml/sensor_settings.xml
@@ -23,7 +23,7 @@ limitations under the License.
android:title="@string/settings_sensor_type" />
+ android:title="@string/settings_sensor_bluetooth" >
+ android:title="@string/settings_sensor_type_ant" >
-
+ android:title="@string/settings_backup_reset" />
\ No newline at end of file
diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackEditActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackEditActivity.java
index 7ef48c44e..0173d6f24 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/TrackEditActivity.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/TrackEditActivity.java
@@ -124,7 +124,7 @@ public class TrackEditActivity extends AbstractMyTracksActivity {
Button cancel = (Button) findViewById(R.id.track_edit_cancel);
if (getIntent().getBooleanExtra(EXTRA_NEW_TRACK, false)) {
String trackName = TrackNameUtils.getTrackName(
- this, -1L, -1L, myTracksProviderUtils.getLastValidTrackPoint(trackId));
+ this, -1L, -1L, myTracksProviderUtils.getFirstValidTrackPoint(trackId));
if (trackName != null) {
name.setText(trackName);
}
diff --git a/MyTracks/src/com/google/android/apps/mytracks/settings/AbstractSettingsActivity.java b/MyTracks/src/com/google/android/apps/mytracks/settings/AbstractSettingsActivity.java
index a719753bb..70497e42d 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/settings/AbstractSettingsActivity.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/settings/AbstractSettingsActivity.java
@@ -52,7 +52,7 @@ public class AbstractSettingsActivity extends PreferenceActivity {
preferenceManager.setSharedPreferencesMode(Context.MODE_PRIVATE);
// Set up automatic preferences backup
- backupPreferencesListener = new BackupPreferencesListener(this);
+ backupPreferencesListener = new BackupPreferencesListener(this);
preferenceManager.getSharedPreferences()
.registerOnSharedPreferenceChangeListener(backupPreferencesListener);
@@ -77,114 +77,66 @@ public class AbstractSettingsActivity extends PreferenceActivity {
}
/**
- * Configures a preference.
+ * Configures a list preference.
*
- * @param preference the preference
- * @param options the list of displayed options
- * @param values the list of stored values
- * @param summaryId the summary id
- * @param value the stored value
+ * @param listPreference the list preference
+ * @param summary the summary array
+ * @param options the options array
+ * @param values the values array
+ * @param value the value
+ * @param listener optional listener
*/
- protected void configurePreference(final Preference preference, final String[] options,
- final String[] values, final int summaryId, String value) {
- configurePreference(preference, options, values, summaryId, value, null);
- }
-
- /**
- * Configures a preference.
- *
- * @param preference the preference
- * @param options the list of displayed options
- * @param values the list of stored values
- * @param summaryId the summary id
- * @param value the stored value
- * @param listener listener to invoke
- */
- protected void configurePreference(final Preference preference, final String[] options,
- final String[] values, final int summaryId, String value,
+ protected void configureListPreference(ListPreference listPreference, final String[] summary,
+ final String[] options, final String[] values, String value,
final OnPreferenceChangeListener listener) {
- if (options != null) {
- ((ListPreference) preference).setEntries(options);
- }
- if (values != null) {
- ((ListPreference) preference).setEntryValues(values);
- }
- preference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
+ listPreference.setEntryValues(values);
+ listPreference.setEntries(options);
+ listPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference pref, Object newValue) {
- updatePreferenceSummary(pref, options, values, summaryId, (String) newValue);
+ updatePreferenceSummary(pref, summary, values, (String) newValue);
if (listener != null) {
listener.onPreferenceChange(pref, newValue);
}
return true;
}
});
- updatePreferenceSummary(preference, options, values, summaryId, value);
+ updatePreferenceSummary(listPreference, summary, values, value);
if (listener != null) {
- listener.onPreferenceChange(preference, value);
+ listener.onPreferenceChange(listPreference, value);
}
}
- protected void configurePreference(final Preference preference, final String[] options,
- final String[] values, String value, final OnPreferenceChangeListener listener) {
- if (options != null) {
- ((ListPreference) preference).setEntries(options);
- }
- if (values != null) {
- ((ListPreference) preference).setEntryValues(values);
- }
- preference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
- @Override
- public boolean onPreferenceChange(Preference pref, Object newValue) {
- if (listener != null) {
- listener.onPreferenceChange(pref, newValue);
- }
- return true;
- }
- });
- if (listener != null) {
- listener.onPreferenceChange(preference, value);
- }
- }
-
/**
- * Updates a preference when a stored value changes.
+ * Update the preference summary.
*
* @param preference the preference
- * @param options the list of displayed options
- * @param values the list of stored values
- * @param summaryId the summary id
- * @param value the stored value
+ * @param summary the summary array
+ * @param values the values array
+ * @param value the value
*/
private void updatePreferenceSummary(
- Preference preference, String[] options, String[] values, int summaryId, String value) {
- String summary = getString(summaryId);
- String option;
- if (options != null && values != null) {
- option = getOption(options, values, value);
- if (option == null) {
- option = getString(R.string.value_unknown);
- }
+ Preference preference, String[] summary, String[] values, String value) {
+ int index = getIndex(values, value);
+ if (index == -1) {
+ preference.setSummary(R.string.value_unknown);
} else {
- option = value != null && value.length() != 0 ? value : getString(R.string.value_unknown);
+ preference.setSummary(summary[index]);
}
- summary += "\n" + option;
- preference.setSummary(summary);
}
/**
- * Gets the display option for a stored value.
+ * Get the array index for a value.
*
- * @param options the list of the display options
- * @param values the list of the stored values
- * @param value the store value
+ * @param values the array
+ * @param value the value
*/
- private String getOption(String[] options, String[] values, String value) {
+ private int getIndex(String[] values, String value) {
for (int i = 0; i < values.length; i++) {
if (value.equals(values[i])) {
- return options[i];
+ return i;
}
}
- return null;
+ return -1;
}
}
diff --git a/MyTracks/src/com/google/android/apps/mytracks/settings/BackupSettingsActivity.java b/MyTracks/src/com/google/android/apps/mytracks/settings/BackupResetSettingsActivity.java
similarity index 51%
rename from MyTracks/src/com/google/android/apps/mytracks/settings/BackupSettingsActivity.java
rename to MyTracks/src/com/google/android/apps/mytracks/settings/BackupResetSettingsActivity.java
index 52b5abad6..1835dbfb7 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/settings/BackupSettingsActivity.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/settings/BackupResetSettingsActivity.java
@@ -33,19 +33,24 @@ import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
+import android.util.Log;
+import android.widget.Toast;
/**
- * An activity for accessing the backup settings.
+ * An activity for accessing the backup and reset settings.
*
* @author Jimmy Shih
*/
-public class BackupSettingsActivity extends AbstractSettingsActivity {
+public class BackupResetSettingsActivity extends AbstractSettingsActivity {
+ private static final String TAG = BackupResetSettingsActivity.class.getSimpleName();
private static final int DIALOG_CONFIRM_RESTORE_ID = 0;
+ private static final int DIALOG_CONFIRM_RESET_ID = 1;
private SharedPreferences sharedPreferences;
private Preference backupPreference;
- private Preference restorePreference;
+ private Preference restoreNowPreference;
+ private Preference resetPreference;
private long recordingTrackId = PreferencesUtils.RECORDING_TRACK_ID_DEFAULT;
@@ -57,12 +62,10 @@ public class BackupSettingsActivity extends AbstractSettingsActivity {
sharedPreferenceChangeListener = new OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
- if (key == null || key.equals(PreferencesUtils.getKey(
- BackupSettingsActivity.this, R.string.recording_track_id_key))) {
+ if (key != null && key.equals(PreferencesUtils.getKey(
+ BackupResetSettingsActivity.this, R.string.recording_track_id_key))) {
recordingTrackId = PreferencesUtils.getLong(
- BackupSettingsActivity.this, R.string.recording_track_id_key);
- }
- if (key != null) {
+ BackupResetSettingsActivity.this, R.string.recording_track_id_key);
runOnUiThread(new Runnable() {
@Override
public void run() {
@@ -77,60 +80,81 @@ public class BackupSettingsActivity extends AbstractSettingsActivity {
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
+ addPreferencesFromResource(R.xml.backup_reset_settings);
+
sharedPreferences = getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
- addPreferencesFromResource(R.xml.backup_settings);
- backupPreference = findPreference(getString(R.string.settings_backup_now_key));
+ backupPreference = findPreference(getString(R.string.settings_backup_key));
backupPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
- Intent intent = IntentUtils.newIntent(BackupSettingsActivity.this, BackupActivity.class);
+ Intent intent = IntentUtils.newIntent(
+ BackupResetSettingsActivity.this, BackupActivity.class);
startActivity(intent);
return true;
}
});
- restorePreference = findPreference(getString(R.string.settings_backup_restore_key));
- restorePreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ restoreNowPreference = findPreference(getString(R.string.settings_restore_key));
+ restoreNowPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
showDialog(DIALOG_CONFIRM_RESTORE_ID);
return true;
}
});
+
+ resetPreference = findPreference(getString(R.string.settings_reset_key));
+ resetPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference arg0) {
+ showDialog(DIALOG_CONFIRM_RESET_ID);
+ return true;
+ }
+ });
}
@Override
protected Dialog onCreateDialog(int id) {
- if (id != DIALOG_CONFIRM_RESTORE_ID) {
- return null;
+ Dialog dialog;
+ switch (id) {
+ case DIALOG_CONFIRM_RESTORE_ID:
+ dialog = DialogUtils.createConfirmationDialog(this,
+ R.string.settings_backup_restore_confirm_message,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface d, int which) {
+ Intent intent = IntentUtils.newIntent(
+ BackupResetSettingsActivity.this, RestoreChooserActivity.class);
+ startActivity(intent);
+ }
+ });
+ break;
+ case DIALOG_CONFIRM_RESET_ID:
+ dialog = DialogUtils.createConfirmationDialog(
+ this, R.string.settings_reset_confirm_message, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface d, int button) {
+ onResetPreferencesConfirmed();
+ }
+ });
+ break;
+ default:
+ dialog = null;
}
- return DialogUtils.createConfirmationDialog(this,
- R.string.settings_backup_restore_confirm_message, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- Intent intent = IntentUtils.newIntent(
- BackupSettingsActivity.this, RestoreChooserActivity.class);
- startActivity(intent);
- }
- });
- }
-
- @Override
- protected void onStart() {
- super.onStart();
- sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
- sharedPreferenceChangeListener.onSharedPreferenceChanged(null, null);
+ return dialog;
}
@Override
protected void onResume() {
super.onResume();
+ sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
+ recordingTrackId = PreferencesUtils.getLong(this, R.string.recording_track_id_key);
updateUi();
}
@Override
- protected void onStop() {
- super.onStop();
+ protected void onPause() {
+ super.onPause();
sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
}
@@ -140,10 +164,45 @@ public class BackupSettingsActivity extends AbstractSettingsActivity {
private void updateUi() {
boolean isRecording = recordingTrackId != PreferencesUtils.RECORDING_TRACK_ID_DEFAULT;
backupPreference.setEnabled(!isRecording);
- restorePreference.setEnabled(!isRecording);
backupPreference.setSummary(
isRecording ? R.string.settings_not_while_recording : R.string.settings_backup_now_summary);
- restorePreference.setSummary(isRecording ? R.string.settings_not_while_recording
+
+ restoreNowPreference.setEnabled(!isRecording);
+ restoreNowPreference.setSummary(isRecording ? R.string.settings_not_while_recording
: R.string.settings_backup_restore_summary);
+
+ resetPreference.setEnabled(!isRecording);
+ resetPreference.setSummary(
+ isRecording ? R.string.settings_not_while_recording : R.string.settings_reset_summary);
+ }
+
+ /**
+ * Callback when the user confirms resetting all settings.
+ */
+ private void onResetPreferencesConfirmed() {
+ // Change preferences in a separate thread
+ new Thread() {
+ @Override
+ public void run() {
+ Log.i(TAG, "Resetting all settings");
+
+ // Actually wipe preferences and save synchronously
+ sharedPreferences.edit().clear().commit();
+
+ // Give UI feedback in the UI thread
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ Toast.makeText(
+ BackupResetSettingsActivity.this, R.string.settings_reset_done, Toast.LENGTH_SHORT)
+ .show();
+ // Restart the settings activity so all changes are loaded
+ Intent intent = getIntent()
+ .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
+ startActivity(intent);
+ }
+ });
+ }
+ }.start();
}
}
diff --git a/MyTracks/src/com/google/android/apps/mytracks/settings/MapSettingsActivity.java b/MyTracks/src/com/google/android/apps/mytracks/settings/MapSettingsActivity.java
index 5e909d24a..9a61c4ff5 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/settings/MapSettingsActivity.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/settings/MapSettingsActivity.java
@@ -41,7 +41,6 @@ public class MapSettingsActivity extends AbstractSettingsActivity {
private static final String TAG = MapSettingsActivity.class.getSimpleName();
- private ListPreference trackColorModePreference;
private EditTextPreference slowPreference;
private EditTextPreference mediumPreference;
private EditTextPreference percentagePreference;
@@ -52,8 +51,6 @@ public class MapSettingsActivity extends AbstractSettingsActivity {
super.onCreate(bundle);
addPreferencesFromResource(R.xml.map_settings);
- trackColorModePreference = (ListPreference) findPreference(
- getString(R.string.track_color_mode_key));
slowPreference = (EditTextPreference) findPreference(
getString(R.string.settings_map_slow_display_key));
mediumPreference = (EditTextPreference) findPreference(
@@ -79,6 +76,8 @@ public class MapSettingsActivity extends AbstractSettingsActivity {
* Configures the track color mode preference.
*/
private void configTrackColorModePerference() {
+ ListPreference preference = (ListPreference) findPreference(
+ getString(R.string.track_color_mode_key));
OnPreferenceChangeListener listener = new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
@@ -86,11 +85,12 @@ public class MapSettingsActivity extends AbstractSettingsActivity {
return true;
}
};
- String trackColorMode = PreferencesUtils.getString(
+ String value = PreferencesUtils.getString(
this, R.string.track_color_mode_key, PreferencesUtils.TRACK_COLOR_MODE_DEFAULT);
- configurePreference(trackColorModePreference,
- getResources().getStringArray(R.array.track_color_mode_options),
- getResources().getStringArray(R.array.track_color_mode_values), trackColorMode, listener);
+ String[] values = getResources().getStringArray(R.array.track_color_mode_values);
+ String[] options = getResources().getStringArray(R.array.track_color_mode_options);
+ String[] summary = getResources().getStringArray(R.array.track_color_mode_summary);
+ configureListPreference(preference, summary, options, values, value, listener);
}
/**
@@ -204,13 +204,6 @@ public class MapSettingsActivity extends AbstractSettingsActivity {
getString(R.string.settings_map_track_color_mode_fixed_value));
boolean isDynamicValue = trackColorMode.equals(
getString(R.string.settings_map_track_color_mode_dynamic_value));
- if (isDynamicValue) {
- trackColorModePreference.setSummary(R.string.settings_map_track_color_mode_dynamic_summary);
- } else if (isFixedValue) {
- trackColorModePreference.setSummary(R.string.settings_map_track_color_mode_fixed_summary);
- } else {
- trackColorModePreference.setSummary(R.string.settings_map_track_color_mode_single);
- }
slowPreference.setEnabled(isFixedValue);
mediumPreference.setEnabled(isFixedValue);
percentagePreference.setEnabled(isDynamicValue);
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 5c3db1d88..ca456ce30 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/settings/RecordingSettingsActivity.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/settings/RecordingSettingsActivity.java
@@ -41,178 +41,224 @@ 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));
- configurePreference(voiceFrequencyListPreference,
- StringUtils.getFrequencyOptions(this, metricUnits),
- getResources().getStringArray(R.array.frequency_values),
- R.string.settings_recording_voice_frequency_summary, String.valueOf(voiceFrequencyValue));
+ configFrequencyPreference(R.string.voice_frequency_key,
+ PreferencesUtils.VOICE_FREQUENCY_DEFAULT, R.array.frequency_values, metricUnits);
+ configFrequencyPreference(R.string.split_frequency_key,
+ PreferencesUtils.SPLIT_FREQUENCY_DEFAULT, R.array.frequency_values, metricUnits);
+ configTrackName();
+ configDefaultActivity();
+ configListPreference(R.string.min_recording_interval_key,
+ PreferencesUtils.MIN_RECORDING_INTERVAL_DEFAULT, R.array.min_recording_interval_values,
+ metricUnits);
+ configListPreference(R.string.min_recording_distance_key,
+ PreferencesUtils.MIN_RECORDING_DISTANCE_DEFAULT, R.array.min_recording_distance_values,
+ metricUnits);
+ configListPreference(R.string.max_recording_distance_key,
+ PreferencesUtils.MAX_RECORDING_DISTANCE_DEFAULT, R.array.max_recording_distance_values,
+ metricUnits);
+ configListPreference(R.string.min_required_accuracy_key,
+ PreferencesUtils.MIN_REQUIRED_ACCURACY_DEFAULT, R.array.min_required_accuracy_values,
+ metricUnits);
+ configListPreference(R.string.auto_resume_track_timeout_key,
+ PreferencesUtils.AUTO_RESUME_TRACK_TIMEOUT_DEFAULT,
+ R.array.auto_resume_track_timeout_values, metricUnits);
+ }
- int splitFrequencyValue = PreferencesUtils.getInt(
- this, R.string.split_frequency_key, PreferencesUtils.SPLIT_FREQUENCY_DEFAULT);
- ListPreference splitFrequencyListPreference = (ListPreference) findPreference(
- getString(R.string.split_frequency_key));
- configurePreference(splitFrequencyListPreference,
- StringUtils.getFrequencyOptions(this, metricUnits),
- getResources().getStringArray(R.array.frequency_values),
- R.string.settings_recording_split_frequency_summary, String.valueOf(splitFrequencyValue));
+ private void configFrequencyPreference(
+ int key, int defaultValue, int valueArray, boolean metricUnits) {
+ ListPreference preference = (ListPreference) findPreference(getString(key));
+ int value = PreferencesUtils.getInt(this, key, defaultValue);
+ String[] values = getResources().getStringArray(valueArray);
+ String[] options = StringUtils.getFrequencyOptions(this, metricUnits);
+ configureListPreference(preference, options, options, values, String.valueOf(value), null);
+ }
- String trackNameValue = PreferencesUtils.getString(
+ private void configTrackName() {
+ ListPreference preference = (ListPreference) findPreference(getString(R.string.track_name_key));
+ String value = 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[] values = getResources().getStringArray(R.array.track_name_values);
+ String[] options = getResources().getStringArray(R.array.track_name_options);
+ configureListPreference(preference, options, options, values, value, null);
+ }
- String defaultActivityValue = PreferencesUtils.getString(
+ private void configDefaultActivity() {
+ Preference preference = findPreference(getString(R.string.default_activity_key));
+ String value = 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);
+ preference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference pref, Object newValue) {
+ String stringValue = (String) newValue;
+ pref.setSummary(stringValue != null
+ && !stringValue.equals(PreferencesUtils.DEFAULT_ACTIVITY_DEFAULT) ? stringValue
+ : getString(R.string.value_unknown));
+ return true;
+ }
+ });
+ preference.setSummary(
+ value != null && !value.equals(PreferencesUtils.DEFAULT_ACTIVITY_DEFAULT) ? value
+ : getString(R.string.value_unknown));
+ }
- 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));
- 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));
- 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));
- 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));
- 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));
- 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 configListPreference(
+ int key, int defaultValue, int valueArray, boolean metricUnits) {
+ ListPreference preference = (ListPreference) findPreference(getString(key));
+ int value = PreferencesUtils.getInt(this, key, defaultValue);
+ String[] values = getResources().getStringArray(valueArray);
+ String[] options = new String[values.length];
+ String[] summary = new String[values.length];
+ switch (key) {
+ case R.string.min_recording_interval_key:
+ setMinRecordingIntervalSummaryAndOptions(summary, options, values);
+ break;
+ case R.string.min_recording_distance_key:
+ setMinRecordingDistanceSummaryAndOptions(summary, options, values, metricUnits);
+ break;
+ case R.string.max_recording_distance_key:
+ setMaxRecordingDistanceSummaryAndOptions(summary, options, values, metricUnits);
+ break;
+ case R.string.min_required_accuracy_key:
+ setMinRequiredAccuracySummaryAndOptions(summary, options, values, metricUnits);
+ break;
+ case R.string.auto_resume_track_timeout_key:
+ setAutoResumeTrackTimeoutSummaryAndOptions(summary, options, values);
+ break;
+ default:
+ return;
+ }
+ configureListPreference(preference, summary, options, values, String.valueOf(value), null);
}
/**
- * Gets the min recording interval display options.
+ * Sets the min recording interval summary and options.
+ *
+ * @param summary the summary
+ * @param options the options
+ * @param values the values
*/
- private String[] getMinRecordingIntervalOptions() {
- String[] values = getResources().getStringArray(R.array.min_recording_interval_values);
- String[] options = new String[values.length];
+ private void setMinRecordingIntervalSummaryAndOptions(
+ String[] summary, String[] options, String[] values) {
for (int i = 0; i < values.length; i++) {
int value = Integer.parseInt(values[i]);
switch (value) {
case PreferencesUtils.MIN_RECORDING_INTERVAL_ADAPT_BATTERY_LIFE:
options[i] = getString(R.string.value_adapt_battery_life);
+ summary[i] = options[i];
break;
case PreferencesUtils.MIN_RECORDING_INTERVAL_ADAPT_ACCURACY:
options[i] = getString(R.string.value_adapt_accuracy);
+ summary[i] = options[i];
break;
case PreferencesUtils.MIN_RECORDING_INTERVAL_DEFAULT:
options[i] = getString(R.string.value_smallest_recommended);
+ summary[i] = getString(R.string.value_smallest);
break;
default:
options[i] = value < 60 ? getString(R.string.value_integer_second, value)
: getString(R.string.value_integer_minute, value / 60);
+ summary[i] = getString(
+ R.string.settings_recording_location_frequency_summary, options[i]);
}
}
- return options;
}
/**
- * Gets the min recording distance display options.
+ * Sets the min recording distance summary and options.
*
- * @param metricUnits true to display metric units
+ * @param summary the summary
+ * @param options the options
+ * @param values the values
+ * @param metricUnits true for metric units
*/
- private String[] getMinRecordingDistanceOptions(boolean metricUnits) {
- String[] values = getResources().getStringArray(R.array.min_recording_distance_values);
- String[] options = new String[values.length];
+ private void setMinRecordingDistanceSummaryAndOptions(
+ String[] summary, String[] options, String[] values, boolean metricUnits) {
for (int i = 0; i < values.length; i++) {
int value = Integer.parseInt(values[i]);
+ String displayValue;
if (metricUnits) {
- options[i] = getString(
- value == PreferencesUtils.MIN_RECORDING_DISTANCE_DEFAULT ? R.string.value_integer_meter_recommended
- : R.string.value_integer_meter, value);
+ displayValue = getString(R.string.value_integer_meter, value);
+ switch (value) {
+ case PreferencesUtils.MIN_RECORDING_DISTANCE_DEFAULT:
+ options[i] = getString(R.string.value_integer_meter_recommended, value);
+ break;
+ default:
+ options[i] = displayValue;
+ }
} 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);
+ displayValue = getString(R.string.value_integer_feet, feet);
+ switch (value) {
+ case PreferencesUtils.MIN_RECORDING_DISTANCE_DEFAULT:
+ options[i] = getString(R.string.value_integer_feet_recommended, feet);
+ break;
+ default:
+ options[i] = displayValue;
+ }
}
+ summary[i] = getString(R.string.settings_recording_location_frequency_summary, displayValue);
}
- return options;
}
/**
- * Gets the max recording distance display options.
+ * Sets the max recording distance summary and options.
*
- * @param metricUnits true to display metric units
+ * @param summary the summary
+ * @param options the options
+ * @param values the values
+ * @param metricUnits true for metric units
*/
- private String[] getMaxRecordingDistanceOptions(boolean metricUnits) {
- String[] values = getResources().getStringArray(R.array.max_recording_distance_values);
- String[] options = new String[values.length];
+ private void setMaxRecordingDistanceSummaryAndOptions(
+ String[] summary, String[] options, String[] values, boolean metricUnits) {
for (int i = 0; i < values.length; i++) {
int value = Integer.parseInt(values[i]);
+ String displayValue;
if (metricUnits) {
- options[i] = getString(
- value == PreferencesUtils.MAX_RECORDING_DISTANCE_DEFAULT ? R.string.value_integer_meter_recommended
- : R.string.value_integer_meter, value);
+ displayValue = getString(R.string.value_integer_meter, value);
+ switch (value) {
+ case PreferencesUtils.MAX_RECORDING_DISTANCE_DEFAULT:
+ options[i] = getString(R.string.value_integer_meter_recommended, value);
+ break;
+ default:
+ options[i] = displayValue;
+ }
} 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);
+ displayValue = getString(R.string.value_integer_feet, feet);
+ switch (value) {
+ case PreferencesUtils.MAX_RECORDING_DISTANCE_DEFAULT:
+ options[i] = getString(R.string.value_integer_feet_recommended, feet);
+ break;
+ default:
+ options[i] = displayValue;
+ }
} else {
double mile = feet * UnitConversions.FT_TO_MI;
- options[i] = getString(R.string.value_float_mile, mile);
+ displayValue = getString(R.string.value_float_mile, mile);
+ options[i] = displayValue;
}
}
+ summary[i] = getString(
+ R.string.settings_recording_max_recording_distance_summary, displayValue);
}
- return options;
}
/**
- * Gets the min required accuracy display options.
+ * Sets the min required accuracy summary and options.
*
- * @param metricUnits true to display metric units
+ * @param summary the summary
+ * @param options the options
+ * @param values the values
+ * @param metricUnits true for metric units
*/
- private String[] getMinRequiredAccuracyOptions(boolean metricUnits) {
- String[] values = getResources().getStringArray(R.array.min_required_accuracy_values);
- String[] options = new String[values.length];
+ private void setMinRequiredAccuracySummaryAndOptions(
+ String[] summary, String[] options, String[] values, boolean metricUnits) {
for (int i = 0; i < values.length; i++) {
int value = Integer.parseInt(values[i]);
+ String displayValue;
if (metricUnits) {
+ displayValue = getString(R.string.value_integer_meter, value);
switch (value) {
case PreferencesUtils.MIN_REQUIRED_ACCURACY_DEFAULT:
options[i] = getString(R.string.value_integer_meter_recommended, value);
@@ -224,11 +270,12 @@ public class RecordingSettingsActivity extends AbstractSettingsActivity {
options[i] = getString(R.string.value_integer_meter_poor_gps, value);
break;
default:
- options[i] = getString(R.string.value_integer_meter, value);
+ options[i] = displayValue;
}
} else {
int feet = (int) (value * UnitConversions.M_TO_FT);
if (feet < 2000) {
+ displayValue = getString(R.string.value_integer_feet, feet);
switch (value) {
case PreferencesUtils.MIN_REQUIRED_ACCURACY_DEFAULT:
options[i] = getString(R.string.value_integer_feet_recommended, feet);
@@ -237,38 +284,52 @@ public class RecordingSettingsActivity extends AbstractSettingsActivity {
options[i] = getString(R.string.value_integer_feet_excellent_gps, feet);
break;
default:
- options[i] = getString(R.string.value_integer_feet, feet);
+ options[i] = displayValue;
}
} 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);
+ displayValue = getString(R.string.value_float_mile, mile);
+ switch (value) {
+ case PreferencesUtils.MIN_REQUIRED_ACCURACY_POOR:
+ options[i] = getString(R.string.value_float_mile_poor_gps, mile);
+ break;
+ default:
+ options[i] = displayValue;
+ }
}
}
+ summary[i] = getString(
+ R.string.settings_recording_min_required_accuracy_summary, displayValue);
}
- return options;
}
/**
- * Gets the auto resume track timeout display options.
+ * Sets the auto resume track timeout summary and options.
+ *
+ * @param summary the summary
+ * @param options the options
+ * @param values the values
*/
- private String[] getAutoResumeTrackTimeoutOptions() {
- String[] values = getResources().getStringArray(R.array.auto_resume_track_timeout_values);
- String[] options = new String[values.length];
+ private void setAutoResumeTrackTimeoutSummaryAndOptions(
+ String[] summary, String[] options, String[] values) {
for (int i = 0; i < values.length; i++) {
int value = Integer.parseInt(values[i]);
switch (value) {
case PreferencesUtils.AUTO_RESUME_TRACK_TIMEOUT_NEVER:
options[i] = getString(R.string.value_never);
+ summary[i] = getString(
+ R.string.settings_recording_auto_resume_track_timeout_never_summary);
break;
case PreferencesUtils.AUTO_RESUME_TRACK_TIMEOUT_ALWAYS:
options[i] = getString(R.string.value_always);
+ summary[i] = getString(
+ R.string.settings_recording_auto_resume_track_timeout_always_summary);
break;
default:
options[i] = getString(R.string.value_integer_minute, value);
+ summary[i] = getString(
+ R.string.settings_recording_auto_resume_track_timeout_summary, options[i]);
}
}
- return options;
}
}
diff --git a/MyTracks/src/com/google/android/apps/mytracks/settings/SensorSettingsActivity.java b/MyTracks/src/com/google/android/apps/mytracks/settings/SensorSettingsActivity.java
index aa9954be7..a21bb27d9 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/settings/SensorSettingsActivity.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/settings/SensorSettingsActivity.java
@@ -49,23 +49,8 @@ public class SensorSettingsActivity extends AbstractSettingsActivity {
addPreferencesFromResource(R.xml.sensor_settings);
boolean hasAntSupport = AntInterface.hasAntSupport(this);
- ListPreference sensorTypeListPreference = (ListPreference) findPreference(
- getString(R.string.sensor_type_key));
- String[] sensorTypeOptions = getResources().getStringArray(
- hasAntSupport ? R.array.sensor_type_all_options : R.array.sensor_type_bluetooth_options);
- String[] sensorTypeValues = getResources().getStringArray(
- hasAntSupport ? R.array.sensor_type_all_values : R.array.sensor_type_bluetooth_values);
- String sensorTypeValue = PreferencesUtils.getString(
- this, R.string.sensor_type_key, PreferencesUtils.SENSOR_TYPE_DEFAULT);
- OnPreferenceChangeListener listener = new OnPreferenceChangeListener() {
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- updateUiBySensorType((String) newValue);
- return true;
- }
- };
- configurePreference(sensorTypeListPreference, sensorTypeOptions, sensorTypeValues,
- R.string.settings_sensor_type_summary, sensorTypeValue, listener);
+
+ configSensorType(hasAntSupport);
findPreference(getString(R.string.settings_sensor_bluetooth_pairing_key))
.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@@ -84,6 +69,31 @@ public class SensorSettingsActivity extends AbstractSettingsActivity {
}
}
+ private void configSensorType(boolean hasAntSupport) {
+ ListPreference preference = (ListPreference) findPreference(
+ getString(R.string.sensor_type_key));
+ String value = PreferencesUtils.getString(
+ this, R.string.sensor_type_key, PreferencesUtils.SENSOR_TYPE_DEFAULT);
+ String[] options = getResources().getStringArray(
+ hasAntSupport ? R.array.sensor_type_all_options : R.array.sensor_type_bluetooth_options);
+ String[] values = getResources().getStringArray(
+ hasAntSupport ? R.array.sensor_type_all_values : R.array.sensor_type_bluetooth_values);
+
+ if (!hasAntSupport && value.equals(R.string.sensor_type_value_ant)) {
+ value = PreferencesUtils.SENSOR_TYPE_DEFAULT;
+ PreferencesUtils.setString(this, R.string.sensor_type_key, value);
+ }
+
+ OnPreferenceChangeListener listener = new OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference pref, Object newValue) {
+ updateUiBySensorType((String) newValue);
+ return true;
+ }
+ };
+ configureListPreference(preference, options, options, values, value, listener);
+ }
+
/**
* Updates the UI based on the sensor type.
*
@@ -120,7 +130,7 @@ public class SensorSettingsActivity extends AbstractSettingsActivity {
preference.setEnabled(enabled);
int deviceId = PreferencesUtils.getInt(this, valueKey, AntSensorManager.WILDCARD);
if (deviceId == AntSensorManager.WILDCARD) {
- preference.setSummary(R.string.settings_sensor_not_connected);
+ preference.setSummary(R.string.settings_sensor_ant_not_connected);
} else {
preference.setSummary(getString(R.string.settings_sensor_ant_paired, deviceId));
}
@@ -128,7 +138,7 @@ public class SensorSettingsActivity extends AbstractSettingsActivity {
@Override
public boolean onPreferenceClick(Preference pref) {
PreferencesUtils.setInt(SensorSettingsActivity.this, valueKey, AntSensorManager.WILDCARD);
- pref.setSummary(R.string.settings_sensor_not_connected);
+ pref.setSummary(R.string.settings_sensor_ant_not_connected);
return true;
}
});
@@ -138,14 +148,20 @@ public class SensorSettingsActivity extends AbstractSettingsActivity {
@Override
protected void onResume() {
super.onResume();
- updateBluetoothSensorListPreference();
+
+ // Update each time in case the list of bluetooth sensors has changed
+ configBluetoothSensor();
}
/**
- * Updates the bluetooth sensor list preference.
+ * Configures the bluetooth sensor.
*/
@SuppressWarnings("deprecation")
- private void updateBluetoothSensorListPreference() {
+ private void configBluetoothSensor() {
+ ListPreference preference = (ListPreference) findPreference(
+ getString(R.string.bluetooth_sensor_key));
+ String value = PreferencesUtils.getString(
+ this, R.string.bluetooth_sensor_key, PreferencesUtils.BLUETOOTH_SENSOR_DEFAULT);
List optionsList = new ArrayList();
List valuesList = new ArrayList();
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
@@ -155,22 +171,17 @@ public class SensorSettingsActivity extends AbstractSettingsActivity {
String[] options = optionsList.toArray(new String[optionsList.size()]);
String[] values = valuesList.toArray(new String[valuesList.size()]);
- String bluetoothSensorValue = PreferencesUtils.getString(
- this, R.string.bluetooth_sensor_key, PreferencesUtils.BLUETOOTH_SENSOR_DEFAULT);
- ListPreference bluetoothSensorListPreference = (ListPreference) findPreference(
- getString(R.string.bluetooth_sensor_key));
if (valuesList.size() == 1) {
- if (!valuesList.get(0).equals(bluetoothSensorValue)) {
- bluetoothSensorValue = valuesList.get(0);
- PreferencesUtils.setString(this, R.string.bluetooth_sensor_key, bluetoothSensorValue);
+ if (!valuesList.get(0).equals(value)) {
+ value = valuesList.get(0);
+ PreferencesUtils.setString(this, R.string.bluetooth_sensor_key, value);
}
} else {
- if (!valuesList.contains(bluetoothSensorValue)) {
- bluetoothSensorValue = PreferencesUtils.BLUETOOTH_SENSOR_DEFAULT;
- PreferencesUtils.setString(this, R.string.bluetooth_sensor_key, bluetoothSensorValue);
+ if (!valuesList.contains(value)) {
+ value = PreferencesUtils.BLUETOOTH_SENSOR_DEFAULT;
+ PreferencesUtils.setString(this, R.string.bluetooth_sensor_key, value);
}
}
- configurePreference(bluetoothSensorListPreference, options, values,
- R.string.settings_sensor_bluetooth_sensor_summary, bluetoothSensorValue);
+ configureListPreference(preference, options, options, values, value, null);
}
}
diff --git a/MyTracks/src/com/google/android/apps/mytracks/settings/SettingsActivity.java b/MyTracks/src/com/google/android/apps/mytracks/settings/SettingsActivity.java
index f679e983b..c2ca2982a 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/settings/SettingsActivity.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/settings/SettingsActivity.java
@@ -16,22 +16,13 @@
package com.google.android.apps.mytracks.settings;
-import com.google.android.apps.mytracks.Constants;
-import com.google.android.apps.mytracks.util.DialogUtils;
import com.google.android.apps.mytracks.util.IntentUtils;
-import com.google.android.apps.mytracks.util.PreferencesUtils;
import com.google.android.maps.mytracks.R;
-import android.app.Dialog;
-import android.content.Context;
-import android.content.DialogInterface;
import android.content.Intent;
-import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
-import android.util.Log;
-import android.widget.Toast;
/**
* An activity for accessing settings.
@@ -41,11 +32,6 @@ import android.widget.Toast;
*/
public class SettingsActivity extends AbstractSettingsActivity {
- private static final String TAG = SettingsActivity.class.getSimpleName();
- private static final int DIALOG_CONFIRM_RESET_ID = 0;
-
- private Preference resetPreference;
-
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle bundle) {
@@ -59,16 +45,7 @@ public class SettingsActivity extends AbstractSettingsActivity {
configPreference(R.string.settings_recording_key, RecordingSettingsActivity.class);
configPreference(R.string.settings_sharing_key, SharingSettingsActivity.class);
configPreference(R.string.settings_sensor_key, SensorSettingsActivity.class);
- configPreference(R.string.settings_backup_key, BackupSettingsActivity.class);
-
- resetPreference = findPreference(getString(R.string.settings_reset_key));
- resetPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference arg0) {
- showDialog(DIALOG_CONFIRM_RESET_ID);
- return true;
- }
- });
+ configPreference(R.string.settings_backup_reset_key, BackupResetSettingsActivity.class);
}
/**
@@ -88,58 +65,4 @@ public class SettingsActivity extends AbstractSettingsActivity {
}
});
}
-
- @Override
- protected void onResume() {
- super.onResume();
- boolean isRecording = PreferencesUtils.getLong(this, R.string.recording_track_id_key)
- != PreferencesUtils.RECORDING_TRACK_ID_DEFAULT;
- resetPreference.setEnabled(!isRecording);
- resetPreference.setSummary(isRecording ? R.string.settings_not_while_recording
- : R.string.settings_reset_summary);
- }
-
- @Override
- protected Dialog onCreateDialog(int id) {
- if (id != DIALOG_CONFIRM_RESET_ID) {
- return null;
- }
- return DialogUtils.createConfirmationDialog(
- this, R.string.settings_reset_confirm_message, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int button) {
- onResetPreferencesConfirmed();
- }
- });
- }
-
- /**
- * Callback when the user confirms resetting all settings.
- */
- private void onResetPreferencesConfirmed() {
- // Change preferences in a separate thread
- new Thread() {
- @Override
- public void run() {
- Log.i(TAG, "Resetting all settings");
- SharedPreferences sharedPreferences = getSharedPreferences(
- Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
- // Actually wipe preferences and save synchronously
- sharedPreferences.edit().clear().commit();
-
- // Give UI feedback in the UI thread
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- Toast.makeText(SettingsActivity.this, R.string.settings_reset_done, Toast.LENGTH_SHORT)
- .show();
- // Restart the settings activity so all changes are loaded
- Intent intent = getIntent()
- .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
- startActivity(intent);
- }
- });
- }
- }.start();
- }
}
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 6def459d9..b0ef60cf4 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/util/TrackNameUtils.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/util/TrackNameUtils.java
@@ -27,6 +27,7 @@ import android.location.Location;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.List;
+import java.util.Locale;
/**
* Utilities for track name.
@@ -65,7 +66,7 @@ public class TrackNameUtils {
if (startTime == -1L) {
return null;
}
- SimpleDateFormat dateFormat = new SimpleDateFormat(ISO_8601_FORMAT);
+ SimpleDateFormat dateFormat = new SimpleDateFormat(ISO_8601_FORMAT, Locale.US);
return dateFormat.format(startTime);
} else if (trackName.equals(
context.getString(R.string.settings_recording_track_name_number_value))) {
diff --git a/MyTracksLib/src/com/google/android/apps/mytracks/content/MyTracksProviderUtils.java b/MyTracksLib/src/com/google/android/apps/mytracks/content/MyTracksProviderUtils.java
index db82735b7..fc96df102 100644
--- a/MyTracksLib/src/com/google/android/apps/mytracks/content/MyTracksProviderUtils.java
+++ b/MyTracksLib/src/com/google/android/apps/mytracks/content/MyTracksProviderUtils.java
@@ -227,6 +227,13 @@ public interface MyTracksProviderUtils {
*/
public long getLastTrackPointId(long trackId);
+ /**
+ * Gets the first valid location for a track. Returns null if it doesn't exist.
+ *
+ * @param trackId the track id
+ */
+ public Location getFirstValidTrackPoint(long trackId);
+
/**
* Gets the last valid location for a track. Returns null if it doesn't exist.
*
diff --git a/MyTracksLib/src/com/google/android/apps/mytracks/content/MyTracksProviderUtilsImpl.java b/MyTracksLib/src/com/google/android/apps/mytracks/content/MyTracksProviderUtilsImpl.java
index ddebefaa8..50eb9bae5 100644
--- a/MyTracksLib/src/com/google/android/apps/mytracks/content/MyTracksProviderUtilsImpl.java
+++ b/MyTracksLib/src/com/google/android/apps/mytracks/content/MyTracksProviderUtilsImpl.java
@@ -748,6 +748,18 @@ public class MyTracksProviderUtilsImpl implements MyTracksProviderUtils {
return -1L;
}
+ @Override
+ public Location getFirstValidTrackPoint(long trackId) {
+ if (trackId < 0) {
+ return null;
+ }
+ String selection = TrackPointsColumns._ID + "=(select min(" + TrackPointsColumns._ID + ") from "
+ + TrackPointsColumns.TABLE_NAME + " WHERE " + TrackPointsColumns.TRACKID + "=? AND "
+ + TrackPointsColumns.LATITUDE + "<=" + MAX_LATITUDE + ")";
+ String[] selectionArgs = new String[] { Long.toString(trackId) };
+ return findTrackPointBy(selection, selectionArgs);
+ }
+
@Override
public Location getLastValidTrackPoint(long trackId) {
if (trackId < 0) {