diff --git a/src/androidTest/java/de/dennisguse/opentracks/EspressoCustomLayoutTest.java b/src/androidTest/java/de/dennisguse/opentracks/EspressoCustomLayoutTest.java index 42a938c9f..855df9495 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/EspressoCustomLayoutTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/EspressoCustomLayoutTest.java @@ -59,8 +59,7 @@ public class EspressoCustomLayoutTest { trackControllerRecordButton.perform(click()); // Get custom layout preferences and check all data fields are showed. - SharedPreferences sharedPreferences = PreferencesUtils.getSharedPreferences(context); - Layout layout = PreferencesUtils.getCustomLayout(sharedPreferences, context); + Layout layout = PreferencesUtils.getCustomLayout(); onView(withId(R.id.stats_recycler_view)).check(new RecyclerViewItemCountAssertion((int) layout.getFields().stream().filter(DataField::isVisible).count())); diff --git a/src/androidTest/java/de/dennisguse/opentracks/PreferenceMetricUnitRule.java b/src/androidTest/java/de/dennisguse/opentracks/PreferenceMetricUnitRule.java index 066d363aa..478b089d5 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/PreferenceMetricUnitRule.java +++ b/src/androidTest/java/de/dennisguse/opentracks/PreferenceMetricUnitRule.java @@ -25,14 +25,13 @@ public class PreferenceMetricUnitRule implements TestRule { return new Statement() { @Override public void evaluate() throws Throwable { - SharedPreferences sharedPreferences = PreferencesUtils.getSharedPreferences(context); - final boolean previousMetricUnits = PreferencesUtils.isMetricUnits(sharedPreferences, context); + final boolean previousMetricUnits = PreferencesUtils.isMetricUnits(); try { - PreferencesUtils.setMetricUnits(sharedPreferences, context, metricUnits); + PreferencesUtils.setMetricUnits(metricUnits); base.evaluate(); } finally { - PreferencesUtils.setMetricUnits(sharedPreferences, context, previousMetricUnits); + PreferencesUtils.setMetricUnits(previousMetricUnits); } } }; diff --git a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTest.java b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTest.java index 74b11141e..eed9fcb13 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTest.java @@ -97,7 +97,6 @@ public class TrackRecordingServiceTest { } private final Context context = ApplicationProvider.getApplicationContext(); - private final SharedPreferences sharedPreferences = PreferencesUtils.getSharedPreferences(context); private ContentProviderUtils contentProviderUtils; private final Track.Id trackId = new Track.Id(Math.abs(new Random().nextLong())); @@ -124,7 +123,7 @@ public class TrackRecordingServiceTest { contentProviderUtils = new ContentProviderUtils(context); // Let's use default values. - sharedPreferences.edit().clear().commit(); + PreferencesUtils.clear(); // Ensure that the database is empty before every test contentProviderUtils.deleteAllTracks(context); diff --git a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestLocation.java b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestLocation.java index 85c1c8d20..cc3b27c19 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestLocation.java +++ b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestLocation.java @@ -91,8 +91,7 @@ public class TrackRecordingServiceTestLocation { tearDown(); // Let's use default values. - SharedPreferences sharedPreferences = PreferencesUtils.getSharedPreferences(context); - sharedPreferences.edit().clear().commit(); + PreferencesUtils.clear(); service = ((TrackRecordingService.Binder) mServiceRule.bindService(TrackRecordingServiceTest.createStartIntent(context))) .getService(); diff --git a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestLooper.java b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestLooper.java index 30a208e7c..de847a69b 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestLooper.java +++ b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestLooper.java @@ -54,7 +54,6 @@ public class TrackRecordingServiceTestLooper { public final ServiceTestRule mServiceRule = ServiceTestRule.withTimeout(5, TimeUnit.SECONDS); private final Context context = ApplicationProvider.getApplicationContext(); - private final SharedPreferences sharedPreferences = PreferencesUtils.getSharedPreferences(context); private ContentProviderUtils contentProviderUtils; @@ -79,7 +78,7 @@ public class TrackRecordingServiceTestLooper { contentProviderUtils = new ContentProviderUtils(context); // Let's use default values. - sharedPreferences.edit().clear().apply(); + PreferencesUtils.clear(); // Ensure that the database is empty before every test contentProviderUtils.deleteAllTracks(context); @@ -146,14 +145,14 @@ public class TrackRecordingServiceTestLooper { @MediumTest @Test public void testWithProperties_metricUnitsDefault() throws TimeoutException { - PreferencesUtils.setString(sharedPreferences, context, R.string.stats_units_key, context.getString(R.string.stats_units_default)); + PreferencesUtils.setString(R.string.stats_units_key, context.getString(R.string.stats_units_default)); fullRecordingSession(); } @MediumTest @Test public void testWithProperties_metricUnitsDisabled() throws TimeoutException { - PreferencesUtils.setString(sharedPreferences, context, R.string.stats_units_key, context.getString(R.string.stats_units_imperial)); + PreferencesUtils.setString(R.string.stats_units_key, context.getString(R.string.stats_units_imperial)); fullRecordingSession(); } @@ -215,7 +214,7 @@ public class TrackRecordingServiceTestLooper { .setSpeed(Speed.of(10)) .setBearing(3.0f); - Distance prefAccuracy = PreferencesUtils.getThresholdHorizontalAccuracy(sharedPreferences, context); + Distance prefAccuracy = PreferencesUtils.getThresholdHorizontalAccuracy(); service.getTrackPointCreator().onNewTrackPoint(trackPoint, prefAccuracy); if (i % 7 == 0) { diff --git a/src/androidTest/java/de/dennisguse/opentracks/services/handlers/LocationHandlerTest.java b/src/androidTest/java/de/dennisguse/opentracks/services/handlers/LocationHandlerTest.java index cca192d60..1a2a121ea 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/services/handlers/LocationHandlerTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/services/handlers/LocationHandlerTest.java @@ -30,7 +30,6 @@ import de.dennisguse.opentracks.util.PreferencesUtils; public class LocationHandlerTest { private final Context context = ApplicationProvider.getApplicationContext(); - private final SharedPreferences sharedPreferences = PreferencesUtils.getSharedPreferences(context); @Mock private TrackPointCreator trackPointCreator; @@ -47,15 +46,12 @@ public class LocationHandlerTest { @Before public void setUp() { // Let's use default values. - sharedPreferences.edit().clear().commit(); + PreferencesUtils.clear(); Mockito.when(trackPointCreator.createNow()) .thenReturn(Instant.now()); - //TODO REMOVE -// locationHandler.onSharedPreferenceChanged(context, sharedPreferences, context.getString(R.string.recording_gps_accuracy_key)); -// locationHandler.onSharedPreferenceChanged(context, sharedPreferences, context.getString(R.string.min_recording_interval_key)); - locationHandler.onStart(context, sharedPreferences); + locationHandler.onStart(context); } /** @@ -92,7 +88,7 @@ public class LocationHandlerTest { @Test public void testOnLocationChanged_poorAccuracy() { // given - Distance prefAccuracy = PreferencesUtils.getThresholdHorizontalAccuracy(sharedPreferences, context); + Distance prefAccuracy = PreferencesUtils.getThresholdHorizontalAccuracy(); // when locationHandler.onLocationChanged(createLocation(45f, 35f, (float) (prefAccuracy.toM() + 1), 5, System.currentTimeMillis())); diff --git a/src/androidTest/java/de/dennisguse/opentracks/util/PreferencesUtilsTest.java b/src/androidTest/java/de/dennisguse/opentracks/util/PreferencesUtilsTest.java index a3a9cdb54..2ec5ab91a 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/util/PreferencesUtilsTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/util/PreferencesUtilsTest.java @@ -3,6 +3,7 @@ package de.dennisguse.opentracks.util; import android.content.Context; import android.content.SharedPreferences; +import androidx.preference.PreferenceManager; import androidx.test.core.app.ApplicationProvider; import androidx.test.ext.junit.runners.AndroidJUnit4; @@ -27,14 +28,14 @@ public class PreferencesUtilsTest { @Test public void ExportTrackFileFormat_ok() { // given - SharedPreferences sharedPreferences = PreferencesUtils.getSharedPreferences(context); + SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString(context.getString(R.string.export_trackfileformat_key), TrackFileFormat.KML_WITH_TRACKDETAIL_AND_SENSORDATA.name()); editor.commit(); // when - TrackFileFormat trackFileFormat = PreferencesUtils.getExportTrackFileFormat(sharedPreferences, context); + TrackFileFormat trackFileFormat = PreferencesUtils.getExportTrackFileFormat(); // then assertEquals(TrackFileFormat.KML_WITH_TRACKDETAIL_AND_SENSORDATA, trackFileFormat); @@ -43,13 +44,13 @@ public class PreferencesUtilsTest { @Test public void ExportTrackFileFormat_invalid() { // given - SharedPreferences sharedPreferences = PreferencesUtils.getSharedPreferences(context); + SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString(context.getString(R.string.export_trackfileformat_key), "invalid"); editor.commit(); // when - TrackFileFormat trackFileFormat = PreferencesUtils.getExportTrackFileFormat(sharedPreferences, context); + TrackFileFormat trackFileFormat = PreferencesUtils.getExportTrackFileFormat(); // then assertEquals(TrackFileFormat.KMZ_WITH_TRACKDETAIL_AND_SENSORDATA, trackFileFormat); @@ -58,13 +59,13 @@ public class PreferencesUtilsTest { @Test public void ExportTrackFileFormat_noValue() { // given - SharedPreferences sharedPreferences = PreferencesUtils.getSharedPreferences(context); + SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.clear(); editor.commit(); // when - TrackFileFormat trackFileFormat = PreferencesUtils.getExportTrackFileFormat(sharedPreferences, context); + TrackFileFormat trackFileFormat = PreferencesUtils.getExportTrackFileFormat(); // then assertEquals(TrackFileFormat.KMZ_WITH_TRACKDETAIL_AND_SENSORDATA, trackFileFormat); @@ -73,13 +74,13 @@ public class PreferencesUtilsTest { @Test public void testGetCustomLayout_default() { // given - SharedPreferences sharedPreferences = PreferencesUtils.getSharedPreferences(context); + SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.clear(); editor.commit(); // when - Layout layout = PreferencesUtils.getCustomLayout(sharedPreferences, context); + Layout layout = PreferencesUtils.getCustomLayout(); // then assertTrue(layout.getFields().size() > 0); @@ -90,7 +91,7 @@ public class PreferencesUtilsTest { @Test public void testGetCustomLayout_1() { // given - SharedPreferences sharedPreferences = PreferencesUtils.getSharedPreferences(context); + SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString( context.getString(R.string.stats_custom_layout_fields_key), @@ -102,7 +103,7 @@ public class PreferencesUtilsTest { editor.apply(); // when - Layout layout = PreferencesUtils.getCustomLayout(sharedPreferences, context); + Layout layout = PreferencesUtils.getCustomLayout(); // then assertEquals(layout.getFields().size(), 4); @@ -128,7 +129,7 @@ public class PreferencesUtilsTest { @Test public void testGetCustomLayout_coordinatesIsWide() { // given - SharedPreferences sharedPreferences = PreferencesUtils.getSharedPreferences(context); + SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString( context.getString(R.string.stats_custom_layout_fields_key), @@ -140,7 +141,7 @@ public class PreferencesUtilsTest { editor.apply(); // when - Layout layout = PreferencesUtils.getCustomLayout(sharedPreferences, context); + Layout layout = PreferencesUtils.getCustomLayout(); // then assertEquals(layout.getFields().size(), 4); @@ -167,7 +168,7 @@ public class PreferencesUtilsTest { @Test public void testSetCustomLayout() { // given - SharedPreferences sharedPreferences = PreferencesUtils.getSharedPreferences(context); + SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); Layout layoutSrc = new Layout("road cycling"); layoutSrc.addField(new DataField(context.getString(R.string.stats_custom_layout_moving_time_key), context.getString(R.string.stats_moving_time), true, true, false)); layoutSrc.addField(new DataField(context.getString(R.string.stats_custom_layout_distance_key), context.getString(R.string.stats_distance), true, false, false)); @@ -175,7 +176,7 @@ public class PreferencesUtilsTest { layoutSrc.addField(new DataField(context.getString(R.string.stats_custom_layout_speed_key), context.getString(R.string.stats_speed), false, false, false)); // when - PreferencesUtils.setCustomLayout(sharedPreferences, context, layoutSrc); + PreferencesUtils.setCustomLayout(layoutSrc); // then String csv = sharedPreferences.getString(context.getString(R.string.stats_custom_layout_fields_key), null); @@ -187,7 +188,7 @@ public class PreferencesUtilsTest { + context.getString(R.string.stats_custom_layout_average_moving_speed_key) + ",0,1;" + context.getString(R.string.stats_custom_layout_speed_key) + ",0,0;"); - Layout layoutDst = PreferencesUtils.getCustomLayout(sharedPreferences, context); + Layout layoutDst = PreferencesUtils.getCustomLayout(); assertEquals(layoutSrc.getProfile(), layoutDst.getProfile()); assertEquals(layoutSrc.getFields().size(), layoutDst.getFields().size()); for (int i = 0; i < layoutSrc.getFields().size(); i++) { diff --git a/src/androidTest/java/de/dennisguse/opentracks/util/TrackNameUtilsTest.java b/src/androidTest/java/de/dennisguse/opentracks/util/TrackNameUtilsTest.java index 27d322722..9ac1a99c7 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/util/TrackNameUtilsTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/util/TrackNameUtilsTest.java @@ -47,14 +47,12 @@ public class TrackNameUtilsTest { private static final Context CONTEXT = ApplicationProvider.getApplicationContext(); - private static final SharedPreferences SHARED_PREFERENCES = PreferencesUtils.getSharedPreferences(CONTEXT); - /** * Tests when the track_name_key is settings_recording_track_name_date_local_value. */ @Test public void testTrackName_date_local() { - PreferencesUtils.setString(SHARED_PREFERENCES, CONTEXT, R.string.track_name_key, CONTEXT.getString(R.string.settings_recording_track_name_date_local_value)); + PreferencesUtils.setString(R.string.track_name_key, CONTEXT.getString(R.string.settings_recording_track_name_date_local_value)); assertEquals(StringUtils.formatDateTime(CONTEXT, START_TIME), TrackNameUtils.getTrackName(CONTEXT, TRACK_ID, START_TIME)); } @@ -63,7 +61,7 @@ public class TrackNameUtilsTest { */ @Test public void testTrackName_date_iso_8601() { - PreferencesUtils.setString(SHARED_PREFERENCES, CONTEXT, R.string.track_name_key, CONTEXT.getString(R.string.settings_recording_track_name_date_iso_8601_value)); + PreferencesUtils.setString(R.string.track_name_key, CONTEXT.getString(R.string.settings_recording_track_name_date_iso_8601_value)); SimpleDateFormat simpleDateFormat = new SimpleDateFormat(TrackNameUtils.ISO_8601_FORMAT, Locale.US); assertEquals(simpleDateFormat.format(START_TIME.toEpochMilli()), TrackNameUtils.getTrackName(CONTEXT, TRACK_ID, START_TIME)); } @@ -73,7 +71,7 @@ public class TrackNameUtilsTest { */ @Test public void testTrackName_number() { - PreferencesUtils.setString(SHARED_PREFERENCES, CONTEXT, R.string.track_name_key, CONTEXT.getString(R.string.settings_recording_track_name_number_value)); + PreferencesUtils.setString(R.string.track_name_key, CONTEXT.getString(R.string.settings_recording_track_name_number_value)); assertEquals("Track " + TRACK_ID.getId(), TrackNameUtils.getTrackName(CONTEXT, TRACK_ID, START_TIME)); } } diff --git a/src/main/java/de/dennisguse/opentracks/Startup.java b/src/main/java/de/dennisguse/opentracks/Startup.java index 62ed75323..ccceebea1 100644 --- a/src/main/java/de/dennisguse/opentracks/Startup.java +++ b/src/main/java/de/dennisguse/opentracks/Startup.java @@ -27,13 +27,14 @@ public class Startup extends Application { // Include version information into stack traces. Log.i(TAG, BuildConfig.APPLICATION_ID + "; BuildType: " + BuildConfig.BUILD_TYPE + "; VersionName: " + BuildConfig.VERSION_NAME + "/" + BuildConfig.VERSION_NAME_FULL + " VersionCode: " + BuildConfig.VERSION_CODE); + PreferencesUtils.initPreferences(this, getResources()); // Set default values of preferences on first start. - SharedPreferences sharedPreferences = PreferencesUtils.resetPreferences(this, false); - if (PreferencesUtils.getString(sharedPreferences, this, R.string.stats_units_key, "").equals("")) { - PreferencesUtils.setMetricUnits(sharedPreferences, this, !Locale.US.equals(Locale.getDefault())); + PreferencesUtils.resetPreferences(this, false); + if (PreferencesUtils.getString( R.string.stats_units_key, "").equals("")) { + PreferencesUtils.setMetricUnits(!Locale.US.equals(Locale.getDefault())); } + PreferencesUtils.applyNightMode(); - ActivityUtils.applyNightMode(sharedPreferences, this); // In debug builds: show thread and VM warnings. if (BuildConfig.DEBUG) { diff --git a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java index 71527b080..758cc6497 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java @@ -78,7 +78,6 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co private static final String TAG = TrackListActivity.class.getSimpleName(); // The following are setFrequency in onCreate - private SharedPreferences sharedPreferences; private TrackRecordingServiceConnection trackRecordingServiceConnection; private ResourceCursorAdapter resourceCursorAdapter; @@ -110,8 +109,8 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co }; private final OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (sharedPreferences, key) -> { - if (PreferencesUtils.isKey(TrackListActivity.this, R.string.stats_units_key, key)) { - metricUnits = PreferencesUtils.isMetricUnits(sharedPreferences, TrackListActivity.this); + if (PreferencesUtils.isKey(R.string.stats_units_key, key)) { + metricUnits = PreferencesUtils.isMetricUnits(); } if (key != null) { runOnUiThread(() -> { @@ -161,8 +160,6 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co super.onCreate(savedInstanceState); setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL); - sharedPreferences = PreferencesUtils.getSharedPreferences(this); - trackRecordingServiceConnection = new TrackRecordingServiceConnection(bindChangedCallback); viewBinding.trackList.setEmptyView(viewBinding.trackListEmptyView); @@ -231,8 +228,7 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co protected void onStart() { super.onStart(); - sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); - sharedPreferenceChangeListener.onSharedPreferenceChanged(sharedPreferences, null); + PreferencesUtils.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); trackRecordingServiceConnection.startConnection(this); } @@ -249,7 +245,7 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co protected void onStop() { super.onStop(); - sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); + PreferencesUtils.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); trackRecordingServiceConnection.unbind(this); } diff --git a/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java b/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java index 9c15a7152..be0b5f363 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java @@ -68,7 +68,6 @@ public class TrackRecordedActivity extends AbstractTrackDeleteActivity implement // The following are setFrequency in onCreate. private ContentProviderUtils contentProviderUtils; - private SharedPreferences sharedPreferences; private TrackDataHub trackDataHub; private TrackRecordedBinding viewBinding; @@ -96,8 +95,8 @@ public class TrackRecordedActivity extends AbstractTrackDeleteActivity implement private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { - if (PreferencesUtils.isKey(TrackRecordedActivity.this, R.string.recording_distance_interval_key, key)) { - trackDataHub.setRecordingDistanceInterval(PreferencesUtils.getRecordingDistanceInterval(sharedPreferences, TrackRecordedActivity.this)); + if (PreferencesUtils.isKey(R.string.recording_distance_interval_key, key)) { + trackDataHub.setRecordingDistanceInterval(PreferencesUtils.getRecordingDistanceInterval()); } } }; @@ -107,7 +106,6 @@ public class TrackRecordedActivity extends AbstractTrackDeleteActivity implement super.onCreate(savedInstanceState); contentProviderUtils = new ContentProviderUtils(this); - sharedPreferences = PreferencesUtils.getSharedPreferences(this); handleIntent(getIntent()); @@ -130,8 +128,7 @@ public class TrackRecordedActivity extends AbstractTrackDeleteActivity implement protected void onStart() { super.onStart(); - sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); - sharedPreferenceChangeListener.onSharedPreferenceChanged(sharedPreferences, null); + PreferencesUtils.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); trackDataHub.start(); } @@ -155,7 +152,7 @@ public class TrackRecordedActivity extends AbstractTrackDeleteActivity implement super.onStop(); trackRecordingServiceConnection.unbind(this); trackDataHub.stop(); - sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); + PreferencesUtils.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); } @Override diff --git a/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java b/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java index b042c53b6..67e8715ac 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java @@ -53,7 +53,6 @@ public class TrackRecordingActivity extends AbstractActivity implements ChooseAc // The following are setFrequency in onCreate private ContentProviderUtils contentProviderUtils; - private SharedPreferences sharedPreferences; private TrackRecordingServiceConnection trackRecordingServiceConnection; private TrackDataHub trackDataHub; @@ -96,17 +95,17 @@ public class TrackRecordingActivity extends AbstractActivity implements ChooseAc private final OnSharedPreferenceChangeListener sharedPreferenceChangeListener = new OnSharedPreferenceChangeListener() { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { - if (PreferencesUtils.isKey(TrackRecordingActivity.this, R.string.stats_show_on_lockscreen_while_recording_key, key)) { + if (PreferencesUtils.isKey(R.string.stats_show_on_lockscreen_while_recording_key, key)) { setLockscreenPolicy(); } - if (PreferencesUtils.isKey(TrackRecordingActivity.this, R.string.stats_keep_screen_on_while_recording_key, key)) { + if (PreferencesUtils.isKey(R.string.stats_keep_screen_on_while_recording_key, key)) { setScreenOnPolicy(); } - if (PreferencesUtils.isKey(TrackRecordingActivity.this, R.string.stats_fullscreen_while_recording_key, key)) { + if (PreferencesUtils.isKey(R.string.stats_fullscreen_while_recording_key, key)) { setFullscreenPolicy(); } - if (PreferencesUtils.isKey(TrackRecordingActivity.this, R.string.recording_distance_interval_key, key)) { - trackDataHub.setRecordingDistanceInterval(PreferencesUtils.getRecordingDistanceInterval(sharedPreferences, TrackRecordingActivity.this)); + if (PreferencesUtils.isKey(R.string.recording_distance_interval_key, key)) { + trackDataHub.setRecordingDistanceInterval(PreferencesUtils.getRecordingDistanceInterval()); } if (key == null) return; @@ -121,7 +120,6 @@ public class TrackRecordingActivity extends AbstractActivity implements ChooseAc protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); contentProviderUtils = new ContentProviderUtils(this); - sharedPreferences = PreferencesUtils.getSharedPreferences(this); trackId = null; if (savedInstanceState != null) { //Activity was recreated. @@ -156,7 +154,7 @@ public class TrackRecordingActivity extends AbstractActivity implements ChooseAc } private void setLockscreenPolicy() { - boolean showOnLockScreen = PreferencesUtils.shouldShowStatsOnLockscreen(sharedPreferences, TrackRecordingActivity.this); + boolean showOnLockScreen = PreferencesUtils.shouldShowStatsOnLockscreen(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { setShowWhenLocked(showOnLockScreen); @@ -168,7 +166,7 @@ public class TrackRecordingActivity extends AbstractActivity implements ChooseAc } private void setScreenOnPolicy() { - boolean keepScreenOn = PreferencesUtils.shouldKeepScreenOn(sharedPreferences, TrackRecordingActivity.this); + boolean keepScreenOn = PreferencesUtils.shouldKeepScreenOn(); if (keepScreenOn) { getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); @@ -178,7 +176,7 @@ public class TrackRecordingActivity extends AbstractActivity implements ChooseAc } private void setFullscreenPolicy() { - boolean keepScreenOn = PreferencesUtils.shouldUseFullscreen(sharedPreferences, TrackRecordingActivity.this); + boolean keepScreenOn = PreferencesUtils.shouldUseFullscreen(); if (keepScreenOn) { getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); @@ -191,8 +189,7 @@ public class TrackRecordingActivity extends AbstractActivity implements ChooseAc protected void onStart() { super.onStart(); - sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); - sharedPreferenceChangeListener.onSharedPreferenceChanged(sharedPreferences, null); + PreferencesUtils.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); trackRecordingServiceConnection.startConnection(this); trackDataHub.start(); @@ -230,7 +227,7 @@ public class TrackRecordingActivity extends AbstractActivity implements ChooseAc @Override protected void onStop() { super.onStop(); - sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); + PreferencesUtils.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); trackRecordingServiceConnection.unbind(this); trackDataHub.stop(); } diff --git a/src/main/java/de/dennisguse/opentracks/adapters/AggregatedStatisticsAdapter.java b/src/main/java/de/dennisguse/opentracks/adapters/AggregatedStatisticsAdapter.java index d17656275..aeabe3946 100644 --- a/src/main/java/de/dennisguse/opentracks/adapters/AggregatedStatisticsAdapter.java +++ b/src/main/java/de/dennisguse/opentracks/adapters/AggregatedStatisticsAdapter.java @@ -58,7 +58,7 @@ public class AggregatedStatisticsAdapter extends BaseAdapter { viewHolder = (ViewHolder) convertView.getTag(); } - if (TrackIconUtils.isSpeedIcon(context, aggregatedStatistic.getCategory())) { + if (TrackIconUtils.isSpeedIcon(context.getResources(), aggregatedStatistic.getCategory())) { viewHolder.setSpeed(aggregatedStatistic); } else { viewHolder.setPace(aggregatedStatistic); @@ -139,9 +139,8 @@ public class AggregatedStatisticsAdapter extends BaseAdapter { private void setCommonValues(AggregatedStatistics.AggregatedStatistic aggregatedStatistic) { String category = aggregatedStatistic.getCategory(); - SharedPreferences sharedPreferences = PreferencesUtils.getSharedPreferences(context); - reportSpeed = PreferencesUtils.isReportSpeed(sharedPreferences, context, category); - metricsUnits = PreferencesUtils.isMetricUnits(sharedPreferences, context); + reportSpeed = PreferencesUtils.isReportSpeed(category); + metricsUnits = PreferencesUtils.isMetricUnits(); sportIcon.setImageResource(getIcon(aggregatedStatistic)); typeLabel.setText(category); diff --git a/src/main/java/de/dennisguse/opentracks/content/data/DataField.java b/src/main/java/de/dennisguse/opentracks/content/data/DataField.java index 1d95a2640..eb091881c 100644 --- a/src/main/java/de/dennisguse/opentracks/content/data/DataField.java +++ b/src/main/java/de/dennisguse/opentracks/content/data/DataField.java @@ -1,6 +1,7 @@ package de.dennisguse.opentracks.content.data; import android.content.Context; +import android.content.res.Resources; import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.util.CsvConstants; @@ -57,43 +58,43 @@ public class DataField { return key + CsvConstants.ITEM_SEPARATOR + visible + CsvConstants.ITEM_SEPARATOR + primary; } - public static String getTitleByKey(Context context, String key) { - if (key.equals(context.getString(R.string.stats_custom_layout_total_time_key))) { - return context.getString(R.string.stats_total_time); - } else if (key.equals(context.getString(R.string.stats_custom_layout_moving_time_key))) { - return context.getString(R.string.stats_moving_time); - } else if (key.equals(context.getString(R.string.stats_custom_layout_distance_key))) { - return context.getString(R.string.stats_distance); - } else if (key.equals(context.getString(R.string.stats_custom_layout_speed_key))) { - return context.getString(R.string.stats_speed); - } else if (key.equals(context.getString(R.string.stats_custom_layout_pace_key))) { - return context.getString(R.string.stats_pace); - } else if (key.equals(context.getString(R.string.stats_custom_layout_average_moving_speed_key))) { - return context.getString(R.string.stats_average_moving_speed); - } else if (key.equals(context.getString(R.string.stats_custom_layout_average_speed_key))) { - return context.getString(R.string.stats_average_speed); - } else if (key.equals(context.getString(R.string.stats_custom_layout_max_speed_key))) { - return context.getString(R.string.stats_max_speed); - } else if (key.equals(context.getString(R.string.stats_custom_layout_average_moving_pace_key))) { - return context.getString(R.string.stats_average_moving_pace); - } else if (key.equals(context.getString(R.string.stats_custom_layout_average_pace_key))) { - return context.getString(R.string.stats_average_pace); - } else if (key.equals(context.getString(R.string.stats_custom_layout_fastest_pace_key))) { - return context.getString(R.string.stats_fastest_pace); - } else if (key.equals(context.getString(R.string.stats_custom_layout_altitude_key))) { - return context.getString(R.string.stats_altitude); - } else if (key.equals(context.getString(R.string.stats_custom_layout_gain_key))) { - return context.getString(R.string.stats_gain); - } else if (key.equals(context.getString(R.string.stats_custom_layout_loss_key))) { - return context.getString(R.string.stats_loss); - } else if (key.equals(context.getString(R.string.stats_custom_layout_coordinates_key))) { - return context.getString(R.string.stats_coordinates); - } else if (key.equals(context.getString(R.string.stats_custom_layout_heart_rate_key))) { - return context.getString(R.string.stats_sensors_heart_rate); - } else if (key.equals(context.getString(R.string.stats_custom_layout_cadence_key))) { - return context.getString(R.string.stats_sensors_cadence); - } else if (key.equals(context.getString(R.string.stats_custom_layout_power_key))) { - return context.getString(R.string.stats_sensors_power); + public static String getTitleByKey(Resources resources, String key) { + if (key.equals(resources.getString(R.string.stats_custom_layout_total_time_key))) { + return resources.getString(R.string.stats_total_time); + } else if (key.equals(resources.getString(R.string.stats_custom_layout_moving_time_key))) { + return resources.getString(R.string.stats_moving_time); + } else if (key.equals(resources.getString(R.string.stats_custom_layout_distance_key))) { + return resources.getString(R.string.stats_distance); + } else if (key.equals(resources.getString(R.string.stats_custom_layout_speed_key))) { + return resources.getString(R.string.stats_speed); + } else if (key.equals(resources.getString(R.string.stats_custom_layout_pace_key))) { + return resources.getString(R.string.stats_pace); + } else if (key.equals(resources.getString(R.string.stats_custom_layout_average_moving_speed_key))) { + return resources.getString(R.string.stats_average_moving_speed); + } else if (key.equals(resources.getString(R.string.stats_custom_layout_average_speed_key))) { + return resources.getString(R.string.stats_average_speed); + } else if (key.equals(resources.getString(R.string.stats_custom_layout_max_speed_key))) { + return resources.getString(R.string.stats_max_speed); + } else if (key.equals(resources.getString(R.string.stats_custom_layout_average_moving_pace_key))) { + return resources.getString(R.string.stats_average_moving_pace); + } else if (key.equals(resources.getString(R.string.stats_custom_layout_average_pace_key))) { + return resources.getString(R.string.stats_average_pace); + } else if (key.equals(resources.getString(R.string.stats_custom_layout_fastest_pace_key))) { + return resources.getString(R.string.stats_fastest_pace); + } else if (key.equals(resources.getString(R.string.stats_custom_layout_altitude_key))) { + return resources.getString(R.string.stats_altitude); + } else if (key.equals(resources.getString(R.string.stats_custom_layout_gain_key))) { + return resources.getString(R.string.stats_gain); + } else if (key.equals(resources.getString(R.string.stats_custom_layout_loss_key))) { + return resources.getString(R.string.stats_loss); + } else if (key.equals(resources.getString(R.string.stats_custom_layout_coordinates_key))) { + return resources.getString(R.string.stats_coordinates); + } else if (key.equals(resources.getString(R.string.stats_custom_layout_heart_rate_key))) { + return resources.getString(R.string.stats_sensors_heart_rate); + } else if (key.equals(resources.getString(R.string.stats_custom_layout_cadence_key))) { + return resources.getString(R.string.stats_sensors_cadence); + } else if (key.equals(resources.getString(R.string.stats_custom_layout_power_key))) { + return resources.getString(R.string.stats_sensors_power); } else { throw new RuntimeException("It doesn't exists a field with key: " + key); } diff --git a/src/main/java/de/dennisguse/opentracks/fragments/ChartFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/ChartFragment.java index 38172c201..033310085 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/ChartFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/ChartFragment.java @@ -64,8 +64,6 @@ public class ChartFragment extends Fragment implements TrackDataListener { return chartFragment; } - private SharedPreferences sharedPreferences; - private TrackDataHub trackDataHub; // Stats gathered from the received data @@ -80,8 +78,8 @@ public class ChartFragment extends Fragment implements TrackDataListener { private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { - if (PreferencesUtils.isKey(getContext(), R.string.stats_units_key, key)) { - boolean metricUnits = PreferencesUtils.isMetricUnits(sharedPreferences, getContext()); + if (PreferencesUtils.isKey(R.string.stats_units_key, key)) { + boolean metricUnits = PreferencesUtils.isMetricUnits(); if (metricUnits != viewBinding.chartView.getMetricUnits()) { viewBinding.chartView.setMetricUnits(metricUnits); runOnUiThread(() -> { @@ -91,8 +89,8 @@ public class ChartFragment extends Fragment implements TrackDataListener { }); } } - if (PreferencesUtils.isKey(getContext(), R.string.stats_rate_key, key)) { - boolean reportSpeed = PreferencesUtils.isReportSpeed(sharedPreferences, getContext(), category); + if (PreferencesUtils.isKey(R.string.stats_rate_key, key)) { + boolean reportSpeed = PreferencesUtils.isReportSpeed(category); if (reportSpeed != viewBinding.chartView.getReportSpeed()) { viewBinding.chartView.setReportSpeed(reportSpeed); viewBinding.chartView.applyReportSpeed(); @@ -141,9 +139,8 @@ public class ChartFragment extends Fragment implements TrackDataListener { public void onResume() { super.onResume(); resumeTrackDataHub(); - sharedPreferences = PreferencesUtils.getSharedPreferences(getContext()); - sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); - sharedPreferenceChangeListener.onSharedPreferenceChanged(sharedPreferences, null); + + PreferencesUtils.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); checkChartSettings(); getActivity().runOnUiThread(updateChart); @@ -153,7 +150,7 @@ public class ChartFragment extends Fragment implements TrackDataListener { public void onPause() { super.onPause(); pauseTrackDataHub(); - sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); + PreferencesUtils.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); } @Override @@ -162,12 +159,6 @@ public class ChartFragment extends Fragment implements TrackDataListener { viewBinding = null; } - @Override - public void onDestroy() { - super.onDestroy(); - sharedPreferences = null; - } - @Override public void onTrackUpdated(Track track) { if (isResumed()) { @@ -177,7 +168,7 @@ public class ChartFragment extends Fragment implements TrackDataListener { } category = track.getCategory(); - boolean reportSpeed = PreferencesUtils.isReportSpeed(PreferencesUtils.getSharedPreferences(getContext()), getContext(), category); + boolean reportSpeed = PreferencesUtils.isReportSpeed(category); if (reportSpeed != viewBinding.chartView.getReportSpeed()) { viewBinding.chartView.setReportSpeed(reportSpeed); viewBinding.chartView.applyReportSpeed(); diff --git a/src/main/java/de/dennisguse/opentracks/fragments/IntervalsFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/IntervalsFragment.java index 9bc8b3f5a..5ee65cde4 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/IntervalsFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/IntervalsFragment.java @@ -46,15 +46,13 @@ public class IntervalsFragment extends Fragment { private IntervalStatisticsAdapter adapter; private ArrayAdapter spinnerAdapter; - private SharedPreferences sharedPreferences; - private boolean isReportSpeed; private IntervalListViewBinding viewBinding; protected final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (sharedPreferences, key) -> { - if (PreferencesUtils.isKey(getContext(), R.string.stats_units_key, key) || PreferencesUtils.isKey(getContext(), R.string.stats_rate_key, key)) { - updateIntervals(PreferencesUtils.isMetricUnits(sharedPreferences, getContext()), selectedInterval); + if (PreferencesUtils.isKey(R.string.stats_units_key, key) || PreferencesUtils.isKey(R.string.stats_rate_key, key)) { + updateIntervals(PreferencesUtils.isMetricUnits(), selectedInterval); if (spinnerAdapter != null) { spinnerAdapter.notifyDataSetChanged(); } @@ -93,8 +91,6 @@ public class IntervalsFragment extends Fragment { public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - sharedPreferences = PreferencesUtils.getSharedPreferences(getContext()); - adapter = new IntervalStatisticsAdapter(getContext(), stackModeListView, metricUnits, isReportSpeed); viewBinding.intervalList.setLayoutManager(new LinearLayoutManager(getContext())); // TODO handle empty view: before we did viewBinding.intervalList.setEmptyView(viewBinding.intervalListEmptyView); @@ -136,13 +132,12 @@ public class IntervalsFragment extends Fragment { public void onResume() { super.onResume(); - sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); - sharedPreferenceChangeListener.onSharedPreferenceChanged(sharedPreferences, null); + PreferencesUtils.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); ContentProviderUtils contentProviderUtils = new ContentProviderUtils(getContext()); Track track = contentProviderUtils.getTrack(trackId); if (track != null) { - isReportSpeed = PreferencesUtils.isReportSpeed(sharedPreferences, getContext(), track.getCategory()); + isReportSpeed = PreferencesUtils.isReportSpeed(track.getCategory()); } viewModel = new ViewModelProvider(getActivity()).get(IntervalStatisticsModel.class); @@ -152,7 +147,9 @@ public class IntervalsFragment extends Fragment { @Override public void onPause() { super.onPause(); - sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); + + PreferencesUtils.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); + if (viewModel != null) { viewModel.onPause(); } @@ -168,8 +165,6 @@ public class IntervalsFragment extends Fragment { public void onDestroy() { super.onDestroy(); - sharedPreferences = null; - adapter = null; viewModel = null; } diff --git a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java index 32945c405..91acf5e74 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java @@ -79,21 +79,20 @@ public class StatisticsRecordedFragment extends Fragment { private StatisticsRecordedBinding viewBinding; - private SharedPreferences sharedPreferences; private boolean preferenceMetricUnits; private boolean preferenceReportSpeed; private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (sharedPreferences, key) -> { boolean updateUInecessary = false; - if (PreferencesUtils.isKey(getContext(), R.string.stats_units_key, key)) { + if (PreferencesUtils.isKey(R.string.stats_units_key, key)) { updateUInecessary = true; - preferenceMetricUnits = PreferencesUtils.isMetricUnits(sharedPreferences, getContext()); + preferenceMetricUnits = PreferencesUtils.isMetricUnits(); } - if (PreferencesUtils.isKey(getContext(), R.string.stats_rate_key, key) && track != null) { + if (PreferencesUtils.isKey(R.string.stats_rate_key, key) && track != null) { updateUInecessary = true; - preferenceReportSpeed = PreferencesUtils.isReportSpeed(sharedPreferences, getContext(), track.getCategory()); + preferenceReportSpeed = PreferencesUtils.isReportSpeed(track.getCategory()); } if (key != null && updateUInecessary && isResumed()) { @@ -112,8 +111,6 @@ public class StatisticsRecordedFragment extends Fragment { trackId = getArguments().getParcelable(TRACK_ID_KEY); contentProviderUtils = new ContentProviderUtils(getContext()); - sharedPreferences = PreferencesUtils.getSharedPreferences(getContext()); - sensorsAdapter = new StatisticsAdapter.WithRecordedLayout(getContext()); } @@ -132,24 +129,22 @@ public class StatisticsRecordedFragment extends Fragment { public void onResume() { super.onResume(); - sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); - sharedPreferenceChangeListener.onSharedPreferenceChanged(sharedPreferences, null); + PreferencesUtils.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); loadStatistics(); } + @Override + public void onPause() { + super.onPause(); + + PreferencesUtils.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); + } + @Override public void onDestroyView() { super.onDestroyView(); viewBinding = null; - - sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); - } - - @Override - public void onDestroy() { - super.onDestroy(); - sharedPreferences = null; } public void loadStatistics() { @@ -168,7 +163,7 @@ public class StatisticsRecordedFragment extends Fragment { boolean prefsChanged = this.track == null || (!this.track.getCategory().equals(track.getCategory())); this.track = track; if (prefsChanged) { - sharedPreferenceChangeListener.onSharedPreferenceChanged(sharedPreferences, getString(R.string.stats_rate_key)); + sharedPreferenceChangeListener.onSharedPreferenceChanged(null, getString(R.string.stats_rate_key)); } loadTrackDescription(track); diff --git a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java index c3022465b..6280febad 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java @@ -55,24 +55,23 @@ public class StatisticsRecordingFragment extends Fragment { private StatisticsDataModel viewModel; private LiveData> statisticsLiveData; - private SharedPreferences sharedPreferences; private boolean preferenceMetricUnits; private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (sharedPreferences, key) -> { boolean updateUInecessary = false; - if (PreferencesUtils.isKey(getContext(), R.string.stats_units_key, key)) { + if (PreferencesUtils.isKey(R.string.stats_units_key, key)) { updateUInecessary = true; - preferenceMetricUnits = PreferencesUtils.isMetricUnits(sharedPreferences, getContext()); + preferenceMetricUnits = PreferencesUtils.isMetricUnits(); } - if (PreferencesUtils.isKey(getContext(), R.string.stats_custom_layout_fields_key, key)) { + if (PreferencesUtils.isKey(R.string.stats_custom_layout_fields_key, key)) { updateUInecessary = true; - layout = PreferencesUtils.getCustomLayout(sharedPreferences, getContext()); + layout = PreferencesUtils.getCustomLayout(); } - if (PreferencesUtils.isKey(getContext(), R.string.stats_custom_layout_columns_key, key)) { - gridLayoutManager.setSpanCount(PreferencesUtils.getLayoutColumns(sharedPreferences, getContext())); + if (PreferencesUtils.isKey(R.string.stats_custom_layout_columns_key, key)) { + gridLayoutManager.setSpanCount(PreferencesUtils.getLayoutColumns()); } if (key != null && updateUInecessary && isResumed()) { @@ -97,7 +96,6 @@ public class StatisticsRecordingFragment extends Fragment { @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - sharedPreferences = PreferencesUtils.getSharedPreferences(getContext()); trackRecordingServiceConnection = new TrackRecordingServiceConnection(bindChangedCallback); statisticsAdapter = new StatisticsAdapter(getContext()); @@ -109,7 +107,7 @@ public class StatisticsRecordingFragment extends Fragment { RecyclerView recyclerView = viewBinding.statsRecyclerView; recyclerView.addItemDecoration(new DividerItemDecoration(getContext(), RecyclerView.VERTICAL)); - final int numColumns = PreferencesUtils.getLayoutColumns(sharedPreferences, getContext()); + final int numColumns = PreferencesUtils.getLayoutColumns(); gridLayoutManager = new GridLayoutManager(getContext(), numColumns); gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override @@ -130,8 +128,7 @@ public class StatisticsRecordingFragment extends Fragment { public void onResume() { super.onResume(); - sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); - sharedPreferenceChangeListener.onSharedPreferenceChanged(sharedPreferences, null); + PreferencesUtils.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); viewModel = new ViewModelProvider(getActivity()).get(StatisticsDataModel.class); statisticsLiveData = viewModel.getStatsData(); @@ -143,7 +140,7 @@ public class StatisticsRecordingFragment extends Fragment { @Override public void onPause() { super.onPause(); - sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); + PreferencesUtils.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); } @Override @@ -162,7 +159,6 @@ public class StatisticsRecordingFragment extends Fragment { public void onDestroy() { super.onDestroy(); trackRecordingServiceConnection = null; - sharedPreferences = null; viewModel = null; statisticsLiveData.removeObservers(getActivity()); } @@ -179,7 +175,7 @@ public class StatisticsRecordingFragment extends Fragment { this.recordingData = recordingData; if (!oldCategory.equals(newCategory)) { - sharedPreferenceChangeListener.onSharedPreferenceChanged(sharedPreferences, getString(R.string.stats_rate_key)); + sharedPreferenceChangeListener.onSharedPreferenceChanged(null, getString(R.string.stats_rate_key)); } latestTrackPoint = recordingData.getLatestTrackPoint(); diff --git a/src/main/java/de/dennisguse/opentracks/io/file/exporter/SharePictureTrackExporter.java b/src/main/java/de/dennisguse/opentracks/io/file/exporter/SharePictureTrackExporter.java index 1abea2569..35b616e44 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/exporter/SharePictureTrackExporter.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/exporter/SharePictureTrackExporter.java @@ -61,7 +61,7 @@ public class SharePictureTrackExporter implements TrackExporter { TrackSharePictureBinding viewBinding = TrackSharePictureBinding.inflate(LayoutInflater.from(context)); viewBinding.sharePictureCategory.setText(track.getCategory()); - boolean metricUnits = PreferencesUtils.isMetricUnits(PreferencesUtils.getSharedPreferences(context), context); + boolean metricUnits = PreferencesUtils.isMetricUnits(); TrackStatistics trackStatistics = track.getTrackStatistics(); viewBinding.sharePictureTotalTime.setText(StringUtils.formatElapsedTimeWithHour(track.getTrackStatistics().getTotalTime())); diff --git a/src/main/java/de/dennisguse/opentracks/io/file/importer/DirectoryChooserActivity.java b/src/main/java/de/dennisguse/opentracks/io/file/importer/DirectoryChooserActivity.java index 4f376e580..5e49708cb 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/importer/DirectoryChooserActivity.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/importer/DirectoryChooserActivity.java @@ -19,14 +19,10 @@ public abstract class DirectoryChooserActivity extends AppCompatActivity { private static final int DIRECTORY_PICKER_REQUEST_CODE = 6; - protected SharedPreferences sharedPreferences; - @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - sharedPreferences = PreferencesUtils.getSharedPreferences(this); - Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE); DocumentFile directoryUri = configureDirectoryChooserIntent(intent); if (directoryUri == null) { @@ -46,7 +42,6 @@ public abstract class DirectoryChooserActivity extends AppCompatActivity { @Override protected void onDestroy() { super.onDestroy(); - sharedPreferences = null; } protected void onActivityResultCustom(int requestCode, int resultCode, @Nullable Intent resultData) { @@ -91,14 +86,14 @@ public abstract class DirectoryChooserActivity extends AppCompatActivity { super.configureDirectoryChooserIntent(intent); intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION); - return PreferencesUtils.getDefaultExportDirectoryUri(sharedPreferences, this); + return PreferencesUtils.getDefaultExportDirectoryUri(this); } @Override protected Intent createNextActivityIntent(Uri directoryUri) { Intent intent = IntentUtils.newIntent(this, ExportActivity.class); intent.putExtra(ExportActivity.EXTRA_DIRECTORY_URI_KEY, directoryUri); - intent.putExtra(ExportActivity.EXTRA_TRACKFILEFORMAT_KEY, PreferencesUtils.getExportTrackFileFormat(sharedPreferences, this)); + intent.putExtra(ExportActivity.EXTRA_TRACKFILEFORMAT_KEY, PreferencesUtils.getExportTrackFileFormat()); return intent; } } @@ -112,11 +107,11 @@ public abstract class DirectoryChooserActivity extends AppCompatActivity { case RESULT_OK: Uri directoryUri = resultData.getData(); - PreferencesUtils.setDefaultExportDirectoryUri(sharedPreferences, this, directoryUri); + PreferencesUtils.setDefaultExportDirectoryUri(directoryUri); IntentUtils.persistDirectoryAccessPermission(getApplicationContext(), directoryUri); break; case RESULT_CANCELED: - PreferencesUtils.setDefaultExportDirectoryUri(sharedPreferences, this, null); + PreferencesUtils.setDefaultExportDirectoryUri(null); //TODO Remove stored permission contentResolver.releasePersistableUriPermission break; } @@ -129,8 +124,8 @@ public abstract class DirectoryChooserActivity extends AppCompatActivity { protected DocumentFile configureDirectoryChooserIntent(Intent intent) { super.configureDirectoryChooserIntent(intent); intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); - if (PreferencesUtils.isDefaultExportDirectoryUri(sharedPreferences, this)) { - intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, PreferencesUtils.getDefaultExportDirectoryUri(sharedPreferences, this).getUri()); + if (PreferencesUtils.isDefaultExportDirectoryUri(this)) { + intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, PreferencesUtils.getDefaultExportDirectoryUri(this).getUri()); } return null; } diff --git a/src/main/java/de/dennisguse/opentracks/io/file/importer/ImportService.java b/src/main/java/de/dennisguse/opentracks/io/file/importer/ImportService.java index 5eb87cad3..5834f1111 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/importer/ImportService.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/importer/ImportService.java @@ -54,10 +54,9 @@ public class ImportService extends JobIntentService { String fileExtension = FileUtils.getExtension(file); try { - SharedPreferences sharedPreferences = PreferencesUtils.getSharedPreferences(this); - Distance maxRecordingDistance = PreferencesUtils.getMaxRecordingDistance(sharedPreferences, this); - Distance recordingDistanceInterval = PreferencesUtils.getRecordingDistanceInterval(sharedPreferences, this); - boolean preventReimport = PreferencesUtils.getPreventReimportTracks(sharedPreferences, this); + Distance maxRecordingDistance = PreferencesUtils.getMaxRecordingDistance(); + Distance recordingDistanceInterval = PreferencesUtils.getRecordingDistanceInterval(); + boolean preventReimport = PreferencesUtils.getPreventReimportTracks(); TrackImporter trackImporter = new TrackImporter(this, new ContentProviderUtils(this), recordingDistanceInterval, maxRecordingDistance, preventReimport); diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java index 520fdf90d..71873a39e 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java @@ -59,7 +59,7 @@ class TrackRecordingManager { //TODO Pass TrackPoint track.setName(TrackNameUtils.getTrackName(context, trackId, segmentStartTrackPoint.getTime())); - String category = PreferencesUtils.getDefaultActivity(PreferencesUtils.getSharedPreferences(context), context); //TODO Re-use sharedpreferences + String category = PreferencesUtils.getDefaultActivity(); track.setCategory(category); track.setIcon(TrackIconUtils.getIconValue(context, category)); track.setTrackStatistics(trackStatisticsUpdater.getTrackStatistics()); @@ -277,12 +277,12 @@ class TrackRecordingManager { } } - public void onSharedPreferenceChanged(@NonNull SharedPreferences sharedPreferences, String key) { - if (PreferencesUtils.isKey(context, R.string.recording_distance_interval_key, key)) { - recordingDistanceInterval = PreferencesUtils.getRecordingDistanceInterval(sharedPreferences, context); + public void onSharedPreferenceChanged(String key) { + if (PreferencesUtils.isKey(R.string.recording_distance_interval_key, key)) { + recordingDistanceInterval = PreferencesUtils.getRecordingDistanceInterval(); } - if (PreferencesUtils.isKey(context, R.string.max_recording_distance_key, key)) { - maxRecordingDistance = PreferencesUtils.getMaxRecordingDistance(sharedPreferences, context); + if (PreferencesUtils.isKey(R.string.max_recording_distance_key, key)) { + maxRecordingDistance = PreferencesUtils.getMaxRecordingDistance(); } } } diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java index 25ccb0375..54e7cdb8a 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java @@ -96,25 +96,23 @@ public class TrackRecordingService extends Service implements TrackPointCreator. } }; - private SharedPreferences sharedPreferences; - private final OnSharedPreferenceChangeListener sharedPreferenceChangeListener = new OnSharedPreferenceChangeListener() { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { Context context = TrackRecordingService.this; - if (PreferencesUtils.isKey(context, R.string.stats_units_key, key)) { - boolean metricUnits = PreferencesUtils.isMetricUnits(sharedPreferences, context); + if (PreferencesUtils.isKey(R.string.stats_units_key, key)) { + boolean metricUnits = PreferencesUtils.isMetricUnits(); notificationManager.setMetricUnits(metricUnits); } - if (PreferencesUtils.isKey(context, R.string.voice_announcement_frequency_key, key)) { - voiceAnnouncementManager.setFrequency(PreferencesUtils.getVoiceAnnouncementFrequency(sharedPreferences, context)); + if (PreferencesUtils.isKey(R.string.voice_announcement_frequency_key, key)) { + voiceAnnouncementManager.setFrequency(PreferencesUtils.getVoiceAnnouncementFrequency()); } - if (PreferencesUtils.isKey(context, new int[]{R.string.voice_announcement_distance_key, R.string.stats_units_key}, key)) { - voiceAnnouncementManager.setFrequency(PreferencesUtils.getVoiceAnnouncementDistance(sharedPreferences, context)); + if (PreferencesUtils.isKey(new int[]{R.string.voice_announcement_distance_key, R.string.stats_units_key}, key)) { + voiceAnnouncementManager.setFrequency(PreferencesUtils.getVoiceAnnouncementDistance()); } - trackPointCreator.onSharedPreferenceChanged(sharedPreferences, key); - trackRecordingManager.onSharedPreferenceChanged(sharedPreferences, key); + trackPointCreator.onSharedPreferenceChanged(key); + trackRecordingManager.onSharedPreferenceChanged(key); } }; @@ -148,9 +146,7 @@ public class TrackRecordingService extends Service implements TrackPointCreator. notificationManager = new TrackRecordingServiceNotificationManager(this); - sharedPreferences = PreferencesUtils.getSharedPreferences(this); - sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); - sharedPreferenceChangeListener.onSharedPreferenceChanged(sharedPreferences, null); + PreferencesUtils.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); } @Override @@ -173,8 +169,7 @@ public class TrackRecordingService extends Service implements TrackPointCreator. // Reverse order from onCreate showNotification(false); //TODO Why? - sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); - sharedPreferences = null; + PreferencesUtils.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); try { voiceAnnouncementManager.shutdown(); diff --git a/src/main/java/de/dennisguse/opentracks/services/handlers/GpsStatus.java b/src/main/java/de/dennisguse/opentracks/services/handlers/GpsStatus.java index a4b2b3c04..cab0c96a1 100644 --- a/src/main/java/de/dennisguse/opentracks/services/handlers/GpsStatus.java +++ b/src/main/java/de/dennisguse/opentracks/services/handlers/GpsStatus.java @@ -68,10 +68,9 @@ class GpsStatus { this.client = client; this.context = context; - SharedPreferences sharedPreferences = PreferencesUtils.getSharedPreferences(context); - thresholdHorizontalAccuracy = PreferencesUtils.getRecordingDistanceInterval(sharedPreferences, context); + thresholdHorizontalAccuracy = PreferencesUtils.getRecordingDistanceInterval(); - Duration minRecordingInterval = PreferencesUtils.getMinRecordingInterval(sharedPreferences, context); + Duration minRecordingInterval = PreferencesUtils.getMinRecordingInterval(); signalLostThreshold = SIGNAL_LOST_THRESHOLD.plus(minRecordingInterval); gpsStatusHandler = new Handler(); diff --git a/src/main/java/de/dennisguse/opentracks/services/handlers/LocationHandler.java b/src/main/java/de/dennisguse/opentracks/services/handlers/LocationHandler.java index 1d4f445a0..6d3738aac 100644 --- a/src/main/java/de/dennisguse/opentracks/services/handlers/LocationHandler.java +++ b/src/main/java/de/dennisguse/opentracks/services/handlers/LocationHandler.java @@ -35,8 +35,8 @@ public class LocationHandler implements LocationListener, GpsStatus.GpsStatusLis this.trackPointCreator = trackPointCreator; } - public void onStart(@NonNull Context context, SharedPreferences sharedPreferences) { - onSharedPreferenceChanged(context, sharedPreferences, null); + public void onStart(@NonNull Context context) { + onSharedPreferenceChanged(null); gpsStatus = new GpsStatus(context, this); locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); registerLocationListener(); @@ -62,26 +62,26 @@ public class LocationHandler implements LocationListener, GpsStatus.GpsStatusLis } } - public void onSharedPreferenceChanged(@NonNull Context context, @NonNull SharedPreferences sharedPreferences, String key) { + public void onSharedPreferenceChanged(String key) { boolean registerListener = false; - if (PreferencesUtils.isKey(context, R.string.min_recording_interval_key, key)) { + if (PreferencesUtils.isKey(R.string.min_recording_interval_key, key)) { registerListener = true; - gpsInterval = PreferencesUtils.getMinRecordingInterval(sharedPreferences, context); + gpsInterval = PreferencesUtils.getMinRecordingInterval(); if (gpsStatus != null) { gpsStatus.onMinRecordingIntervalChanged(gpsInterval); } } - if (PreferencesUtils.isKey(context, R.string.recording_gps_accuracy_key, key)) { - thresholdHorizontalAccuracy = PreferencesUtils.getThresholdHorizontalAccuracy(sharedPreferences, context); + if (PreferencesUtils.isKey(R.string.recording_gps_accuracy_key, key)) { + thresholdHorizontalAccuracy = PreferencesUtils.getThresholdHorizontalAccuracy(); } - if (PreferencesUtils.isKey(context, R.string.recording_distance_interval_key, key)) { + if (PreferencesUtils.isKey(R.string.recording_distance_interval_key, key)) { registerListener = true; if (gpsStatus != null) { - Distance gpsMinDistance = PreferencesUtils.getRecordingDistanceInterval(sharedPreferences, context); + Distance gpsMinDistance = PreferencesUtils.getRecordingDistanceInterval(); gpsStatus.onRecordingDistanceChanged(gpsMinDistance); } } diff --git a/src/main/java/de/dennisguse/opentracks/services/handlers/TrackPointCreator.java b/src/main/java/de/dennisguse/opentracks/services/handlers/TrackPointCreator.java index fe0df5582..d6044ab27 100644 --- a/src/main/java/de/dennisguse/opentracks/services/handlers/TrackPointCreator.java +++ b/src/main/java/de/dennisguse/opentracks/services/handlers/TrackPointCreator.java @@ -51,8 +51,7 @@ public class TrackPointCreator { public void start(@NonNull Context context) { this.context = context; - SharedPreferences sharedPreferences = PreferencesUtils.getSharedPreferences(context); - locationHandler.onStart(context, sharedPreferences); + locationHandler.onStart(context); remoteSensorManager = new BluetoothRemoteSensorManager(context); remoteSensorManager.start(); @@ -110,13 +109,8 @@ public class TrackPointCreator { this.context = null; } - public void onSharedPreferenceChanged(@NonNull SharedPreferences preferences, String key) { - if (context == null) { - Log.w(TAG, "not started yet."); - return; - } - - locationHandler.onSharedPreferenceChanged(context, preferences, key); + public void onSharedPreferenceChanged(String key) { + locationHandler.onSharedPreferenceChanged(key); } public void onNewTrackPoint(TrackPoint trackPoint, Distance thresholdHorizontalAccuracy) { diff --git a/src/main/java/de/dennisguse/opentracks/services/sensors/BluetoothRemoteSensorManager.java b/src/main/java/de/dennisguse/opentracks/services/sensors/BluetoothRemoteSensorManager.java index 182b2fa4e..36a7ef0f3 100644 --- a/src/main/java/de/dennisguse/opentracks/services/sensors/BluetoothRemoteSensorManager.java +++ b/src/main/java/de/dennisguse/opentracks/services/sensors/BluetoothRemoteSensorManager.java @@ -61,7 +61,6 @@ public class BluetoothRemoteSensorManager implements BluetoothConnectionManager. private boolean started = false; - private final SharedPreferences sharedPreferences; private Distance preferenceWheelCircumference; private final BluetoothConnectionManager.HeartRate heartRate = new BluetoothConnectionManager.HeartRate(this); @@ -77,34 +76,34 @@ public class BluetoothRemoteSensorManager implements BluetoothConnectionManager. public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if (!started) return; - if (PreferencesUtils.isKey(context, R.string.settings_sensor_bluetooth_heart_rate_key, key)) { - String address = PreferencesUtils.getBluetoothHeartRateSensorAddress(sharedPreferences, context); + if (PreferencesUtils.isKey(R.string.settings_sensor_bluetooth_heart_rate_key, key)) { + String address = PreferencesUtils.getBluetoothHeartRateSensorAddress(); connect(heartRate, address); } - if (PreferencesUtils.isKey(context, R.string.settings_sensor_bluetooth_cycling_cadence_key, key)) { - String address = PreferencesUtils.getBluetoothCyclingCadenceSensorAddress(sharedPreferences, context); + if (PreferencesUtils.isKey(R.string.settings_sensor_bluetooth_cycling_cadence_key, key)) { + String address = PreferencesUtils.getBluetoothCyclingCadenceSensorAddress(); connect(cyclingCadence, address); } - if (PreferencesUtils.isKey(context, R.string.settings_sensor_bluetooth_cycling_speed_key, key)) { - String address = PreferencesUtils.getBluetoothCyclingSpeedSensorAddress(sharedPreferences, context); + if (PreferencesUtils.isKey(R.string.settings_sensor_bluetooth_cycling_speed_key, key)) { + String address = PreferencesUtils.getBluetoothCyclingSpeedSensorAddress(); connect(cyclingSpeed, address); } - if (PreferencesUtils.isKey(context, R.string.settings_sensor_bluetooth_cycling_speed_wheel_circumference_key, key)) { - preferenceWheelCircumference = PreferencesUtils.getWheelCircumference(sharedPreferences, context); + if (PreferencesUtils.isKey(R.string.settings_sensor_bluetooth_cycling_speed_wheel_circumference_key, key)) { + preferenceWheelCircumference = PreferencesUtils.getWheelCircumference(); } - if (PreferencesUtils.isKey(context, R.string.settings_sensor_bluetooth_cycling_power_key, key)) { - String address = PreferencesUtils.getBluetoothCyclingPowerSensorAddress(sharedPreferences, context); + if (PreferencesUtils.isKey(R.string.settings_sensor_bluetooth_cycling_power_key, key)) { + String address = PreferencesUtils.getBluetoothCyclingPowerSensorAddress(); connect(cyclingPower, address); } - if (PreferencesUtils.isKey(context, R.string.settings_sensor_bluetooth_running_speed_and_cadence_key, key)) { - String address = PreferencesUtils.getBluetoothRunningSpeedAndCadenceAddress(sharedPreferences, context); + if (PreferencesUtils.isKey(R.string.settings_sensor_bluetooth_running_speed_and_cadence_key, key)) { + String address = PreferencesUtils.getBluetoothRunningSpeedAndCadenceAddress(); connect(runningSpeedAndCadence, address); } @@ -113,16 +112,14 @@ public class BluetoothRemoteSensorManager implements BluetoothConnectionManager. public BluetoothRemoteSensorManager(Context context) { this.context = context; - sharedPreferences = PreferencesUtils.getSharedPreferences(context); bluetoothAdapter = BluetoothUtils.getAdapter(context); } public void start() { started = true; - sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); - //Trigger connection startup - sharedPreferenceChangeListener.onSharedPreferenceChanged(sharedPreferences, null); + //Registering triggers connection startup + PreferencesUtils.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); } public synchronized void stop() { @@ -134,7 +131,7 @@ public class BluetoothRemoteSensorManager implements BluetoothConnectionManager. sensorDataSet.clear(); - sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); + PreferencesUtils.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); started = false; } @@ -148,7 +145,7 @@ public class BluetoothRemoteSensorManager implements BluetoothConnectionManager. return; } - if (PreferencesUtils.isBluetoothSensorAddressNone(context, address)) { + if (PreferencesUtils.isBluetoothSensorAddressNone(address)) { Log.w(TAG, "No Bluetooth address."); connectionManager.disconnect(); return; diff --git a/src/main/java/de/dennisguse/opentracks/services/tasks/VoiceAnnouncement.java b/src/main/java/de/dennisguse/opentracks/services/tasks/VoiceAnnouncement.java index 01d9130b8..8051a4427 100644 --- a/src/main/java/de/dennisguse/opentracks/services/tasks/VoiceAnnouncement.java +++ b/src/main/java/de/dennisguse/opentracks/services/tasks/VoiceAnnouncement.java @@ -103,8 +103,6 @@ public class VoiceAnnouncement { } }; - private SharedPreferences sharedPreferences; - private TextToSpeech tts; // Response from TTS after its initialization private int ttsInitStatus = TextToSpeech.ERROR; @@ -122,8 +120,6 @@ public class VoiceAnnouncement { public void start() { Log.d(TAG, "Start"); - sharedPreferences = PreferencesUtils.getSharedPreferences(context); - if (tts == null) { tts = new TextToSpeech(context, status -> { Log.i(TAG, "TextToSpeech initialized with status " + status); @@ -161,9 +157,9 @@ public class VoiceAnnouncement { } - boolean isMetricUnits = PreferencesUtils.isMetricUnits(sharedPreferences, context); - boolean isReportSpeed = PreferencesUtils.isReportSpeed(sharedPreferences, context, track.getCategory()); - Distance minGPSDistance = PreferencesUtils.getRecordingDistanceInterval(sharedPreferences, context); + boolean isMetricUnits = PreferencesUtils.isMetricUnits(); + boolean isReportSpeed = PreferencesUtils.isReportSpeed(track.getCategory()); + Distance minGPSDistance = PreferencesUtils.getRecordingDistanceInterval(); //TODO Do not load all trackpoints for every announcement TrackPointIterator trackPointIterator = contentProviderUtils.getTrackPointLocationIterator(track.getId(), null); @@ -187,8 +183,6 @@ public class VoiceAnnouncement { ttsFallback.release(); ttsFallback = null; } - - sharedPreferences = null; } private void onTtsReady() { @@ -203,7 +197,7 @@ public class VoiceAnnouncement { */ } tts.setLanguage(locale); - tts.setSpeechRate(PreferencesUtils.getVoiceSpeedRate(PreferencesUtils.getSharedPreferences(context), context)); + tts.setSpeechRate(PreferencesUtils.getVoiceSpeedRate()); tts.setOnUtteranceProgressListener(utteranceListener); } } diff --git a/src/main/java/de/dennisguse/opentracks/settings/ActivityTypePreference.java b/src/main/java/de/dennisguse/opentracks/settings/ActivityTypePreference.java index e350362f0..9c005cdc0 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/ActivityTypePreference.java +++ b/src/main/java/de/dennisguse/opentracks/settings/ActivityTypePreference.java @@ -49,7 +49,7 @@ public class ActivityTypePreference extends DialogPreference { setDialogIcon(null); setPersistent(true); - SummaryProvider summaryProvider = preference -> PreferencesUtils.getDefaultActivity(PreferencesUtils.getSharedPreferences(context), ActivityTypePreference.this.getContext()); + SummaryProvider summaryProvider = preference -> PreferencesUtils.getDefaultActivity(); setSummaryProvider(summaryProvider); } @@ -61,8 +61,6 @@ public class ActivityTypePreference extends DialogPreference { public static class ActivityPreferenceDialog extends PreferenceDialogFragmentCompat { - private SharedPreferences sharedPreferences; - private AutoCompleteTextView textView; private ImageView iconView; @@ -80,11 +78,9 @@ public class ActivityTypePreference extends DialogPreference { super.onBindDialogView(view); final Context context = getActivity(); - sharedPreferences = PreferencesUtils.getSharedPreferences(context); - textView = view.findViewById(R.id.activity_type_preference_text_view); - String category = PreferencesUtils.getDefaultActivity(sharedPreferences, context); + String category = PreferencesUtils.getDefaultActivity(); textView.setText(category); ArrayAdapter adapter = ArrayAdapter.createFromResource(context, R.array.activity_types, android.R.layout.simple_dropdown_item_1line); textView.setAdapter(adapter); @@ -105,14 +101,8 @@ public class ActivityTypePreference extends DialogPreference { updateIcon(TrackIconUtils.getIconValue(context, category)); } - @Override - public void onDestroy() { - super.onDestroy(); - sharedPreferences = null; - } - private void showIconSelectDialog() { - String category = PreferencesUtils.getDefaultActivity(sharedPreferences, getActivity()); + String category = PreferencesUtils.getDefaultActivity(); ChooseActivityTypeDialogFragment.showDialog(getActivity().getSupportFragmentManager(), category); } @@ -121,7 +111,7 @@ public class ActivityTypePreference extends DialogPreference { if (positiveResult) { String newDefaultActivity = textView.getText().toString(); if (getPreference().callChangeListener(newDefaultActivity)) { - PreferencesUtils.setDefaultActivity(sharedPreferences, getActivity(), newDefaultActivity); + PreferencesUtils.setDefaultActivity(newDefaultActivity); HackUtils.invalidatePreference(getPreference()); } } diff --git a/src/main/java/de/dennisguse/opentracks/settings/PreferenceHelper.java b/src/main/java/de/dennisguse/opentracks/settings/PreferenceHelper.java index e383507cb..5741fae5c 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/PreferenceHelper.java +++ b/src/main/java/de/dennisguse/opentracks/settings/PreferenceHelper.java @@ -14,7 +14,7 @@ final class PreferenceHelper { for (int i = 0; i < entryValues.length; i++) { int value = Integer.parseInt(entryValues[i]); - if (value == PreferencesUtils.getMinRecordingIntervalDefault(context).getSeconds()) { + if (value == PreferencesUtils.getMinRecordingIntervalDefault().getSeconds()) { entries[i] = context.getString(R.string.value_smallest_recommended); } else { entries[i] = value < 60 ? context.getString(R.string.value_integer_second, value) : context.getString(R.string.value_integer_minute, value / 60); @@ -28,7 +28,7 @@ final class PreferenceHelper { String[] entryValues = context.getResources().getStringArray(R.array.recording_distance_interval_values); String[] entries = new String[entryValues.length]; - final int recordingDistanceIntervalDefault = (int) PreferencesUtils.getRecordingDistanceIntervalDefault(context).toM(); + final int recordingDistanceIntervalDefault = (int) PreferencesUtils.getRecordingDistanceIntervalDefault().toM(); for (int i = 0; i < entryValues.length; i++) { int value = Integer.parseInt(entryValues[i]); diff --git a/src/main/java/de/dennisguse/opentracks/settings/ResetDialogPreference.java b/src/main/java/de/dennisguse/opentracks/settings/ResetDialogPreference.java index 53007ed44..3e65950aa 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/ResetDialogPreference.java +++ b/src/main/java/de/dennisguse/opentracks/settings/ResetDialogPreference.java @@ -46,7 +46,7 @@ public class ResetDialogPreference extends DialogPreference { PreferencesUtils.resetPreferences(activity, true); Toast.makeText(activity, R.string.settings_reset_done, Toast.LENGTH_SHORT).show(); } else if (preferenceKey.equals(getString(R.string.settings_layout_reset_key))) { - PreferencesUtils.resetCustomLayoutPreferences(activity); + PreferencesUtils.resetCustomLayoutPreferences(); Toast.makeText(activity, R.string.settings_layout_reset_done, Toast.LENGTH_SHORT).show(); } diff --git a/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java b/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java index 0d07447ba..19ca80ee9 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java +++ b/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java @@ -96,14 +96,12 @@ public class SettingsActivity extends AbstractActivity implements ChooseActivity public static class PrefsFragment extends PreferenceFragmentCompat { - private SharedPreferences sharedPreferences; - private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (sharedPreferences, key) -> { - if (PreferencesUtils.isKey(getActivity(), R.string.stats_units_key, key)) { + if (PreferencesUtils.isKey(R.string.stats_units_key, key)) { getActivity().runOnUiThread(this::updateUnits); } - if (PreferencesUtils.isKey(getActivity(), R.string.night_mode_key, key)) { - getActivity().runOnUiThread(() -> ActivityUtils.applyNightMode(sharedPreferences, getContext())); + if (PreferencesUtils.isKey(R.string.night_mode_key, key)) { + getActivity().runOnUiThread(PreferencesUtils::applyNightMode); } }; @@ -130,8 +128,6 @@ public class SettingsActivity extends AbstractActivity implements ChooseActivity @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { - sharedPreferences = PreferencesUtils.getSharedPreferences(getContext()); - trackRecordingServiceConnection = new TrackRecordingServiceConnection(bindServiceCallback); try { @@ -149,7 +145,7 @@ public class SettingsActivity extends AbstractActivity implements ChooseActivity Preference instantExportDirectoryPreference = findPreference(getString(R.string.settings_default_export_directory_key)); instantExportDirectoryPreference.setSummaryProvider(preference -> { - DocumentFile directory = PreferencesUtils.getDefaultExportDirectoryUri(sharedPreferences, getContext()); + DocumentFile directory = PreferencesUtils.getDefaultExportDirectoryUri(getContext()); //Use same value for not set as Androidx ListPreference and EditTextPreference return directory != null ? directory.getName() : getString(R.string.not_set); }); @@ -157,31 +153,31 @@ public class SettingsActivity extends AbstractActivity implements ChooseActivity findPreference(getString(R.string.recording_distance_interval_key)) .setSummaryProvider( preference -> { - boolean metricUnits = PreferencesUtils.isMetricUnits(sharedPreferences, getActivity()); - Distance distance = PreferencesUtils.getRecordingDistanceInterval(sharedPreferences, getContext()); + boolean metricUnits = PreferencesUtils.isMetricUnits(); + Distance distance = PreferencesUtils.getRecordingDistanceInterval(); return getString(R.string.settings_recording_location_frequency_summary, StringUtils.formatDistance(getContext(), distance, metricUnits)); } ); findPreference(getString(R.string.max_recording_distance_key)) .setSummaryProvider( preference -> { - boolean metricUnits = PreferencesUtils.isMetricUnits(sharedPreferences, getActivity()); - Distance distance = PreferencesUtils.getMaxRecordingDistance(sharedPreferences, getContext()); + boolean metricUnits = PreferencesUtils.isMetricUnits(); + Distance distance = PreferencesUtils.getMaxRecordingDistance(); return getString(R.string.settings_recording_max_recording_distance_summary, StringUtils.formatDistance(getContext(), distance, metricUnits)); } ); findPreference(getString(R.string.recording_gps_accuracy_key)) .setSummaryProvider( preference -> { - boolean metricUnits = PreferencesUtils.isMetricUnits(sharedPreferences, getActivity()); - Distance distance = PreferencesUtils.getThresholdHorizontalAccuracy(sharedPreferences, getContext()); + boolean metricUnits = PreferencesUtils.isMetricUnits(); + Distance distance = PreferencesUtils.getThresholdHorizontalAccuracy(); return getString(R.string.settings_recording_min_required_accuracy_summary, StringUtils.formatDistance(getContext(), distance, metricUnits)); } ); findPreference(getString(R.string.min_recording_interval_key)) .setSummaryProvider( preference -> { - Duration interval = PreferencesUtils.getMinRecordingInterval(sharedPreferences, getContext()); + Duration interval = PreferencesUtils.getMinRecordingInterval(); return getString(R.string.settings_recording_location_frequency_summary, getString(R.string.value_integer_second, interval.getSeconds())); } ); @@ -200,8 +196,7 @@ public class SettingsActivity extends AbstractActivity implements ChooseActivity trackRecordingServiceConnection.bind(getContext()); - sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); - sharedPreferenceChangeListener.onSharedPreferenceChanged(sharedPreferences, null); + PreferencesUtils.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); updateUnits(); updatePrefsDependOnRecording(); @@ -211,13 +206,13 @@ public class SettingsActivity extends AbstractActivity implements ChooseActivity private void updatePostWorkoutExport() { Preference instantExportEnabledPreference = findPreference(getString(R.string.post_workout_export_enabled_key)); - instantExportEnabledPreference.setEnabled(PreferencesUtils.isDefaultExportDirectoryUri(sharedPreferences, getContext())); + instantExportEnabledPreference.setEnabled(PreferencesUtils.isDefaultExportDirectoryUri(getContext())); } @Override public void onPause() { super.onPause(); - sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); + PreferencesUtils.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); } @Override @@ -251,7 +246,6 @@ public class SettingsActivity extends AbstractActivity implements ChooseActivity public void onDestroy() { super.onDestroy(); trackRecordingServiceConnection.unbind(getContext()); - sharedPreferences = null; } public void setDefaultActivity(String iconValue) { @@ -282,7 +276,7 @@ public class SettingsActivity extends AbstractActivity implements ChooseActivity } private void updateUnits() { - boolean metricUnits = PreferencesUtils.isMetricUnits(sharedPreferences, getActivity()); + boolean metricUnits = PreferencesUtils.isMetricUnits(); ListPreference voiceFrequency = findPreference(getString(R.string.voice_announcement_frequency_key)); voiceFrequency.setEntries(StringUtils.getAnnouncementFrequency(getActivity())); diff --git a/src/main/java/de/dennisguse/opentracks/settings/SettingsCustomLayoutActivity.java b/src/main/java/de/dennisguse/opentracks/settings/SettingsCustomLayoutActivity.java index 1f564b4d1..882c69a68 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/SettingsCustomLayoutActivity.java +++ b/src/main/java/de/dennisguse/opentracks/settings/SettingsCustomLayoutActivity.java @@ -34,20 +34,18 @@ public class SettingsCustomLayoutActivity extends AbstractActivity implements Se private SettingsCustomLayoutAdapter adapterFieldsHidden; private Layout layoutFieldsVisible; private Layout layoutFieldsHidden; - private SharedPreferences sharedPreferences; private int numColumns; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - sharedPreferences = PreferencesUtils.getSharedPreferences(this); // Recycler view with visible stats. - layoutFieldsVisible = StatisticsUtils.filterVisible(PreferencesUtils.getCustomLayout(sharedPreferences, this), true); + layoutFieldsVisible = StatisticsUtils.filterVisible(PreferencesUtils.getCustomLayout(), true); adapterFieldsVisible = new SettingsCustomLayoutAdapter(this, this, layoutFieldsVisible); - numColumns = PreferencesUtils.getLayoutColumns(sharedPreferences, this); + numColumns = PreferencesUtils.getLayoutColumns(); RecyclerView recyclerViewVisible = viewBinding.recyclerViewVisible; gridLayoutManager = new GridLayoutManager(this, numColumns); gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @@ -90,7 +88,7 @@ public class SettingsCustomLayoutActivity extends AbstractActivity implements Se public void onItemSelected(AdapterView parent, View view, int position, long id) { numColumns = position + 1; gridLayoutManager.setSpanCount(numColumns); - PreferencesUtils.setLayoutColumns(sharedPreferences, SettingsCustomLayoutActivity.this, position + 1); + PreferencesUtils.setLayoutColumns(position + 1); } @Override @@ -98,10 +96,10 @@ public class SettingsCustomLayoutActivity extends AbstractActivity implements Se } }); - viewBinding.spinnerOptions.setSelection(PreferencesUtils.getLayoutColumns(sharedPreferences, SettingsCustomLayoutActivity.this) - 1); + viewBinding.spinnerOptions.setSelection(PreferencesUtils.getLayoutColumns() - 1); // Recycler view with not visible stats. - layoutFieldsHidden = StatisticsUtils.filterVisible(PreferencesUtils.getCustomLayout(sharedPreferences, this), false); + layoutFieldsHidden = StatisticsUtils.filterVisible(PreferencesUtils.getCustomLayout(), false); adapterFieldsHidden = new SettingsCustomLayoutAdapter(this, this, layoutFieldsHidden); RecyclerView recyclerViewNotVisible = viewBinding.recyclerViewNotVisible; recyclerViewNotVisible.setLayoutManager(new LinearLayoutManager(this)); @@ -115,14 +113,13 @@ public class SettingsCustomLayoutActivity extends AbstractActivity implements Se Layout newLayout = new Layout(layoutFieldsVisible.getProfile()); newLayout.addFields(layoutFieldsVisible.getFields()); newLayout.addFields(layoutFieldsHidden.getFields()); - PreferencesUtils.setCustomLayout(sharedPreferences, this, newLayout); + PreferencesUtils.setCustomLayout(newLayout); } } @Override protected void onDestroy() { super.onDestroy(); - sharedPreferences = null; layoutFieldsVisible = null; } diff --git a/src/main/java/de/dennisguse/opentracks/settings/bluetooth/BluetoothLeSensorPreference.java b/src/main/java/de/dennisguse/opentracks/settings/bluetooth/BluetoothLeSensorPreference.java index 8670ef439..daf05bfd5 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/bluetooth/BluetoothLeSensorPreference.java +++ b/src/main/java/de/dennisguse/opentracks/settings/bluetooth/BluetoothLeSensorPreference.java @@ -91,7 +91,7 @@ public abstract class BluetoothLeSensorPreference extends DialogPreference { @Override public CharSequence getSummary() { - if (getValue() == null || PreferencesUtils.isBluetoothSensorAddressNone(getContext(), getValue())) { + if (getValue() == null || PreferencesUtils.isBluetoothSensorAddressNone(getValue())) { return getContext().getString(DEVICE_NONE_RESOURCEID); } diff --git a/src/main/java/de/dennisguse/opentracks/util/ActivityUtils.java b/src/main/java/de/dennisguse/opentracks/util/ActivityUtils.java index 97b47fbdf..98fda5472 100644 --- a/src/main/java/de/dennisguse/opentracks/util/ActivityUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/ActivityUtils.java @@ -107,8 +107,4 @@ public class ActivityUtils { vibrator.vibrate(milliseconds); } } - - public static void applyNightMode(SharedPreferences sharedPreferences, Context context) { - AppCompatDelegate.setDefaultNightMode(PreferencesUtils.getDefaultNightMode(sharedPreferences, context)); - } } diff --git a/src/main/java/de/dennisguse/opentracks/util/ExportUtils.java b/src/main/java/de/dennisguse/opentracks/util/ExportUtils.java index 9314e42bd..da6d032a4 100644 --- a/src/main/java/de/dennisguse/opentracks/util/ExportUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/ExportUtils.java @@ -29,10 +29,9 @@ public class ExportUtils { private static final String TAG = ExportUtils.class.getSimpleName(); public static void postWorkoutExport(Context context, Track.Id trackId, ExportServiceResultReceiver resultReceiver) { - SharedPreferences sharedPreferences = PreferencesUtils.getSharedPreferences(context); - if (PreferencesUtils.shouldInstantExportAfterWorkout(sharedPreferences, context)) { - TrackFileFormat trackFileFormat = PreferencesUtils.getExportTrackFileFormat(sharedPreferences, context); - DocumentFile directory = PreferencesUtils.getDefaultExportDirectoryUri(sharedPreferences, context); + if (PreferencesUtils.shouldInstantExportAfterWorkout(context)) { + TrackFileFormat trackFileFormat = PreferencesUtils.getExportTrackFileFormat(); + DocumentFile directory = PreferencesUtils.getDefaultExportDirectoryUri(context); ExportService.enqueue(context, resultReceiver, trackId, trackFileFormat, directory.getUri()); } diff --git a/src/main/java/de/dennisguse/opentracks/util/IntentDashboardUtils.java b/src/main/java/de/dennisguse/opentracks/util/IntentDashboardUtils.java index 2b23edf88..69a2d7da8 100644 --- a/src/main/java/de/dennisguse/opentracks/util/IntentDashboardUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/IntentDashboardUtils.java @@ -74,13 +74,11 @@ public class IntentDashboardUtils { intent.putParcelableArrayListExtra(ACTION_DASHBOARD_PAYLOAD, uris); - SharedPreferences sharedPreferences = PreferencesUtils.getSharedPreferences(context); - - intent.putExtra(EXTRAS_SHOULD_KEEP_SCREEN_ON, PreferencesUtils.shouldKeepScreenOn(sharedPreferences, context)); - intent.putExtra(EXTRAS_SHOW_WHEN_LOCKED, PreferencesUtils.shouldShowStatsOnLockscreen(sharedPreferences, context)); + intent.putExtra(EXTRAS_SHOULD_KEEP_SCREEN_ON, PreferencesUtils.shouldKeepScreenOn()); + intent.putExtra(EXTRAS_SHOW_WHEN_LOCKED, PreferencesUtils.shouldShowStatsOnLockscreen()); intent.putExtra(EXTRAS_OPENTRACKS_IS_RECORDING_THIS_TRACK, isRecording); if (isRecording) { - intent.putExtra(EXTRAS_SHOW_FULLSCREEN, PreferencesUtils.shouldUseFullscreen(sharedPreferences, context)); + intent.putExtra(EXTRAS_SHOW_FULLSCREEN, PreferencesUtils.shouldUseFullscreen()); } intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); diff --git a/src/main/java/de/dennisguse/opentracks/util/IntentUtils.java b/src/main/java/de/dennisguse/opentracks/util/IntentUtils.java index 204a1a5d7..b6ae1f45a 100644 --- a/src/main/java/de/dennisguse/opentracks/util/IntentUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/IntentUtils.java @@ -91,7 +91,7 @@ public class IntentUtils { continue; } - Pair uriTrackFile = ShareContentProvider.createURI(trackId, track.getName(), PreferencesUtils.getExportTrackFileFormat(PreferencesUtils.getSharedPreferences(context), context)); + Pair uriTrackFile = ShareContentProvider.createURI(trackId, track.getName(), PreferencesUtils.getExportTrackFileFormat()); Pair uriSharePicture = ShareContentProvider.createURI(trackId, track.getName(), TrackFileFormat.SHARE_PICTURE_PNG); uris.addAll(Arrays.asList(uriSharePicture.first, uriTrackFile.first)); diff --git a/src/main/java/de/dennisguse/opentracks/util/PreferencesOpenHelper.java b/src/main/java/de/dennisguse/opentracks/util/PreferencesOpenHelper.java index 87e986525..b5b40f517 100644 --- a/src/main/java/de/dennisguse/opentracks/util/PreferencesOpenHelper.java +++ b/src/main/java/de/dennisguse/opentracks/util/PreferencesOpenHelper.java @@ -6,29 +6,25 @@ import android.content.SharedPreferences; import de.dennisguse.opentracks.R; public class PreferencesOpenHelper { - private final Context context; - private final SharedPreferences sharedPreferences; private static final int PREFERENCES_VERSION = 1; - private PreferencesOpenHelper(Context context, SharedPreferences sharedPreferences) { - this.context = context; - this.sharedPreferences = sharedPreferences; + private PreferencesOpenHelper() { } - public static PreferencesOpenHelper newInstance(Context context, SharedPreferences sharedPreferences) { - return new PreferencesOpenHelper(context, sharedPreferences); + public static PreferencesOpenHelper newInstance() { + return new PreferencesOpenHelper(); } public void checkForUpgrade() { - int lastVersion = PreferencesUtils.getInt(sharedPreferences, context, R.string.prefs_last_version_key, 0); + int lastVersion = PreferencesUtils.getInt(R.string.prefs_last_version_key, 0); if (PREFERENCES_VERSION > lastVersion) { onUpgrade(); } } private void onUpgrade() { - PreferencesUtils.setInt(sharedPreferences, context, R.string.prefs_last_version_key, PREFERENCES_VERSION); + PreferencesUtils.setInt(R.string.prefs_last_version_key, PREFERENCES_VERSION); switch (PREFERENCES_VERSION) { case 1: upgradeFrom0to1(); @@ -36,6 +32,6 @@ public class PreferencesOpenHelper { } private void upgradeFrom0to1() { - PreferencesUtils.setString(sharedPreferences, context, R.string.stats_custom_layout_fields_key, PreferencesUtils.buildDefaultLayout(context)); + PreferencesUtils.setString(R.string.stats_custom_layout_fields_key, PreferencesUtils.buildDefaultLayout()); } } diff --git a/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java index 792e59532..1ec9c0de9 100644 --- a/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java @@ -20,11 +20,13 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; +import android.content.res.Resources; import android.content.res.TypedArray; import android.net.Uri; import android.util.Log; import androidx.annotation.VisibleForTesting; +import androidx.appcompat.app.AppCompatDelegate; import androidx.documentfile.provider.DocumentFile; import androidx.preference.PreferenceManager; @@ -54,29 +56,44 @@ public class PreferencesUtils { private PreferencesUtils() { } - @Deprecated //Should only be used to get a sharedPreference for more than one interaction! - public static SharedPreferences getSharedPreferences(Context context) { - SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); - PreferencesOpenHelper.newInstance(context, sharedPreferences).checkForUpgrade(); - return sharedPreferences; + private static SharedPreferences sharedPreferences; + + private static Resources resources; + + /** + * Must be called during application startup. + */ + public static void initPreferences(final Context context, final Resources resources) { + PreferencesUtils.resources = resources; + PreferencesUtils.sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); + + PreferencesOpenHelper.newInstance().checkForUpgrade(); } - public static String getDefaultActivity(SharedPreferences sharedPreferences, Context context) { - return getString(sharedPreferences, context, R.string.default_activity_key, context.getString(R.string.default_activity_default)); + public static void registerOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListener changeListener) { + sharedPreferences.registerOnSharedPreferenceChangeListener(changeListener); + changeListener.onSharedPreferenceChanged(sharedPreferences, null); } - public static void setDefaultActivity(SharedPreferences sharedPreferences, Context context, String newDefaultActivity) { - setString(sharedPreferences, context, R.string.default_activity_key, newDefaultActivity); + public static void unregisterOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListener changeListener) { + sharedPreferences.unregisterOnSharedPreferenceChangeListener(changeListener); + } + + public static String getDefaultActivity() { + return getString(R.string.default_activity_key, resources.getString(R.string.default_activity_default)); + } + + public static void setDefaultActivity(String newDefaultActivity) { + setString(R.string.default_activity_key, newDefaultActivity); } /** * Gets a preference key * - * @param context the context * @param keyId the key id */ - private static String getKey(Context context, int keyId) { - return context.getString(keyId); + private static String getKey(int keyId) { + return resources.getString(keyId); } /** @@ -86,210 +103,210 @@ public class PreferencesUtils { * @param key The key of the preference * @return true if key == null or key belongs to keyId */ - public static boolean isKey(Context context, int keyId, String key) { - return key == null || key.equals(getKey(context, keyId)); + public static boolean isKey(int keyId, String key) { + return key == null || key.equals(getKey(keyId)); } - public static boolean isKey(Context context, int[] keyIds, String key) { + public static boolean isKey(int[] keyIds, String key) { for(int keyId : keyIds) { - if (isKey(context, keyId, key)) { + if (isKey(keyId, key)) { return true; } } return false; } - private static boolean getBoolean(SharedPreferences sharedPreferences, Context context, int keyId, boolean defaultValue) { - return sharedPreferences.getBoolean(getKey(context, keyId), defaultValue); + private static boolean getBoolean(int keyId, boolean defaultValue) { + return sharedPreferences.getBoolean(getKey(keyId), defaultValue); } - static int getInt(SharedPreferences sharedPreferences, Context context, int keyId, int defaultValue) { + static int getInt(int keyId, int defaultValue) { try { - return sharedPreferences.getInt(getKey(context, keyId), defaultValue); + return sharedPreferences.getInt(getKey(keyId), defaultValue); } catch (ClassCastException e) { //Ignore } //NOTE: We assume that the data was stored as String due to use of ListPreference. try { - String stringValue = sharedPreferences.getString(getKey(context, keyId), null); + String stringValue = sharedPreferences.getString(getKey(keyId), null); return Integer.parseInt(stringValue); } catch (NumberFormatException e) { return defaultValue; } } - private static float getFloat(SharedPreferences sharedPreferences, Context context, int keyId, float defaultValue) { + private static float getFloat(int keyId, float defaultValue) { try { - return sharedPreferences.getFloat(getKey(context, keyId), defaultValue); + return sharedPreferences.getFloat(getKey(keyId), defaultValue); } catch (ClassCastException e) { //Ignore } //NOTE: We assume that the data was stored as String due to use of ListPreference. try { - String stringValue = sharedPreferences.getString(getKey(context, keyId), null); + String stringValue = sharedPreferences.getString(getKey(keyId), null); return Float.parseFloat(stringValue); } catch (NumberFormatException e) { return defaultValue; } } - public static String getString(SharedPreferences sharedPreferences, Context context, int keyId, String defaultValue) { - return sharedPreferences.getString(getKey(context, keyId), defaultValue); + public static String getString(int keyId, String defaultValue) { + return sharedPreferences.getString(getKey(keyId), defaultValue); } @VisibleForTesting - public static void setString(SharedPreferences sharedPreferences, Context context, int keyId, String value) { + public static void setString(int keyId, String value) { Editor editor = sharedPreferences.edit(); - editor.putString(getKey(context, keyId), value); + editor.putString(getKey(keyId), value); editor.apply(); } - static void setInt(SharedPreferences sharedPreferences, Context context, int keyId, int value) { + static void setInt(int keyId, int value) { Editor editor = sharedPreferences.edit(); - editor.putInt(getKey(context, keyId), value); + editor.putInt(getKey(keyId), value); editor.apply(); } - public static boolean isMetricUnits(SharedPreferences sharedPreferences, Context context) { - final String STATS_UNIT = context.getString(R.string.stats_units_default); - return STATS_UNIT.equals(getString(sharedPreferences, context, R.string.stats_units_key, STATS_UNIT)); + public static boolean isMetricUnits() { + final String STATS_UNIT = resources.getString(R.string.stats_units_default); + return STATS_UNIT.equals(getString(R.string.stats_units_key, STATS_UNIT)); } - public static void setMetricUnits(SharedPreferences sharedPreferences, Context context, boolean metricUnits) { + public static void setMetricUnits(boolean metricUnits) { String unit; if (metricUnits) { - unit = context.getString(R.string.stats_units_metric); + unit = resources.getString(R.string.stats_units_metric); } else { - unit = context.getString(R.string.stats_units_imperial); + unit = resources.getString(R.string.stats_units_imperial); } - setString(sharedPreferences, context, R.string.stats_units_key, unit); + setString( R.string.stats_units_key, unit); } - public static boolean isReportSpeed(SharedPreferences sharedPreferences, Context context, String category) { - final String STATS_RATE_DEFAULT = context.getString(R.string.stats_rate_default); - String currentStatsRate = getString(sharedPreferences, context, R.string.stats_rate_key, STATS_RATE_DEFAULT); - if (currentStatsRate.equals(getString(sharedPreferences, context, R.string.stats_rate_speed_or_pace_default, STATS_RATE_DEFAULT))) { - return TrackIconUtils.isSpeedIcon(context, category); + public static boolean isReportSpeed(String category) { + final String STATS_RATE_DEFAULT = resources.getString(R.string.stats_rate_default); + String currentStatsRate = getString(R.string.stats_rate_key, STATS_RATE_DEFAULT); + if (currentStatsRate.equals(getString(R.string.stats_rate_speed_or_pace_default, STATS_RATE_DEFAULT))) { + return TrackIconUtils.isSpeedIcon(resources, category); } - return currentStatsRate.equals(context.getString(R.string.stats_rate_speed)); + return currentStatsRate.equals(resources.getString(R.string.stats_rate_speed)); } - private static String getBluetoothSensorAddressNone(Context context) { - return context.getString(R.string.sensor_type_value_none); + private static String getBluetoothSensorAddressNone() { + return resources.getString(R.string.sensor_type_value_none); } - public static boolean isBluetoothSensorAddressNone(Context context, String currentValue) { - return getBluetoothSensorAddressNone(context).equals(currentValue); + public static boolean isBluetoothSensorAddressNone(String currentValue) { + return getBluetoothSensorAddressNone().equals(currentValue); } - public static String getBluetoothHeartRateSensorAddress(SharedPreferences sharedPreferences, Context context) { - return getString(sharedPreferences, context, R.string.settings_sensor_bluetooth_heart_rate_key, getBluetoothSensorAddressNone(context)); + public static String getBluetoothHeartRateSensorAddress() { + return getString(R.string.settings_sensor_bluetooth_heart_rate_key, getBluetoothSensorAddressNone()); } - public static String getBluetoothCyclingCadenceSensorAddress(SharedPreferences sharedPreferences, Context context) { - return getString(sharedPreferences, context, R.string.settings_sensor_bluetooth_cycling_cadence_key, getBluetoothSensorAddressNone(context)); + public static String getBluetoothCyclingCadenceSensorAddress() { + return getString(R.string.settings_sensor_bluetooth_cycling_cadence_key, getBluetoothSensorAddressNone()); } - public static String getBluetoothCyclingSpeedSensorAddress(SharedPreferences sharedPreferences, Context context) { - return getString(sharedPreferences, context, R.string.settings_sensor_bluetooth_cycling_speed_key, getBluetoothSensorAddressNone(context)); + public static String getBluetoothCyclingSpeedSensorAddress() { + return getString(R.string.settings_sensor_bluetooth_cycling_speed_key, getBluetoothSensorAddressNone()); } - public static Distance getWheelCircumference(SharedPreferences sharedPreferences, Context context) { - final int DEFAULT = Integer.parseInt(context.getResources().getString(R.string.settings_sensor_bluetooth_cycling_speed_wheel_circumference_default)); - return Distance.ofMM(getInt(sharedPreferences, context, R.string.settings_sensor_bluetooth_cycling_speed_wheel_circumference_key, DEFAULT)); + public static Distance getWheelCircumference() { + final int DEFAULT = Integer.parseInt(resources.getString(R.string.settings_sensor_bluetooth_cycling_speed_wheel_circumference_default)); + return Distance.ofMM(getInt(R.string.settings_sensor_bluetooth_cycling_speed_wheel_circumference_key, DEFAULT)); } - public static String getBluetoothCyclingPowerSensorAddress(SharedPreferences sharedPreferences, Context context) { - return getString(sharedPreferences, context, R.string.settings_sensor_bluetooth_cycling_power_key, getBluetoothSensorAddressNone(context)); + public static String getBluetoothCyclingPowerSensorAddress() { + return getString(R.string.settings_sensor_bluetooth_cycling_power_key, getBluetoothSensorAddressNone()); } - public static String getBluetoothRunningSpeedAndCadenceAddress(SharedPreferences sharedPreferences, Context context) { - return getString(sharedPreferences, context, R.string.settings_sensor_bluetooth_running_speed_and_cadence_key, getBluetoothSensorAddressNone(context)); + public static String getBluetoothRunningSpeedAndCadenceAddress() { + return getString(R.string.settings_sensor_bluetooth_running_speed_and_cadence_key, getBluetoothSensorAddressNone()); } - public static boolean shouldShowStatsOnLockscreen(SharedPreferences sharedPreferences, Context context) { - final boolean STATS_SHOW_ON_LOCKSCREEN_DEFAULT = context.getResources().getBoolean(R.bool.stats_show_on_lockscreen_while_recording_default); - return getBoolean(sharedPreferences, context, R.string.stats_show_on_lockscreen_while_recording_key, STATS_SHOW_ON_LOCKSCREEN_DEFAULT); + public static boolean shouldShowStatsOnLockscreen() { + 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); } - public static boolean shouldKeepScreenOn(SharedPreferences sharedPreferences, Context context) { - final boolean DEFAULT = context.getResources().getBoolean(R.bool.stats_keep_screen_on_while_recording_default); - return getBoolean(sharedPreferences, context, R.string.stats_keep_screen_on_while_recording_key, DEFAULT); + public static boolean shouldKeepScreenOn() { + final boolean DEFAULT = resources.getBoolean(R.bool.stats_keep_screen_on_while_recording_default); + return getBoolean(R.string.stats_keep_screen_on_while_recording_key, DEFAULT); } - public static boolean shouldUseFullscreen(SharedPreferences sharedPreferences, Context context) { - final boolean DEFAULT = context.getResources().getBoolean(R.bool.stats_fullscreen_while_recording_default); - return getBoolean(sharedPreferences, context, R.string.stats_fullscreen_while_recording_key, DEFAULT); + public static boolean shouldUseFullscreen() { + final boolean DEFAULT = resources.getBoolean(R.bool.stats_fullscreen_while_recording_default); + return getBoolean(R.string.stats_fullscreen_while_recording_key, DEFAULT); } - public static Duration getVoiceAnnouncementFrequency(SharedPreferences sharedPreferences, Context context) { - final int DEFAULT = Integer.parseInt(context.getResources().getString(R.string.voice_announcement_frequency_default)); - int value = getInt(sharedPreferences, context, R.string.voice_announcement_frequency_key, DEFAULT); + public static Duration getVoiceAnnouncementFrequency() { + final int DEFAULT = Integer.parseInt(resources.getString(R.string.voice_announcement_frequency_default)); + int value = getInt(R.string.voice_announcement_frequency_key, DEFAULT); return Duration.ofSeconds(value); } /** * @return Result depends on isMetricUnits */ - public static Distance getVoiceAnnouncementDistance(SharedPreferences sharedPreferences, Context context) { - final float DEFAULT = Integer.parseInt(context.getResources().getString(R.string.voice_announcement_distance_default)); - float value = getFloat(sharedPreferences, context, R.string.voice_announcement_distance_key, DEFAULT); - return Distance.one(isMetricUnits(sharedPreferences, context)).multipliedBy(value); + public static Distance getVoiceAnnouncementDistance() { + final float DEFAULT = Integer.parseInt(resources.getString(R.string.voice_announcement_distance_default)); + float value = getFloat(R.string.voice_announcement_distance_key, DEFAULT); + return Distance.one(isMetricUnits()).multipliedBy(value); } - public static float getVoiceSpeedRate(SharedPreferences sharedPreferences, Context context) { - final float DEFAULT = Float.parseFloat(context.getResources().getString(R.string.voice_speed_rate_default)); - return getFloat(sharedPreferences, context, R.string.voice_speed_rate_key, DEFAULT); + public static float getVoiceSpeedRate() { + final float DEFAULT = Float.parseFloat(resources.getString(R.string.voice_speed_rate_default)); + return getFloat(R.string.voice_speed_rate_key, DEFAULT); } - public static Distance getRecordingDistanceInterval(SharedPreferences sharedPreferences, Context context) { - return Distance.of(getInt(sharedPreferences, context, R.string.recording_distance_interval_key, getRecordingDistanceIntervalDefaultInternal(context))); + public static Distance getRecordingDistanceInterval() { + return Distance.of(getInt(R.string.recording_distance_interval_key, getRecordingDistanceIntervalDefaultInternal())); } - public static Distance getRecordingDistanceIntervalDefault(Context context) { - return Distance.of(getRecordingDistanceIntervalDefaultInternal(context)); + public static Distance getRecordingDistanceIntervalDefault() { + return Distance.of(getRecordingDistanceIntervalDefaultInternal()); } - private static int getRecordingDistanceIntervalDefaultInternal(Context context) { - return Integer.parseInt(context.getResources().getString(R.string.recording_distance_interval_default)); + private static int getRecordingDistanceIntervalDefaultInternal() { + return Integer.parseInt(resources.getString(R.string.recording_distance_interval_default)); } - public static Distance getMaxRecordingDistance(SharedPreferences sharedPreferences, Context context) { - final int MAX_RECORDING_DISTANCE = Integer.parseInt(context.getResources().getString(R.string.max_recording_distance_default)); - return Distance.of(getInt(sharedPreferences, context, R.string.max_recording_distance_key, MAX_RECORDING_DISTANCE)); + public static Distance getMaxRecordingDistance() { + final int MAX_RECORDING_DISTANCE = Integer.parseInt(resources.getString(R.string.max_recording_distance_default)); + return Distance.of(getInt(R.string.max_recording_distance_key, MAX_RECORDING_DISTANCE)); } - public static Duration getMinRecordingInterval(SharedPreferences sharedPreferences, Context context) { - final Duration MIN_RECORDING_INTERVAL = getMinRecordingIntervalDefault(context); - Duration interval = Duration.ofSeconds(getInt(sharedPreferences, context, R.string.min_recording_interval_key, (int) MIN_RECORDING_INTERVAL.getSeconds())); + public static Duration getMinRecordingInterval() { + final Duration MIN_RECORDING_INTERVAL = getMinRecordingIntervalDefault(); + Duration interval = Duration.ofSeconds(getInt(R.string.min_recording_interval_key, (int) MIN_RECORDING_INTERVAL.getSeconds())); if (interval.isNegative()) { // Due to removal of adaptive listener policy; used -1, and -2 - interval = getMinRecordingIntervalDefault(context); + interval = getMinRecordingIntervalDefault(); } return interval; } - public static Duration getMinRecordingIntervalDefault(Context context) { - return Duration.ofSeconds(Integer.parseInt(context.getResources().getString(R.string.min_recording_interval_default))); + public static Duration getMinRecordingIntervalDefault() { + return Duration.ofSeconds(Integer.parseInt(resources.getString(R.string.min_recording_interval_default))); } - public static Distance getThresholdHorizontalAccuracy(SharedPreferences sharedPreferences, Context context) { - final int RECORDING_GPS_ACCURACY = Integer.parseInt(context.getResources().getString(R.string.recording_gps_accuracy_default)); - return Distance.of(getInt(sharedPreferences, context, R.string.recording_gps_accuracy_key, RECORDING_GPS_ACCURACY)); + public static Distance getThresholdHorizontalAccuracy() { + final int RECORDING_GPS_ACCURACY = Integer.parseInt(resources.getString(R.string.recording_gps_accuracy_default)); + return Distance.of(getInt(R.string.recording_gps_accuracy_key, RECORDING_GPS_ACCURACY)); } - public static boolean shouldInstantExportAfterWorkout(SharedPreferences sharedPreferences, Context context) { - final boolean INSTANT_POST_WORKOUT_EXPORT_DEFAULT = context.getResources().getBoolean(R.bool.post_workout_export_enabled_default); - return getBoolean(sharedPreferences, context, R.string.post_workout_export_enabled_key, INSTANT_POST_WORKOUT_EXPORT_DEFAULT) && isDefaultExportDirectoryUri(sharedPreferences, context); + public static boolean shouldInstantExportAfterWorkout(Context context) { + final boolean INSTANT_POST_WORKOUT_EXPORT_DEFAULT = resources.getBoolean(R.bool.post_workout_export_enabled_default); + return getBoolean(R.string.post_workout_export_enabled_key, INSTANT_POST_WORKOUT_EXPORT_DEFAULT) && isDefaultExportDirectoryUri(context); } - public static TrackFileFormat getExportTrackFileFormat(SharedPreferences sharedPreferences, Context context) { - final String TRACKFILEFORMAT_NAME_DEFAULT = getString(sharedPreferences, context, R.string.export_trackfileformat_default, null); - String trackFileFormatName = getString(sharedPreferences, context, R.string.export_trackfileformat_key, TRACKFILEFORMAT_NAME_DEFAULT); + public static TrackFileFormat getExportTrackFileFormat() { + final String TRACKFILEFORMAT_NAME_DEFAULT = getString(R.string.export_trackfileformat_default, null); + String trackFileFormatName = getString(R.string.export_trackfileformat_key, TRACKFILEFORMAT_NAME_DEFAULT); try { return TrackFileFormat.valueOf(trackFileFormatName); } catch (Exception e) { @@ -297,34 +314,31 @@ public class PreferencesUtils { } } - public static boolean getPreventReimportTracks(SharedPreferences sharedPreferences, Context context) { - final boolean defaultValue = getBoolean(sharedPreferences, context, R.bool.import_prevent_reimport_default, false); - return getBoolean(sharedPreferences, context, R.string.import_prevent_reimport_key, defaultValue); + public static boolean getPreventReimportTracks() { + final boolean defaultValue = getBoolean(R.bool.import_prevent_reimport_default, false); + return getBoolean(R.string.import_prevent_reimport_key, defaultValue); } /** * @return {@link androidx.appcompat.app.AppCompatDelegate}.MODE_* */ - public static int getDefaultNightMode(SharedPreferences sharedPreferences, Context context) { - final String defaultValue = getKey(context, R.string.night_mode_default); - final String value = getString(sharedPreferences, context, R.string.night_mode_key, defaultValue); + public static int getDefaultNightMode() { + final String defaultValue = getKey(R.string.night_mode_default); + final String value = getString(R.string.night_mode_key, defaultValue); return Integer.parseInt(value); } - public static SharedPreferences resetPreferences(Context context, boolean readAgain) { - SharedPreferences sharedPreferences = getSharedPreferences(context); + public static void resetPreferences(Context context, boolean readAgain) { if (readAgain) { // We want to really clear settings now. sharedPreferences.edit().clear().commit(); } PreferenceManager.setDefaultValues(context, R.xml.settings, readAgain); - - return sharedPreferences; } - public static DocumentFile getDefaultExportDirectoryUri(SharedPreferences sharedPreferences, Context context) { - String singleExportDirectorySettingsKey = getString(sharedPreferences, context, R.string.settings_default_export_directory_key, null); + public static DocumentFile getDefaultExportDirectoryUri(Context context) { + String singleExportDirectorySettingsKey = getString(R.string.settings_default_export_directory_key, null); if (singleExportDirectorySettingsKey == null) { return null; } @@ -336,24 +350,24 @@ public class PreferencesUtils { return null; } - public static void setDefaultExportDirectoryUri(SharedPreferences sharedPreferences, Context context, Uri directoryUri) { + public static void setDefaultExportDirectoryUri(Uri directoryUri) { String value = directoryUri != null ? directoryUri.toString() : null; - setString(sharedPreferences, context, R.string.settings_default_export_directory_key, value); + setString(R.string.settings_default_export_directory_key, value); } - public static boolean isDefaultExportDirectoryUri(SharedPreferences sharedPreferences, Context context) { - return getDefaultExportDirectoryUri(sharedPreferences, context) != null; + public static boolean isDefaultExportDirectoryUri(Context context) { + return getDefaultExportDirectoryUri(context) != null; } - public static int getLayoutColumns(SharedPreferences sharedPreferences, Context context) { - return getInt(sharedPreferences, context, R.string.stats_custom_layout_columns_key, context.getResources().getInteger(R.integer.stats_custom_layout_columns_default)); + public static int getLayoutColumns() { + return getInt(R.string.stats_custom_layout_columns_key, resources.getInteger(R.integer.stats_custom_layout_columns_default)); } - public static void setLayoutColumns(SharedPreferences sharedPreferences, Context context, int columns) { - setInt(sharedPreferences, context, R.string.stats_custom_layout_columns_key, columns); + public static void setLayoutColumns(int columns) { + setInt(R.string.stats_custom_layout_columns_key, columns); } - private static List getMultiTypedArray(Context context, String key) { + private static List getMultiTypedArray(String key) { List typedArrays = new ArrayList<>(); try { @@ -362,10 +376,10 @@ public class PreferencesUtils { int i = 0; do { - field = resource.getField(key + context.getString(R.string.stats_custom_layout_fields_default_value_separator) + i); - typedArrays.add(context.getResources().obtainTypedArray(field.getInt(null))); + field = resource.getField(key + resources.getString(R.string.stats_custom_layout_fields_default_value_separator) + i); + typedArrays.add(resources.obtainTypedArray(field.getInt(null))); i++; - } while (field != null); + } while (field != null); //TODO Catch no such field exception instead of using an endless loop. } catch (Exception e) { e.printStackTrace(); Log.e(TAG, e.getMessage()); @@ -375,47 +389,58 @@ public class PreferencesUtils { } @SuppressLint("ResourceType") - static String buildDefaultLayout(Context context) { - List fieldsArrays = getMultiTypedArray(context, "stats_custom_layout_fields_default_value"); - return context.getString(R.string.default_activity_default) + CsvConstants.LINE_SEPARATOR + static String buildDefaultLayout() { + List fieldsArrays = getMultiTypedArray("stats_custom_layout_fields_default_value"); + return resources.getString(R.string.default_activity_default) + CsvConstants.LINE_SEPARATOR + fieldsArrays.stream().map(i -> i.getString(0) + CsvConstants.ITEM_SEPARATOR + i.getString(1)).collect(Collectors.joining(CsvConstants.LINE_SEPARATOR)) + CsvConstants.LINE_SEPARATOR; } - public static Layout getCustomLayout(SharedPreferences sharedPreferences, Context context) { - String csvCustomLayout = getString(sharedPreferences, context, R.string.stats_custom_layout_fields_key, buildDefaultLayout(context)); + public static Layout getCustomLayout() { + String csvCustomLayout = getString(R.string.stats_custom_layout_fields_key, buildDefaultLayout()); List csvParts = Arrays.asList(csvCustomLayout.split(CsvConstants.LINE_SEPARATOR)); Layout layout = new Layout(csvParts.get(0)); for (int i = 1; i < csvParts.size(); i++) { String[] fieldParts = csvParts.get(i).split(CsvConstants.ITEM_SEPARATOR); - layout.addField(fieldParts[0], DataField.getTitleByKey(context, fieldParts[0]), fieldParts[1].equals(DataField.YES_VALUE), fieldParts[2].equals(DataField.YES_VALUE), fieldParts[0].equals(context.getString(R.string.stats_custom_layout_coordinates_key))); + layout.addField(fieldParts[0], DataField.getTitleByKey(resources, fieldParts[0]), fieldParts[1].equals(DataField.YES_VALUE), fieldParts[2].equals(DataField.YES_VALUE), fieldParts[0].equals(resources.getString(R.string.stats_custom_layout_coordinates_key))); } return layout; } - public static void setCustomLayout(SharedPreferences sharedPreferences, Context context, Layout layout) { + public static void setCustomLayout(Layout layout) { List fields = layout.getFields(); if (fields.isEmpty()) { return; } String csv = layout.getProfile() + CsvConstants.LINE_SEPARATOR - + fields.stream().map(DataField::toCsv).collect(Collectors.joining(CsvConstants.LINE_SEPARATOR)) + CsvConstants.LINE_SEPARATOR; - setString(sharedPreferences, context, R.string.stats_custom_layout_fields_key, csv); + + fields.stream().map(DataField::toCsv).collect(Collectors.joining(CsvConstants.LINE_SEPARATOR)) + + CsvConstants.LINE_SEPARATOR; + setString(R.string.stats_custom_layout_fields_key, csv); } - public static void resetCustomLayoutPreferences(Context context) { - SharedPreferences settings = getSharedPreferences(context); - if (settings.contains(context.getString(R.string.stats_custom_layout_fields_key))) { - SharedPreferences.Editor editor = settings.edit(); - editor.remove(context.getString(R.string.stats_custom_layout_fields_key)); + public static void resetCustomLayoutPreferences() { + if (sharedPreferences.contains(resources.getString(R.string.stats_custom_layout_fields_key))) { + SharedPreferences.Editor editor = sharedPreferences.edit(); + editor.remove(resources.getString(R.string.stats_custom_layout_fields_key)); editor.commit(); } - if (settings.contains(context.getString(R.string.stats_custom_layout_columns_key))) { - SharedPreferences.Editor editor = settings.edit(); - editor.remove(context.getString(R.string.stats_custom_layout_columns_key)); + if (sharedPreferences.contains(resources.getString(R.string.stats_custom_layout_columns_key))) { + SharedPreferences.Editor editor = sharedPreferences.edit(); + editor.remove(resources.getString(R.string.stats_custom_layout_columns_key)); editor.commit(); } } + + public static void applyNightMode() { + AppCompatDelegate.setDefaultNightMode(PreferencesUtils.getDefaultNightMode()); + } + + //TODO Check if resetPreferences can be used instead. + @Deprecated + @VisibleForTesting + public static void clear() { + sharedPreferences.edit().clear().commit(); + } } diff --git a/src/main/java/de/dennisguse/opentracks/util/StatisticsUtils.java b/src/main/java/de/dennisguse/opentracks/util/StatisticsUtils.java index 0c3848de0..116071d27 100644 --- a/src/main/java/de/dennisguse/opentracks/util/StatisticsUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/StatisticsUtils.java @@ -12,11 +12,11 @@ import de.dennisguse.opentracks.content.data.Layout; public class StatisticsUtils { public static String emptyValue(@NonNull Context context, @NonNull String statTitle) { - if (PreferencesUtils.isKey(context, R.string.stats_custom_layout_total_time_key, statTitle) || PreferencesUtils.isKey(context, R.string.stats_custom_layout_moving_time_key, statTitle) || PreferencesUtils.isKey(context, R.string.stats_custom_layout_pace_key, statTitle) || PreferencesUtils.isKey(context, R.string.stats_custom_layout_average_moving_pace_key, statTitle) || PreferencesUtils.isKey(context, R.string.stats_custom_layout_average_pace_key, statTitle) || PreferencesUtils.isKey(context, R.string.stats_custom_layout_fastest_pace_key, statTitle)) { + if (PreferencesUtils.isKey(R.string.stats_custom_layout_total_time_key, statTitle) || PreferencesUtils.isKey(R.string.stats_custom_layout_moving_time_key, statTitle) || PreferencesUtils.isKey(R.string.stats_custom_layout_pace_key, statTitle) || PreferencesUtils.isKey(R.string.stats_custom_layout_average_moving_pace_key, statTitle) || PreferencesUtils.isKey(R.string.stats_custom_layout_average_pace_key, statTitle) || PreferencesUtils.isKey(R.string.stats_custom_layout_fastest_pace_key, statTitle)) { return context.getString(R.string.stats_empty_value_time); - } else if (PreferencesUtils.isKey(context, R.string.stats_custom_layout_distance_key, statTitle) || PreferencesUtils.isKey(context, R.string.stats_custom_layout_speed_key, statTitle) || PreferencesUtils.isKey(context, R.string.stats_custom_layout_average_speed_key, statTitle) || PreferencesUtils.isKey(context, R.string.stats_custom_layout_max_speed_key, statTitle) || PreferencesUtils.isKey(context, R.string.stats_custom_layout_average_moving_speed_key, statTitle)) { + } else if (PreferencesUtils.isKey(R.string.stats_custom_layout_distance_key, statTitle) || PreferencesUtils.isKey(R.string.stats_custom_layout_speed_key, statTitle) || PreferencesUtils.isKey(R.string.stats_custom_layout_average_speed_key, statTitle) || PreferencesUtils.isKey(R.string.stats_custom_layout_max_speed_key, statTitle) || PreferencesUtils.isKey(R.string.stats_custom_layout_average_moving_speed_key, statTitle)) { return context.getString(R.string.stats_empty_value_float); - } else if (PreferencesUtils.isKey(context, R.string.stats_custom_layout_coordinates_key, statTitle)) { + } else if (PreferencesUtils.isKey(R.string.stats_custom_layout_coordinates_key, statTitle)) { return context.getString(R.string.stats_empty_value_coordinates); } else { return context.getString(R.string.stats_empty_value_integer); diff --git a/src/main/java/de/dennisguse/opentracks/util/TrackIconUtils.java b/src/main/java/de/dennisguse/opentracks/util/TrackIconUtils.java index 0fd2d6511..954314472 100644 --- a/src/main/java/de/dennisguse/opentracks/util/TrackIconUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/TrackIconUtils.java @@ -17,6 +17,7 @@ package de.dennisguse.opentracks.util; import android.content.Context; +import android.content.res.Resources; import android.util.Pair; import androidx.annotation.NonNull; @@ -155,55 +156,56 @@ public class TrackIconUtils { */ @NonNull public static String getIconValue(Context context, String activityType) { + Resources resources = context.getResources(); if (activityType == null || activityType.equals("")) { return UNKNOWN; } - if (inList(context, activityType, AIRPLANE_LIST)) { + if (inList(resources, activityType, AIRPLANE_LIST)) { return AIRPLANE; } - if (inList(context, activityType, BIKE_LIST)) { + if (inList(resources, activityType, BIKE_LIST)) { return BIKE; } - if (inList(context, activityType, MOUNTAIN_BIKE_LIST)) { + if (inList(resources, activityType, MOUNTAIN_BIKE_LIST)) { return MOUNTAIN_BIKE; } - if (inList(context, activityType, CLIMBING_LIST)) { + if (inList(resources, activityType, CLIMBING_LIST)) { return CLIMBING; } - if (inList(context, activityType, MOTOR_BIKE_LIST)) { + if (inList(resources, activityType, MOTOR_BIKE_LIST)) { return MOTOR_BIKE; } - if (inList(context, activityType, KAYAKING_LIST)) { + if (inList(resources, activityType, KAYAKING_LIST)) { return KAYAK; } - if (inList(context, activityType, BOAT_LIST)) { + if (inList(resources, activityType, BOAT_LIST)) { return BOAT; } - if (inList(context, activityType, SAILING_LIST)) { + if (inList(resources, activityType, SAILING_LIST)) { return SAILING; } - if (inList(context, activityType, DRIVE_LIST)) { + if (inList(resources, activityType, DRIVE_LIST)) { return DRIVE; } - if (inList(context, activityType, INLINE_SKATING_LIST)) { + if (inList(resources, activityType, INLINE_SKATING_LIST)) { return INLINE_SKATING; } - if (inList(context, activityType, ESCOOTER_LIST)) { + if (inList(resources, activityType, ESCOOTER_LIST)) { return ESCOOTER; } - if (inList(context, activityType, RUN_LIST)) { + if (inList(resources, activityType, RUN_LIST)) { return RUN; } - if (inList(context, activityType, SKI_LIST)) { + if (inList(resources, activityType, SKI_LIST)) { return SKI; } - if (inList(context, activityType, SNOW_BOARDING_LIST)) { + if (inList(resources, activityType, SNOW_BOARDING_LIST)) { return SNOW_BOARDING; } - if (inList(context, activityType, SKATE_BOARDING_LIST)) { + if (inList(resources, activityType, SKATE_BOARDING_LIST)) { return SKATE_BOARDING; } - if (inList(context, activityType, WALK_LIST)) { + if (inList(resources, activityType, WALK_LIST)) { return WALK; } return UNKNOWN; @@ -216,7 +218,7 @@ public class TrackIconUtils { * @param activityType the activity type * @param list the list */ - private static boolean inList(Context context, String activityType, int[] list) { + private static boolean inList(Resources context, String activityType, int[] list) { for (int i : list) { if (context.getString(i).equals(activityType)) { return true; @@ -228,10 +230,9 @@ public class TrackIconUtils { /** * Returns true if category is in the SPEED_ICON array. Otherwise returns false. * - * @param context the context. * @param category the name of the category, activity type. */ - public static boolean isSpeedIcon(Context context, String category) { - return inList(context, category, SPEED_ICON); + public static boolean isSpeedIcon(Resources resources, String category) { + return inList(resources, category, SPEED_ICON); } } diff --git a/src/main/java/de/dennisguse/opentracks/util/TrackNameUtils.java b/src/main/java/de/dennisguse/opentracks/util/TrackNameUtils.java index 7b1300b55..abf27a9bb 100644 --- a/src/main/java/de/dennisguse/opentracks/util/TrackNameUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/TrackNameUtils.java @@ -43,7 +43,7 @@ public class TrackNameUtils { //TODO Should not access sharedPreferences; trackName should be an ENUM. public static String getTrackName(Context context, Track.Id trackId, Instant startTime) { - String trackName = PreferencesUtils.getString(PreferencesUtils.getSharedPreferences(context), context, R.string.track_name_key, context.getString(R.string.track_name_default)); + String trackName = PreferencesUtils.getString(R.string.track_name_key, context.getString(R.string.track_name_default)); if (trackName.equals(context.getString(R.string.settings_recording_track_name_date_local_value))) { return StringUtils.formatDateTime(context, startTime); diff --git a/src/main/java/de/dennisguse/opentracks/viewmodels/IntervalStatisticsModel.java b/src/main/java/de/dennisguse/opentracks/viewmodels/IntervalStatisticsModel.java index e49cd2149..8ae2d111e 100644 --- a/src/main/java/de/dennisguse/opentracks/viewmodels/IntervalStatisticsModel.java +++ b/src/main/java/de/dennisguse/opentracks/viewmodels/IntervalStatisticsModel.java @@ -46,7 +46,7 @@ public class IntervalStatisticsModel extends AndroidViewModel { public IntervalStatisticsModel(@NonNull Application application) { super(application); - minGPSDistance = PreferencesUtils.getRecordingDistanceInterval(PreferencesUtils.getSharedPreferences(application), application); + minGPSDistance = PreferencesUtils.getRecordingDistanceInterval(); contentResolver = getApplication().getContentResolver(); handlerThread = new HandlerThread(TAG); handlerThread.start();