From 30640ac6e2339616381319c93dfab7bfabaab457 Mon Sep 17 00:00:00 2001 From: Thanh Phan Date: Wed, 20 Mar 2024 16:46:47 -0400 Subject: [PATCH 01/28] rilling/OpenTracks-Winter-SOEN-6431_2024#94: create new profile screen --- .../settings/ProfileSettingsFragment.java | 40 +++++++++++++++++++ .../opentracks/settings/SettingsActivity.java | 2 + src/main/res/drawable/ic_profile.xml | 5 +++ .../res/layout/fragment_profile_settings.xml | 14 +++++++ src/main/res/values/strings.xml | 7 ++++ src/main/res/xml/settings.xml | 5 +++ src/main/res/xml/settings_profile.xml | 7 ++++ 7 files changed, 80 insertions(+) create mode 100644 src/main/java/de/dennisguse/opentracks/settings/ProfileSettingsFragment.java create mode 100644 src/main/res/drawable/ic_profile.xml create mode 100644 src/main/res/layout/fragment_profile_settings.xml create mode 100644 src/main/res/xml/settings_profile.xml diff --git a/src/main/java/de/dennisguse/opentracks/settings/ProfileSettingsFragment.java b/src/main/java/de/dennisguse/opentracks/settings/ProfileSettingsFragment.java new file mode 100644 index 000000000..41b9983c8 --- /dev/null +++ b/src/main/java/de/dennisguse/opentracks/settings/ProfileSettingsFragment.java @@ -0,0 +1,40 @@ +package de.dennisguse.opentracks.settings; + +import android.content.SharedPreferences; +import android.os.Bundle; + +import androidx.preference.PreferenceFragmentCompat; + +import de.dennisguse.opentracks.R; + +public class ProfileSettingsFragment extends PreferenceFragmentCompat { + + private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (sharedPreferences, key) -> { + if (PreferencesUtils.isKey(R.string.night_mode_key, key)) { + getActivity().runOnUiThread(PreferencesUtils::applyNightMode); + } + }; + + @Override + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { + addPreferencesFromResource(R.xml.settings_profile); + } + + @Override + public void onStart() { + super.onStart(); + ((SettingsActivity) getActivity()).getSupportActionBar().setTitle(R.string.settings_profile_title); + } + + @Override + public void onResume() { + super.onResume(); + PreferencesUtils.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); + } + + @Override + public void onPause() { + super.onPause(); + PreferencesUtils.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); + } +} diff --git a/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java b/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java index 2f22e0d45..b17879c2c 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java +++ b/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java @@ -82,6 +82,8 @@ private PreferenceFragmentCompat getPreferenceScreen(String key) { if (key.equals(getString(R.string.settings_defaults_key))) { fragment = new DefaultsSettingsFragment(); + } else if (key.equals(getString(R.string.settings_profile_key))) { + fragment = new ProfileSettingsFragment(); } else if (key.equals(getString(R.string.settings_ui_key))) { fragment = new UserInterfaceSettingsFragment(); } else if (key.equals(getString(R.string.settings_gps_key))) { diff --git a/src/main/res/drawable/ic_profile.xml b/src/main/res/drawable/ic_profile.xml new file mode 100644 index 000000000..d545d45f2 --- /dev/null +++ b/src/main/res/drawable/ic_profile.xml @@ -0,0 +1,5 @@ + + + diff --git a/src/main/res/layout/fragment_profile_settings.xml b/src/main/res/layout/fragment_profile_settings.xml new file mode 100644 index 000000000..6e03e099a --- /dev/null +++ b/src/main/res/layout/fragment_profile_settings.xml @@ -0,0 +1,14 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index b0f88277f..f462e569e 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -412,6 +412,11 @@ limitations under the License. Average speed/pace Lap speed/pace + + Profile + Profile management + settingsProfile + @@ -709,4 +714,6 @@ limitations under the License. Always OpenTracks itself does not provide a map. Please install OSMDashboard to view your recordings on a map. + + Hello blank fragment diff --git a/src/main/res/xml/settings.xml b/src/main/res/xml/settings.xml index 8cbe9b1e0..3d67cecd2 100644 --- a/src/main/res/xml/settings.xml +++ b/src/main/res/xml/settings.xml @@ -2,6 +2,11 @@ + + + + + \ No newline at end of file From ee12399c2987e841c57c8874169f5c6ea951e400 Mon Sep 17 00:00:00 2001 From: Javier Sandoval Date: Fri, 22 Mar 2024 22:53:46 -0400 Subject: [PATCH 02/28] #94 Profile Settings: Create a new Profile menu item in settings and open new screen accordingly --- .../opentracks/settings/MainSettingsFragment.java | 7 ++++++- src/main/res/drawable/ic_profile.xml | 11 ++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/settings/MainSettingsFragment.java b/src/main/java/de/dennisguse/opentracks/settings/MainSettingsFragment.java index f2fd0bfbf..b9b295ffb 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/MainSettingsFragment.java +++ b/src/main/java/de/dennisguse/opentracks/settings/MainSettingsFragment.java @@ -15,6 +15,11 @@ public class MainSettingsFragment extends PreferenceFragmentCompat { public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { addPreferencesFromResource(R.xml.settings); + findPreference(getString(R.string.settings_profile_key)).setOnPreferenceClickListener(preference -> { + ((SettingsActivity) getActivity()).openScreen(getString(R.string.settings_profile_key)); + return true; + }); + findPreference(getString(R.string.settings_defaults_key)).setOnPreferenceClickListener(preference -> { ((SettingsActivity) getActivity()).openScreen(getString(R.string.settings_defaults_key)); return true; @@ -67,4 +72,4 @@ public void onDisplayPreferenceDialog(@NonNull Preference preference) { super.onDisplayPreferenceDialog(preference); } -} +} \ No newline at end of file diff --git a/src/main/res/drawable/ic_profile.xml b/src/main/res/drawable/ic_profile.xml index d545d45f2..76aa4eefe 100644 --- a/src/main/res/drawable/ic_profile.xml +++ b/src/main/res/drawable/ic_profile.xml @@ -1,5 +1,10 @@ - - + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24" + android:tint="?attr/colorControlNormal"> + + \ No newline at end of file From 9f2f1b7043f8b7c5353da17e6be1ec4c42aeb7f6 Mon Sep 17 00:00:00 2001 From: Javier Sandoval Date: Fri, 22 Mar 2024 23:05:48 -0400 Subject: [PATCH 03/28] Revert "#94 Profile Settings: Create a new Profile menu item in settings and open new screen accordingly" This reverts commit ee12399c2987e841c57c8874169f5c6ea951e400. --- .../opentracks/settings/MainSettingsFragment.java | 7 +------ src/main/res/drawable/ic_profile.xml | 11 +++-------- 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/settings/MainSettingsFragment.java b/src/main/java/de/dennisguse/opentracks/settings/MainSettingsFragment.java index b9b295ffb..f2fd0bfbf 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/MainSettingsFragment.java +++ b/src/main/java/de/dennisguse/opentracks/settings/MainSettingsFragment.java @@ -15,11 +15,6 @@ public class MainSettingsFragment extends PreferenceFragmentCompat { public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { addPreferencesFromResource(R.xml.settings); - findPreference(getString(R.string.settings_profile_key)).setOnPreferenceClickListener(preference -> { - ((SettingsActivity) getActivity()).openScreen(getString(R.string.settings_profile_key)); - return true; - }); - findPreference(getString(R.string.settings_defaults_key)).setOnPreferenceClickListener(preference -> { ((SettingsActivity) getActivity()).openScreen(getString(R.string.settings_defaults_key)); return true; @@ -72,4 +67,4 @@ public void onDisplayPreferenceDialog(@NonNull Preference preference) { super.onDisplayPreferenceDialog(preference); } -} \ No newline at end of file +} diff --git a/src/main/res/drawable/ic_profile.xml b/src/main/res/drawable/ic_profile.xml index 76aa4eefe..d545d45f2 100644 --- a/src/main/res/drawable/ic_profile.xml +++ b/src/main/res/drawable/ic_profile.xml @@ -1,10 +1,5 @@ - - \ No newline at end of file + android:height="24dp"> + + From 4a3f78e9de45901f5b7c5c2c0cda9d73489dfa66 Mon Sep 17 00:00:00 2001 From: Javier Sandoval Date: Fri, 22 Mar 2024 23:28:51 -0400 Subject: [PATCH 04/28] #94 Profile Settings: Create a new Profile menu item in settings and open new screen accordingly --- .../opentracks/settings/MainSettingsFragment.java | 7 ++++++- src/main/res/drawable/ic_profile.xml | 11 ++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/settings/MainSettingsFragment.java b/src/main/java/de/dennisguse/opentracks/settings/MainSettingsFragment.java index f2fd0bfbf..b9b295ffb 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/MainSettingsFragment.java +++ b/src/main/java/de/dennisguse/opentracks/settings/MainSettingsFragment.java @@ -15,6 +15,11 @@ public class MainSettingsFragment extends PreferenceFragmentCompat { public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { addPreferencesFromResource(R.xml.settings); + findPreference(getString(R.string.settings_profile_key)).setOnPreferenceClickListener(preference -> { + ((SettingsActivity) getActivity()).openScreen(getString(R.string.settings_profile_key)); + return true; + }); + findPreference(getString(R.string.settings_defaults_key)).setOnPreferenceClickListener(preference -> { ((SettingsActivity) getActivity()).openScreen(getString(R.string.settings_defaults_key)); return true; @@ -67,4 +72,4 @@ public void onDisplayPreferenceDialog(@NonNull Preference preference) { super.onDisplayPreferenceDialog(preference); } -} +} \ No newline at end of file diff --git a/src/main/res/drawable/ic_profile.xml b/src/main/res/drawable/ic_profile.xml index d545d45f2..76aa4eefe 100644 --- a/src/main/res/drawable/ic_profile.xml +++ b/src/main/res/drawable/ic_profile.xml @@ -1,5 +1,10 @@ - - + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24" + android:tint="?attr/colorControlNormal"> + + \ No newline at end of file From 1a052992c916be04f0e2e07314d2f83d7d4490ad Mon Sep 17 00:00:00 2001 From: Arik39 Date: Sat, 23 Mar 2024 14:21:41 -0400 Subject: [PATCH 05/28] Added ski season start date layout in default settings layout rilling/OpenTracks-Winter-SOEN-6431_2024#101 --- src/main/res/values/settings.xml | 2 ++ src/main/res/values/strings.xml | 3 +++ src/main/res/xml/settings_defaults.xml | 5 ++++- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/res/values/settings.xml b/src/main/res/values/settings.xml index 97e18a979..da2587123 100644 --- a/src/main/res/values/settings.xml +++ b/src/main/res/values/settings.xml @@ -67,6 +67,8 @@ defaultActivity @string/activity_type_unknown + skiSeasonStartDate + recordingDistanceInterval 10 diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index f462e569e..386024b81 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -366,6 +366,9 @@ limitations under the License. Units Activity\'s Defaults + Ski Season Start Date + Specify the start date of the ski season. + Reset Settings to Default Values diff --git a/src/main/res/xml/settings_defaults.xml b/src/main/res/xml/settings_defaults.xml index 778b55528..5a7393f5e 100644 --- a/src/main/res/xml/settings_defaults.xml +++ b/src/main/res/xml/settings_defaults.xml @@ -33,6 +33,9 @@ android:key="@string/track_name_key" android:title="@string/settings_recording_track_name_title" app:useSimpleSummaryProvider="true" /> + - \ No newline at end of file From 428a64529cfcbf24ea26ca1661871652e3c38184 Mon Sep 17 00:00:00 2001 From: Arik39 Date: Sat, 23 Mar 2024 14:38:18 -0400 Subject: [PATCH 06/28] Settings: Add selection of default date and month for start of ski season rilling/OpenTracks-Winter-SOEN-6431_2024#101 --- .../settings/DefaultsSettingsFragment.java | 50 +++++++++++++++++-- .../res/layout/custom_date_picker_dialog.xml | 20 ++++++++ src/main/res/values/settings.xml | 2 + 3 files changed, 69 insertions(+), 3 deletions(-) create mode 100644 src/main/res/layout/custom_date_picker_dialog.xml diff --git a/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java b/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java index e2f192cc4..bdf7684c9 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java +++ b/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java @@ -1,13 +1,18 @@ package de.dennisguse.opentracks.settings; - +import android.app.AlertDialog; import android.content.SharedPreferences; import android.os.Bundle; +import android.view.View; +import android.widget.NumberPicker; import androidx.fragment.app.DialogFragment; import androidx.preference.ListPreference; import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; +import java.text.DateFormatSymbols; +import java.util.Locale; + import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.data.models.ActivityType; import de.dennisguse.opentracks.fragments.ChooseActivityTypeDialogFragment; @@ -22,6 +27,14 @@ public class DefaultsSettingsFragment extends PreferenceFragmentCompat implement getActivity().runOnUiThread(this::updateUnits); } }; + @Override + public boolean onPreferenceTreeClick(Preference preference) { + if (preference.getKey().equals(getString(R.string.ski_season_start_key))) { + showCustomDatePickerDialog(); // Call method to show the dialog + return true; + } + return super.onPreferenceTreeClick(preference); + } @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { @@ -63,6 +76,37 @@ public void onDisplayPreferenceDialog(Preference preference) { super.onDisplayPreferenceDialog(preference); } + private void showCustomDatePickerDialog() { + AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); + View dialogView = getLayoutInflater().inflate(R.layout.custom_date_picker_dialog, null); + builder.setView(dialogView); + + NumberPicker monthPicker = dialogView.findViewById(R.id.monthPicker); + NumberPicker dayPicker = dialogView.findViewById(R.id.dayPicker); + + // Customize month picker + String[] months = new DateFormatSymbols().getShortMonths(); + monthPicker.setMinValue(0); + monthPicker.setMaxValue(months.length - 1); + monthPicker.setDisplayedValues(months); + + // Customize day picker + dayPicker.setMinValue(1); + dayPicker.setMaxValue(31); + + builder.setTitle("Select Date"); + builder.setPositiveButton("OK", (dialog, which) -> { + int selectedMonth = monthPicker.getValue(); + int selectedDay = dayPicker.getValue(); + + String selectedDate = String.format(Locale.getDefault(), "%02d-%02d", selectedDay, selectedMonth + 1); + + }); + builder.setNegativeButton("Cancel", (dialog, which) -> dialog.dismiss()); + + AlertDialog dialog = builder.create(); + dialog.show(); + } private void updateUnits() { UnitSystem unitSystem = PreferencesUtils.getUnitSystem(); @@ -74,7 +118,7 @@ private void updateUnits() { case IMPERIAL_FEET, IMPERIAL_METER -> R.array.stats_rate_imperial_options; case NAUTICAL_IMPERIAL -> - R.array.stats_rate_nautical_options; + R.array.stats_rate_nautical_options; }; String[] entries = getResources().getStringArray(entriesId); @@ -89,4 +133,4 @@ public void onChooseActivityTypeDone(ActivityType activityType) { activityPreferenceDialog.updateUI(activityType); } } -} +} \ No newline at end of file diff --git a/src/main/res/layout/custom_date_picker_dialog.xml b/src/main/res/layout/custom_date_picker_dialog.xml new file mode 100644 index 000000000..4645f67ab --- /dev/null +++ b/src/main/res/layout/custom_date_picker_dialog.xml @@ -0,0 +1,20 @@ + + + + + + + diff --git a/src/main/res/values/settings.xml b/src/main/res/values/settings.xml index da2587123..ff849f2ff 100644 --- a/src/main/res/values/settings.xml +++ b/src/main/res/values/settings.xml @@ -68,6 +68,8 @@ @string/activity_type_unknown skiSeasonStartDate + + recordingDistanceInterval 10 From d7ef051f68a4511c383ffb1fd25c390cd80d81a7 Mon Sep 17 00:00:00 2001 From: Arik39 Date: Mon, 25 Mar 2024 10:28:23 -0400 Subject: [PATCH 07/28] Settings: set default date and month to 1st September for start of ski season rilling/OpenTracks-Winter-SOEN-6431_2024#101 --- .../opentracks/settings/DefaultsSettingsFragment.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java b/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java index bdf7684c9..bb4d25033 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java +++ b/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java @@ -94,6 +94,10 @@ private void showCustomDatePickerDialog() { dayPicker.setMinValue(1); dayPicker.setMaxValue(31); + //default date + monthPicker.setValue(8); + dayPicker.setValue(1); + builder.setTitle("Select Date"); builder.setPositiveButton("OK", (dialog, which) -> { int selectedMonth = monthPicker.getValue(); From de05a0dbd054513eeacd2e245ca43bf2f0d468f8 Mon Sep 17 00:00:00 2001 From: Pranav Sakariya Date: Mon, 25 Mar 2024 11:27:28 -0400 Subject: [PATCH 08/28] rilling#85 Persist data locally on mobile device for default start date of Ski season --- .../settings/DefaultsSettingsFragment.java | 66 ++++++++++++------- 1 file changed, 42 insertions(+), 24 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java b/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java index bb4d25033..ee7baf8a9 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java +++ b/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java @@ -1,7 +1,10 @@ package de.dennisguse.opentracks.settings; + import android.app.AlertDialog; import android.content.SharedPreferences; import android.os.Bundle; +import android.preference.PreferenceManager; +import android.util.Log; import android.view.View; import android.widget.NumberPicker; @@ -17,16 +20,20 @@ import de.dennisguse.opentracks.data.models.ActivityType; import de.dennisguse.opentracks.fragments.ChooseActivityTypeDialogFragment; -public class DefaultsSettingsFragment extends PreferenceFragmentCompat implements ChooseActivityTypeDialogFragment.ChooseActivityTypeCaller { +public class DefaultsSettingsFragment extends PreferenceFragmentCompat + implements ChooseActivityTypeDialogFragment.ChooseActivityTypeCaller { - // Used to forward update from ChooseActivityTypeDialogFragment; TODO Could be replaced with LiveData. + // Used to forward update from ChooseActivityTypeDialogFragment; TODO Could be + // replaced with LiveData.y private ActivityTypePreference.ActivityPreferenceDialog activityPreferenceDialog; - private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (sharedPreferences, key) -> { + private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = ( + sharedPreferences, key) -> { if (PreferencesUtils.isKey(R.string.stats_units_key, key)) { getActivity().runOnUiThread(this::updateUnits); } }; + @Override public boolean onPreferenceTreeClick(Preference preference) { if (preference.getKey().equals(getString(R.string.ski_season_start_key))) { @@ -76,7 +83,11 @@ public void onDisplayPreferenceDialog(Preference preference) { super.onDisplayPreferenceDialog(preference); } + private void showCustomDatePickerDialog() { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); + String defaultStartDate = prefs.getString(getString(R.string.ski_season_start_key), "09-01"); + AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); View dialogView = getLayoutInflater().inflate(R.layout.custom_date_picker_dialog, null); builder.setView(dialogView); @@ -84,7 +95,7 @@ private void showCustomDatePickerDialog() { NumberPicker monthPicker = dialogView.findViewById(R.id.monthPicker); NumberPicker dayPicker = dialogView.findViewById(R.id.dayPicker); - // Customize month picker + // Customize month picker with retrieved date or default String[] months = new DateFormatSymbols().getShortMonths(); monthPicker.setMinValue(0); monthPicker.setMaxValue(months.length - 1); @@ -94,17 +105,21 @@ private void showCustomDatePickerDialog() { dayPicker.setMinValue(1); dayPicker.setMaxValue(31); - //default date - monthPicker.setValue(8); - dayPicker.setValue(1); + // Set picker values to saved date or default + String[] dateParts = defaultStartDate.split("-"); + int defaultMonth = Integer.parseInt(dateParts[0]) - 1; + int defaultDay = Integer.parseInt(dateParts[1]); + monthPicker.setValue(defaultMonth); + dayPicker.setValue(defaultDay); builder.setTitle("Select Date"); builder.setPositiveButton("OK", (dialog, which) -> { int selectedMonth = monthPicker.getValue(); int selectedDay = dayPicker.getValue(); - - String selectedDate = String.format(Locale.getDefault(), "%02d-%02d", selectedDay, selectedMonth + 1); - + String selectedDate = String.format(Locale.getDefault(), "%02d-%02d", selectedMonth + 1, selectedDay); + SharedPreferences.Editor editor = prefs.edit(); + editor.putString(getString(R.string.ski_season_start_key), selectedDate); + editor.apply(); }); builder.setNegativeButton("Cancel", (dialog, which) -> dialog.dismiss()); @@ -114,21 +129,24 @@ private void showCustomDatePickerDialog() { private void updateUnits() { UnitSystem unitSystem = PreferencesUtils.getUnitSystem(); - ListPreference statsRatePreferences = findPreference(getString(R.string.stats_rate_key)); - int entriesId = switch (unitSystem) { - case METRIC -> R.array.stats_rate_metric_options; - case IMPERIAL_FEET, IMPERIAL_METER -> - R.array.stats_rate_imperial_options; - case NAUTICAL_IMPERIAL -> - R.array.stats_rate_nautical_options; - }; - - String[] entries = getResources().getStringArray(entriesId); - statsRatePreferences.setEntries(entries); - - HackUtils.invalidatePreference(statsRatePreferences); + // Check for null to avoid NullPointerException + if (statsRatePreferences != null) { + int entriesId = switch (unitSystem) { + case METRIC -> R.array.stats_rate_metric_options; + case IMPERIAL_FEET, IMPERIAL_METER -> R.array.stats_rate_imperial_options; + case NAUTICAL_IMPERIAL -> R.array.stats_rate_nautical_options; + }; + + String[] entries = getResources().getStringArray(entriesId); + statsRatePreferences.setEntries(entries); + + // Further actions could be added here if needed, e.g., updating other related + // preferences. + } else { + Log.w("DefaultsSettingsFragment", "Stats rate preference is not found."); + } } @Override @@ -137,4 +155,4 @@ public void onChooseActivityTypeDone(ActivityType activityType) { activityPreferenceDialog.updateUI(activityType); } } -} \ No newline at end of file +} From 86061f74427e00ccacbb8833273aca05917bad18 Mon Sep 17 00:00:00 2001 From: Pranav Sakariya Date: Tue, 26 Mar 2024 15:46:19 -0400 Subject: [PATCH 09/28] rilling#85 add getter and setter method for ski season start date --- .../opentracks/settings/DefaultsSettingsFragment.java | 7 ++----- .../dennisguse/opentracks/settings/PreferencesUtils.java | 7 +++++++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java b/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java index ee7baf8a9..80e8501c5 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java +++ b/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java @@ -85,8 +85,7 @@ public void onDisplayPreferenceDialog(Preference preference) { } private void showCustomDatePickerDialog() { - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); - String defaultStartDate = prefs.getString(getString(R.string.ski_season_start_key), "09-01"); + String defaultStartDate = PreferencesUtils.getSkiSeasonStartDate(); AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); View dialogView = getLayoutInflater().inflate(R.layout.custom_date_picker_dialog, null); @@ -117,9 +116,7 @@ private void showCustomDatePickerDialog() { int selectedMonth = monthPicker.getValue(); int selectedDay = dayPicker.getValue(); String selectedDate = String.format(Locale.getDefault(), "%02d-%02d", selectedMonth + 1, selectedDay); - SharedPreferences.Editor editor = prefs.edit(); - editor.putString(getString(R.string.ski_season_start_key), selectedDate); - editor.apply(); + PreferencesUtils.setSkiSeasonStartDate(selectedDate); }); builder.setNegativeButton("Cancel", (dialog, which) -> dialog.dismiss()); diff --git a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java index 531aa4fbf..d35884f0e 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java +++ b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java @@ -814,6 +814,9 @@ public static List getAllCustomLayouts() { public static List getAllCustomLayoutNames() { return getAllCustomLayouts().stream().map(RecordingLayout::getName).collect(Collectors.toList()); } + public static String getSkiSeasonStartDate() { + return getString(R.string.ski_season_start_key, "09-01"); + } public static void resetCustomLayoutPreferences() { if (sharedPreferences.contains(resources.getString(R.string.stats_custom_layouts_key))) { @@ -838,6 +841,10 @@ public static void setShowOnMapFormat(final String showOnMapFormat) { setString(R.string.show_on_map_format_key, showOnMapFormat); } + public static void setSkiSeasonStartDate(String newStartDate) { + setString(R.string.ski_season_start_key, newStartDate); + } + public static String getShowOnMapFormat() { return getString(R.string.show_on_map_format_key, IntentDashboardUtils.PREFERENCE_ID_ASK); } From cc850777be889d891eac1c71139704a4deb25543 Mon Sep 17 00:00:00 2001 From: Pranav Sakariya Date: Thu, 28 Mar 2024 16:13:35 -0400 Subject: [PATCH 10/28] rilling#85 Revert : getter and setter method for ski season start date --- .../opentracks/settings/PreferencesUtils.java | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java index d35884f0e..cde216671 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java +++ b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java @@ -82,12 +82,14 @@ public static void initPreferences(final Context context, final Resources resour PreferencesOpenHelper.newInstance(PREFERENCES_VERSION).check(); } - public static void registerOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListener changeListener) { + public static void registerOnSharedPreferenceChangeListener( + SharedPreferences.OnSharedPreferenceChangeListener changeListener) { sharedPreferences.registerOnSharedPreferenceChangeListener(changeListener); changeListener.onSharedPreferenceChanged(sharedPreferences, null); } - public static void unregisterOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListener changeListener) { + public static void unregisterOnSharedPreferenceChangeListener( + SharedPreferences.OnSharedPreferenceChangeListener changeListener) { sharedPreferences.unregisterOnSharedPreferenceChangeListener(changeListener); } @@ -301,7 +303,8 @@ public static HeartRateZones getHeartRateZones() { } public static boolean shouldShowStatsOnLockscreen() { - final boolean STATS_SHOW_ON_LOCKSCREEN_DEFAULT = resources.getBoolean(R.bool.stats_show_on_lockscreen_while_recording_default); + final boolean STATS_SHOW_ON_LOCKSCREEN_DEFAULT = resources + .getBoolean(R.bool.stats_show_on_lockscreen_while_recording_default); return getBoolean(R.string.stats_show_on_lockscreen_while_recording_key, STATS_SHOW_ON_LOCKSCREEN_DEFAULT); } @@ -814,9 +817,6 @@ public static List getAllCustomLayouts() { public static List getAllCustomLayoutNames() { return getAllCustomLayouts().stream().map(RecordingLayout::getName).collect(Collectors.toList()); } - public static String getSkiSeasonStartDate() { - return getString(R.string.ski_season_start_key, "09-01"); - } public static void resetCustomLayoutPreferences() { if (sharedPreferences.contains(resources.getString(R.string.stats_custom_layouts_key))) { @@ -841,10 +841,6 @@ public static void setShowOnMapFormat(final String showOnMapFormat) { setString(R.string.show_on_map_format_key, showOnMapFormat); } - public static void setSkiSeasonStartDate(String newStartDate) { - setString(R.string.ski_season_start_key, newStartDate); - } - public static String getShowOnMapFormat() { return getString(R.string.show_on_map_format_key, IntentDashboardUtils.PREFERENCE_ID_ASK); } From ca59cc704b968c00420a67728e20f8f8f9c50c92 Mon Sep 17 00:00:00 2001 From: Goutham Susarla Date: Thu, 28 Mar 2024 17:11:55 -0400 Subject: [PATCH 11/28] rilling#85 add getter and setter method for ski season start date --- .../dennisguse/opentracks/settings/PreferencesUtils.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java index cde216671..34b8d4bff 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java +++ b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java @@ -101,6 +101,14 @@ public static void setDefaultActivityLocalized(String newDefaultActivity) { setString(R.string.default_activity_key, newDefaultActivity); } + public static String getSkiSeasonStartDate() { + return getString(R.string.ski_season_start_key, "09-01"); + } + + public static void setSkiSeasonStartDate(String newStartDate) { + setString(R.string.ski_season_start_key, newStartDate); + } + /** * Gets a preference key * From 9d90b894f2f8de0905f983b664adf857b7f5c224 Mon Sep 17 00:00:00 2001 From: Arik39 Date: Sat, 23 Mar 2024 14:21:41 -0400 Subject: [PATCH 12/28] Added ski season start date layout in default settings layout rilling/OpenTracks-Winter-SOEN-6431_2024#101 --- src/main/res/values/settings.xml | 2 ++ src/main/res/values/strings.xml | 3 +++ src/main/res/xml/settings_defaults.xml | 5 ++++- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/res/values/settings.xml b/src/main/res/values/settings.xml index 97e18a979..da2587123 100644 --- a/src/main/res/values/settings.xml +++ b/src/main/res/values/settings.xml @@ -67,6 +67,8 @@ defaultActivity @string/activity_type_unknown + skiSeasonStartDate + recordingDistanceInterval 10 diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index f462e569e..386024b81 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -366,6 +366,9 @@ limitations under the License. Units Activity\'s Defaults + Ski Season Start Date + Specify the start date of the ski season. + Reset Settings to Default Values diff --git a/src/main/res/xml/settings_defaults.xml b/src/main/res/xml/settings_defaults.xml index 778b55528..5a7393f5e 100644 --- a/src/main/res/xml/settings_defaults.xml +++ b/src/main/res/xml/settings_defaults.xml @@ -33,6 +33,9 @@ android:key="@string/track_name_key" android:title="@string/settings_recording_track_name_title" app:useSimpleSummaryProvider="true" /> + - \ No newline at end of file From 54580a432ce761f409844812e9bdb5741b22f6fd Mon Sep 17 00:00:00 2001 From: Arik39 Date: Sat, 23 Mar 2024 14:38:18 -0400 Subject: [PATCH 13/28] Settings: Add selection of default date and month for start of ski season rilling/OpenTracks-Winter-SOEN-6431_2024#101 --- .../settings/DefaultsSettingsFragment.java | 50 +++++++++++++++++-- .../res/layout/custom_date_picker_dialog.xml | 20 ++++++++ src/main/res/values/settings.xml | 2 + 3 files changed, 69 insertions(+), 3 deletions(-) create mode 100644 src/main/res/layout/custom_date_picker_dialog.xml diff --git a/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java b/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java index e2f192cc4..bdf7684c9 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java +++ b/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java @@ -1,13 +1,18 @@ package de.dennisguse.opentracks.settings; - +import android.app.AlertDialog; import android.content.SharedPreferences; import android.os.Bundle; +import android.view.View; +import android.widget.NumberPicker; import androidx.fragment.app.DialogFragment; import androidx.preference.ListPreference; import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; +import java.text.DateFormatSymbols; +import java.util.Locale; + import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.data.models.ActivityType; import de.dennisguse.opentracks.fragments.ChooseActivityTypeDialogFragment; @@ -22,6 +27,14 @@ public class DefaultsSettingsFragment extends PreferenceFragmentCompat implement getActivity().runOnUiThread(this::updateUnits); } }; + @Override + public boolean onPreferenceTreeClick(Preference preference) { + if (preference.getKey().equals(getString(R.string.ski_season_start_key))) { + showCustomDatePickerDialog(); // Call method to show the dialog + return true; + } + return super.onPreferenceTreeClick(preference); + } @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { @@ -63,6 +76,37 @@ public void onDisplayPreferenceDialog(Preference preference) { super.onDisplayPreferenceDialog(preference); } + private void showCustomDatePickerDialog() { + AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); + View dialogView = getLayoutInflater().inflate(R.layout.custom_date_picker_dialog, null); + builder.setView(dialogView); + + NumberPicker monthPicker = dialogView.findViewById(R.id.monthPicker); + NumberPicker dayPicker = dialogView.findViewById(R.id.dayPicker); + + // Customize month picker + String[] months = new DateFormatSymbols().getShortMonths(); + monthPicker.setMinValue(0); + monthPicker.setMaxValue(months.length - 1); + monthPicker.setDisplayedValues(months); + + // Customize day picker + dayPicker.setMinValue(1); + dayPicker.setMaxValue(31); + + builder.setTitle("Select Date"); + builder.setPositiveButton("OK", (dialog, which) -> { + int selectedMonth = monthPicker.getValue(); + int selectedDay = dayPicker.getValue(); + + String selectedDate = String.format(Locale.getDefault(), "%02d-%02d", selectedDay, selectedMonth + 1); + + }); + builder.setNegativeButton("Cancel", (dialog, which) -> dialog.dismiss()); + + AlertDialog dialog = builder.create(); + dialog.show(); + } private void updateUnits() { UnitSystem unitSystem = PreferencesUtils.getUnitSystem(); @@ -74,7 +118,7 @@ private void updateUnits() { case IMPERIAL_FEET, IMPERIAL_METER -> R.array.stats_rate_imperial_options; case NAUTICAL_IMPERIAL -> - R.array.stats_rate_nautical_options; + R.array.stats_rate_nautical_options; }; String[] entries = getResources().getStringArray(entriesId); @@ -89,4 +133,4 @@ public void onChooseActivityTypeDone(ActivityType activityType) { activityPreferenceDialog.updateUI(activityType); } } -} +} \ No newline at end of file diff --git a/src/main/res/layout/custom_date_picker_dialog.xml b/src/main/res/layout/custom_date_picker_dialog.xml new file mode 100644 index 000000000..4645f67ab --- /dev/null +++ b/src/main/res/layout/custom_date_picker_dialog.xml @@ -0,0 +1,20 @@ + + + + + + + diff --git a/src/main/res/values/settings.xml b/src/main/res/values/settings.xml index da2587123..ff849f2ff 100644 --- a/src/main/res/values/settings.xml +++ b/src/main/res/values/settings.xml @@ -68,6 +68,8 @@ @string/activity_type_unknown skiSeasonStartDate + + recordingDistanceInterval 10 From a323e2d93bc5852608af12032d618c1d5ac893f0 Mon Sep 17 00:00:00 2001 From: Arik39 Date: Mon, 25 Mar 2024 10:28:23 -0400 Subject: [PATCH 14/28] Settings: set default date and month to 1st September for start of ski season rilling/OpenTracks-Winter-SOEN-6431_2024#101 --- .../opentracks/settings/DefaultsSettingsFragment.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java b/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java index bdf7684c9..bb4d25033 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java +++ b/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java @@ -94,6 +94,10 @@ private void showCustomDatePickerDialog() { dayPicker.setMinValue(1); dayPicker.setMaxValue(31); + //default date + monthPicker.setValue(8); + dayPicker.setValue(1); + builder.setTitle("Select Date"); builder.setPositiveButton("OK", (dialog, which) -> { int selectedMonth = monthPicker.getValue(); From 55e3eb7940b84ba015145502e5f8bb79338afa6f Mon Sep 17 00:00:00 2001 From: Pranav Sakariya Date: Sat, 30 Mar 2024 10:36:37 -0400 Subject: [PATCH 15/28] Add Defalut date rilling#85 --- .../opentracks/settings/DefaultsSettingsFragment.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java b/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java index 80e8501c5..d901834f6 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java +++ b/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java @@ -104,6 +104,10 @@ private void showCustomDatePickerDialog() { dayPicker.setMinValue(1); dayPicker.setMaxValue(31); + //default date + monthPicker.setValue(8); + dayPicker.setValue(1); + // Set picker values to saved date or default String[] dateParts = defaultStartDate.split("-"); int defaultMonth = Integer.parseInt(dateParts[0]) - 1; From 5f22b019d1cfdcc9988d8a8a67e369ec39883245 Mon Sep 17 00:00:00 2001 From: Pranav Sakariya Date: Sat, 30 Mar 2024 10:43:11 -0400 Subject: [PATCH 16/28] Resolve conflict rilling#85 --- .../settings/DefaultsSettingsFragment.java | 35 +++++++++---------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java b/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java index d901834f6..b4d07e7a1 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java +++ b/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java @@ -1,12 +1,10 @@ package de.dennisguse.opentracks.settings; - import android.app.AlertDialog; import android.content.SharedPreferences; import android.os.Bundle; -import android.preference.PreferenceManager; -import android.util.Log; import android.view.View; import android.widget.NumberPicker; +import android.widget.TextView; import androidx.fragment.app.DialogFragment; import androidx.preference.ListPreference; @@ -14,6 +12,8 @@ import androidx.preference.PreferenceFragmentCompat; import java.text.DateFormatSymbols; +import java.text.SimpleDateFormat; +import java.util.Calendar; import java.util.Locale; import de.dennisguse.opentracks.R; @@ -130,24 +130,21 @@ private void showCustomDatePickerDialog() { private void updateUnits() { UnitSystem unitSystem = PreferencesUtils.getUnitSystem(); + ListPreference statsRatePreferences = findPreference(getString(R.string.stats_rate_key)); - // Check for null to avoid NullPointerException - if (statsRatePreferences != null) { - int entriesId = switch (unitSystem) { - case METRIC -> R.array.stats_rate_metric_options; - case IMPERIAL_FEET, IMPERIAL_METER -> R.array.stats_rate_imperial_options; - case NAUTICAL_IMPERIAL -> R.array.stats_rate_nautical_options; - }; - - String[] entries = getResources().getStringArray(entriesId); - statsRatePreferences.setEntries(entries); - - // Further actions could be added here if needed, e.g., updating other related - // preferences. - } else { - Log.w("DefaultsSettingsFragment", "Stats rate preference is not found."); - } + int entriesId = switch (unitSystem) { + case METRIC -> R.array.stats_rate_metric_options; + case IMPERIAL_FEET, IMPERIAL_METER -> + R.array.stats_rate_imperial_options; + case NAUTICAL_IMPERIAL -> + R.array.stats_rate_nautical_options; + }; + + String[] entries = getResources().getStringArray(entriesId); + statsRatePreferences.setEntries(entries); + + HackUtils.invalidatePreference(statsRatePreferences); } @Override From 2abdee0ffe1bdf70d7b21a353a7f13d084a215cc Mon Sep 17 00:00:00 2001 From: Pranav Sakariya Date: Sun, 31 Mar 2024 00:07:35 -0400 Subject: [PATCH 17/28] Resolve conflict rilling#85 --- .../opentracks/settings/DefaultsSettingsFragment.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java b/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java index b4d07e7a1..f1f8ebc5b 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java +++ b/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java @@ -4,7 +4,6 @@ import android.os.Bundle; import android.view.View; import android.widget.NumberPicker; -import android.widget.TextView; import androidx.fragment.app.DialogFragment; import androidx.preference.ListPreference; @@ -12,8 +11,6 @@ import androidx.preference.PreferenceFragmentCompat; import java.text.DateFormatSymbols; -import java.text.SimpleDateFormat; -import java.util.Calendar; import java.util.Locale; import de.dennisguse.opentracks.R; From bf3b1c2e7578109b7c34c9e2f0ba4c3b718b48d6 Mon Sep 17 00:00:00 2001 From: gaurav Date: Sun, 31 Mar 2024 01:27:13 -0400 Subject: [PATCH 18/28] Add Selection and Validate Date and Month for Default Start Date of Ski Season --- .../settings/DefaultsSettingsFragment.java | 39 +++++++++++++++++-- src/main/res/values/strings.xml | 1 + src/main/res/xml/settings_defaults.xml | 6 ++- 3 files changed, 41 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java b/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java index bb4d25033..262d076aa 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java +++ b/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java @@ -4,6 +4,7 @@ import android.os.Bundle; import android.view.View; import android.widget.NumberPicker; +import android.widget.TextView; import androidx.fragment.app.DialogFragment; import androidx.preference.ListPreference; @@ -11,6 +12,8 @@ import androidx.preference.PreferenceFragmentCompat; import java.text.DateFormatSymbols; +import java.text.SimpleDateFormat; +import java.util.Calendar; import java.util.Locale; import de.dennisguse.opentracks.R; @@ -83,18 +86,30 @@ private void showCustomDatePickerDialog() { NumberPicker monthPicker = dialogView.findViewById(R.id.monthPicker); NumberPicker dayPicker = dialogView.findViewById(R.id.dayPicker); + Preference preference = findPreference(getString(R.string.ski_season_start_key)); // Customize month picker String[] months = new DateFormatSymbols().getShortMonths(); monthPicker.setMinValue(0); monthPicker.setMaxValue(months.length - 1); - monthPicker.setDisplayedValues(months); + monthPicker.setDisplayedValues(months); // Display month names + + // Customize day picker based on the selected month + monthPicker.setOnValueChangedListener((picker, oldVal, newVal) -> { + int maxDay = getMaxDayOfMonth(newVal); // Get the maximum day for the selected month + dayPicker.setMaxValue(maxDay); + System.out.println("New Value: " + newVal + ", Old Value: " + oldVal + ", Max Day: " + maxDay); + }); + +// Set initial max day for the initial month + int initialMonth = monthPicker.getValue(); + int maxDay = getMaxDayOfMonth(initialMonth); + dayPicker.setMaxValue(maxDay); + System.out.println("Initial Month: " + initialMonth + ", Max Day: " + maxDay); // Customize day picker dayPicker.setMinValue(1); - dayPicker.setMaxValue(31); - //default date monthPicker.setValue(8); dayPicker.setValue(1); @@ -103,15 +118,31 @@ private void showCustomDatePickerDialog() { int selectedMonth = monthPicker.getValue(); int selectedDay = dayPicker.getValue(); - String selectedDate = String.format(Locale.getDefault(), "%02d-%02d", selectedDay, selectedMonth + 1); + String selectedDate = String.format(Locale.getDefault(), "%02d %s", selectedDay, months[selectedMonth]); + if (preference != null) { + // Set summary to display the selected date + preference.setSummary(selectedDate); + } }); + builder.setNegativeButton("Cancel", (dialog, which) -> dialog.dismiss()); AlertDialog dialog = builder.create(); dialog.show(); } + private int getMaxDayOfMonth(int month) { + // Get the maximum day for the given month + Calendar calendar = Calendar.getInstance(); + calendar.clear(); // Clear all fields to prevent interference from previous configurations + calendar.set(Calendar.MONTH, month); + return calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + } + + + + private void updateUnits() { UnitSystem unitSystem = PreferencesUtils.getUnitSystem(); diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 386024b81..e35d89196 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -719,4 +719,5 @@ limitations under the License. OpenTracks itself does not provide a map. Please install OSMDashboard to view your recordings on a map. Hello blank fragment + 1 Sep diff --git a/src/main/res/xml/settings_defaults.xml b/src/main/res/xml/settings_defaults.xml index 5a7393f5e..ecb0be952 100644 --- a/src/main/res/xml/settings_defaults.xml +++ b/src/main/res/xml/settings_defaults.xml @@ -35,7 +35,11 @@ app:useSimpleSummaryProvider="true" /> + android:summary="@string/default_Date_Key" + app:useSimpleSummaryProvider="true" + /> \ No newline at end of file From 790d0178f76b8b7aebbaaf6cd70e9e0c0d5df662 Mon Sep 17 00:00:00 2001 From: Pranav Sakariya Date: Sun, 31 Mar 2024 10:43:29 -0400 Subject: [PATCH 19/28] Resilve conflicts rilling#85 --- .../opentracks/settings/DefaultsSettingsFragment.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java b/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java index f1f8ebc5b..3a7212219 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java +++ b/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java @@ -4,6 +4,7 @@ import android.os.Bundle; import android.view.View; import android.widget.NumberPicker; +import android.widget.TextView; import androidx.fragment.app.DialogFragment; import androidx.preference.ListPreference; @@ -11,12 +12,15 @@ import androidx.preference.PreferenceFragmentCompat; import java.text.DateFormatSymbols; +import java.text.SimpleDateFormat; +import java.util.Calendar; import java.util.Locale; import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.data.models.ActivityType; import de.dennisguse.opentracks.fragments.ChooseActivityTypeDialogFragment; + public class DefaultsSettingsFragment extends PreferenceFragmentCompat implements ChooseActivityTypeDialogFragment.ChooseActivityTypeCaller { From 3db84318e3b6bfe198d44c085b582c2a8c4b09ce Mon Sep 17 00:00:00 2001 From: Pranav Sakariya Date: Sun, 31 Mar 2024 10:44:04 -0400 Subject: [PATCH 20/28] Resolve conflicts rilling #85 --- src/main/res/xml/settings_defaults.xml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/res/xml/settings_defaults.xml b/src/main/res/xml/settings_defaults.xml index 5a7393f5e..2cb59e3d0 100644 --- a/src/main/res/xml/settings_defaults.xml +++ b/src/main/res/xml/settings_defaults.xml @@ -33,9 +33,13 @@ android:key="@string/track_name_key" android:title="@string/settings_recording_track_name_title" app:useSimpleSummaryProvider="true" /> - + android:summary="@string/default_Date_Key" + app:useSimpleSummaryProvider="true" + /> \ No newline at end of file From cea6e6f65290ef243cc26ee3b385f0dde81d8289 Mon Sep 17 00:00:00 2001 From: Pranav Sakariya Date: Sun, 31 Mar 2024 10:45:23 -0400 Subject: [PATCH 21/28] Resolve conflicts rilling#85 --- src/main/res/xml/settings_defaults.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/res/xml/settings_defaults.xml b/src/main/res/xml/settings_defaults.xml index 2cb59e3d0..ecb0be952 100644 --- a/src/main/res/xml/settings_defaults.xml +++ b/src/main/res/xml/settings_defaults.xml @@ -33,7 +33,7 @@ android:key="@string/track_name_key" android:title="@string/settings_recording_track_name_title" app:useSimpleSummaryProvider="true" /> - Date: Sun, 31 Mar 2024 11:03:52 -0400 Subject: [PATCH 22/28] resolve conflict rilling#85 --- src/main/res/values/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 386024b81..e35d89196 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -719,4 +719,5 @@ limitations under the License. OpenTracks itself does not provide a map. Please install OSMDashboard to view your recordings on a map. Hello blank fragment + 1 Sep From 7d896202c400744510b60022d1608848597dd5f9 Mon Sep 17 00:00:00 2001 From: gaurav Date: Sun, 31 Mar 2024 19:48:00 -0400 Subject: [PATCH 23/28] Updated Settings: Add selection of default date and month for start of ski season --- .../settings/DefaultsSettingsFragment.java | 67 +------------------ 1 file changed, 3 insertions(+), 64 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java b/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java index 3e98d2b5d..83317d658 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java +++ b/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java @@ -20,16 +20,12 @@ import de.dennisguse.opentracks.data.models.ActivityType; import de.dennisguse.opentracks.fragments.ChooseActivityTypeDialogFragment; +public class DefaultsSettingsFragment extends PreferenceFragmentCompat implements ChooseActivityTypeDialogFragment.ChooseActivityTypeCaller { -public class DefaultsSettingsFragment extends PreferenceFragmentCompat - implements ChooseActivityTypeDialogFragment.ChooseActivityTypeCaller { - - // Used to forward update from ChooseActivityTypeDialogFragment; TODO Could be - // replaced with LiveData.y + // Used to forward update from ChooseActivityTypeDialogFragment; TODO Could be replaced with LiveData. private ActivityTypePreference.ActivityPreferenceDialog activityPreferenceDialog; - private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = ( - sharedPreferences, key) -> { + private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (sharedPreferences, key) -> { if (PreferencesUtils.isKey(R.string.stats_units_key, key)) { getActivity().runOnUiThread(this::updateUnits); } @@ -43,15 +39,6 @@ public boolean onPreferenceTreeClick(Preference preference) { return super.onPreferenceTreeClick(preference); } - @Override - public boolean onPreferenceTreeClick(Preference preference) { - if (preference.getKey().equals(getString(R.string.ski_season_start_key))) { - showCustomDatePickerDialog(); // Call method to show the dialog - return true; - } - return super.onPreferenceTreeClick(preference); - } - @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { addPreferencesFromResource(R.xml.settings_defaults); @@ -152,54 +139,6 @@ private int getMaxDayOfMonth(int month) { calendar.set(Calendar.MONTH, month); return calendar.getActualMaximum(Calendar.DAY_OF_MONTH); } - - - - - private void showCustomDatePickerDialog() { - String defaultStartDate = PreferencesUtils.getSkiSeasonStartDate(); - - AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); - View dialogView = getLayoutInflater().inflate(R.layout.custom_date_picker_dialog, null); - builder.setView(dialogView); - - NumberPicker monthPicker = dialogView.findViewById(R.id.monthPicker); - NumberPicker dayPicker = dialogView.findViewById(R.id.dayPicker); - - // Customize month picker with retrieved date or default - String[] months = new DateFormatSymbols().getShortMonths(); - monthPicker.setMinValue(0); - monthPicker.setMaxValue(months.length - 1); - monthPicker.setDisplayedValues(months); - - // Customize day picker - dayPicker.setMinValue(1); - dayPicker.setMaxValue(31); - - //default date - monthPicker.setValue(8); - dayPicker.setValue(1); - - // Set picker values to saved date or default - String[] dateParts = defaultStartDate.split("-"); - int defaultMonth = Integer.parseInt(dateParts[0]) - 1; - int defaultDay = Integer.parseInt(dateParts[1]); - monthPicker.setValue(defaultMonth); - dayPicker.setValue(defaultDay); - - builder.setTitle("Select Date"); - builder.setPositiveButton("OK", (dialog, which) -> { - int selectedMonth = monthPicker.getValue(); - int selectedDay = dayPicker.getValue(); - String selectedDate = String.format(Locale.getDefault(), "%02d-%02d", selectedMonth + 1, selectedDay); - PreferencesUtils.setSkiSeasonStartDate(selectedDate); - }); - builder.setNegativeButton("Cancel", (dialog, which) -> dialog.dismiss()); - - AlertDialog dialog = builder.create(); - dialog.show(); - } - private void updateUnits() { UnitSystem unitSystem = PreferencesUtils.getUnitSystem(); From 8ad8071233f745142d3027f68b0baa6d9cbcf298 Mon Sep 17 00:00:00 2001 From: Pranav Sakariya <71834608+pranav687@users.noreply.github.com> Date: Mon, 1 Apr 2024 12:07:18 -0400 Subject: [PATCH 24/28] rilling#85 Added the code to show the Last Selected date in the date Picker * Added the code to show the Last Selected date in the date Picker rilling#85 * Updated the code to show the Last Selected date in the date Picker riling#85 * Added the code to show the Last Selected date in the date Picker rilling#85 * Validate Date and Month for Default Start Date of Ski season date rilling#85 --- .../settings/DefaultsSettingsFragment.java | 110 ++++++++++++------ 1 file changed, 77 insertions(+), 33 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java b/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java index 83317d658..df5187e03 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java +++ b/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java @@ -10,9 +10,11 @@ import androidx.preference.ListPreference; import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; +import androidx.preference.PreferenceManager; import java.text.DateFormatSymbols; import java.text.SimpleDateFormat; +import java.util.Arrays; import java.util.Calendar; import java.util.Locale; @@ -53,8 +55,8 @@ public void onStart() { @Override public void onResume() { super.onResume(); - PreferencesUtils.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); updateUnits(); + updateSkiSeasonStartPreferenceSummary(); // This will update the summary on resume } @Override @@ -79,63 +81,105 @@ public void onDisplayPreferenceDialog(Preference preference) { super.onDisplayPreferenceDialog(preference); } + private void showCustomDatePickerDialog() { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); View dialogView = getLayoutInflater().inflate(R.layout.custom_date_picker_dialog, null); builder.setView(dialogView); - + NumberPicker monthPicker = dialogView.findViewById(R.id.monthPicker); NumberPicker dayPicker = dialogView.findViewById(R.id.dayPicker); Preference preference = findPreference(getString(R.string.ski_season_start_key)); - - // Customize month picker - String[] months = new DateFormatSymbols().getShortMonths(); + + String defaultStartDate = prefs.getString(getString(R.string.ski_season_start_key), "09-01"); + + // Initialize month picker + String[] months = new DateFormatSymbols().getMonths(); // Full months array monthPicker.setMinValue(0); monthPicker.setMaxValue(months.length - 1); - monthPicker.setDisplayedValues(months); // Display month names - - // Customize day picker based on the selected month + monthPicker.setDisplayedValues(months); + + // Initialize day picker with maximum value based on the month + int month = Integer.parseInt(defaultStartDate.split("-")[0]) - 1; + int day = Integer.parseInt(defaultStartDate.split("-")[1]); + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.MONTH, month); + dayPicker.setMaxValue(calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); + dayPicker.setMinValue(1); + + // Set current values + monthPicker.setValue(month); + dayPicker.setValue(Math.min(day, dayPicker.getMaxValue())); // Ensure day is within the valid range + monthPicker.setOnValueChangedListener((picker, oldVal, newVal) -> { - int maxDay = getMaxDayOfMonth(newVal); // Get the maximum day for the selected month + // Adjust the maximum number of days according to the selected month + calendar.set(Calendar.MONTH, newVal); + int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); dayPicker.setMaxValue(maxDay); - System.out.println("New Value: " + newVal + ", Old Value: " + oldVal + ", Max Day: " + maxDay); + + // Adjust day value if it exceeds the max day for the new month + if (dayPicker.getValue() > maxDay) { + dayPicker.setValue(maxDay); + } }); - -// Set initial max day for the initial month - int initialMonth = monthPicker.getValue(); - int maxDay = getMaxDayOfMonth(initialMonth); - dayPicker.setMaxValue(maxDay); - System.out.println("Initial Month: " + initialMonth + ", Max Day: " + maxDay); - - // Customize day picker - dayPicker.setMinValue(1); - - monthPicker.setValue(8); - dayPicker.setValue(1); - + builder.setTitle("Select Date"); builder.setPositiveButton("OK", (dialog, which) -> { + // Save selected date and update summary int selectedMonth = monthPicker.getValue(); int selectedDay = dayPicker.getValue(); + String selectedDate = String.format(Locale.getDefault(), "%02d-%02d", selectedMonth + 1, selectedDay); + + SharedPreferences.Editor editor = prefs.edit(); + editor.putString(getString(R.string.ski_season_start_key), selectedDate); + editor.apply(); + + // Update the preference summary + updateSkiSeasonStartPreferenceSummary(); + }); + + builder.setNegativeButton("Cancel", null); + AlertDialog dialog = builder.create(); + dialog.show(); + } + + + private void ensureDefaultSkiSeasonStartDate() { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); + if (!prefs.contains(getString(R.string.ski_season_start_key))) { + // Set the default date only if it hasn't been set before + SharedPreferences.Editor editor = prefs.edit(); + editor.putString(getString(R.string.ski_season_start_key), "09-01"); + editor.apply(); + } + } - String selectedDate = String.format(Locale.getDefault(), "%02d %s", selectedDay, months[selectedMonth]); + private void updateSkiSeasonStartPreferenceSummary() { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); + Preference preference = findPreference(getString(R.string.ski_season_start_key)); - if (preference != null) { - // Set summary to display the selected date - preference.setSummary(selectedDate); - } - }); + // The ensureDefaultSkiSeasonStartDate() method makes sure that a default is always set + ensureDefaultSkiSeasonStartDate(); - builder.setNegativeButton("Cancel", (dialog, which) -> dialog.dismiss()); + String date = prefs.getString(getString(R.string.ski_season_start_key), "09-01"); + String[] dateParts = date.split("-"); + int monthIndex = Integer.parseInt(dateParts[0]) - 1; + // Ensure the format is correctly applied to display as "Sep 1" + String readableDate = new DateFormatSymbols().getMonths()[monthIndex].substring(0, 3) + " " + Integer.parseInt(dateParts[1]); - AlertDialog dialog = builder.create(); - dialog.show(); + if (preference != null) { + preference.setSummary(readableDate); + } } + + + private int getMaxDayOfMonth(int month) { // Get the maximum day for the given month Calendar calendar = Calendar.getInstance(); - calendar.clear(); // Clear all fields to prevent interference from previous configurations + calendar.clear(); calendar.set(Calendar.MONTH, month); return calendar.getActualMaximum(Calendar.DAY_OF_MONTH); } From 9a45a64927520cfbabdb05881a0a875d2e62ae66 Mon Sep 17 00:00:00 2001 From: Akshar Patel <53969601+aksharpatel17@users.noreply.github.com> Date: Mon, 1 Apr 2024 12:10:51 -0400 Subject: [PATCH 25/28] rilling#110 Add Country Field in Profile Settings * Add Country Field in Profile Settings * Created new method to getCountry and saveCountry in PreferenceUtils file --- .../opentracks/settings/PreferencesUtils.java | 10 +- .../settings/ProfileSettingsFragment.java | 35 +- src/main/res/values/arrays.xml | 496 ++++++++++++++++++ src/main/res/values/strings.xml | 7 +- src/main/res/xml/settings_profile.xml | 12 +- 5 files changed, 556 insertions(+), 4 deletions(-) create mode 100644 src/main/res/values/arrays.xml diff --git a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java index 34b8d4bff..b743d5395 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java +++ b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java @@ -866,4 +866,12 @@ public static void resetTotalRowsDeleted() { setInt(R.string.total_rows_deleted_key, 0); } -} + public static String getSelectedCountry() { + return getString(R.string.settings_profile_country_key, ""); + } + + public static void setSelectedCountry(final String selectedCountry) { + setString(R.string.settings_profile_country_key, selectedCountry); + } + +} \ No newline at end of file diff --git a/src/main/java/de/dennisguse/opentracks/settings/ProfileSettingsFragment.java b/src/main/java/de/dennisguse/opentracks/settings/ProfileSettingsFragment.java index 41b9983c8..93f8a4357 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/ProfileSettingsFragment.java +++ b/src/main/java/de/dennisguse/opentracks/settings/ProfileSettingsFragment.java @@ -1,37 +1,70 @@ package de.dennisguse.opentracks.settings; + import android.content.SharedPreferences; +import android.content.res.Resources; import android.os.Bundle; +import android.text.InputFilter; + +import androidx.preference.EditTextPreference; +import androidx.preference.ListPreference; import androidx.preference.PreferenceFragmentCompat; + import de.dennisguse.opentracks.R; + public class ProfileSettingsFragment extends PreferenceFragmentCompat { + private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (sharedPreferences, key) -> { if (PreferencesUtils.isKey(R.string.night_mode_key, key)) { getActivity().runOnUiThread(PreferencesUtils::applyNightMode); } }; + @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { addPreferencesFromResource(R.xml.settings_profile); + ListPreference countryPreference = findPreference(getString(R.string.settings_profile_country_key)); + + + String selectedCountryValue = PreferencesUtils.getSelectedCountry(); + countryPreference.setSummary(selectedCountryValue); + + countryPreference.setOnPreferenceChangeListener((preference, newValue) -> { + // Save the selected country to SharedPreferences + PreferencesUtils.setSelectedCountry((String) newValue); + + // Update summary with selected country + preference.setSummary((String) newValue); + return true; + }); } + @Override public void onStart() { super.onStart(); ((SettingsActivity) getActivity()).getSupportActionBar().setTitle(R.string.settings_profile_title); } + @Override public void onResume() { super.onResume(); - PreferencesUtils.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); + + ListPreference countryPreference = findPreference(getString(R.string.settings_profile_country_key)); + String selectedCountryValue = PreferencesUtils.getSelectedCountry(); + if (selectedCountryValue != null && !selectedCountryValue.isEmpty()) { + // Update summary with saved selected country + countryPreference.setSummary(selectedCountryValue); + } } + @Override public void onPause() { super.onPause(); diff --git a/src/main/res/values/arrays.xml b/src/main/res/values/arrays.xml new file mode 100644 index 000000000..be24ca8e8 --- /dev/null +++ b/src/main/res/values/arrays.xml @@ -0,0 +1,496 @@ + + + + + + + + Canada + + + Afghanistan + Albania + Algeria + American Samoa + Andorra + Angola + Anguilla + Antarctica + Antigua and Barbuda + Argentina + Armenia + Aruba + Australia + Austria + Azerbaijan + Bahamas + Bahrain + Bangladesh + Barbados + Belarus + Belgium + Belize + Benin + Bermuda + Bhutan + Bolivia + Bosnia and Herzegovina + Botswana + Bouvet Island + Brazil + British Indian Ocean Territory + Brunei Darussalam + Bulgaria + Burkina Faso + Burundi + Cambodia + Cameroon + Cape Verde + Cayman Islands + Central African Republic + Chad + Chile + China + Christmas Island + Cocos (Keeling) Islands + Colombia + Comoros + Congo + Congo, The Democratic Republic of The + Cook Islands + Costa Rica + Cote Divoire + Croatia + Cuba + Cyprus + Czech Republic + Denmark + Djibouti + Dominica + Dominican Republic + Ecuador + Egypt + El Salvador + Equatorial Guinea + Eritrea + Estonia + Ethiopia + Falkland Islands (Malvinas) + Faroe Islands + Fiji + Finland + France + French Guiana + French Polynesia + French Southern Territories + Gabon + Gambia + Georgia + Germany + Ghana + Gibraltar + Greece + Greenland + Grenada + Guadeloupe + Guam + Guatemala + Guinea + Guinea-bissau + Guyana + Haiti + Heard Island and Mcdonald Islands + Holy See (Vatican City State) + Honduras + Hong Kong + Hungary + Iceland + India + Indonesia + Iran, Islamic Republic of + Iraq + Ireland + Israel + Italy + Jamaica + Japan + Jordan + Kazakhstan + Kenya + Kiribati + Korea, Democratic People Republic of + Korea, Republic of + Kuwait + Kyrgyzstan + Lao People Democratic Republic + Latvia + Lebanon + Lesotho + Liberia + Libyan Arab Jamahiriya + Liechtenstein + Lithuania + Luxembourg + Macao + Macedonia, The Former Yugoslav Republic of + Madagascar + Malawi + Malaysia + Maldives + Mali + Malta + Marshall Islands + Martinique + Mauritania + Mauritius + Mayotte + Mexico + Micronesia, Federated States of + Moldova, Republic of + Monaco + Mongolia + Montserrat + Morocco + Mozambique + Myanmar + Namibia + Nauru + Nepal + Netherlands + Netherlands Antilles + New Caledonia + New Zealand + Nicaragua + Niger + Nigeria + Niue + Norfolk Island + Northern Mariana Islands + Norway + Oman + Pakistan + Palau + Palestinian Territory, Occupied + Panama + Papua New Guinea + Paraguay + Peru + Philippines + Pitcairn + Poland + Portugal + Puerto Rico + Qatar + Reunion + Romania + Russian Federation + Rwanda + Saint Helena + Saint Kitts and Nevis + Saint Lucia + Saint Pierre and Miquelon + Saint Vincent and The Grenadines + Samoa + San Marino + Sao Tome and Principe + Saudi Arabia + Senegal + Serbia and Montenegro + Seychelles + Sierra Leone + Singapore + Slovakia + Slovenia + Solomon Islands + Somalia + South Africa + South Georgia and The South Sandwich Islands + Spain + Sri Lanka + Sudan + Suriname + Svalbard and Jan Mayen + Swaziland + Sweden + Switzerland + Syrian Arab Republic + Taiwan, Province of China + Tajikistan + Tanzania, United Republic of + Thailand + Timor-leste + Togo + Tokelau + Tonga + Trinidad and Tobago + Tunisia + Turkey + Turkmenistan + Turks and Caicos Islands + Tuvalu + Uganda + Ukraine + United Arab Emirates + United Kingdom + United States + United States Minor Outlying Islands + Uruguay + Uzbekistan + Vanuatu + Venezuela + Viet Nam + Virgin Islands, British + Virgin Islands, U.S. + Wallis and Futuna + Western Sahara + Yemen + Zambia + Zimbabwe + + + Canada + + + Afghanistan + Albania + Algeria + American Samoa + Andorra + Angola + Anguilla + Antarctica + Antigua and Barbuda + Argentina + Armenia + Aruba + Australia + Austria + Azerbaijan + Bahamas + Bahrain + Bangladesh + Barbados + Belarus + Belgium + Belize + Benin + Bermuda + Bhutan + Bolivia + Bosnia and Herzegovina + Botswana + Bouvet Island + Brazil + British Indian Ocean Territory + Brunei Darussalam + Bulgaria + Burkina Faso + Burundi + Cambodia + Cameroon + Cape Verde + Cayman Islands + Central African Republic + Chad + Chile + China + Christmas Island + Cocos (Keeling) Islands + Colombia + Comoros + Congo + Congo, The Democratic Republic of The + Cook Islands + Costa Rica + Cote Divoire + Croatia + Cuba + Cyprus + Czech Republic + Denmark + Djibouti + Dominica + Dominican Republic + Ecuador + Egypt + El Salvador + Equatorial Guinea + Eritrea + Estonia + Ethiopia + Falkland Islands (Malvinas) + Faroe Islands + Fiji + Finland + France + French Guiana + French Polynesia + French Southern Territories + Gabon + Gambia + Georgia + Germany + Ghana + Gibraltar + Greece + Greenland + Grenada + Guadeloupe + Guam + Guatemala + Guinea + Guinea-bissau + Guyana + Haiti + Heard Island and Mcdonald Islands + Holy See (Vatican City State) + Honduras + Hong Kong + Hungary + Iceland + India + Indonesia + Iran, Islamic Republic of + Iraq + Ireland + Israel + Italy + Jamaica + Japan + Jordan + Kazakhstan + Kenya + Kiribati + Korea, Democratic People Republic of + Korea, Republic of + Kuwait + Kyrgyzstan + Lao People Democratic Republic + Latvia + Lebanon + Lesotho + Liberia + Libyan Arab Jamahiriya + Liechtenstein + Lithuania + Luxembourg + Macao + Macedonia, The Former Yugoslav Republic of + Madagascar + Malawi + Malaysia + Maldives + Mali + Malta + Marshall Islands + Martinique + Mauritania + Mauritius + Mayotte + Mexico + Micronesia, Federated States of + Moldova, Republic of + Monaco + Mongolia + Montserrat + Morocco + Mozambique + Myanmar + Namibia + Nauru + Nepal + Netherlands + Netherlands Antilles + New Caledonia + New Zealand + Nicaragua + Niger + Nigeria + Niue + Norfolk Island + Northern Mariana Islands + Norway + Oman + Pakistan + Palau + Palestinian Territory, Occupied + Panama + Papua New Guinea + Paraguay + Peru + Philippines + Pitcairn + Poland + Portugal + Puerto Rico + Qatar + Reunion + Romania + Russian Federation + Rwanda + Saint Helena + Saint Kitts and Nevis + Saint Lucia + Saint Pierre and Miquelon + Saint Vincent and The Grenadines + Samoa + San Marino + Sao Tome and Principe + Saudi Arabia + Senegal + Serbia and Montenegro + Seychelles + Sierra Leone + Singapore + Slovakia + Slovenia + Solomon Islands + Somalia + South Africa + South Georgia and The South Sandwich Islands + Spain + Sri Lanka + Sudan + Suriname + Svalbard and Jan Mayen + Swaziland + Sweden + Switzerland + Syrian Arab Republic + Taiwan, Province of China + Tajikistan + Tanzania, United Republic of + Thailand + Timor-leste + Togo + Tokelau + Tonga + Trinidad and Tobago + Tunisia + Turkey + Turkmenistan + Turks and Caicos Islands + Tuvalu + Uganda + Ukraine + United Arab Emirates + United Kingdom + United States + United States Minor Outlying Islands + Uruguay + Uzbekistan + Vanuatu + Venezuela + Viet Nam + Virgin Islands, British + Virgin Islands, U.S. + Wallis and Futuna + Western Sahara + Yemen + Zambia + Zimbabwe + + + + + diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index e35d89196..4a8381714 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -414,11 +414,16 @@ limitations under the License. Lap heart rate Average speed/pace Lap speed/pace + Canada + Profile Profile management - settingsProfile + settingsProfile + Country + country + nickname diff --git a/src/main/res/xml/settings_profile.xml b/src/main/res/xml/settings_profile.xml index df4aece54..11a98ae2e 100644 --- a/src/main/res/xml/settings_profile.xml +++ b/src/main/res/xml/settings_profile.xml @@ -1,7 +1,17 @@ + - \ No newline at end of file + + + + /> + From efe5e384a09618db18c444f3a30421b61c62925a Mon Sep 17 00:00:00 2001 From: Thanh Phan Date: Sat, 23 Mar 2024 10:32:04 -0400 Subject: [PATCH 26/28] rilling#96: add nickname field to profile settings --- .../settings/ProfileSettingsFragment.java | 20 ++++++++++--------- .../res/layout/fragment_profile_settings.xml | 14 ------------- src/main/res/values/strings.xml | 7 +++---- src/main/res/xml/settings_profile.xml | 11 +++++----- 4 files changed, 20 insertions(+), 32 deletions(-) delete mode 100644 src/main/res/layout/fragment_profile_settings.xml diff --git a/src/main/java/de/dennisguse/opentracks/settings/ProfileSettingsFragment.java b/src/main/java/de/dennisguse/opentracks/settings/ProfileSettingsFragment.java index 93f8a4357..805e6f476 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/ProfileSettingsFragment.java +++ b/src/main/java/de/dennisguse/opentracks/settings/ProfileSettingsFragment.java @@ -1,8 +1,6 @@ package de.dennisguse.opentracks.settings; - import android.content.SharedPreferences; -import android.content.res.Resources; import android.os.Bundle; import android.text.InputFilter; @@ -11,20 +9,16 @@ import androidx.preference.ListPreference; import androidx.preference.PreferenceFragmentCompat; - import de.dennisguse.opentracks.R; - public class ProfileSettingsFragment extends PreferenceFragmentCompat { - private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (sharedPreferences, key) -> { if (PreferencesUtils.isKey(R.string.night_mode_key, key)) { getActivity().runOnUiThread(PreferencesUtils::applyNightMode); } }; - @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { addPreferencesFromResource(R.xml.settings_profile); @@ -44,26 +38,34 @@ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { }); } - @Override public void onStart() { super.onStart(); ((SettingsActivity) getActivity()).getSupportActionBar().setTitle(R.string.settings_profile_title); } - @Override public void onResume() { super.onResume(); + EditTextPreference nickNameInput = findPreference(getString(R.string.settings_profile_nickname_key)); + nickNameInput.setDialogTitle(getString(R.string.settings_profile_nickname_dialog_title)); + nickNameInput.setOnBindEditTextListener(editText -> { + editText.setSingleLine(true); + editText.selectAll(); // select all text + int maxNicknameLength = 20; + editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(maxNicknameLength)}); + }); + ListPreference countryPreference = findPreference(getString(R.string.settings_profile_country_key)); String selectedCountryValue = PreferencesUtils.getSelectedCountry(); if (selectedCountryValue != null && !selectedCountryValue.isEmpty()) { // Update summary with saved selected country countryPreference.setSummary(selectedCountryValue); } - } + PreferencesUtils.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); + } @Override public void onPause() { diff --git a/src/main/res/layout/fragment_profile_settings.xml b/src/main/res/layout/fragment_profile_settings.xml deleted file mode 100644 index 6e03e099a..000000000 --- a/src/main/res/layout/fragment_profile_settings.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 4a8381714..9c02608aa 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -416,14 +416,15 @@ limitations under the License. Lap speed/pace Canada - Profile Profile management settingsProfile + Nickname + Nickname (max 20 char) + nickname Country country - nickname @@ -722,7 +723,5 @@ limitations under the License. Always OpenTracks itself does not provide a map. Please install OSMDashboard to view your recordings on a map. - - Hello blank fragment 1 Sep diff --git a/src/main/res/xml/settings_profile.xml b/src/main/res/xml/settings_profile.xml index 11a98ae2e..aba206e6c 100644 --- a/src/main/res/xml/settings_profile.xml +++ b/src/main/res/xml/settings_profile.xml @@ -1,17 +1,18 @@ - + - - - /> + android:entryValues="@array/countries_array_values" />/> From 708c245810cb2d607fc355bfb89a481959c44bc1 Mon Sep 17 00:00:00 2001 From: VishwasTomar Date: Sat, 23 Mar 2024 22:36:47 -0400 Subject: [PATCH 27/28] https://github.com/rilling/OpenTracks-Winter-SOEN-6431_2024/issues/96 : Added getNickName Function --- .../de/dennisguse/opentracks/settings/PreferencesUtils.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java index b743d5395..23073d952 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java +++ b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java @@ -270,6 +270,10 @@ public static SensorType getSensorType(String address) { .orElse(SensorType.REMOTE); } + public static String getNickName(){ + return getString(R.string.settings_profile_nickname_key, null); + } + public static String getBarometerSensorAddress() { return getString(R.string.settings_sensor_bluetooth_pressure_key, getBluetoothSensorAddressNone()); } From dbc019d6406ccbe13ab2e7d395f9e6622b2f898a Mon Sep 17 00:00:00 2001 From: Thanh Phan Date: Mon, 1 Apr 2024 19:34:33 -0400 Subject: [PATCH 28/28] rilling#85: use PreferencesUtils for ski season start date --- .../settings/DefaultsSettingsFragment.java | 20 +++++-------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java b/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java index df5187e03..a9066609d 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java +++ b/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java @@ -4,7 +4,6 @@ import android.os.Bundle; import android.view.View; import android.widget.NumberPicker; -import android.widget.TextView; import androidx.fragment.app.DialogFragment; import androidx.preference.ListPreference; @@ -13,8 +12,6 @@ import androidx.preference.PreferenceManager; import java.text.DateFormatSymbols; -import java.text.SimpleDateFormat; -import java.util.Arrays; import java.util.Calendar; import java.util.Locale; @@ -83,16 +80,14 @@ public void onDisplayPreferenceDialog(Preference preference) { } private void showCustomDatePickerDialog() { - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); View dialogView = getLayoutInflater().inflate(R.layout.custom_date_picker_dialog, null); builder.setView(dialogView); NumberPicker monthPicker = dialogView.findViewById(R.id.monthPicker); NumberPicker dayPicker = dialogView.findViewById(R.id.dayPicker); - Preference preference = findPreference(getString(R.string.ski_season_start_key)); - String defaultStartDate = prefs.getString(getString(R.string.ski_season_start_key), "09-01"); + String defaultStartDate = PreferencesUtils.getSkiSeasonStartDate(); // Initialize month picker String[] months = new DateFormatSymbols().getMonths(); // Full months array @@ -130,10 +125,8 @@ private void showCustomDatePickerDialog() { int selectedMonth = monthPicker.getValue(); int selectedDay = dayPicker.getValue(); String selectedDate = String.format(Locale.getDefault(), "%02d-%02d", selectedMonth + 1, selectedDay); - - SharedPreferences.Editor editor = prefs.edit(); - editor.putString(getString(R.string.ski_season_start_key), selectedDate); - editor.apply(); + + PreferencesUtils.setSkiSeasonStartDate(selectedDate); // Update the preference summary updateSkiSeasonStartPreferenceSummary(); @@ -149,20 +142,17 @@ private void ensureDefaultSkiSeasonStartDate() { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); if (!prefs.contains(getString(R.string.ski_season_start_key))) { // Set the default date only if it hasn't been set before - SharedPreferences.Editor editor = prefs.edit(); - editor.putString(getString(R.string.ski_season_start_key), "09-01"); - editor.apply(); + PreferencesUtils.setSkiSeasonStartDate("09-01"); } } private void updateSkiSeasonStartPreferenceSummary() { - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); Preference preference = findPreference(getString(R.string.ski_season_start_key)); // The ensureDefaultSkiSeasonStartDate() method makes sure that a default is always set ensureDefaultSkiSeasonStartDate(); - String date = prefs.getString(getString(R.string.ski_season_start_key), "09-01"); + String date = PreferencesUtils.getSkiSeasonStartDate(); String[] dateParts = date.split("-"); int monthIndex = Integer.parseInt(dateParts[0]) - 1; // Ensure the format is correctly applied to display as "Sep 1"