diff --git a/src/androidTest/java/de/dennisguse/opentracks/settings/PreferencesOpenHelperTest.java b/src/androidTest/java/de/dennisguse/opentracks/settings/PreferencesOpenHelperTest.java index 8d3c9bee0..6e870a1c1 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/settings/PreferencesOpenHelperTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/settings/PreferencesOpenHelperTest.java @@ -18,6 +18,7 @@ import java.util.List; import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.ui.customRecordingLayout.Layout; +import de.dennisguse.opentracks.ui.customRecordingLayout.LayoutIO; @RunWith(AndroidJUnit4.class) public class PreferencesOpenHelperTest { @@ -109,7 +110,7 @@ public class PreferencesOpenHelperTest { PreferencesOpenHelper.newInstance(1).check(); // then custom layout should be equals to default layout. - Layout defaultLayout = Layout.fromCsv(PreferencesUtils.buildDefaultLayout(), resources); + Layout defaultLayout = LayoutIO.fromCsv(PreferencesUtils.buildDefaultLayout(), resources); List customLayout = PreferencesUtils.getAllCustomLayouts(); assertEquals(customLayout.size(), 1); diff --git a/src/androidTest/java/de/dennisguse/opentracks/settings/PreferencesUtilsTest.java b/src/androidTest/java/de/dennisguse/opentracks/settings/PreferencesUtilsTest.java index 09f30066e..43880aeb4 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/settings/PreferencesUtilsTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/settings/PreferencesUtilsTest.java @@ -23,6 +23,7 @@ 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; @RunWith(AndroidJUnit4.class) public class PreferencesUtilsTest { @@ -257,8 +258,8 @@ public class PreferencesUtilsTest { + context.getString(R.string.stats_custom_layout_speed_key) + ",0,0;"; List layoutsToBeUpdated = new ArrayList<>(); - layoutsToBeUpdated.add(Layout.fromCsv(cyclingProfileUpdated, resources)); - layoutsToBeUpdated.add(Layout.fromCsv(runningProfile, resources)); + layoutsToBeUpdated.add(LayoutIO.fromCsv(cyclingProfileUpdated, resources)); + layoutsToBeUpdated.add(LayoutIO.fromCsv(runningProfile, resources)); PreferencesUtils.updateCustomLayouts(layoutsToBeUpdated); @@ -302,7 +303,7 @@ 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 = Layout.fromCsv(cyclingProfileUpdated, resources); + Layout layoutToBeUpdated = LayoutIO.fromCsv(cyclingProfileUpdated, resources); PreferencesUtils.updateCustomLayout(layoutToBeUpdated); // then only updated profile is modified in the custom layouts diff --git a/src/androidTest/java/de/dennisguse/opentracks/ui/customRecordingLayout/LayoutTest.java b/src/androidTest/java/de/dennisguse/opentracks/ui/customRecordingLayout/LayoutTest.java index fcb0d5d63..69a8abe9b 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/ui/customRecordingLayout/LayoutTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/ui/customRecordingLayout/LayoutTest.java @@ -28,7 +28,7 @@ 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 = Layout.fromCsv(csv, resources); + Layout layout = LayoutIO.fromCsv(csv, resources); List dataFieldList = layout.getFields(); // then layout and data fields are built correctly @@ -64,7 +64,7 @@ public class LayoutTest extends TestCase { String csv1 = "Layout Name;speed,1,1;distance,0,0;"; // when create a layout from CSV line - Layout layout = Layout.fromCsv(csv1, resources); + Layout layout = LayoutIO.fromCsv(csv1, resources); List dataFieldList = layout.getFields(); // then layout and data fields are built correctly @@ -79,7 +79,7 @@ public class LayoutTest extends TestCase { String csv1 = "Layout Name;2;"; // when create a layout from CSV line - Layout layout = Layout.fromCsv(csv1, resources); + Layout layout = LayoutIO.fromCsv(csv1, resources); List dataFieldList = layout.getFields(); // then layout and data fields are built correctly @@ -94,7 +94,7 @@ public class LayoutTest extends TestCase { String csv1 = "Layout Name;2;speed,distance,total time;"; // when create a layout from CSV line - Layout layout = Layout.fromCsv(csv1, resources); + Layout layout = LayoutIO.fromCsv(csv1, resources); List dataFieldList = layout.getFields(); // then layout and data fields are built correctly @@ -109,7 +109,7 @@ public class LayoutTest extends TestCase { String csv1 = "Layout Name;2;speed,1,0;distance;"; // when create a layout from CSV line - Layout layout = Layout.fromCsv(csv1, resources); + Layout layout = LayoutIO.fromCsv(csv1, resources); List dataFieldList = layout.getFields(); // then layout and data fields are built correctly @@ -122,11 +122,11 @@ public class LayoutTest extends TestCase { public void testToCsv() { // given a layout's object Layout layout = new Layout("Test Layout", 2); - layout.addField("key1", "Title 1", false, false, false); - layout.addField("key2", "Title 2", false, true, false); - layout.addField("key3", "Title 3", true, false, false); - layout.addField("key4", "Title 4", true, true, false); - layout.addField("key5", "Title 5", true, true, true); + layout.addField(new DataField("key1", "Title 1", false, false, false)); + layout.addField(new DataField("key2", "Title 2", false, true, false)); + layout.addField(new DataField("key3", "Title 3", true, false, false)); + layout.addField(new DataField("key4", "Title 4", true, true, false)); + layout.addField(new DataField("key5", "Title 5", true, true, true)); // when converts it to CSV String csv = layout.toCsv(); @@ -139,11 +139,11 @@ public class LayoutTest extends TestCase { public void testToCsv_columnsByDefault() { // given a layout's object Layout layout = new Layout("Test Layout"); - layout.addField("key1", "Title 1", false, false, false); - layout.addField("key2", "Title 2", false, true, false); - layout.addField("key3", "Title 3", true, false, false); - layout.addField("key4", "Title 4", true, true, false); - layout.addField("key5", "Title 5", true, true, true); + layout.addField(new DataField("key1", "Title 1", false, false, false)); + layout.addField(new DataField("key2", "Title 2", false, true, false)); + layout.addField(new DataField("key3", "Title 3", true, false, false)); + layout.addField(new DataField("key4", "Title 4", true, true, false)); + layout.addField(new DataField("key5", "Title 5", true, true, true)); // when converts it to CSV String csv = layout.toCsv(); diff --git a/src/androidTest/java/de/dennisguse/opentracks/viewmodels/StatisticDataBuilderTest.java b/src/androidTest/java/de/dennisguse/opentracks/viewmodels/StatisticDataBuilderTest.java index 8f504ffe7..380514e9d 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/viewmodels/StatisticDataBuilderTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/viewmodels/StatisticDataBuilderTest.java @@ -26,6 +26,7 @@ import de.dennisguse.opentracks.services.RecordingData; import de.dennisguse.opentracks.settings.UnitSystem; import de.dennisguse.opentracks.stats.SensorStatistics; import de.dennisguse.opentracks.stats.TrackStatistics; +import de.dennisguse.opentracks.ui.customRecordingLayout.DataField; import de.dennisguse.opentracks.ui.customRecordingLayout.Layout; @RunWith(MockitoJUnitRunner.class) @@ -55,11 +56,11 @@ public class StatisticDataBuilderTest extends TestCase { // given Layout layout = new Layout(context.getString(R.string.default_activity_default)); - layout.addField(context.getString(R.string.stats_custom_layout_total_time_key), context.getString(R.string.stats_total_time), true, true, false); - layout.addField(context.getString(R.string.stats_custom_layout_moving_time_key), context.getString(R.string.stats_moving_time), true, true, false); - layout.addField(context.getString(R.string.stats_custom_layout_distance_key), context.getString(R.string.stats_distance), true, true, false); - layout.addField(context.getString(R.string.stats_custom_layout_speed_key), context.getString(R.string.stats_speed), false, true, false); - layout.addField(context.getString(R.string.stats_custom_layout_max_speed_key), context.getString(R.string.stats_max_speed), false, true, false); + layout.addField(new DataField(context.getString(R.string.stats_custom_layout_total_time_key), context.getString(R.string.stats_total_time), true, true, false)); + layout.addField(new DataField(context.getString(R.string.stats_custom_layout_moving_time_key), context.getString(R.string.stats_moving_time), true, true, false)); + layout.addField(new DataField(context.getString(R.string.stats_custom_layout_distance_key), context.getString(R.string.stats_distance), true, true, false)); + layout.addField(new DataField(context.getString(R.string.stats_custom_layout_speed_key), context.getString(R.string.stats_speed), false, true, false)); + layout.addField(new DataField(context.getString(R.string.stats_custom_layout_max_speed_key), context.getString(R.string.stats_max_speed), false, true, false)); // when List statisticDataList = StatisticDataBuilder.fromRecordingData(context, recordingDataMock, layout, UnitSystem.METRIC); @@ -81,24 +82,24 @@ public class StatisticDataBuilderTest extends TestCase { // given Layout layout = new Layout(context.getString(R.string.default_activity_default)); - layout.addField(context.getString(R.string.stats_custom_layout_total_time_key), context.getString(R.string.stats_total_time), true, true, false); - layout.addField(context.getString(R.string.stats_custom_layout_moving_time_key), context.getString(R.string.stats_moving_time), true, true, false); - layout.addField(context.getString(R.string.stats_custom_layout_distance_key), context.getString(R.string.stats_distance), true, true, false); - layout.addField(context.getString(R.string.stats_custom_layout_speed_key), context.getString(R.string.stats_speed), true, true, false); - layout.addField(context.getString(R.string.stats_custom_layout_average_moving_speed_key), context.getString(R.string.stats_average_moving_speed), true, true, false); - layout.addField(context.getString(R.string.stats_custom_layout_average_speed_key), context.getString(R.string.stats_average_speed), true, true, false); - layout.addField(context.getString(R.string.stats_custom_layout_max_speed_key), context.getString(R.string.stats_max_speed), true, true, false); - layout.addField(context.getString(R.string.stats_custom_layout_pace_key), context.getString(R.string.stats_pace), true, true, false); - layout.addField(context.getString(R.string.stats_custom_layout_average_moving_pace_key), context.getString(R.string.stats_average_moving_pace), true, true, false); - layout.addField(context.getString(R.string.stats_custom_layout_average_pace_key), context.getString(R.string.stats_average_pace), true, true, false); - layout.addField(context.getString(R.string.stats_custom_layout_fastest_pace_key), context.getString(R.string.stats_fastest_pace), true, true, false); - layout.addField(context.getString(R.string.stats_custom_layout_altitude_key), context.getString(R.string.stats_altitude), true, true, false); - layout.addField(context.getString(R.string.stats_custom_layout_gain_key), context.getString(R.string.stats_gain), true, true, false); - layout.addField(context.getString(R.string.stats_custom_layout_loss_key), context.getString(R.string.stats_loss), true, true, false); - layout.addField(context.getString(R.string.stats_custom_layout_coordinates_key), context.getString(R.string.stats_coordinates), true, true, false); - layout.addField(context.getString(R.string.stats_custom_layout_heart_rate_key), context.getString(R.string.stats_sensors_heart_rate), true, true, false); - layout.addField(context.getString(R.string.stats_custom_layout_cadence_key), context.getString(R.string.stats_sensors_cadence), true, true, false); - layout.addField(context.getString(R.string.stats_custom_layout_power_key), context.getString(R.string.stats_sensors_power), true, true, false); + layout.addField(new DataField(context.getString(R.string.stats_custom_layout_total_time_key), context.getString(R.string.stats_total_time), true, true, false)); + layout.addField(new DataField(context.getString(R.string.stats_custom_layout_moving_time_key), context.getString(R.string.stats_moving_time), true, true, false)); + layout.addField(new DataField(context.getString(R.string.stats_custom_layout_distance_key), context.getString(R.string.stats_distance), true, true, false)); + layout.addField(new DataField(context.getString(R.string.stats_custom_layout_speed_key), context.getString(R.string.stats_speed), true, true, false)); + layout.addField(new DataField(context.getString(R.string.stats_custom_layout_average_moving_speed_key), context.getString(R.string.stats_average_moving_speed), true, true, false)); + layout.addField(new DataField(context.getString(R.string.stats_custom_layout_average_speed_key), context.getString(R.string.stats_average_speed), true, true, false)); + layout.addField(new DataField(context.getString(R.string.stats_custom_layout_max_speed_key), context.getString(R.string.stats_max_speed), true, true, false)); + layout.addField(new DataField(context.getString(R.string.stats_custom_layout_pace_key), context.getString(R.string.stats_pace), true, true, false)); + layout.addField(new DataField(context.getString(R.string.stats_custom_layout_average_moving_pace_key), context.getString(R.string.stats_average_moving_pace), true, true, false)); + layout.addField(new DataField(context.getString(R.string.stats_custom_layout_average_pace_key), context.getString(R.string.stats_average_pace), true, true, false)); + layout.addField(new DataField(context.getString(R.string.stats_custom_layout_fastest_pace_key), context.getString(R.string.stats_fastest_pace), true, true, false)); + layout.addField(new DataField(context.getString(R.string.stats_custom_layout_altitude_key), context.getString(R.string.stats_altitude), true, true, false)); + layout.addField(new DataField(context.getString(R.string.stats_custom_layout_gain_key), context.getString(R.string.stats_gain), true, true, false)); + layout.addField(new DataField(context.getString(R.string.stats_custom_layout_loss_key), context.getString(R.string.stats_loss), true, true, false)); + layout.addField(new DataField(context.getString(R.string.stats_custom_layout_coordinates_key), context.getString(R.string.stats_coordinates), true, true, false)); + layout.addField(new DataField(context.getString(R.string.stats_custom_layout_heart_rate_key), context.getString(R.string.stats_sensors_heart_rate), true, true, false)); + layout.addField(new DataField(context.getString(R.string.stats_custom_layout_cadence_key), context.getString(R.string.stats_sensors_cadence), true, true, false)); + layout.addField(new DataField(context.getString(R.string.stats_custom_layout_power_key), context.getString(R.string.stats_sensors_power), true, true, false)); // when List statisticDataList = StatisticDataBuilder.fromRecordingData(context, recordingDataMock, layout, UnitSystem.METRIC); diff --git a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java index c8c5fd14c..31276a23b 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java +++ b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java @@ -47,6 +47,7 @@ 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.util.IntentDashboardUtils; import de.dennisguse.opentracks.util.TrackIconUtils; @@ -758,17 +759,17 @@ public class PreferencesUtils { String[] csvLines = csvCustomLayouts.split(CsvLayoutUtils.LINE_SEPARATOR); String layoutSelected = getString(R.string.stats_custom_layout_selected_layout_key, null); if (layoutSelected == null) { - return Layout.fromCsv(csvLines[0], resources); + return LayoutIO.fromCsv(csvLines[0], resources); } for (String line : csvLines) { - Layout layout = Layout.fromCsv(line, resources); + Layout layout = LayoutIO.fromCsv(line, resources); if (layout.sameName(layoutSelected)) { return layout; } } - return Layout.fromCsv(csvLines[0], resources); + return LayoutIO.fromCsv(csvLines[0], resources); } public static void updateCustomLayouts(@NonNull List layouts) { @@ -800,7 +801,7 @@ public class PreferencesUtils { String csvCustomLayout = getString(R.string.stats_custom_layouts_key, buildDefaultLayout()); String[] csvLines = csvCustomLayout.split(CsvLayoutUtils.LINE_SEPARATOR); for (String line : csvLines) { - layouts.add(Layout.fromCsv(line, resources)); + layouts.add(LayoutIO.fromCsv(line, resources)); } return layouts; diff --git a/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/DataField.java b/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/DataField.java index 512721a38..7c78a3b35 100644 --- a/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/DataField.java +++ b/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/DataField.java @@ -8,8 +8,6 @@ import android.os.Parcelable; import de.dennisguse.opentracks.R; public class DataField implements Parcelable { - public static final String YES_VALUE = "1"; - public static final String NOT_VALUE = "0"; private final String key; private final String title; @@ -81,13 +79,6 @@ public class DataField implements Parcelable { } } - public String toCsv() { - String visible = this.isVisible ? YES_VALUE : NOT_VALUE; - String primary = this.isPrimary ? YES_VALUE : NOT_VALUE; - String wide = this.isWide ? YES_VALUE : NOT_VALUE; - return key + CsvLayoutUtils.PROPERTY_SEPARATOR + visible + CsvLayoutUtils.PROPERTY_SEPARATOR + primary + CsvLayoutUtils.PROPERTY_SEPARATOR + wide; - } - public static String getTitleByKey(Resources resources, String key) { if (key.equals(resources.getString(R.string.stats_custom_layout_total_time_key))) { return resources.getString(R.string.stats_total_time); diff --git a/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/Layout.java b/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/Layout.java index ecd3ddeb9..e2d633e93 100644 --- a/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/Layout.java +++ b/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/Layout.java @@ -1,46 +1,21 @@ package de.dennisguse.opentracks.ui.customRecordingLayout; -import android.content.res.Resources; import android.os.Parcel; import android.os.Parcelable; -import android.util.Log; - -import androidx.annotation.NonNull; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; -import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.settings.PreferencesUtils; public class Layout implements Parcelable { - private static final String TAG = Layout.class.getSimpleName(); // User-generated layout's name. private final String name; private int columnsPerRow; private final List dataFields = new ArrayList<>(); - public static Layout 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()); - } - - Layout layout = new Layout(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; - } - layout.addField(fieldParts[0], DataField.getTitleByKey(resources, fieldParts[0]), fieldParts[1].equals(DataField.YES_VALUE), fieldParts[2].equals(DataField.YES_VALUE), fieldParts[0].equals(resources.getString(R.string.stats_custom_layout_coordinates_key))); - } - return layout; - } - public Layout(String name) { this.name = name; this.columnsPerRow = PreferencesUtils.getLayoutColumnsByDefault(); @@ -69,10 +44,6 @@ public class Layout implements Parcelable { } }; - public void addField(String key, String title, boolean visible, boolean primary, boolean isWide) { - dataFields.add(new DataField(key, title, visible, primary, isWide)); - } - public void addField(DataField dataField) { dataFields.add(dataField); } @@ -126,7 +97,7 @@ public class Layout implements Parcelable { } return getName() + CsvLayoutUtils.ITEM_SEPARATOR + getColumnsPerRow() + CsvLayoutUtils.ITEM_SEPARATOR - + fields.stream().map(DataField::toCsv).collect(Collectors.joining(CsvLayoutUtils.ITEM_SEPARATOR)) + + fields.stream().map(LayoutIO::toCsv).collect(Collectors.joining(CsvLayoutUtils.ITEM_SEPARATOR)) + CsvLayoutUtils.ITEM_SEPARATOR; } diff --git a/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/LayoutIO.java b/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/LayoutIO.java new file mode 100644 index 000000000..7eb06a654 --- /dev/null +++ b/src/main/java/de/dennisguse/opentracks/ui/customRecordingLayout/LayoutIO.java @@ -0,0 +1,54 @@ +package de.dennisguse.opentracks.ui.customRecordingLayout; + +import android.content.res.Resources; +import android.util.Log; + +import androidx.annotation.NonNull; + +import java.util.List; + +import de.dennisguse.opentracks.R; +import de.dennisguse.opentracks.settings.PreferencesUtils; + +public class LayoutIO { + + private static final String TAG = Layout.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) { + List csvParts = CsvLayoutUtils.getCsvLineParts(csvLine); + if (csvParts == null) { + Log.e(TAG, "Invalid CSV layout. It shouldn't happen: " + csvLine); + return new Layout(PreferencesUtils.getDefaultLayoutName()); + } + + Layout layout = new Layout(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; + } + layout.addField(fromCSV(fieldParts, resources)); + } + return layout; + } + + private static DataField fromCSV(String[] fieldParts, @NonNull Resources resources) { + return new DataField( + fieldParts[0], + DataField.getTitleByKey(resources, fieldParts[0]), + fieldParts[1].equals(YES_VALUE), + fieldParts[2].equals(YES_VALUE), + fieldParts[0].equals(resources.getString(R.string.stats_custom_layout_coordinates_key))); + } +}