From 4ea70b15e7b3a20dae83cfba50748fbcf8abacbf Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Tue, 22 Nov 2022 06:46:56 +0100 Subject: [PATCH] Renamed Layout to RecordingLayout. Part of #1118. --- .../android/en-US/changelogs/3195.txt | 2 +- .../settings/PreferencesOpenHelperTest.java | 36 ++--- .../settings/PreferencesUtilsTest.java | 136 +++++++++--------- ....java => CsvRecordingLayoutUtilsTest.java} | 2 +- ...=> EspressoCustomRecordingLayoutTest.java} | 6 +- ...youtTest.java => RecordingLayoutTest.java} | 78 +++++----- .../opentracks/util/StatisticsUtilsTest.java | 18 +-- .../StatisticsRecordingFragment.java | 20 +-- .../opentracks/settings/PreferencesUtils.java | 44 +++--- .../SettingsCustomLayoutEditActivity.java | 50 +++---- .../SettingsCustomLayoutListActivity.java | 8 +- .../{Layout.java => RecordingLayout.java} | 28 ++-- .../{LayoutIO.java => RecordingLayoutIO.java} | 35 +++-- .../SettingsCustomLayoutEditAdapter.java | 30 ++-- .../SettingsCustomLayoutListAdapter.java | 34 ++--- .../opentracks/util/StatisticsUtils.java | 8 +- src/main/res/layout/about.xml | 4 +- .../activity_settings_custom_layout.xml | 4 +- .../activity_settings_custom_layout_list.xml | 4 +- src/main/res/layout/activity_show_error.xml | 4 +- src/main/res/layout/aggregated_stats.xml | 4 +- src/main/res/layout/export_activity.xml | 4 +- src/main/res/layout/help.xml | 4 +- src/main/res/layout/import_activity.xml | 4 +- .../res/layout/marker_detail_activity.xml | 4 +- src/main/res/layout/marker_edit.xml | 4 +- src/main/res/layout/marker_list.xml | 4 +- src/main/res/layout/settings.xml | 4 +- src/main/res/layout/track_edit.xml | 4 +- src/main/res/layout/track_recorded.xml | 4 +- 30 files changed, 311 insertions(+), 280 deletions(-) rename src/androidTest/java/de/dennisguse/opentracks/ui/customRecordingLayout/{CsvLayoutUtilsTest.java => CsvRecordingLayoutUtilsTest.java} (98%) rename src/androidTest/java/de/dennisguse/opentracks/ui/customRecordingLayout/{EspressoCustomLayoutTest.java => EspressoCustomRecordingLayoutTest.java} (92%) rename src/androidTest/java/de/dennisguse/opentracks/ui/customRecordingLayout/{LayoutTest.java => RecordingLayoutTest.java} (58%) rename src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/{Layout.java => RecordingLayout.java} (73%) rename src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/{LayoutIO.java => RecordingLayoutIO.java} (65%) diff --git a/fastlane/metadata/android/en-US/changelogs/3195.txt b/fastlane/metadata/android/en-US/changelogs/3195.txt index ee953c821..072932143 100644 --- a/fastlane/metadata/android/en-US/changelogs/3195.txt +++ b/fastlane/metadata/android/en-US/changelogs/3195.txt @@ -7,5 +7,5 @@ Changes: Bugfix: - Speech announcements use MAY_DUCK (again) - ChartView shows markers (again) -- Fixed landscape layout of TrackListActivity +- Fixed landscape recordingLayout of TrackListActivity - Request legacy file API behavior (necessary for Android 10) diff --git a/src/androidTest/java/de/dennisguse/opentracks/settings/PreferencesOpenHelperTest.java b/src/androidTest/java/de/dennisguse/opentracks/settings/PreferencesOpenHelperTest.java index 6e870a1c1..fa0b706e1 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/settings/PreferencesOpenHelperTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/settings/PreferencesOpenHelperTest.java @@ -17,8 +17,8 @@ import org.junit.runner.RunWith; import java.util.List; import de.dennisguse.opentracks.R; -import de.dennisguse.opentracks.ui.customRecordingLayout.Layout; -import de.dennisguse.opentracks.ui.customRecordingLayout.LayoutIO; +import de.dennisguse.opentracks.ui.customRecordingLayout.RecordingLayout; +import de.dennisguse.opentracks.ui.customRecordingLayout.RecordingLayoutIO; @RunWith(AndroidJUnit4.class) public class PreferencesOpenHelperTest { @@ -39,10 +39,10 @@ public class PreferencesOpenHelperTest { PreferencesOpenHelper.newInstance(1).check(); // then there should be one layout with old custom layout that has the new CSV value. - List layouts = PreferencesUtils.getAllCustomLayouts(); - assertNotNull(layouts); - assertEquals(layouts.size(), 1); - assertEquals(layouts.get(0).toCsv(), PreferencesUtils.getCustomLayout().toCsv()); + List recordingLayouts = PreferencesUtils.getAllCustomLayouts(); + assertNotNull(recordingLayouts); + assertEquals(recordingLayouts.size(), 1); + assertEquals(recordingLayouts.get(0).toCsv(), PreferencesUtils.getCustomLayout().toCsv()); } @Test @@ -64,10 +64,10 @@ public class PreferencesOpenHelperTest { + PreferencesUtils.getLayoutColumnsByDefault() + ";distance,1,1,0;speed,1,1,0;"; // then there should be one layout with old custom layout that has the new CSV value. - List layouts = PreferencesUtils.getAllCustomLayouts(); - assertNotNull(layouts); - assertEquals(layouts.size(), 1); - assertEquals(layouts.get(0).toCsv(), updatedOldCustomLayoutCsv); + List recordingLayouts = PreferencesUtils.getAllCustomLayouts(); + assertNotNull(recordingLayouts); + assertEquals(recordingLayouts.size(), 1); + assertEquals(recordingLayouts.get(0).toCsv(), updatedOldCustomLayoutCsv); } @Test @@ -88,10 +88,10 @@ public class PreferencesOpenHelperTest { String updatedOldCustomLayoutCsv = "whatever;3;distance,1,1,0;speed,1,1,0;"; // then there should be one layout with old custom layout that has the new CSV value. - List layouts = PreferencesUtils.getAllCustomLayouts(); - assertNotNull(layouts); - assertEquals(layouts.size(), 1); - assertEquals(layouts.get(0).toCsv(), updatedOldCustomLayoutCsv); + List recordingLayouts = PreferencesUtils.getAllCustomLayouts(); + assertNotNull(recordingLayouts); + assertEquals(recordingLayouts.size(), 1); + assertEquals(recordingLayouts.get(0).toCsv(), updatedOldCustomLayoutCsv); } @Test @@ -110,10 +110,10 @@ public class PreferencesOpenHelperTest { PreferencesOpenHelper.newInstance(1).check(); // then custom layout should be equals to default layout. - Layout defaultLayout = LayoutIO.fromCsv(PreferencesUtils.buildDefaultLayout(), resources); - List customLayout = PreferencesUtils.getAllCustomLayouts(); + RecordingLayout defaultRecordingLayout = RecordingLayoutIO.fromCsv(PreferencesUtils.buildDefaultLayout(), resources); + List customRecordingLayout = PreferencesUtils.getAllCustomLayouts(); - assertEquals(customLayout.size(), 1); - assertEquals(defaultLayout.toCsv(), customLayout.get(0).toCsv()); + assertEquals(customRecordingLayout.size(), 1); + assertEquals(defaultRecordingLayout.toCsv(), customRecordingLayout.get(0).toCsv()); } } diff --git a/src/androidTest/java/de/dennisguse/opentracks/settings/PreferencesUtilsTest.java b/src/androidTest/java/de/dennisguse/opentracks/settings/PreferencesUtilsTest.java index d015bb730..adb806d00 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/settings/PreferencesUtilsTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/settings/PreferencesUtilsTest.java @@ -22,8 +22,8 @@ import java.util.List; import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.io.file.TrackFileFormat; import de.dennisguse.opentracks.ui.customRecordingLayout.DataField; -import de.dennisguse.opentracks.ui.customRecordingLayout.Layout; -import de.dennisguse.opentracks.ui.customRecordingLayout.LayoutIO; +import de.dennisguse.opentracks.ui.customRecordingLayout.RecordingLayout; +import de.dennisguse.opentracks.ui.customRecordingLayout.RecordingLayoutIO; @RunWith(AndroidJUnit4.class) public class PreferencesUtilsTest { @@ -86,13 +86,13 @@ public class PreferencesUtilsTest { editor.commit(); // when - List layouts = PreferencesUtils.getAllCustomLayouts(); + List recordingLayouts = PreferencesUtils.getAllCustomLayouts(); // then - assertEquals(layouts.size(), 1); - assertTrue(layouts.get(0).getFields().size() > 0); - assertEquals(layouts.get(0).getName(), context.getString(R.string.stats_custom_layout_default_layout)); - assertTrue(layouts.get(0).getFields().stream().anyMatch(DataField::isVisible)); + assertEquals(recordingLayouts.size(), 1); + assertTrue(recordingLayouts.get(0).getFields().size() > 0); + assertEquals(recordingLayouts.get(0).getName(), context.getString(R.string.stats_custom_layout_default_layout)); + assertTrue(recordingLayouts.get(0).getFields().stream().anyMatch(DataField::isVisible)); } @Test @@ -104,12 +104,12 @@ public class PreferencesUtilsTest { editor.commit(); // when - Layout layout = PreferencesUtils.getCustomLayout(); + RecordingLayout recordingLayout = PreferencesUtils.getCustomLayout(); // then - assertTrue(layout.getFields().size() > 0); - assertEquals(layout.getName(), context.getString(R.string.stats_custom_layout_default_layout)); - assertTrue(layout.getFields().stream().anyMatch(DataField::isVisible)); + assertTrue(recordingLayout.getFields().size() > 0); + assertEquals(recordingLayout.getName(), context.getString(R.string.stats_custom_layout_default_layout)); + assertTrue(recordingLayout.getFields().stream().anyMatch(DataField::isVisible)); } @Test @@ -127,28 +127,28 @@ public class PreferencesUtilsTest { editor.apply(); // when - Layout layout = PreferencesUtils.getCustomLayout(); + RecordingLayout recordingLayout = PreferencesUtils.getCustomLayout(); // then - assertEquals(layout.getFields().size(), 4); - assertEquals(layout.getName(), "run"); - assertEquals(layout.getColumnsPerRow(), 2); + assertEquals(recordingLayout.getFields().size(), 4); + assertEquals(recordingLayout.getName(), "run"); + assertEquals(recordingLayout.getColumnsPerRow(), 2); - assertEquals(layout.getFields().get(0).getKey(), context.getString(R.string.stats_custom_layout_moving_time_key)); - assertTrue(layout.getFields().get(0).isVisible()); - assertTrue(layout.getFields().get(0).isPrimary()); + assertEquals(recordingLayout.getFields().get(0).getKey(), context.getString(R.string.stats_custom_layout_moving_time_key)); + assertTrue(recordingLayout.getFields().get(0).isVisible()); + assertTrue(recordingLayout.getFields().get(0).isPrimary()); - assertEquals(layout.getFields().get(1).getKey(), context.getString(R.string.stats_custom_layout_distance_key)); - assertTrue(layout.getFields().get(1).isVisible()); - assertFalse(layout.getFields().get(1).isPrimary()); + assertEquals(recordingLayout.getFields().get(1).getKey(), context.getString(R.string.stats_custom_layout_distance_key)); + assertTrue(recordingLayout.getFields().get(1).isVisible()); + assertFalse(recordingLayout.getFields().get(1).isPrimary()); - assertEquals(layout.getFields().get(2).getKey(), context.getString(R.string.stats_custom_layout_average_moving_speed_key)); - assertFalse(layout.getFields().get(2).isVisible()); - assertTrue(layout.getFields().get(2).isPrimary()); + assertEquals(recordingLayout.getFields().get(2).getKey(), context.getString(R.string.stats_custom_layout_average_moving_speed_key)); + assertFalse(recordingLayout.getFields().get(2).isVisible()); + assertTrue(recordingLayout.getFields().get(2).isPrimary()); - assertEquals(layout.getFields().get(3).getKey(), context.getString(R.string.stats_custom_layout_speed_key)); - assertFalse(layout.getFields().get(3).isVisible()); - assertFalse(layout.getFields().get(3).isPrimary()); + assertEquals(recordingLayout.getFields().get(3).getKey(), context.getString(R.string.stats_custom_layout_speed_key)); + assertFalse(recordingLayout.getFields().get(3).isVisible()); + assertFalse(recordingLayout.getFields().get(3).isPrimary()); } @Test @@ -166,44 +166,44 @@ public class PreferencesUtilsTest { editor.apply(); // when - Layout layout = PreferencesUtils.getCustomLayout(); + RecordingLayout recordingLayout = PreferencesUtils.getCustomLayout(); // then - assertEquals(layout.getFields().size(), 4); - assertEquals(layout.getName(), "walking"); - assertEquals(layout.getColumnsPerRow(), 2); + assertEquals(recordingLayout.getFields().size(), 4); + assertEquals(recordingLayout.getName(), "walking"); + assertEquals(recordingLayout.getColumnsPerRow(), 2); - assertEquals(layout.getFields().get(0).getKey(), context.getString(R.string.stats_custom_layout_moving_time_key)); - assertTrue(layout.getFields().get(0).isVisible()); - assertTrue(layout.getFields().get(0).isPrimary()); + assertEquals(recordingLayout.getFields().get(0).getKey(), context.getString(R.string.stats_custom_layout_moving_time_key)); + assertTrue(recordingLayout.getFields().get(0).isVisible()); + assertTrue(recordingLayout.getFields().get(0).isPrimary()); - assertEquals(layout.getFields().get(1).getKey(), context.getString(R.string.stats_custom_layout_distance_key)); - assertTrue(layout.getFields().get(1).isVisible()); - assertFalse(layout.getFields().get(1).isPrimary()); + assertEquals(recordingLayout.getFields().get(1).getKey(), context.getString(R.string.stats_custom_layout_distance_key)); + assertTrue(recordingLayout.getFields().get(1).isVisible()); + assertFalse(recordingLayout.getFields().get(1).isPrimary()); - assertEquals(layout.getFields().get(2).getKey(), context.getString(R.string.stats_custom_layout_coordinates_key)); - assertFalse(layout.getFields().get(2).isVisible()); - assertTrue(layout.getFields().get(2).isPrimary()); - assertTrue(layout.getFields().get(2).isWide()); + assertEquals(recordingLayout.getFields().get(2).getKey(), context.getString(R.string.stats_custom_layout_coordinates_key)); + assertFalse(recordingLayout.getFields().get(2).isVisible()); + assertTrue(recordingLayout.getFields().get(2).isPrimary()); + assertTrue(recordingLayout.getFields().get(2).isWide()); - assertEquals(layout.getFields().get(3).getKey(), context.getString(R.string.stats_custom_layout_speed_key)); - assertFalse(layout.getFields().get(3).isVisible()); - assertFalse(layout.getFields().get(3).isPrimary()); + assertEquals(recordingLayout.getFields().get(3).getKey(), context.getString(R.string.stats_custom_layout_speed_key)); + assertFalse(recordingLayout.getFields().get(3).isVisible()); + assertFalse(recordingLayout.getFields().get(3).isPrimary()); } @Test public void testSetCustomLayout() { // given SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); - Layout layoutSrc = new Layout("road cycling"); - layoutSrc.addField(new DataField(context.getString(R.string.stats_custom_layout_moving_time_key), true, true, false)); - layoutSrc.addField(new DataField(context.getString(R.string.stats_custom_layout_distance_key), true, false, false)); - layoutSrc.addField(new DataField(context.getString(R.string.stats_custom_layout_average_moving_speed_key), false, true, false)); - layoutSrc.addField(new DataField(context.getString(R.string.stats_custom_layout_speed_key), false, false, false)); + RecordingLayout recordingLayoutSrc = new RecordingLayout("road cycling"); + recordingLayoutSrc.addField(new DataField(context.getString(R.string.stats_custom_layout_moving_time_key), true, true, false)); + recordingLayoutSrc.addField(new DataField(context.getString(R.string.stats_custom_layout_distance_key), true, false, false)); + recordingLayoutSrc.addField(new DataField(context.getString(R.string.stats_custom_layout_average_moving_speed_key), false, true, false)); + recordingLayoutSrc.addField(new DataField(context.getString(R.string.stats_custom_layout_speed_key), false, false, false)); // when SharedPreferences.Editor editor = sharedPreferences.edit(); - editor.putString(context.getString(R.string.stats_custom_layouts_key), layoutSrc.toCsv()); + editor.putString(context.getString(R.string.stats_custom_layouts_key), recordingLayoutSrc.toCsv()); editor.commit(); // then @@ -216,13 +216,13 @@ public class PreferencesUtilsTest { + context.getString(R.string.stats_custom_layout_average_moving_speed_key) + ",0,1,0;" + context.getString(R.string.stats_custom_layout_speed_key) + ",0,0,0;"); - Layout layoutDst = PreferencesUtils.getCustomLayout(); - assertEquals(layoutSrc.getName(), layoutDst.getName()); - assertEquals(layoutSrc.getFields().size(), layoutDst.getFields().size()); - for (int i = 0; i < layoutSrc.getFields().size(); i++) { - assertEquals(layoutSrc.getFields().get(i).getKey(), layoutDst.getFields().get(i).getKey()); - assertEquals(layoutSrc.getFields().get(i).isVisible(), layoutDst.getFields().get(i).isVisible()); - assertEquals(layoutSrc.getFields().get(i).isPrimary(), layoutDst.getFields().get(i).isPrimary()); + RecordingLayout recordingLayoutDst = PreferencesUtils.getCustomLayout(); + assertEquals(recordingLayoutSrc.getName(), recordingLayoutDst.getName()); + assertEquals(recordingLayoutSrc.getFields().size(), recordingLayoutDst.getFields().size()); + for (int i = 0; i < recordingLayoutSrc.getFields().size(); i++) { + assertEquals(recordingLayoutSrc.getFields().get(i).getKey(), recordingLayoutDst.getFields().get(i).getKey()); + assertEquals(recordingLayoutSrc.getFields().get(i).isVisible(), recordingLayoutDst.getFields().get(i).isVisible()); + assertEquals(recordingLayoutSrc.getFields().get(i).isPrimary(), recordingLayoutDst.getFields().get(i).isPrimary()); } } @@ -248,7 +248,7 @@ public class PreferencesUtilsTest { editor.putString(context.getString(R.string.stats_custom_layouts_key), cyclingProfile + "\n" + runningProfile); editor.apply(); - List layoutsBefore = PreferencesUtils.getAllCustomLayouts(); + List layoutsBefore = PreferencesUtils.getAllCustomLayouts(); // when cyling profile is updated String cyclingProfileUpdated = "cycling;2;" @@ -257,14 +257,14 @@ public class PreferencesUtilsTest { + context.getString(R.string.stats_custom_layout_average_moving_speed_key) + ",0,0;" + context.getString(R.string.stats_custom_layout_speed_key) + ",0,0;"; - List layoutsToBeUpdated = new ArrayList<>(); - layoutsToBeUpdated.add(LayoutIO.fromCsv(cyclingProfileUpdated, resources)); - layoutsToBeUpdated.add(LayoutIO.fromCsv(runningProfile, resources)); + List layoutsToBeUpdated = new ArrayList<>(); + layoutsToBeUpdated.add(RecordingLayoutIO.fromCsv(cyclingProfileUpdated, resources)); + layoutsToBeUpdated.add(RecordingLayoutIO.fromCsv(runningProfile, resources)); PreferencesUtils.updateCustomLayouts(layoutsToBeUpdated); // then only updated profile is modified in the custom layouts - List layoutsAfter = PreferencesUtils.getAllCustomLayouts(); + List layoutsAfter = PreferencesUtils.getAllCustomLayouts(); assertEquals(layoutsBefore.size(), 2); assertEquals(layoutsAfter.size(), 2); @@ -295,7 +295,7 @@ public class PreferencesUtilsTest { editor.putString(context.getString(R.string.stats_custom_layouts_key), cyclingProfile + "\n" + runningProfile); editor.apply(); - List layoutsBefore = PreferencesUtils.getAllCustomLayouts(); + List layoutsBefore = PreferencesUtils.getAllCustomLayouts(); // when cyling profile is updated String cyclingProfileUpdated = "cycling;2;" @@ -303,11 +303,11 @@ public class PreferencesUtilsTest { + context.getString(R.string.stats_custom_layout_distance_key) + ",0,0;" + context.getString(R.string.stats_custom_layout_average_moving_speed_key) + ",0,0;" + context.getString(R.string.stats_custom_layout_speed_key) + ",0,0;"; - Layout layoutToBeUpdated = LayoutIO.fromCsv(cyclingProfileUpdated, resources); - PreferencesUtils.updateCustomLayout(layoutToBeUpdated); + RecordingLayout recordingLayoutToBeUpdated = RecordingLayoutIO.fromCsv(cyclingProfileUpdated, resources); + PreferencesUtils.updateCustomLayout(recordingLayoutToBeUpdated); // then only updated profile is modified in the custom layouts - List layoutsAfter = PreferencesUtils.getAllCustomLayouts(); + List layoutsAfter = PreferencesUtils.getAllCustomLayouts(); assertEquals(layoutsBefore.size(), 2); assertEquals(layoutsAfter.size(), 2); @@ -338,9 +338,9 @@ public class PreferencesUtilsTest { editor.apply(); // when it gets the custom layout - Layout layout = PreferencesUtils.getCustomLayout(); + RecordingLayout recordingLayout = PreferencesUtils.getCustomLayout(); // then the first one was returned - assertEquals(layout.getName(), "cycling"); + assertEquals(recordingLayout.getName(), "cycling"); } } diff --git a/src/androidTest/java/de/dennisguse/opentracks/ui/customRecordingLayout/CsvLayoutUtilsTest.java b/src/androidTest/java/de/dennisguse/opentracks/ui/customRecordingLayout/CsvRecordingLayoutUtilsTest.java similarity index 98% rename from src/androidTest/java/de/dennisguse/opentracks/ui/customRecordingLayout/CsvLayoutUtilsTest.java rename to src/androidTest/java/de/dennisguse/opentracks/ui/customRecordingLayout/CsvRecordingLayoutUtilsTest.java index 1ee67fbdc..e4b691046 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/ui/customRecordingLayout/CsvLayoutUtilsTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/ui/customRecordingLayout/CsvRecordingLayoutUtilsTest.java @@ -10,7 +10,7 @@ import org.junit.runner.RunWith; import java.util.List; @RunWith(AndroidJUnit4.class) -public class CsvLayoutUtilsTest extends TestCase { +public class CsvRecordingLayoutUtilsTest extends TestCase { @Test public void testGetCsvLineParts() { diff --git a/src/androidTest/java/de/dennisguse/opentracks/ui/customRecordingLayout/EspressoCustomLayoutTest.java b/src/androidTest/java/de/dennisguse/opentracks/ui/customRecordingLayout/EspressoCustomRecordingLayoutTest.java similarity index 92% rename from src/androidTest/java/de/dennisguse/opentracks/ui/customRecordingLayout/EspressoCustomLayoutTest.java rename to src/androidTest/java/de/dennisguse/opentracks/ui/customRecordingLayout/EspressoCustomRecordingLayoutTest.java index 2161df263..1a0317334 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/ui/customRecordingLayout/EspressoCustomLayoutTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/ui/customRecordingLayout/EspressoCustomRecordingLayoutTest.java @@ -30,7 +30,7 @@ import de.dennisguse.opentracks.settings.PreferencesUtils; @LargeTest @RunWith(AndroidJUnit4.class) -public class EspressoCustomLayoutTest { +public class EspressoCustomRecordingLayoutTest { @Rule public ActivityScenarioRule mActivityTestRule = new ActivityScenarioRule<>(TrackListActivity.class); @@ -45,9 +45,9 @@ public class EspressoCustomLayoutTest { trackControllerRecordButton.perform(click()); // Get custom layout preferences and check all data fields are showed. - Layout layout = PreferencesUtils.getCustomLayout(); + RecordingLayout recordingLayout = PreferencesUtils.getCustomLayout(); - onView(withId(R.id.recycler_view)).check(new RecyclerViewItemCountAssertion((int) layout.getFields().stream().filter(DataField::isVisible).count())); + onView(withId(R.id.recycler_view)).check(new RecyclerViewItemCountAssertion((int) recordingLayout.getFields().stream().filter(DataField::isVisible).count())); // stop recording ViewInteraction trackControllerStopButton = onView(withId(R.id.track_recording_fab_action)); diff --git a/src/androidTest/java/de/dennisguse/opentracks/ui/customRecordingLayout/LayoutTest.java b/src/androidTest/java/de/dennisguse/opentracks/ui/customRecordingLayout/RecordingLayoutTest.java similarity index 58% rename from src/androidTest/java/de/dennisguse/opentracks/ui/customRecordingLayout/LayoutTest.java rename to src/androidTest/java/de/dennisguse/opentracks/ui/customRecordingLayout/RecordingLayoutTest.java index 5c77b4645..3ab75fef0 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/ui/customRecordingLayout/LayoutTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/ui/customRecordingLayout/RecordingLayoutTest.java @@ -17,7 +17,7 @@ import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.settings.PreferencesUtils; @RunWith(AndroidJUnit4.class) -public class LayoutTest extends TestCase { +public class RecordingLayoutTest extends TestCase { private final Context context = ApplicationProvider.getApplicationContext(); private final Resources resources = ApplicationProvider.getApplicationContext().getResources(); @@ -28,12 +28,12 @@ public class LayoutTest extends TestCase { String csv = "running;2;" + context.getString(R.string.stats_custom_layout_speed_key) + ",1,1,0;" + context.getString(R.string.stats_custom_layout_distance_key) + ",1,0,0;" + context.getString(R.string.stats_custom_layout_altitude_key) + ",0,1,0;" + context.getString(R.string.stats_custom_layout_gain_key) + ",0,0,0;"; // when create a layout from CSV line - Layout layout = LayoutIO.fromCsv(csv, resources); - List dataFieldList = layout.getFields(); + RecordingLayout recordingLayout = RecordingLayoutIO.fromCsv(csv, resources); + List dataFieldList = recordingLayout.getFields(); // then layout and data fields are built correctly - assertEquals(layout.getName(), "running"); - assertEquals(layout.getColumnsPerRow(), 2); + assertEquals(recordingLayout.getName(), "running"); + assertEquals(recordingLayout.getColumnsPerRow(), 2); assertEquals(dataFieldList.size(), 4); assertEquals(dataFieldList.get(0).getKey(), context.getString(R.string.stats_custom_layout_speed_key)); assertEquals(dataFieldList.get(1).getKey(), context.getString(R.string.stats_custom_layout_distance_key)); @@ -60,13 +60,13 @@ public class LayoutTest extends TestCase { String csv1 = "Layout Name;speed,1,1;distance,0,0;"; // when create a layout from CSV line - Layout layout = LayoutIO.fromCsv(csv1, resources); - List dataFieldList = layout.getFields(); + RecordingLayout recordingLayout = RecordingLayoutIO.fromCsv(csv1, resources); + List dataFieldList = recordingLayout.getFields(); // then layout and data fields are built correctly - assertEquals(layout.getName(), PreferencesUtils.getDefaultLayoutName()); - assertEquals(layout.getColumnsPerRow(), PreferencesUtils.getLayoutColumnsByDefault()); - assertEquals(layout.getFields().size(), 0); + assertEquals(recordingLayout.getName(), PreferencesUtils.getDefaultLayoutName()); + assertEquals(recordingLayout.getColumnsPerRow(), PreferencesUtils.getLayoutColumnsByDefault()); + assertEquals(recordingLayout.getFields().size(), 0); } @Test @@ -75,13 +75,13 @@ public class LayoutTest extends TestCase { String csv1 = "Layout Name;2;"; // when create a layout from CSV line - Layout layout = LayoutIO.fromCsv(csv1, resources); - List dataFieldList = layout.getFields(); + RecordingLayout recordingLayout = RecordingLayoutIO.fromCsv(csv1, resources); + List dataFieldList = recordingLayout.getFields(); // then layout and data fields are built correctly - assertEquals(layout.getName(), PreferencesUtils.getDefaultLayoutName()); - assertEquals(layout.getColumnsPerRow(), PreferencesUtils.getLayoutColumnsByDefault()); - assertEquals(layout.getFields().size(), 0); + assertEquals(recordingLayout.getName(), PreferencesUtils.getDefaultLayoutName()); + assertEquals(recordingLayout.getColumnsPerRow(), PreferencesUtils.getLayoutColumnsByDefault()); + assertEquals(recordingLayout.getFields().size(), 0); } @Test @@ -90,13 +90,13 @@ public class LayoutTest extends TestCase { String csv1 = "Layout Name;2;speed,distance,total time;"; // when create a layout from CSV line - Layout layout = LayoutIO.fromCsv(csv1, resources); - List dataFieldList = layout.getFields(); + RecordingLayout recordingLayout = RecordingLayoutIO.fromCsv(csv1, resources); + List dataFieldList = recordingLayout.getFields(); // then layout and data fields are built correctly - assertEquals(layout.getName(), "Layout Name"); - assertEquals(layout.getColumnsPerRow(), 2); - assertEquals(layout.getFields().size(), 0); + assertEquals(recordingLayout.getName(), "Layout Name"); + assertEquals(recordingLayout.getColumnsPerRow(), 2); + assertEquals(recordingLayout.getFields().size(), 0); } @Test @@ -105,27 +105,27 @@ public class LayoutTest extends TestCase { String csv1 = "Layout Name;2;speed,1,0;distance;"; // when create a layout from CSV line - Layout layout = LayoutIO.fromCsv(csv1, resources); - List dataFieldList = layout.getFields(); + RecordingLayout recordingLayout = RecordingLayoutIO.fromCsv(csv1, resources); + List dataFieldList = recordingLayout.getFields(); // then layout and data fields are built correctly - assertEquals(layout.getName(), "Layout Name"); - assertEquals(layout.getColumnsPerRow(), 2); - assertEquals(layout.getFields().size(), 1); + assertEquals(recordingLayout.getName(), "Layout Name"); + assertEquals(recordingLayout.getColumnsPerRow(), 2); + assertEquals(recordingLayout.getFields().size(), 1); } @Test public void testToCsv() { // given a layout's object - Layout layout = new Layout("Test Layout", 2); - layout.addField(new DataField("key1", false, false, false)); - layout.addField(new DataField("key2", false, true, false)); - layout.addField(new DataField("key3", true, false, false)); - layout.addField(new DataField("key4", true, true, false)); - layout.addField(new DataField("key5", true, true, true)); + RecordingLayout recordingLayout = new RecordingLayout("Test Layout", 2); + recordingLayout.addField(new DataField("key1", false, false, false)); + recordingLayout.addField(new DataField("key2", false, true, false)); + recordingLayout.addField(new DataField("key3", true, false, false)); + recordingLayout.addField(new DataField("key4", true, true, false)); + recordingLayout.addField(new DataField("key5", true, true, true)); // when converts it to CSV - String csv = layout.toCsv(); + String csv = recordingLayout.toCsv(); // then csv is well built assertEquals(csv, "Test Layout;2;key1,0,0,0;key2,0,1,0;key3,1,0,0;key4,1,1,0;key5,1,1,1;"); @@ -134,15 +134,15 @@ public class LayoutTest extends TestCase { @Test public void testToCsv_columnsByDefault() { // given a layout's object - Layout layout = new Layout("Test Layout"); - layout.addField(new DataField("key1", false, false, false)); - layout.addField(new DataField("key2", false, true, false)); - layout.addField(new DataField("key3", true, false, false)); - layout.addField(new DataField("key4", true, true, false)); - layout.addField(new DataField("key5", true, true, true)); + RecordingLayout recordingLayout = new RecordingLayout("Test Layout"); + recordingLayout.addField(new DataField("key1", false, false, false)); + recordingLayout.addField(new DataField("key2", false, true, false)); + recordingLayout.addField(new DataField("key3", true, false, false)); + recordingLayout.addField(new DataField("key4", true, true, false)); + recordingLayout.addField(new DataField("key5", true, true, true)); // when converts it to CSV - String csv = layout.toCsv(); + String csv = recordingLayout.toCsv(); // then csv is well built assertEquals(csv, "Test Layout;" + PreferencesUtils.getLayoutColumnsByDefault() + ";key1,0,0,0;key2,0,1,0;key3,1,0,0;key4,1,1,0;key5,1,1,1;"); diff --git a/src/androidTest/java/de/dennisguse/opentracks/util/StatisticsUtilsTest.java b/src/androidTest/java/de/dennisguse/opentracks/util/StatisticsUtilsTest.java index f5be3ec5f..b1ad77d4b 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/util/StatisticsUtilsTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/util/StatisticsUtilsTest.java @@ -12,7 +12,7 @@ import org.junit.runner.RunWith; import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.ui.customRecordingLayout.DataField; -import de.dennisguse.opentracks.ui.customRecordingLayout.Layout; +import de.dennisguse.opentracks.ui.customRecordingLayout.RecordingLayout; @RunWith(AndroidJUnit4.class) public class StatisticsUtilsTest extends TestCase { @@ -44,16 +44,16 @@ public class StatisticsUtilsTest extends TestCase { @Test public void testFilterVisible() { // given - Layout layout = new Layout("profile"); - layout.addField(new DataField("key1", true, true, false)); - layout.addField(new DataField("key2", false, true, false)); - layout.addField(new DataField("key3", true, true, false)); - layout.addField(new DataField("key4", false, true, false)); - layout.addField(new DataField("key5", true, true, false)); + RecordingLayout recordingLayout = new RecordingLayout("profile"); + recordingLayout.addField(new DataField("key1", true, true, false)); + recordingLayout.addField(new DataField("key2", false, true, false)); + recordingLayout.addField(new DataField("key3", true, true, false)); + recordingLayout.addField(new DataField("key4", false, true, false)); + recordingLayout.addField(new DataField("key5", true, true, false)); // when - Layout resultTrue = StatisticsUtils.filterVisible(layout, true); - Layout resultFalse = StatisticsUtils.filterVisible(layout, false); + RecordingLayout resultTrue = StatisticsUtils.filterVisible(recordingLayout, true); + RecordingLayout resultFalse = StatisticsUtils.filterVisible(recordingLayout, false); // then assertEquals(resultTrue.getFields().size(), 3); diff --git a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java index bd57ada2f..e6dbffd45 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java @@ -26,7 +26,7 @@ import de.dennisguse.opentracks.services.TrackRecordingServiceConnection; import de.dennisguse.opentracks.settings.PreferencesUtils; import de.dennisguse.opentracks.settings.UnitSystem; import de.dennisguse.opentracks.ui.customRecordingLayout.DataField; -import de.dennisguse.opentracks.ui.customRecordingLayout.Layout; +import de.dennisguse.opentracks.ui.customRecordingLayout.RecordingLayout; import de.dennisguse.opentracks.viewmodels.Mapping; import de.dennisguse.opentracks.viewmodels.StatisticViewHolder; @@ -50,7 +50,7 @@ public class StatisticsRecordingFragment extends Fragment { private final List> viewHolders = new LinkedList<>(); - private Layout layout; + private RecordingLayout recordingLayout; private StatisticsRecordingBinding viewBinding; @@ -116,13 +116,13 @@ public class StatisticsRecordingFragment extends Fragment { trackRecordingServiceConnection = null; } - private void onLayoutChanged(@NonNull Layout newLayout) { - if (newLayout.equals(layout)) { + private void onLayoutChanged(@NonNull RecordingLayout newRecordingLayout) { + if (newRecordingLayout.equals(recordingLayout)) { return; } - layout = newLayout; + recordingLayout = newRecordingLayout; - viewBinding.statsLayout.setColumnCount(layout.getColumnsPerRow()); + viewBinding.statsLayout.setColumnCount(recordingLayout.getColumnsPerRow()); viewBinding.statsLayout.removeAllViews(); //Let's start from scratch viewHolders.clear(); @@ -131,20 +131,20 @@ public class StatisticsRecordingFragment extends Fragment { int rowIndex = 0; int columnIndex = 0; - for (int i = 0; i < layout.getFields().size(); i++) { - DataField dataField = layout.getFields().get(i); + for (int i = 0; i < recordingLayout.getFields().size(); i++) { + DataField dataField = recordingLayout.getFields().get(i); GridLayout.LayoutParams param = new GridLayout.LayoutParams(); param.setGravity(Gravity.FILL_HORIZONTAL); param.width = 0; if (dataField.isWide()) { rowIndex++; - param.columnSpec = GridLayout.spec(0, layout.getColumnsPerRow(), 1); + param.columnSpec = GridLayout.spec(0, recordingLayout.getColumnsPerRow(), 1); param.rowSpec = GridLayout.spec(rowIndex, 1, 1); columnIndex = 0; rowIndex++; } else { - if (columnIndex >= layout.getColumnsPerRow()) { + if (columnIndex >= recordingLayout.getColumnsPerRow()) { columnIndex = 0; rowIndex++; } diff --git a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java index 0b1a57a0c..2b8a6e426 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java +++ b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java @@ -46,8 +46,8 @@ import de.dennisguse.opentracks.data.models.Speed; import de.dennisguse.opentracks.io.file.TrackFileFormat; import de.dennisguse.opentracks.io.file.TrackFilenameGenerator; import de.dennisguse.opentracks.ui.customRecordingLayout.CsvLayoutUtils; -import de.dennisguse.opentracks.ui.customRecordingLayout.Layout; -import de.dennisguse.opentracks.ui.customRecordingLayout.LayoutIO; +import de.dennisguse.opentracks.ui.customRecordingLayout.RecordingLayout; +import de.dennisguse.opentracks.ui.customRecordingLayout.RecordingLayoutIO; import de.dennisguse.opentracks.util.IntentDashboardUtils; import de.dennisguse.opentracks.util.TrackIconUtils; @@ -754,37 +754,35 @@ public class PreferencesUtils { /** * @return custom layout selected or the first one if any has been selected or the one selected is not exists anymore. */ - @Deprecated //TODO Move parsing to LayoutIO - public static Layout getCustomLayout() { + public static RecordingLayout getCustomLayout() { String csvCustomLayouts = getString(R.string.stats_custom_layouts_key, buildDefaultLayout()); String[] csvLines = csvCustomLayouts.split(CsvLayoutUtils.LINE_SEPARATOR); String layoutSelected = getString(R.string.stats_custom_layout_selected_layout_key, null); if (layoutSelected == null) { - return LayoutIO.fromCsv(csvLines[0], resources); + return RecordingLayoutIO.fromCsv(csvLines[0], resources); } for (String line : csvLines) { - Layout layout = LayoutIO.fromCsv(line, resources); - if (layout.sameName(layoutSelected)) { - return layout; + RecordingLayout recordingLayout = RecordingLayoutIO.fromCsv(line, resources); + if (recordingLayout.sameName(layoutSelected)) { + return recordingLayout; } } - return LayoutIO.fromCsv(csvLines[0], resources); + return RecordingLayoutIO.fromCsv(csvLines[0], resources); } - //TODO Move string generation to LayoutIO - public static void updateCustomLayouts(@NonNull List layouts) { - setString(R.string.stats_custom_layouts_key, layouts.stream().map(Layout::toCsv).collect(Collectors.joining(CsvLayoutUtils.LINE_SEPARATOR))); + public static void updateCustomLayouts(@NonNull List recordingLayouts) { + setString(R.string.stats_custom_layouts_key, RecordingLayoutIO.toCSV(recordingLayouts)); } - public static void updateCustomLayout(@NonNull Layout layout) { - List preferenceLayouts = PreferencesUtils.getAllCustomLayouts(); - Optional layoutToBeUpdated = preferenceLayouts.stream().filter(l -> l.sameName(layout)).findFirst(); + public static void updateCustomLayout(@NonNull RecordingLayout recordingLayout) { + List preferenceRecordingLayouts = PreferencesUtils.getAllCustomLayouts(); + Optional layoutToBeUpdated = preferenceRecordingLayouts.stream().filter(l -> l.sameName(recordingLayout)).findFirst(); if (layoutToBeUpdated.isPresent()) { - layoutToBeUpdated.get().replaceAllFields(layout.getFields()); - layoutToBeUpdated.get().setColumnsPerRow(layout.getColumnsPerRow()); - PreferencesUtils.updateCustomLayouts(preferenceLayouts); + layoutToBeUpdated.get().replaceAllFields(recordingLayout.getFields()); + layoutToBeUpdated.get().setColumnsPerRow(recordingLayout.getColumnsPerRow()); + PreferencesUtils.updateCustomLayouts(preferenceRecordingLayouts); } } @@ -798,19 +796,19 @@ public class PreferencesUtils { setString(R.string.stats_custom_layout_selected_layout_key, layoutName); } - public static List getAllCustomLayouts() { - List layouts = new ArrayList<>(); + public static List getAllCustomLayouts() { + List recordingLayouts = new ArrayList<>(); String csvCustomLayout = getString(R.string.stats_custom_layouts_key, buildDefaultLayout()); String[] csvLines = csvCustomLayout.split(CsvLayoutUtils.LINE_SEPARATOR); for (String line : csvLines) { - layouts.add(LayoutIO.fromCsv(line, resources)); + recordingLayouts.add(RecordingLayoutIO.fromCsv(line, resources)); } - return layouts; + return recordingLayouts; } public static List getAllCustomLayoutNames() { - return getAllCustomLayouts().stream().map(Layout::getName).collect(Collectors.toList()); + return getAllCustomLayouts().stream().map(RecordingLayout::getName).collect(Collectors.toList()); } public static void resetCustomLayoutPreferences() { diff --git a/src/main/java/de/dennisguse/opentracks/settings/SettingsCustomLayoutEditActivity.java b/src/main/java/de/dennisguse/opentracks/settings/SettingsCustomLayoutEditActivity.java index ffd400181..b16d07485 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/SettingsCustomLayoutEditActivity.java +++ b/src/main/java/de/dennisguse/opentracks/settings/SettingsCustomLayoutEditActivity.java @@ -17,7 +17,7 @@ import de.dennisguse.opentracks.AbstractActivity; import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.databinding.ActivitySettingsCustomLayoutBinding; import de.dennisguse.opentracks.ui.customRecordingLayout.DataField; -import de.dennisguse.opentracks.ui.customRecordingLayout.Layout; +import de.dennisguse.opentracks.ui.customRecordingLayout.RecordingLayout; import de.dennisguse.opentracks.ui.customRecordingLayout.SettingsCustomLayoutEditAdapter; import de.dennisguse.opentracks.ui.util.ArrayAdapterFilterDisabled; import de.dennisguse.opentracks.util.StatisticsUtils; @@ -30,8 +30,8 @@ public class SettingsCustomLayoutEditActivity extends AbstractActivity implement private SettingsCustomLayoutEditAdapter adapterFieldsVisible; private SettingsCustomLayoutEditAdapter adapterFieldsHidden; private String profile; - private Layout layoutFieldsVisible; - private Layout layoutFieldsHidden; + private RecordingLayout recordingLayoutFieldsVisible; + private RecordingLayout recordingLayoutFieldsHidden; private int numColumns; @Override @@ -39,12 +39,12 @@ public class SettingsCustomLayoutEditActivity extends AbstractActivity implement super.onCreate(savedInstanceState); // Recycler view with visible stats. - Layout layout = getIntent().getParcelableExtra(EXTRA_LAYOUT); - profile = layout.getName(); - layoutFieldsVisible = StatisticsUtils.filterVisible(layout, true); - adapterFieldsVisible = new SettingsCustomLayoutEditAdapter(this, this, layoutFieldsVisible); + RecordingLayout recordingLayout = getIntent().getParcelableExtra(EXTRA_LAYOUT); + profile = recordingLayout.getName(); + recordingLayoutFieldsVisible = StatisticsUtils.filterVisible(recordingLayout, true); + adapterFieldsVisible = new SettingsCustomLayoutEditAdapter(this, this, recordingLayoutFieldsVisible); - numColumns = layout.getColumnsPerRow(); + numColumns = recordingLayout.getColumnsPerRow(); RecyclerView recyclerViewVisible = viewBinding.recyclerViewVisible; gridLayoutManager = new GridLayoutManager(this, numColumns); gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @@ -65,7 +65,7 @@ public class SettingsCustomLayoutEditActivity extends AbstractActivity implement public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) { int fromPosition = viewHolder.getAdapterPosition(); int toPosition = target.getAdapterPosition(); - layoutFieldsVisible = adapterFieldsVisible.move(fromPosition, toPosition); + recordingLayoutFieldsVisible = adapterFieldsVisible.move(fromPosition, toPosition); return true; } @@ -90,8 +90,8 @@ public class SettingsCustomLayoutEditActivity extends AbstractActivity implement viewBinding.rowsOptions.setText(rowsOptionAdapter.getItem(numColumns - 1).toString(), false); // Recycler view with not visible stats. - layoutFieldsHidden = StatisticsUtils.filterVisible(layout, false); - adapterFieldsHidden = new SettingsCustomLayoutEditAdapter(this, this, layoutFieldsHidden); + recordingLayoutFieldsHidden = StatisticsUtils.filterVisible(recordingLayout, false); + adapterFieldsHidden = new SettingsCustomLayoutEditAdapter(this, this, recordingLayoutFieldsHidden); RecyclerView recyclerViewNotVisible = viewBinding.recyclerViewNotVisible; recyclerViewNotVisible.setLayoutManager(new LinearLayoutManager(this)); recyclerViewNotVisible.setAdapter(adapterFieldsHidden); @@ -103,18 +103,18 @@ public class SettingsCustomLayoutEditActivity extends AbstractActivity implement @Override protected void onPause() { super.onPause(); - if (!layoutFieldsVisible.getFields().isEmpty() || !layoutFieldsHidden.getFields().isEmpty()) { - Layout layout = new Layout(profile, numColumns); - layout.addFields(layoutFieldsVisible.getFields()); - layout.addFields(layoutFieldsHidden.getFields()); - PreferencesUtils.updateCustomLayout(layout); + if (!recordingLayoutFieldsVisible.getFields().isEmpty() || !recordingLayoutFieldsHidden.getFields().isEmpty()) { + RecordingLayout recordingLayout = new RecordingLayout(profile, numColumns); + recordingLayout.addFields(recordingLayoutFieldsVisible.getFields()); + recordingLayout.addFields(recordingLayoutFieldsHidden.getFields()); + PreferencesUtils.updateCustomLayout(recordingLayout); } } @Override protected void onDestroy() { super.onDestroy(); - layoutFieldsVisible = null; + recordingLayoutFieldsVisible = null; } @Override @@ -132,24 +132,24 @@ public class SettingsCustomLayoutEditActivity extends AbstractActivity implement if (which == 0) { field.togglePrimary(); } else { - layoutFieldsVisible.removeField(field); + recordingLayoutFieldsVisible.removeField(field); field.toggleVisibility(); - layoutFieldsHidden.addField(field); + recordingLayoutFieldsHidden.addField(field); } - adapterFieldsVisible.swapValues(layoutFieldsVisible); - adapterFieldsHidden.swapValues(layoutFieldsHidden); + adapterFieldsVisible.swapValues(recordingLayoutFieldsVisible); + adapterFieldsHidden.swapValues(recordingLayoutFieldsHidden); }) .create() .show(); } else { - layoutFieldsHidden.removeField(field); + recordingLayoutFieldsHidden.removeField(field); field.toggleVisibility(); - layoutFieldsVisible.addField(field); + recordingLayoutFieldsVisible.addField(field); viewBinding.scrollView.fullScroll(ScrollView.FOCUS_UP); - adapterFieldsVisible.swapValues(layoutFieldsVisible); - adapterFieldsHidden.swapValues(layoutFieldsHidden); + adapterFieldsVisible.swapValues(recordingLayoutFieldsVisible); + adapterFieldsHidden.swapValues(recordingLayoutFieldsHidden); } } } diff --git a/src/main/java/de/dennisguse/opentracks/settings/SettingsCustomLayoutListActivity.java b/src/main/java/de/dennisguse/opentracks/settings/SettingsCustomLayoutListActivity.java index 9acf0ef11..83131201e 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/SettingsCustomLayoutListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/settings/SettingsCustomLayoutListActivity.java @@ -23,7 +23,7 @@ import com.google.android.material.textfield.TextInputLayout; import de.dennisguse.opentracks.AbstractActivity; import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.databinding.ActivitySettingsCustomLayoutListBinding; -import de.dennisguse.opentracks.ui.customRecordingLayout.Layout; +import de.dennisguse.opentracks.ui.customRecordingLayout.RecordingLayout; import de.dennisguse.opentracks.ui.customRecordingLayout.SettingsCustomLayoutListAdapter; import de.dennisguse.opentracks.ui.util.RecyclerViewSwipeDeleteCallback; @@ -96,7 +96,7 @@ public class SettingsCustomLayoutListActivity extends AbstractActivity implement @Override public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int i) { final int position = viewHolder.getAdapterPosition(); - final Layout item = adapter.getLayouts().get(position); + final RecordingLayout item = adapter.getLayouts().get(position); adapter.removeLayout(position); @@ -150,9 +150,9 @@ public class SettingsCustomLayoutListActivity extends AbstractActivity implement } @Override - public void onSettingsCustomLayoutProfileClicked(@NonNull Layout layout) { + public void onSettingsCustomLayoutProfileClicked(@NonNull RecordingLayout recordingLayout) { Intent intent = new Intent(this, SettingsCustomLayoutEditActivity.class); - intent.putExtra(SettingsCustomLayoutEditActivity.EXTRA_LAYOUT, layout); + intent.putExtra(SettingsCustomLayoutEditActivity.EXTRA_LAYOUT, recordingLayout); startActivity(intent); } diff --git a/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/Layout.java b/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/RecordingLayout.java similarity index 73% rename from src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/Layout.java rename to src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/RecordingLayout.java index 77879021a..9bda6c556 100644 --- a/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/Layout.java +++ b/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/RecordingLayout.java @@ -10,38 +10,38 @@ import java.util.stream.Collectors; import de.dennisguse.opentracks.settings.PreferencesUtils; -public class Layout implements Parcelable { +public class RecordingLayout implements Parcelable { // User-generated layout's name. private final String name; private int columnsPerRow; private final List dataFields = new ArrayList<>(); - public Layout(String name) { + public RecordingLayout(String name) { this.name = name; this.columnsPerRow = PreferencesUtils.getLayoutColumnsByDefault(); } - public Layout(String name, int columnsPerRow) { + public RecordingLayout(String name, int columnsPerRow) { this.name = name; this.columnsPerRow = columnsPerRow; } - protected Layout(Parcel in) { + protected RecordingLayout(Parcel in) { name = in.readString(); columnsPerRow = in.readInt(); in.readList(dataFields, DataField.class.getClassLoader()); } - public static final Creator CREATOR = new Creator<>() { + public static final Creator CREATOR = new Creator<>() { @Override - public Layout createFromParcel(Parcel in) { - return new Layout(in); + public RecordingLayout createFromParcel(Parcel in) { + return new RecordingLayout(in); } @Override - public Layout[] newArray(int size) { - return new Layout[size]; + public RecordingLayout[] newArray(int size) { + return new RecordingLayout[size]; } }; @@ -83,8 +83,8 @@ public class Layout implements Parcelable { this.columnsPerRow = columnsPerRow; } - public boolean sameName(Layout layout) { - return this.name.equalsIgnoreCase(layout.getName()); + public boolean sameName(RecordingLayout recordingLayout) { + return this.name.equalsIgnoreCase(recordingLayout.getName()); } public boolean sameName(String name) { @@ -98,7 +98,7 @@ public class Layout implements Parcelable { } return getName() + CsvLayoutUtils.ITEM_SEPARATOR + getColumnsPerRow() + CsvLayoutUtils.ITEM_SEPARATOR - + fields.stream().map(LayoutIO::toCsv).collect(Collectors.joining(CsvLayoutUtils.ITEM_SEPARATOR)) + + fields.stream().map(RecordingLayoutIO::toCsv).collect(Collectors.joining(CsvLayoutUtils.ITEM_SEPARATOR)) + CsvLayoutUtils.ITEM_SEPARATOR; } @@ -118,8 +118,8 @@ public class Layout implements Parcelable { public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; - Layout layout = (Layout) o; - return columnsPerRow == layout.columnsPerRow && Objects.equals(name, layout.name) && Objects.equals(dataFields, layout.dataFields); + RecordingLayout recordingLayout = (RecordingLayout) o; + return columnsPerRow == recordingLayout.columnsPerRow && Objects.equals(name, recordingLayout.name) && Objects.equals(dataFields, recordingLayout.dataFields); } @Override diff --git a/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/LayoutIO.java b/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/RecordingLayoutIO.java similarity index 65% rename from src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/LayoutIO.java rename to src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/RecordingLayoutIO.java index 0f50e5eb5..688b46355 100644 --- a/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/LayoutIO.java +++ b/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/RecordingLayoutIO.java @@ -6,41 +6,39 @@ import android.util.Log; import androidx.annotation.NonNull; import java.util.List; +import java.util.stream.Collectors; import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.settings.PreferencesUtils; -public class LayoutIO { +public class RecordingLayoutIO { - private static final String TAG = Layout.class.getSimpleName(); + private static final String TAG = RecordingLayout.class.getSimpleName(); private static final String YES_VALUE = "1"; private static final String NOT_VALUE = "0"; - public static String toCsv(DataField datafield) { - String visible = datafield.isVisible() ? YES_VALUE : NOT_VALUE; - String primary = datafield.isPrimary() ? YES_VALUE : NOT_VALUE; - String wide = datafield.isWide() ? YES_VALUE : NOT_VALUE; - return datafield.getKey() + CsvLayoutUtils.PROPERTY_SEPARATOR + visible + CsvLayoutUtils.PROPERTY_SEPARATOR + primary + CsvLayoutUtils.PROPERTY_SEPARATOR + wide; - } - - public static Layout fromCsv(@NonNull String csvLine, @NonNull Resources resources) { + public static RecordingLayout fromCsv(@NonNull String csvLine, @NonNull Resources resources) { List csvParts = CsvLayoutUtils.getCsvLineParts(csvLine); if (csvParts == null) { Log.e(TAG, "Invalid CSV layout. It shouldn't happen: " + csvLine); - return new Layout(PreferencesUtils.getDefaultLayoutName()); + return new RecordingLayout(PreferencesUtils.getDefaultLayoutName()); } - Layout layout = new Layout(csvParts.get(0), Integer.parseInt(csvParts.get(1))); + RecordingLayout recordingLayout = new RecordingLayout(csvParts.get(0), Integer.parseInt(csvParts.get(1))); for (int i = 2; i < csvParts.size(); i++) { String[] fieldParts = CsvLayoutUtils.getCsvFieldParts(csvParts.get(i)); if (fieldParts == null) { Log.e(TAG, "Invalid CSV layout. It shouldn't happen: " + csvLine); - return layout; + return recordingLayout; } - layout.addField(fromCSV(fieldParts, resources)); + recordingLayout.addField(fromCSV(fieldParts, resources)); } - return layout; + return recordingLayout; + } + + public static String toCSV(List recordingLayouts) { + return recordingLayouts.stream().map(RecordingLayout::toCsv).collect(Collectors.joining(CsvLayoutUtils.LINE_SEPARATOR)); } private static DataField fromCSV(String[] fieldParts, @NonNull Resources resources) { @@ -50,4 +48,11 @@ public class LayoutIO { fieldParts[2].equals(YES_VALUE), fieldParts[0].equals(resources.getString(R.string.stats_custom_layout_coordinates_key))); } + + static String toCsv(DataField datafield) { + String visible = datafield.isVisible() ? YES_VALUE : NOT_VALUE; + String primary = datafield.isPrimary() ? YES_VALUE : NOT_VALUE; + String wide = datafield.isWide() ? YES_VALUE : NOT_VALUE; + return datafield.getKey() + CsvLayoutUtils.PROPERTY_SEPARATOR + visible + CsvLayoutUtils.PROPERTY_SEPARATOR + primary + CsvLayoutUtils.PROPERTY_SEPARATOR + wide; + } } diff --git a/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/SettingsCustomLayoutEditAdapter.java b/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/SettingsCustomLayoutEditAdapter.java index b4618e906..203889da0 100644 --- a/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/SettingsCustomLayoutEditAdapter.java +++ b/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/SettingsCustomLayoutEditAdapter.java @@ -58,16 +58,16 @@ public class SettingsCustomLayoutEditAdapter extends RecyclerView.Adapter>> mapping; - public SettingsCustomLayoutEditAdapter(Context context, SettingsCustomLayoutItemClickListener itemClickListener, Layout layout) { + public SettingsCustomLayoutEditAdapter(Context context, SettingsCustomLayoutItemClickListener itemClickListener, RecordingLayout recordingLayout) { this.context = context; this.itemClickListener = itemClickListener; - this.layout = layout; + this.recordingLayout = recordingLayout; mapping = Mapping.create(context); } @@ -82,7 +82,7 @@ public class SettingsCustomLayoutEditAdapter extends RecyclerView.Adapter m = mapping.get(field.getKey()).call(); @@ -103,32 +103,32 @@ public class SettingsCustomLayoutEditAdapter extends RecyclerView.Adapter optionalField = layout.getFields().stream().filter(f -> f.getKey().equals(statTitle)).findFirst(); + Optional optionalField = recordingLayout.getFields().stream().filter(f -> f.getKey().equals(statTitle)).findFirst(); optionalField.ifPresent(itemClickListener::onSettingsCustomLayoutItemClicked); } } diff --git a/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/SettingsCustomLayoutListAdapter.java b/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/SettingsCustomLayoutListAdapter.java index c3ea86901..8fbcf628e 100644 --- a/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/SettingsCustomLayoutListAdapter.java +++ b/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/SettingsCustomLayoutListAdapter.java @@ -17,14 +17,14 @@ import de.dennisguse.opentracks.settings.PreferencesUtils; public class SettingsCustomLayoutListAdapter extends RecyclerView.Adapter { - private List layoutList; + private List recordingLayoutList; private final Context context; private final SettingsCustomLayoutProfileClickListener itemClickListener; public SettingsCustomLayoutListAdapter(Context context, SettingsCustomLayoutProfileClickListener itemClickListener) { this.context = context; this.itemClickListener = itemClickListener; - layoutList = PreferencesUtils.getAllCustomLayouts(); + recordingLayoutList = PreferencesUtils.getAllCustomLayouts(); } @NonNull @@ -37,37 +37,37 @@ public class SettingsCustomLayoutListAdapter extends RecyclerView.Adapter getLayouts() { - return layoutList; + public List getLayouts() { + return recordingLayoutList; } public void reloadLayouts() { - layoutList = PreferencesUtils.getAllCustomLayouts(); + recordingLayoutList = PreferencesUtils.getAllCustomLayouts(); notifyDataSetChanged(); } public void removeLayout(int position) { - layoutList.remove(position); - PreferencesUtils.updateCustomLayouts(layoutList); + recordingLayoutList.remove(position); + PreferencesUtils.updateCustomLayouts(recordingLayoutList); notifyDataSetChanged(); } - public void restoreItem(Layout layout, int position) { - layoutList.add(position, layout); - PreferencesUtils.updateCustomLayouts(layoutList); + public void restoreItem(RecordingLayout recordingLayout, int position) { + recordingLayoutList.add(position, recordingLayout); + PreferencesUtils.updateCustomLayouts(recordingLayoutList); notifyDataSetChanged(); } @@ -83,12 +83,12 @@ public class SettingsCustomLayoutListAdapter extends RecyclerView.Adapter optionalLayout = layoutList.stream().filter(layout -> layout.sameName(new Layout(profile))).findFirst(); + Optional optionalLayout = recordingLayoutList.stream().filter(layout -> layout.sameName(new RecordingLayout(profile))).findFirst(); optionalLayout.ifPresent(itemClickListener::onSettingsCustomLayoutProfileClicked); } } public interface SettingsCustomLayoutProfileClickListener { - void onSettingsCustomLayoutProfileClicked(@NonNull Layout layout); + void onSettingsCustomLayoutProfileClicked(@NonNull RecordingLayout recordingLayout); } } diff --git a/src/main/java/de/dennisguse/opentracks/util/StatisticsUtils.java b/src/main/java/de/dennisguse/opentracks/util/StatisticsUtils.java index 0e1538cff..3d3910c24 100644 --- a/src/main/java/de/dennisguse/opentracks/util/StatisticsUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/StatisticsUtils.java @@ -8,7 +8,7 @@ import java.util.stream.Collectors; import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.settings.PreferencesUtils; -import de.dennisguse.opentracks.ui.customRecordingLayout.Layout; +import de.dennisguse.opentracks.ui.customRecordingLayout.RecordingLayout; public class StatisticsUtils { @@ -26,9 +26,9 @@ public class StatisticsUtils { } @Deprecated //Add to Layout? - public static Layout filterVisible(Layout layout, boolean visible) { - Layout result = new Layout(layout.getName()); - result.addFields(layout.getFields().stream().filter(f -> f.isVisible() == visible).collect(Collectors.toList())); + public static RecordingLayout filterVisible(RecordingLayout recordingLayout, boolean visible) { + RecordingLayout result = new RecordingLayout(recordingLayout.getName()); + result.addFields(recordingLayout.getFields().stream().filter(f -> f.isVisible() == visible).collect(Collectors.toList())); return result; } } diff --git a/src/main/res/layout/about.xml b/src/main/res/layout/about.xml index 6378ce9fb..2e6a97ed9 100644 --- a/src/main/res/layout/about.xml +++ b/src/main/res/layout/about.xml @@ -120,6 +120,8 @@ - + diff --git a/src/main/res/layout/activity_settings_custom_layout.xml b/src/main/res/layout/activity_settings_custom_layout.xml index 87a2ef216..3a4b8491d 100644 --- a/src/main/res/layout/activity_settings_custom_layout.xml +++ b/src/main/res/layout/activity_settings_custom_layout.xml @@ -56,6 +56,8 @@ - + \ No newline at end of file diff --git a/src/main/res/layout/activity_settings_custom_layout_list.xml b/src/main/res/layout/activity_settings_custom_layout_list.xml index 5a9615f93..6d0154f6d 100644 --- a/src/main/res/layout/activity_settings_custom_layout_list.xml +++ b/src/main/res/layout/activity_settings_custom_layout_list.xml @@ -75,6 +75,8 @@ - + \ No newline at end of file diff --git a/src/main/res/layout/activity_show_error.xml b/src/main/res/layout/activity_show_error.xml index 15594187d..880c1b8d2 100644 --- a/src/main/res/layout/activity_show_error.xml +++ b/src/main/res/layout/activity_show_error.xml @@ -21,6 +21,8 @@ - + diff --git a/src/main/res/layout/aggregated_stats.xml b/src/main/res/layout/aggregated_stats.xml index a4aa700a4..006f05dde 100644 --- a/src/main/res/layout/aggregated_stats.xml +++ b/src/main/res/layout/aggregated_stats.xml @@ -26,6 +26,8 @@ - + \ No newline at end of file diff --git a/src/main/res/layout/export_activity.xml b/src/main/res/layout/export_activity.xml index b2d3252cf..0de985674 100644 --- a/src/main/res/layout/export_activity.xml +++ b/src/main/res/layout/export_activity.xml @@ -307,6 +307,8 @@ - + \ No newline at end of file diff --git a/src/main/res/layout/help.xml b/src/main/res/layout/help.xml index 8a58acf4a..48940216b 100644 --- a/src/main/res/layout/help.xml +++ b/src/main/res/layout/help.xml @@ -143,6 +143,8 @@ - + \ No newline at end of file diff --git a/src/main/res/layout/import_activity.xml b/src/main/res/layout/import_activity.xml index 1a3f0f6c9..13ea6e93e 100644 --- a/src/main/res/layout/import_activity.xml +++ b/src/main/res/layout/import_activity.xml @@ -251,6 +251,8 @@ - + \ No newline at end of file diff --git a/src/main/res/layout/marker_detail_activity.xml b/src/main/res/layout/marker_detail_activity.xml index cee3613d4..77a4d9fc4 100644 --- a/src/main/res/layout/marker_detail_activity.xml +++ b/src/main/res/layout/marker_detail_activity.xml @@ -28,6 +28,8 @@ limitations under the License. android:layout_height="match_parent" /> - + \ No newline at end of file diff --git a/src/main/res/layout/marker_edit.xml b/src/main/res/layout/marker_edit.xml index 21dec491e..83cd9beca 100644 --- a/src/main/res/layout/marker_edit.xml +++ b/src/main/res/layout/marker_edit.xml @@ -138,6 +138,8 @@ limitations under the License. - + \ No newline at end of file diff --git a/src/main/res/layout/marker_list.xml b/src/main/res/layout/marker_list.xml index 5c465cb21..3bd12501e 100644 --- a/src/main/res/layout/marker_list.xml +++ b/src/main/res/layout/marker_list.xml @@ -38,6 +38,8 @@ limitations under the License. - + \ No newline at end of file diff --git a/src/main/res/layout/settings.xml b/src/main/res/layout/settings.xml index 2ec505182..5802a1398 100644 --- a/src/main/res/layout/settings.xml +++ b/src/main/res/layout/settings.xml @@ -17,6 +17,8 @@ - + \ No newline at end of file diff --git a/src/main/res/layout/track_edit.xml b/src/main/res/layout/track_edit.xml index 45c1fc7f6..579577e7e 100644 --- a/src/main/res/layout/track_edit.xml +++ b/src/main/res/layout/track_edit.xml @@ -46,6 +46,8 @@ limitations under the License. - + \ No newline at end of file diff --git a/src/main/res/layout/track_recorded.xml b/src/main/res/layout/track_recorded.xml index 7b655408a..1801ba712 100644 --- a/src/main/res/layout/track_recorded.xml +++ b/src/main/res/layout/track_recorded.xml @@ -36,6 +36,8 @@ limitations under the License. - + \ No newline at end of file