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