From e580a03115e0bbd0cb39bddfa7ba9cfed0c8b24d Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Wed, 19 May 2021 17:52:35 +0200 Subject: [PATCH] Cleanup ChartFragment. --- .../fragments/ChartFragmentTest.java | 67 ---------- .../opentracks/chart/ChartView.java | 13 +- .../opentracks/content/TrackDataListener.java | 2 +- .../opentracks/fragments/ChartFragment.java | 125 ++++++------------ src/main/res/layout/chart.xml | 9 +- 5 files changed, 52 insertions(+), 164 deletions(-) delete mode 100644 src/androidTest/java/de/dennisguse/opentracks/fragments/ChartFragmentTest.java diff --git a/src/androidTest/java/de/dennisguse/opentracks/fragments/ChartFragmentTest.java b/src/androidTest/java/de/dennisguse/opentracks/fragments/ChartFragmentTest.java deleted file mode 100644 index 6060897c3..000000000 --- a/src/androidTest/java/de/dennisguse/opentracks/fragments/ChartFragmentTest.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 2012 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package de.dennisguse.opentracks.fragments; - -import android.os.Looper; - -import androidx.test.core.app.ApplicationProvider; -import androidx.test.ext.junit.runners.AndroidJUnit4; - -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; - -import de.dennisguse.opentracks.chart.ChartView; - -/** - * Tests {@link ChartFragment}. - * - * @author Youtao Liu - */ -//TODO Add tests that check ChartFragment -@RunWith(AndroidJUnit4.class) -public class ChartFragmentTest { - - private static final double HOURS_PER_UNIT = 60.0; - - private ChartFragment chartFragment; - - @BeforeClass - public static void preSetUp() { - // Prepare looper for Android's message queue - if (Looper.myLooper() == null) Looper.prepare(); - } - - @AfterClass - public static void finalTearDown() { - if (Looper.myLooper() != null) Looper.myLooper().quit(); - } - - @Before - public void setUp() { - boolean chartByDistance = false; - chartFragment = ChartFragment.newInstance(chartByDistance); - chartFragment.setChartView(new ChartView(ApplicationProvider.getApplicationContext(), chartByDistance)); - } - - @Test - public void nothing() { - //TODO - } -} diff --git a/src/main/java/de/dennisguse/opentracks/chart/ChartView.java b/src/main/java/de/dennisguse/opentracks/chart/ChartView.java index 8f1332672..8f7e14779 100644 --- a/src/main/java/de/dennisguse/opentracks/chart/ChartView.java +++ b/src/main/java/de/dennisguse/opentracks/chart/ChartView.java @@ -26,6 +26,7 @@ import android.graphics.Paint.Style; import android.graphics.Path; import android.graphics.Rect; import android.graphics.drawable.Drawable; +import android.util.AttributeSet; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.ScaleGestureDetector; @@ -114,7 +115,7 @@ public class ChartView extends View { private int effectiveWidth = 0; private int effectiveHeight = 0; - private final boolean chartByDistance; + private boolean chartByDistance = false; private boolean metricUnits = true; private boolean reportSpeed = true; private boolean showPointer = false; @@ -189,9 +190,9 @@ public class ChartView extends View { } }); - public ChartView(Context context, final boolean chartByDistance) { - super(context); - this.chartByDistance = chartByDistance; + public ChartView(Context context, AttributeSet attributeSet) { + super(context, attributeSet); + int fontSizeSmall = ThemeUtils.getFontSizeSmallInPx(context); int fontSizeMedium = ThemeUtils.getFontSizeMediumInPx(context); @@ -366,6 +367,10 @@ public class ChartView extends View { return true; } + public void setChartByDistance(boolean chartByDistance) { + this.chartByDistance = chartByDistance; + } + public boolean getMetricUnits() { return metricUnits; } diff --git a/src/main/java/de/dennisguse/opentracks/content/TrackDataListener.java b/src/main/java/de/dennisguse/opentracks/content/TrackDataListener.java index d5ad64f8a..e05111a0d 100644 --- a/src/main/java/de/dennisguse/opentracks/content/TrackDataListener.java +++ b/src/main/java/de/dennisguse/opentracks/content/TrackDataListener.java @@ -77,7 +77,7 @@ public interface TrackDataListener { * * @param marker the marker */ - default void onNewMarker(Marker marker) { + default void onNewMarker(@NonNull Marker marker) { } /** diff --git a/src/main/java/de/dennisguse/opentracks/fragments/ChartFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/ChartFragment.java index f76aa3925..8486ea0bf 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/ChartFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/ChartFragment.java @@ -21,10 +21,8 @@ import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.view.ViewGroup.LayoutParams; import androidx.annotation.NonNull; -import androidx.annotation.VisibleForTesting; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; @@ -34,10 +32,8 @@ import java.util.List; import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.TrackActivityDataHubInterface; import de.dennisguse.opentracks.chart.ChartPoint; -import de.dennisguse.opentracks.chart.ChartView; import de.dennisguse.opentracks.content.TrackDataHub; import de.dennisguse.opentracks.content.TrackDataListener; -import de.dennisguse.opentracks.content.data.Distance; import de.dennisguse.opentracks.content.data.Marker; import de.dennisguse.opentracks.content.data.Speed; import de.dennisguse.opentracks.content.data.Track; @@ -68,7 +64,6 @@ public class ChartFragment extends Fragment implements TrackDataListener { } private SharedPreferences sharedPreferences; - private Distance recordingDistanceInterval; private TrackDataHub trackDataHub; @@ -80,40 +75,34 @@ public class ChartFragment extends Fragment implements TrackDataListener { private boolean chartByDistance; private ChartBinding viewBinding; - // UI elements - private ChartView chartView; private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if (PreferencesUtils.isKey(getContext(), R.string.stats_units_key, key)) { boolean metricUnits = PreferencesUtils.isMetricUnits(sharedPreferences, getContext()); - if (metricUnits != chartView.getMetricUnits()) { - chartView.setMetricUnits(metricUnits); + if (metricUnits != viewBinding.chartView.getMetricUnits()) { + viewBinding.chartView.setMetricUnits(metricUnits); runOnUiThread(() -> { if (isResumed()) { - chartView.requestLayout(); + viewBinding.chartView.requestLayout(); } }); } } if (PreferencesUtils.isKey(getContext(), R.string.stats_rate_key, key)) { boolean reportSpeed = PreferencesUtils.isReportSpeed(sharedPreferences, getContext(), category); - if (reportSpeed != chartView.getReportSpeed()) { - chartView.setReportSpeed(reportSpeed); - chartView.applyReportSpeed(); + if (reportSpeed != viewBinding.chartView.getReportSpeed()) { + viewBinding.chartView.setReportSpeed(reportSpeed); + viewBinding.chartView.applyReportSpeed(); runOnUiThread(() -> { if (isResumed()) { - chartView.requestLayout(); + viewBinding.chartView.requestLayout(); } }); } } - - if (PreferencesUtils.isKey(getContext(), R.string.recording_distance_interval_key, key)) { - recordingDistanceInterval = PreferencesUtils.getRecordingDistanceInterval(sharedPreferences, getContext()); - } } }; @@ -123,12 +112,12 @@ public class ChartFragment extends Fragment implements TrackDataListener { private final Runnable updateChart = new Runnable() { @Override public void run() { - if (!isResumed() || trackDataHub == null) { + if (!isResumed()) { return; } - chartView.setShowPointer(isSelectedTrackRecording()); - chartView.invalidate(); + viewBinding.chartView.setShowPointer(isSelectedTrackRecording()); + viewBinding.chartView.invalidate(); } }; @@ -138,27 +127,15 @@ public class ChartFragment extends Fragment implements TrackDataListener { super.onCreate(savedInstanceState); chartByDistance = getArguments().getBoolean(KEY_CHART_VIEW_BY_DISTANCE_KEY, true); - - 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(getContext(), chartByDistance); } @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { viewBinding = ChartBinding.inflate(inflater, container, false); + viewBinding.chartView.setChartByDistance(chartByDistance); return viewBinding.getRoot(); } - @Override - public void onStart() { - super.onStart(); - - LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); - viewBinding.chartViewLayout.addView(chartView, layoutParams); - } - @Override public void onResume() { super.onResume(); @@ -178,13 +155,6 @@ public class ChartFragment extends Fragment implements TrackDataListener { sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); } - @Override - public void onStop() { - super.onStop(); - - viewBinding.chartViewLayout.removeView(chartView); - } - @Override public void onDestroyView() { super.onDestroyView(); @@ -199,78 +169,64 @@ public class ChartFragment extends Fragment implements TrackDataListener { @Override public void onTrackUpdated(Track track) { - if (isResumed()) { - if (track == null || track.getTrackStatistics() == null) { - category = ""; - return; - } + if (track == null) { + category = ""; + return; + } - category = track.getCategory(); - boolean reportSpeed = PreferencesUtils.isReportSpeed(PreferencesUtils.getSharedPreferences(getContext()), getContext(), category); - if (reportSpeed != chartView.getReportSpeed()) { - chartView.setReportSpeed(reportSpeed); - chartView.applyReportSpeed(); - } + category = track.getCategory(); + boolean reportSpeed = PreferencesUtils.isReportSpeed(PreferencesUtils.getSharedPreferences(getContext()), getContext(), category); + if (reportSpeed != viewBinding.chartView.getReportSpeed()) { + viewBinding.chartView.setReportSpeed(reportSpeed); + viewBinding.chartView.applyReportSpeed(); } } @Override public void clearTrackPoints() { - if (isResumed()) { - pendingPoints.clear(); - chartView.reset(); - runOnUiThread(() -> { - if (isResumed()) { - chartView.resetScroll(); - } - }); - } + pendingPoints.clear(); + viewBinding.chartView.reset(); + runOnUiThread(() -> { + if (isResumed()) { + viewBinding.chartView.resetScroll(); + } + }); } public void onSampledInTrackPoint(@NonNull TrackPoint trackPoint, @NonNull TrackStatistics trackStatistics, Speed smoothedSpeed, double smoothedAltitude_m) { - if (isResumed()) { - ChartPoint point = new ChartPoint(trackStatistics, trackPoint, smoothedSpeed, smoothedAltitude_m, chartByDistance, chartView.getMetricUnits()); - pendingPoints.add(point); - } + ChartPoint point = new ChartPoint(trackStatistics, trackPoint, smoothedSpeed, smoothedAltitude_m, chartByDistance, viewBinding.chartView.getMetricUnits()); + pendingPoints.add(point); } @Override public void onNewTrackPointsDone() { - if (isResumed()) { - chartView.addChartPoints(pendingPoints); - pendingPoints.clear(); - runOnUiThread(updateChart); - } + viewBinding.chartView.addChartPoints(pendingPoints); + pendingPoints.clear(); + runOnUiThread(updateChart); } @Override public void clearMarkers() { - if (isResumed()) { - chartView.clearMarker(); - } + viewBinding.chartView.clearMarker(); } @Override - public void onNewMarker(Marker marker) { - if (isResumed() && marker != null) { - chartView.addMarker(marker); - } + public void onNewMarker(@NonNull Marker marker) { + viewBinding.chartView.addMarker(marker); } @Override public void onNewMarkersDone() { - if (isResumed()) { - runOnUiThread(updateChart); - } + runOnUiThread(updateChart); } /** * Checks the chart settings. */ private void checkChartSettings() { - boolean needUpdate = chartView.applyReportSpeed(); + boolean needUpdate = viewBinding.chartView.applyReportSpeed(); if (needUpdate) { - chartView.postInvalidate(); + viewBinding.chartView.postInvalidate(); } } @@ -313,9 +269,4 @@ public class ChartFragment extends Fragment implements TrackDataListener { fragmentActivity.runOnUiThread(runnable); } } - - @VisibleForTesting - void setChartView(ChartView view) { - chartView = view; - } } diff --git a/src/main/res/layout/chart.xml b/src/main/res/layout/chart.xml index bd30d42b7..5a5f961d4 100644 --- a/src/main/res/layout/chart.xml +++ b/src/main/res/layout/chart.xml @@ -13,9 +13,8 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> - + android:layout_height="match_parent" />