diff --git a/MyTracks/AndroidManifest.xml b/MyTracks/AndroidManifest.xml
index 0a83934c5..6162cfcdd 100755
--- a/MyTracks/AndroidManifest.xml
+++ b/MyTracks/AndroidManifest.xml
@@ -210,6 +210,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 6f8292b6c..6afb23b62 100644
--- a/MyTracks/res/values/arrays_do_not_translate.xml
+++ b/MyTracks/res/values/arrays_do_not_translate.xml
@@ -160,7 +160,7 @@ limitations under the License.
- 5000
- - @string/settings_sensor_type_none
+ - @string/value_none
- @string/settings_sensor_type_ant
- @string/settings_sensor_type_polar
- @string/settings_sensor_type_zephyr
@@ -172,7 +172,7 @@ limitations under the License.
- @string/sensor_type_value_zephyr
- - @string/settings_sensor_type_none
+ - @string/value_none
- @string/settings_sensor_type_polar
- @string/settings_sensor_type_zephyr
diff --git a/MyTracks/res/values/keys.xml b/MyTracks/res/values/keys.xml
index cea7427db..14a13200c 100644
--- a/MyTracks/res/values/keys.xml
+++ b/MyTracks/res/values/keys.xml
@@ -30,8 +30,9 @@ limitations under the License.
chartShowPower
chartShowSpeed
defaultActivity
- defaultMapPublic
- googleAccount
+ googleSettingsAccount
+ googleSettingsDriveSync
+ googleSettingsMapsPublic
maxRecordingDistance
metricUnits
minRecordingDistance
@@ -60,7 +61,7 @@ limitations under the License.
trackWidgetItem3
trackWidgetItem4
voiceFrequency
-
+
autoResumeTrackCurrentRetry
recordingTrackId
@@ -68,6 +69,7 @@ limitations under the License.
selectedTrackId
+ googleSettings
settingsBackup
settingsBackupNow
settingsBackupRestore
diff --git a/MyTracks/res/values/strings.xml b/MyTracks/res/values/strings.xml
index e3f0244bc..9c5b7cba7 100644
--- a/MyTracks/res/values/strings.xml
+++ b/MyTracks/res/values/strings.xml
@@ -719,6 +719,61 @@ limitations under the License.
Success
+
+
+ Google
+
+
+ Switch account
+
+
+ Sync Google Drive
+
+
+ All tracks will be synced to %1$s Google Drive
+
+
+ New maps public
+
+
+ New maps created in Google Maps will be unlisted, instead of public. See %1$s for more info.
+
+
+ New maps created in Google Maps will be public, instead of unlisted. See %1$s for more info.
+
+
Show
-
- Switch account
-
ANT+
-
- None
-
Other apps can read, write, start/stop recording My Tracks data.
-
- New maps public
-
-
- New maps created in Google Maps will be unlisted, instead of public. See %1$s for more info.
-
-
- New maps created in Google Maps will be public, instead of unlisted. See %1$s for more info.
-
Never
+
+ None
+
Off
diff --git a/MyTracks/res/xml/google_settings.xml b/MyTracks/res/xml/google_settings.xml
new file mode 100644
index 000000000..6bfbea482
--- /dev/null
+++ b/MyTracks/res/xml/google_settings.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/MyTracks/res/xml/settings.xml b/MyTracks/res/xml/settings.xml
index c48825eac..8314cdd71 100644
--- a/MyTracks/res/xml/settings.xml
+++ b/MyTracks/res/xml/settings.xml
@@ -16,6 +16,10 @@ limitations under the License.
-->
+
-
-
entries = new ArrayList();
+ List entryValues = new ArrayList();
+ Account[] accounts = AccountManager.get(this).getAccountsByType(Constants.ACCOUNT_TYPE);
+ for (Account account : accounts) {
+ entries.add(account.name);
+ entryValues.add(account.name);
+ }
+ entries.add(getString(R.string.value_none));
+ entryValues.add(PreferencesUtils.GOOGLE_SETTINGS_ACCOUNT_DEFAULT);
+
+ googleSettingsAccount.setEntries(entries.toArray(new CharSequence[entries.size()]));
+ googleSettingsAccount.setEntryValues(entryValues.toArray(new CharSequence[entries.size()]));
+ googleSettingsAccount.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ updateUi((String) newValue, true);
+ return true;
+ }
+ });
+
+ settingsGoogleDriveSync = (CheckBoxPreference) findPreference(
+ getString(R.string.google_settings_drive_sync_key));
+
+ CheckBoxPreference settingsGoogleMapsPublic = (CheckBoxPreference) findPreference(
+ getString(R.string.google_settings_maps_public_key));
+ settingsGoogleMapsPublic.setSummaryOn(getString(R.string.google_settings_maps_public_summary_on,
+ getString(R.string.maps_public_unlisted_url)));
+ settingsGoogleMapsPublic.setSummaryOff(getString(
+ R.string.google_settings_maps_public_summary_off,
+ getString(R.string.maps_public_unlisted_url)));
+
+ String account = PreferencesUtils.getString(this, R.string.google_settings_account_key,
+ PreferencesUtils.GOOGLE_SETTINGS_ACCOUNT_DEFAULT);
+ updateUi(account, false);
+ }
+
+ /**
+ * Updates the UI.
+ *
+ * @param account the account
+ * @param uncheckDriveSync true to uncheck drive sync
+ */
+ private void updateUi(String account, boolean uncheckDriveSync) {
+ googleSettingsAccount.setSummary(PreferencesUtils.GOOGLE_SETTINGS_ACCOUNT_DEFAULT.equals(
+ account) ? getString(R.string.value_unknown)
+ : account);
+ boolean hasAccount = !PreferencesUtils.GOOGLE_SETTINGS_ACCOUNT_DEFAULT.equals(account);
+ settingsGoogleDriveSync.setEnabled(hasAccount);
+ settingsGoogleDriveSync.setSummaryOn(
+ getString(R.string.google_settings_drive_sync_summary_on, account));
+ if (uncheckDriveSync) {
+ settingsGoogleDriveSync.setChecked(false);
+ }
+ }
+}
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 14393ba32..6f8c68b0d 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/settings/SettingsActivity.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/settings/SettingsActivity.java
@@ -22,24 +22,17 @@ 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.accounts.Account;
-import android.accounts.AccountManager;
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.ListPreference;
import android.preference.Preference;
-import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.Preference.OnPreferenceClickListener;
import android.util.Log;
import android.widget.Toast;
-import java.util.ArrayList;
-import java.util.List;
-
/**
* An activity for accessing settings.
*
@@ -51,7 +44,6 @@ public class SettingsActivity extends AbstractSettingsActivity {
private static final String TAG = SettingsActivity.class.getSimpleName();
private static final int DIALOG_CONFIRM_RESET_ID = 0;
- private ListPreference googleAccountListPreference;
private Preference resetPreference;
@SuppressWarnings("deprecation")
@@ -60,100 +52,15 @@ public class SettingsActivity extends AbstractSettingsActivity {
super.onCreate(bundle);
addPreferencesFromResource(R.xml.settings);
- Preference mapPreference = findPreference(getString(R.string.settings_map_key));
- mapPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- Intent intent = IntentUtils.newIntent(SettingsActivity.this, MapSettingsActivity.class);
- startActivity(intent);
- return true;
- }
- });
-
- Preference chartPreference = findPreference(getString(R.string.settings_chart_key));
- chartPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- Intent intent = IntentUtils.newIntent(SettingsActivity.this, ChartSettingsActivity.class);
- startActivity(intent);
- return true;
- }
- });
-
- Preference statsPreference = findPreference(getString(R.string.settings_stats_key));
- statsPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- Intent intent = IntentUtils.newIntent(SettingsActivity.this, StatsSettingsActivity.class);
- startActivity(intent);
- return true;
- }
- });
-
- Preference recordingPreference = findPreference(getString(R.string.settings_recording_key));
- recordingPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- Intent intent = IntentUtils.newIntent(
- SettingsActivity.this, RecordingSettingsActivity.class);
- startActivity(intent);
- return true;
- }
- });
-
- Preference sharingPreference = findPreference(getString(R.string.settings_sharing_key));
- sharingPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- Intent intent = IntentUtils.newIntent(SettingsActivity.this, SharingSettingsActivity.class);
- startActivity(intent);
- return true;
- }
- });
-
- Preference sensorPreference = findPreference(getString(R.string.settings_sensor_key));
- sensorPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- Intent intent = IntentUtils.newIntent(SettingsActivity.this, SensorSettingsActivity.class);
- startActivity(intent);
- return true;
- }
- });
-
- Preference backupPreference = findPreference(getString(R.string.settings_backup_key));
- backupPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- Intent intent = IntentUtils.newIntent(SettingsActivity.this, BackupSettingsActivity.class);
- startActivity(intent);
- return true;
- }
- });
-
- googleAccountListPreference = (ListPreference) findPreference(getString(R.string.google_account_key));
- List entries = new ArrayList();
- Account[] accounts = AccountManager.get(this).getAccountsByType(Constants.ACCOUNT_TYPE);
- for (Account account : accounts) {
- entries.add(account.name);
- }
- googleAccountListPreference.setEntries(entries.toArray(new CharSequence[entries.size()]));
- googleAccountListPreference.setEntryValues(entries.toArray(
- new CharSequence[entries.size()]));
- if (entries.size() == 1) {
- googleAccountListPreference.setValueIndex(0);
- }
- String googleAccount = PreferencesUtils.getString(this, R.string.google_account_key,
- PreferencesUtils.GOOGLE_ACCOUNT_DEFAULT);
- updateSwitchAccountSummary(googleAccount);
- googleAccountListPreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- updateSwitchAccountSummary((String) newValue);
- return true;
- }
- });
-
+ configPreference(R.string.google_settings_key, GoogleSettingsActivity.class);
+ configPreference(R.string.settings_map_key, MapSettingsActivity.class);
+ configPreference(R.string.settings_chart_key, ChartSettingsActivity.class);
+ configPreference(R.string.settings_stats_key, StatsSettingsActivity.class);
+ 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
@@ -164,6 +71,24 @@ public class SettingsActivity extends AbstractSettingsActivity {
});
}
+ /**
+ * Configures a preference by starting a new activity when it is clicked.
+ *
+ * @param key the preference key
+ * @param cl the class to start the new activity
+ */
+ private void configPreference(int key, final Class> cl) {
+ Preference preference = findPreference(getString(key));
+ preference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ Intent intent = IntentUtils.newIntent(SettingsActivity.this, cl);
+ startActivity(intent);
+ return true;
+ }
+ });
+ }
+
@Override
protected void onResume() {
super.onResume();
@@ -174,17 +99,6 @@ public class SettingsActivity extends AbstractSettingsActivity {
: R.string.settings_reset_summary);
}
- /**
- * Updates the switch account summary.
- *
- * @param value the value
- */
- private void updateSwitchAccountSummary(String value) {
- googleAccountListPreference.setSummary(
- PreferencesUtils.GOOGLE_ACCOUNT_DEFAULT.equals(value) ? getString(R.string.value_unknown)
- : value);
- }
-
@Override
protected Dialog onCreateDialog(int id) {
if (id != DIALOG_CONFIRM_RESET_ID) {
diff --git a/MyTracks/src/com/google/android/apps/mytracks/settings/SharingSettingsActivity.java b/MyTracks/src/com/google/android/apps/mytracks/settings/SharingSettingsActivity.java
index 7725d8cf9..f74331c97 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/settings/SharingSettingsActivity.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/settings/SharingSettingsActivity.java
@@ -35,7 +35,6 @@ public class SharingSettingsActivity extends AbstractSettingsActivity {
private static final int DIALOG_CONFIRM_ALLOW_ACCESS_ID = 0;
- private CheckBoxPreference defaultMapPublicCheckBoxPreference;
private CheckBoxPreference allowAccessCheckBoxPreference;
@SuppressWarnings("deprecation")
@@ -44,15 +43,6 @@ public class SharingSettingsActivity extends AbstractSettingsActivity {
super.onCreate(bundle);
addPreferencesFromResource(R.xml.sharing_settings);
- defaultMapPublicCheckBoxPreference = (CheckBoxPreference) findPreference(
- getString(R.string.default_map_public_key));
- defaultMapPublicCheckBoxPreference.setSummaryOn(getString(
- R.string.settings_sharing_new_map_public_summary_on,
- getString(R.string.maps_public_unlisted_url)));
- defaultMapPublicCheckBoxPreference.setSummaryOff(getString(
- R.string.settings_sharing_new_map_public_summary_off,
- getString(R.string.maps_public_unlisted_url)));
-
allowAccessCheckBoxPreference = (CheckBoxPreference) findPreference(
getString(R.string.allow_access_key));
allowAccessCheckBoxPreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
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 90decce7a..d9367f44a 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/util/PreferencesUtils.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/util/PreferencesUtils.java
@@ -50,9 +50,13 @@ public class PreferencesUtils {
public static final boolean CHART_SHOW_SPEED_DEFAULT = true;
public static final String DEFAULT_ACTIVITY_DEFAULT = "";
- public static final boolean DEFAULT_MAP_PUBLIC_DEFAULT = false;
+
public static final int FREQUENCY_OFF = 0;
- public static final String GOOGLE_ACCOUNT_DEFAULT = "";
+
+ public static final String GOOGLE_SETTINGS_ACCOUNT_DEFAULT = "";
+ public static final boolean GOOGLE_SETTINGS_DRIVE_SYNC_DEFAULT = false;
+ public static final boolean GOOGLE_SETTINGS_MAPS_PUBLIC_DEFAULT = false;
+
public static final int MAX_RECORDING_DISTANCE_DEFAULT = 200;
public static final boolean METRIC_UNITS_DEFAULT = true;
public static final int MIN_RECORDING_DISTANCE_DEFAULT = 5;
diff --git a/MyTracksTest_E2E/src/com/google/android/apps/mytracks/endtoendtest/others/SensorTest.java b/MyTracksTest_E2E/src/com/google/android/apps/mytracks/endtoendtest/others/SensorTest.java
index 7de1c1583..da0978b2c 100644
--- a/MyTracksTest_E2E/src/com/google/android/apps/mytracks/endtoendtest/others/SensorTest.java
+++ b/MyTracksTest_E2E/src/com/google/android/apps/mytracks/endtoendtest/others/SensorTest.java
@@ -198,7 +198,7 @@ public class SensorTest extends ActivityInstrumentationTestCase2