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