diff --git a/MyTracks/res/values-ca/strings.xml b/MyTracks/res/values-ca/strings.xml
index e2ca5f58d..6ac1e8525 100644
--- a/MyTracks/res/values-ca/strings.xml
+++ b/MyTracks/res/values-ca/strings.xml
@@ -225,7 +225,6 @@ limitations under the License.
Escriu una còpia completa de totes les rutes i els paràmetres a la targeta SD
Restaura ara
Restaura totes les rutes i els paràmetres des de la targeta SD.
- No es poden gestionar les còpies de seguretat mentre s\'enregistra una ruta.
La restauració d\'una còpia de seguretat des de la targeta SD sobreescriurà totes les rutes i paràmetres. Esteu segur?
diff --git a/MyTracks/res/values-es/strings.xml b/MyTracks/res/values-es/strings.xml
index e4cc06155..f9e786542 100644
--- a/MyTracks/res/values-es/strings.xml
+++ b/MyTracks/res/values-es/strings.xml
@@ -212,7 +212,6 @@ limitations under the License.
Hacer una copia total de sus recorridos y configuraciones a la tarjeta SD
Restaurar
Restaurar todos los recorridos y configuraciones desde la tarjeta SD
- No se pueden manejar backups mientras se está registrando un recorrido.
Restaurar un backup desde la tarjeta SD SOBREESCRIBIRÁ todos sus recorridos y configuraciones actuales. ¿Está usted seguro?
Seleccionar el backup para restaurar
diff --git a/MyTracks/res/values-fr/strings.xml b/MyTracks/res/values-fr/strings.xml
index 86c470297..f2e634c30 100644
--- a/MyTracks/res/values-fr/strings.xml
+++ b/MyTracks/res/values-fr/strings.xml
@@ -213,8 +213,6 @@ limitations under the License.
Copier tous vos parcours et paramètres sur la carte SD
Restaurer
Restaurer tous les parcours et paramètres depuis la carte SD
- Sauvegarde impossible lors de l\'enregistrement d\'un parcours.
-
Restaurer une sauvegarde depuis la carte SD écrasera tous vos parcours et paramètres actuels.
Choisissez la sauvegarde à restaurer
diff --git a/MyTracks/res/values-ja/strings.xml b/MyTracks/res/values-ja/strings.xml
index 7ae58dc2c..2a8023462 100644
--- a/MyTracks/res/values-ja/strings.xml
+++ b/MyTracks/res/values-ja/strings.xml
@@ -256,7 +256,6 @@ limitations under the License.
SDカードに全てのトラックと設定をバックアップします
今すぐ復元
SDカードから全てのトラックと設定を復元します
- トラック記録中はバックアップ操作はできません.
SDカードからの復元を実行すると、現在のトラックと設定は *全て上書き* されてしまいます.よろしいですか?
復元するバックアップの選択
diff --git a/MyTracks/res/values-pl/strings.xml b/MyTracks/res/values-pl/strings.xml
index 63b9cde9c..d019ce3b4 100644
--- a/MyTracks/res/values-pl/strings.xml
+++ b/MyTracks/res/values-pl/strings.xml
@@ -217,7 +217,6 @@ limitations under the License.
Tworzy kopię zapasową wszystkich tras i ustawień i zapisuje je na karcie SD
Odtwórz z kopii
Odtwarza wszystkie trasy i ustawienia z kopii zapasowej z karty SD
- Nie można tworzyć/odtwarzać kopii zapasowej podczas rejestrowania trasy.
Odtworzenie z kopii zapasowej z karty SD zastąpi wszystkie bieżące trasy i ustawienia. Jesteś tego pewien?
diff --git a/MyTracks/res/values-pt-rBR/strings.xml b/MyTracks/res/values-pt-rBR/strings.xml
index f9ee674ca..2f60a4a9c 100644
--- a/MyTracks/res/values-pt-rBR/strings.xml
+++ b/MyTracks/res/values-pt-rBR/strings.xml
@@ -157,6 +157,8 @@ limitations under the License.
Exibição
Gravação
Compartilhamento
+ Não disponível na sua versão do Android
+ Não disponível durante a gravação de uma trilha
Tempo entre anúncios
Tempo mínimo entre dois anúncios de voz
Dist. mín. entre pontos
diff --git a/MyTracks/res/values-zh-rCN/strings.xml b/MyTracks/res/values-zh-rCN/strings.xml
index 0da162428..befedd9c7 100644
--- a/MyTracks/res/values-zh-rCN/strings.xml
+++ b/MyTracks/res/values-zh-rCN/strings.xml
@@ -219,7 +219,6 @@ limitations under the License.
将你所有轨迹和设置的完整备份写入到 SD 存储卡
立即恢复
从 SD 存储卡恢复所有轨迹和设置
- 在记录轨迹时无法处理备份数据.
从 SD 存储卡恢复备份数据将覆盖掉你当前的所有轨迹和设置. 确定要继续吗?
diff --git a/MyTracks/res/values/keys.xml b/MyTracks/res/values/keys.xml
index 54c476596..01f56da24 100644
--- a/MyTracks/res/values/keys.xml
+++ b/MyTracks/res/values/keys.xml
@@ -50,8 +50,7 @@ limitations under the License.
backupToSd
restoreFromSd
-
-
+ resetToDefaults
sensorOptions
antOptions
diff --git a/MyTracks/res/values/strings.xml b/MyTracks/res/values/strings.xml
index 524dad3ed..8d7c37b0f 100644
--- a/MyTracks/res/values/strings.xml
+++ b/MyTracks/res/values/strings.xml
@@ -196,6 +196,7 @@ limitations under the License.
Sharing
Not available in your version of Android
+ Not available while recording a track
Announcement frequency
Minimum time between two voice announcements
@@ -238,6 +239,11 @@ limitations under the License.
The default track name will be the date and time at the start of the track
Track names will have numbers which increment for each new track.
+ Reset to defaults
+ Revert all your settings to the default values
+ All your settings will be erased and reverted to the default values. Saved tracks will be preserved. Are you sure?
+ All settings have been reverted to their defaults.
+
Pace
Only supported in Android 2.0 or above
@@ -259,7 +265,6 @@ limitations under the License.
Write a full copy of all your tracks and settings to the SD card
Restore now
Restore all tracks and settings from the SD card
- Cannot manipulate backups while recording a track.
Restoring a backup from the SD card will OVERWRITE all your current tracks and settings. Are you sure?
Select the backup to restore
diff --git a/MyTracks/res/xml/preferences.xml b/MyTracks/res/xml/preferences.xml
index f377cf863..e4d0b093f 100644
--- a/MyTracks/res/xml/preferences.xml
+++ b/MyTracks/res/xml/preferences.xml
@@ -173,4 +173,11 @@ limitations under the License.
android:persistent="false" />
+
+
+
diff --git a/MyTracks/src/com/google/android/apps/mytracks/MyTracksSettings.java b/MyTracks/src/com/google/android/apps/mytracks/MyTracksSettings.java
index 85e6a04b5..0e02d05f8 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/MyTracksSettings.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/MyTracksSettings.java
@@ -15,10 +15,7 @@
*/
package com.google.android.apps.mytracks;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
+import static com.google.android.apps.mytracks.MyTracksConstants.TAG;
import com.google.android.apps.mytracks.io.backup.BackupActivityHelper;
import com.google.android.apps.mytracks.io.backup.BackupPreferencesListener;
@@ -28,18 +25,28 @@ import com.google.android.apps.mytracks.util.ApiFeatures;
import com.google.android.apps.mytracks.util.BluetoothDeviceUtils;
import com.google.android.maps.mytracks.R;
+import android.app.AlertDialog;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.Preference;
-import android.preference.PreferenceActivity;
-import android.preference.PreferenceManager;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.Preference.OnPreferenceClickListener;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceManager;
import android.preference.PreferenceScreen;
import android.provider.Settings;
+import android.util.Log;
+import android.widget.Toast;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
/**
* An activity that let's the user see and edit the settings.
@@ -119,6 +126,16 @@ public class MyTracksSettings extends PreferenceActivity {
announcementFrequency.setSummary(
R.string.settings_not_available_summary);
}
+
+ // Hook up action for resetting all settings
+ Preference resetPreference = findPreference(getString(R.string.reset_key));
+ resetPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference arg0) {
+ onResetPreferencesClick();
+ return true;
+ }
+ });
}
private void customizeSensorOptionsPreferences() {
@@ -177,19 +194,24 @@ public class MyTracksSettings extends PreferenceActivity {
findPreference(getString(R.string.backup_to_sd_key));
Preference restoreNowPreference =
findPreference(getString(R.string.restore_from_sd_key));
+ Preference resetPreference = findPreference(getString(R.string.reset_key));
- // If recording, disable backup/restore
+ // If recording, disable backup/restore/reset
// (we don't want to get to inconsistent states)
boolean recording =
preferences.getLong(getString(R.string.recording_track_key), -1) != -1;
backupNowPreference.setEnabled(!recording);
restoreNowPreference.setEnabled(!recording);
+ resetPreference.setEnabled(!recording);
backupNowPreference.setSummary(
- recording ? R.string.settings_no_backup_while_recording
+ recording ? R.string.settings_not_while_recording
: R.string.settings_backup_to_sd_summary);
restoreNowPreference.setSummary(
- recording ? R.string.settings_no_backup_while_recording
+ recording ? R.string.settings_not_while_recording
: R.string.settings_restore_from_sd_summary);
+ resetPreference.setSummary(
+ recording ? R.string.settings_not_while_recording
+ : R.string.settings_reset_summary);
// Add actions to the backup preferences
backupNowPreference.setOnPreferenceClickListener(
@@ -315,4 +337,53 @@ public class MyTracksSettings extends PreferenceActivity {
devicesPreference.setEntryValues(entryValuesArray);
devicesPreference.setEntries(entriesArray);
}
+
+ /** Callback for when user asks to reset all settings. */
+ private void onResetPreferencesClick() {
+ AlertDialog dialog = new AlertDialog.Builder(this)
+ .setCancelable(true)
+ .setTitle(R.string.settings_reset)
+ .setMessage(R.string.settings_reset_dialog_message)
+ .setPositiveButton(android.R.string.ok,
+ new OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int button) {
+ onResetPreferencesConfirmed();
+ }
+ })
+ .setNegativeButton(android.R.string.cancel, null)
+ .create();
+ dialog.show();
+ }
+
+ /** Callback for when 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).
+ preferences.edit().clear().commit();
+
+ // Give UI feedback in the UI thread.
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ // Give feedback to the user.
+ Toast.makeText(
+ MyTracksSettings.this,
+ R.string.settings_reset_done,
+ Toast.LENGTH_SHORT).show();
+
+ // Restart the settings activity so all changes are loaded.
+ Intent intent = getIntent();
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ startActivity(intent);
+ }
+ });
+ }
+ }.start();
+ }
}
diff --git a/MyTracks/src/com/google/android/apps/mytracks/content/MyTracksProvider.java b/MyTracks/src/com/google/android/apps/mytracks/content/MyTracksProvider.java
index d94be1329..e1c26901a 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/content/MyTracksProvider.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/content/MyTracksProvider.java
@@ -193,12 +193,14 @@ public class MyTracksProvider extends ContentProvider {
@Override
public int delete(Uri url, String where, String[] selectionArgs) {
String table;
+ boolean shouldVacuum = false;
switch (urlMatcher.match(url)) {
case TRACKPOINTS:
table = TRACKPOINTS_TABLE;
break;
case TRACKS:
table = TRACKS_TABLE;
+ shouldVacuum = true;
break;
case WAYPOINTS:
table = WAYPOINTS_TABLE;
@@ -210,6 +212,13 @@ public class MyTracksProvider extends ContentProvider {
Log.w(MyTracksProvider.TAG, "provider delete in " + table + "!");
int count = db.delete(table, where, selectionArgs);
getContext().getContentResolver().notifyChange(url, null, true);
+
+ if (shouldVacuum) {
+ // If a potentially large amount of data was deleted, we want to reclaim its space.
+ Log.i(TAG, "Vacuuming the database");
+ db.execSQL("VACUUM");
+ }
+
return count;
}