diff --git a/src/androidTest/java/de/dennisguse/opentracks/fragments/ChartFragmentTest.java b/src/androidTest/java/de/dennisguse/opentracks/fragments/ChartFragmentTest.java index e4b5b3417..2df470f67 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/fragments/ChartFragmentTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/fragments/ChartFragmentTest.java @@ -46,8 +46,10 @@ public class ChartFragmentTest { @Before public void setUp() { - chartFragment = new ChartFragment(); - chartFragment.setChartView(new ChartView(ApplicationProvider.getApplicationContext())); + boolean chartByDistance = false; + chartFragment = new ChartFragment(chartByDistance) { + }; + chartFragment.setChartView(new ChartView(ApplicationProvider.getApplicationContext(), chartByDistance)); chartFragment.setTripStatisticsUpdater(TrackStubUtils.INITIAL_TIME); } diff --git a/src/main/java/de/dennisguse/opentracks/ChartView.java b/src/main/java/de/dennisguse/opentracks/ChartView.java index 948ca5f26..f2184805a 100644 --- a/src/main/java/de/dennisguse/opentracks/ChartView.java +++ b/src/main/java/de/dennisguse/opentracks/ChartView.java @@ -107,7 +107,7 @@ public class ChartView extends View { private int effectiveWidth = 0; private int effectiveHeight = 0; - private boolean chartByDistance = true; + private boolean chartByDistance; private boolean metricUnits = true; private boolean reportSpeed = true; private boolean showPointer = false; @@ -117,8 +117,9 @@ public class ChartView extends View { * * @param context the context */ - public ChartView(Context context) { + public ChartView(Context context, boolean chartByDistance) { super(context); + this.chartByDistance = chartByDistance; series[ELEVATION_SERIES] = new ChartValueSeries(context, Integer.MIN_VALUE, diff --git a/src/main/java/de/dennisguse/opentracks/TrackDetailActivity.java b/src/main/java/de/dennisguse/opentracks/TrackDetailActivity.java index 7001510ea..9ce9f9ab2 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackDetailActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackDetailActivity.java @@ -45,7 +45,8 @@ import de.dennisguse.opentracks.content.TrackDataHub; import de.dennisguse.opentracks.content.Waypoint; import de.dennisguse.opentracks.content.Waypoint.WaypointType; import de.dennisguse.opentracks.content.WaypointCreationRequest; -import de.dennisguse.opentracks.fragments.ChartFragment; +import de.dennisguse.opentracks.fragments.ChartDistanceFragment; +import de.dennisguse.opentracks.fragments.ChartTimeFragment; import de.dennisguse.opentracks.fragments.ChooseActivityTypeDialogFragment; import de.dennisguse.opentracks.fragments.ConfirmDeleteDialogFragment; import de.dennisguse.opentracks.fragments.StatsFragment; @@ -205,8 +206,11 @@ public class TrackDetailActivity extends AbstractListActivity implements ChooseA TabSpec statsTabSpec = tabHost.newTabSpec(StatsFragment.STATS_FRAGMENT_TAG).setIndicator(getString(R.string.track_detail_stats_tab)); tabsAdapter.addTab(statsTabSpec, StatsFragment.class, null); - TabSpec chartTabSpec = tabHost.newTabSpec(ChartFragment.CHART_FRAGMENT_TAG).setIndicator(getString(R.string.track_detail_chart_tab)); - tabsAdapter.addTab(chartTabSpec, ChartFragment.class, null); + TabSpec chartTimeTabSpec = tabHost.newTabSpec(ChartTimeFragment.CHART_FRAGMENT_TAG).setIndicator(getString(R.string.settings_chart_by_time)); + tabsAdapter.addTab(chartTimeTabSpec, ChartTimeFragment.class, null); + + TabSpec chartDistanceTabSpec = tabHost.newTabSpec(ChartDistanceFragment.CHART_FRAGMENT_TAG).setIndicator(getString(R.string.settings_chart_by_distance)); + tabsAdapter.addTab(chartDistanceTabSpec, ChartDistanceFragment.class, null); if (savedInstanceState != null) { tabHost.setCurrentTabByTag(savedInstanceState.getString(CURRENT_TAB_TAG_KEY)); diff --git a/src/main/java/de/dennisguse/opentracks/fragments/ChartDistanceFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/ChartDistanceFragment.java new file mode 100644 index 000000000..8a25e532a --- /dev/null +++ b/src/main/java/de/dennisguse/opentracks/fragments/ChartDistanceFragment.java @@ -0,0 +1,10 @@ +package de.dennisguse.opentracks.fragments; + +public class ChartDistanceFragment extends ChartFragment { + + public static final String CHART_FRAGMENT_TAG = ChartDistanceFragment.class.getSimpleName(); + + public ChartDistanceFragment() { + super(true); + } +} diff --git a/src/main/java/de/dennisguse/opentracks/fragments/ChartFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/ChartFragment.java index 3da85deb1..e072c0906 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/ChartFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/ChartFragment.java @@ -25,6 +25,7 @@ import android.view.ViewGroup.LayoutParams; import android.widget.ZoomControls; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; @@ -54,9 +55,9 @@ import de.dennisguse.opentracks.util.UnitConversions; * @author Sandor Dornbush * @author Rodrigo Damazio */ -public class ChartFragment extends Fragment implements TrackDataListener { +public abstract class ChartFragment extends Fragment implements TrackDataListener { - public static final String CHART_FRAGMENT_TAG = "chartFragment"; + private static final String STATE_CHART_VIEW_BY_DISTANCE_KEY = "chartViewByDistance"; private final ArrayList pendingPoints = new ArrayList<>(); @@ -71,7 +72,7 @@ public class ChartFragment extends Fragment implements TrackDataListener { private int recordingDistanceInterval; // Modes of operation - private boolean chartByDistance = true; + private boolean chartByDistance; private boolean[] chartShow = new boolean[]{true, true, true, true, true, true}; // UI elements @@ -95,16 +96,18 @@ public class ChartFragment extends Fragment implements TrackDataListener { } }; + public ChartFragment(boolean chartByDistance) { + this.chartByDistance = chartByDistance; + } + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); recordingDistanceInterval = PreferencesUtils.getRecordingDistanceIntervalDefault(getContext()); - /* - * Create a chartView here to store data thus won't need to reload all the data on every onStart or onResume. - */ - chartView = new ChartView(getActivity()); + // Create a chartView here to store data thus won't need to reload all the data on every onStart or onResume. + chartView = new ChartView(getActivity(), chartByDistance); } @Override @@ -129,7 +132,7 @@ public class ChartFragment extends Fragment implements TrackDataListener { @Override public void onStart() { super.onStart(); - ViewGroup layout = getActivity().findViewById(R.id.chart_view_layout); + ViewGroup layout = getView().findViewById(R.id.chart_view_layout); LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); layout.addView(chartView, layoutParams); } @@ -151,10 +154,24 @@ public class ChartFragment extends Fragment implements TrackDataListener { @Override public void onStop() { super.onStop(); - ViewGroup layout = getActivity().findViewById(R.id.chart_view_layout); + ViewGroup layout = getView().findViewById(R.id.chart_view_layout); layout.removeView(chartView); } + @Override + public void onSaveInstanceState(@NonNull Bundle outState) { + super.onSaveInstanceState(outState); + outState.putBoolean(STATE_CHART_VIEW_BY_DISTANCE_KEY, chartByDistance); + } + + @Override + public void onViewStateRestored(@Nullable Bundle savedInstanceState) { + super.onViewStateRestored(savedInstanceState); + if (savedInstanceState != null) { + chartByDistance = savedInstanceState.getBoolean(STATE_CHART_VIEW_BY_DISTANCE_KEY); + } + } + @Override public void onTrackUpdated(Track track) { if (isResumed()) { @@ -304,12 +321,6 @@ public class ChartFragment extends Fragment implements TrackDataListener { */ private void checkChartSettings() { boolean needUpdate = false; - if (chartByDistance != PreferencesUtils.isChartByDistance(getActivity())) { - chartByDistance = !chartByDistance; - chartView.setChartByDistance(chartByDistance); - reloadTrackDataHub(); - needUpdate = true; - } if (setSeriesEnabled(ChartView.ELEVATION_SERIES, PreferencesUtils.shouldChartShowElevation(getActivity()))) { needUpdate = true; } diff --git a/src/main/java/de/dennisguse/opentracks/fragments/ChartTimeFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/ChartTimeFragment.java new file mode 100644 index 000000000..5641e4ed3 --- /dev/null +++ b/src/main/java/de/dennisguse/opentracks/fragments/ChartTimeFragment.java @@ -0,0 +1,10 @@ +package de.dennisguse.opentracks.fragments; + +public class ChartTimeFragment extends ChartFragment { + + public static final String CHART_FRAGMENT_TAG = ChartTimeFragment.class.getSimpleName(); + + public ChartTimeFragment() { + super(false); + } +} diff --git a/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java index 69d5c833b..633d7d819 100644 --- a/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java @@ -259,11 +259,6 @@ public class PreferencesUtils { return PreferencesUtils.getString(context, R.string.settings_sensor_bluetooth_heart_rate_key, PreferencesUtils.BLUETOOTH_SENSOR_DEFAULT); } - public static boolean isChartByDistance(Context context) { - final String CHART_X_AXIS_DEFAULT = context.getString(R.string.chart_x_axis_default); - return CHART_X_AXIS_DEFAULT.equals(getString(context, R.string.chart_x_axis_key, CHART_X_AXIS_DEFAULT)); - } - public static boolean shouldChartShowCadence(Context context) { final boolean CHART_SHOW_CADENCE = context.getResources().getBoolean(R.bool.chart_show_cadence_default); return PreferencesUtils.getBoolean(context, R.string.chart_show_cadence_key, CHART_SHOW_CADENCE); diff --git a/src/main/res/values/settings.xml b/src/main/res/values/settings.xml index f655c6f3f..c7110e3a4 100644 --- a/src/main/res/values/settings.xml +++ b/src/main/res/values/settings.xml @@ -114,19 +114,6 @@ @string/auto_resume_track_timeout_always - chartXAxis - @string/chart_x_axis_distance - - @string/chart_x_axis_distance - @string/chart_x_axis_time - - TIME - DISTANCE - - @string/settings_chart_by_distance - @string/settings_chart_by_time - - splitFrequency @string/frequency_off voiceFrequency diff --git a/src/main/res/values/settings_deprecated.xml b/src/main/res/values/settings_deprecated.xml new file mode 100644 index 000000000..ad7ae242d --- /dev/null +++ b/src/main/res/values/settings_deprecated.xml @@ -0,0 +1,18 @@ + + + + + + chartXAxis + @string/chart_x_axis_distance + + @string/chart_x_axis_distance + @string/chart_x_axis_time + + TIME + DISTANCE + + @string/settings_chart_by_distance + @string/settings_chart_by_time + + \ No newline at end of file diff --git a/src/main/res/xml/settings.xml b/src/main/res/xml/settings.xml index 3d9d84c1a..5128c1096 100644 --- a/src/main/res/xml/settings.xml +++ b/src/main/res/xml/settings.xml @@ -52,13 +52,6 @@ limitations under the License. -