Show chart for distance as well as time.

Also removed configuration option.
This commit is contained in:
Dennis Guse
2019-11-24 19:26:09 +01:00
parent d6c2e78993
commit b06da89654
10 changed files with 78 additions and 47 deletions
@@ -46,8 +46,10 @@ public class ChartFragmentTest {
@Before @Before
public void setUp() { public void setUp() {
chartFragment = new ChartFragment(); boolean chartByDistance = false;
chartFragment.setChartView(new ChartView(ApplicationProvider.getApplicationContext())); chartFragment = new ChartFragment(chartByDistance) {
};
chartFragment.setChartView(new ChartView(ApplicationProvider.getApplicationContext(), chartByDistance));
chartFragment.setTripStatisticsUpdater(TrackStubUtils.INITIAL_TIME); chartFragment.setTripStatisticsUpdater(TrackStubUtils.INITIAL_TIME);
} }
@@ -107,7 +107,7 @@ public class ChartView extends View {
private int effectiveWidth = 0; private int effectiveWidth = 0;
private int effectiveHeight = 0; private int effectiveHeight = 0;
private boolean chartByDistance = true; private boolean chartByDistance;
private boolean metricUnits = true; private boolean metricUnits = true;
private boolean reportSpeed = true; private boolean reportSpeed = true;
private boolean showPointer = false; private boolean showPointer = false;
@@ -117,8 +117,9 @@ public class ChartView extends View {
* *
* @param context the context * @param context the context
*/ */
public ChartView(Context context) { public ChartView(Context context, boolean chartByDistance) {
super(context); super(context);
this.chartByDistance = chartByDistance;
series[ELEVATION_SERIES] = new ChartValueSeries(context, series[ELEVATION_SERIES] = new ChartValueSeries(context,
Integer.MIN_VALUE, Integer.MIN_VALUE,
@@ -45,7 +45,8 @@ import de.dennisguse.opentracks.content.TrackDataHub;
import de.dennisguse.opentracks.content.Waypoint; import de.dennisguse.opentracks.content.Waypoint;
import de.dennisguse.opentracks.content.Waypoint.WaypointType; import de.dennisguse.opentracks.content.Waypoint.WaypointType;
import de.dennisguse.opentracks.content.WaypointCreationRequest; 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.ChooseActivityTypeDialogFragment;
import de.dennisguse.opentracks.fragments.ConfirmDeleteDialogFragment; import de.dennisguse.opentracks.fragments.ConfirmDeleteDialogFragment;
import de.dennisguse.opentracks.fragments.StatsFragment; 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)); TabSpec statsTabSpec = tabHost.newTabSpec(StatsFragment.STATS_FRAGMENT_TAG).setIndicator(getString(R.string.track_detail_stats_tab));
tabsAdapter.addTab(statsTabSpec, StatsFragment.class, null); tabsAdapter.addTab(statsTabSpec, StatsFragment.class, null);
TabSpec chartTabSpec = tabHost.newTabSpec(ChartFragment.CHART_FRAGMENT_TAG).setIndicator(getString(R.string.track_detail_chart_tab)); TabSpec chartTimeTabSpec = tabHost.newTabSpec(ChartTimeFragment.CHART_FRAGMENT_TAG).setIndicator(getString(R.string.settings_chart_by_time));
tabsAdapter.addTab(chartTabSpec, ChartFragment.class, null); 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) { if (savedInstanceState != null) {
tabHost.setCurrentTabByTag(savedInstanceState.getString(CURRENT_TAB_TAG_KEY)); tabHost.setCurrentTabByTag(savedInstanceState.getString(CURRENT_TAB_TAG_KEY));
@@ -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);
}
}
@@ -25,6 +25,7 @@ import android.view.ViewGroup.LayoutParams;
import android.widget.ZoomControls; import android.widget.ZoomControls;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
@@ -54,9 +55,9 @@ import de.dennisguse.opentracks.util.UnitConversions;
* @author Sandor Dornbush * @author Sandor Dornbush
* @author Rodrigo Damazio * @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<double[]> pendingPoints = new ArrayList<>(); private final ArrayList<double[]> pendingPoints = new ArrayList<>();
@@ -71,7 +72,7 @@ public class ChartFragment extends Fragment implements TrackDataListener {
private int recordingDistanceInterval; private int recordingDistanceInterval;
// Modes of operation // Modes of operation
private boolean chartByDistance = true; private boolean chartByDistance;
private boolean[] chartShow = new boolean[]{true, true, true, true, true, true}; private boolean[] chartShow = new boolean[]{true, true, true, true, true, true};
// UI elements // UI elements
@@ -95,16 +96,18 @@ public class ChartFragment extends Fragment implements TrackDataListener {
} }
}; };
public ChartFragment(boolean chartByDistance) {
this.chartByDistance = chartByDistance;
}
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
recordingDistanceInterval = PreferencesUtils.getRecordingDistanceIntervalDefault(getContext()); 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.
* 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);
*/
chartView = new ChartView(getActivity());
} }
@Override @Override
@@ -129,7 +132,7 @@ public class ChartFragment extends Fragment implements TrackDataListener {
@Override @Override
public void onStart() { public void onStart() {
super.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); LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
layout.addView(chartView, layoutParams); layout.addView(chartView, layoutParams);
} }
@@ -151,10 +154,24 @@ public class ChartFragment extends Fragment implements TrackDataListener {
@Override @Override
public void onStop() { public void onStop() {
super.onStop(); super.onStop();
ViewGroup layout = getActivity().findViewById(R.id.chart_view_layout); ViewGroup layout = getView().findViewById(R.id.chart_view_layout);
layout.removeView(chartView); 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 @Override
public void onTrackUpdated(Track track) { public void onTrackUpdated(Track track) {
if (isResumed()) { if (isResumed()) {
@@ -304,12 +321,6 @@ public class ChartFragment extends Fragment implements TrackDataListener {
*/ */
private void checkChartSettings() { private void checkChartSettings() {
boolean needUpdate = false; boolean needUpdate = false;
if (chartByDistance != PreferencesUtils.isChartByDistance(getActivity())) {
chartByDistance = !chartByDistance;
chartView.setChartByDistance(chartByDistance);
reloadTrackDataHub();
needUpdate = true;
}
if (setSeriesEnabled(ChartView.ELEVATION_SERIES, PreferencesUtils.shouldChartShowElevation(getActivity()))) { if (setSeriesEnabled(ChartView.ELEVATION_SERIES, PreferencesUtils.shouldChartShowElevation(getActivity()))) {
needUpdate = true; needUpdate = true;
} }
@@ -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);
}
}
@@ -259,11 +259,6 @@ public class PreferencesUtils {
return PreferencesUtils.getString(context, R.string.settings_sensor_bluetooth_heart_rate_key, PreferencesUtils.BLUETOOTH_SENSOR_DEFAULT); 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) { public static boolean shouldChartShowCadence(Context context) {
final boolean CHART_SHOW_CADENCE = context.getResources().getBoolean(R.bool.chart_show_cadence_default); 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); return PreferencesUtils.getBoolean(context, R.string.chart_show_cadence_key, CHART_SHOW_CADENCE);
-13
View File
@@ -114,19 +114,6 @@
<item>@string/auto_resume_track_timeout_always</item> <item>@string/auto_resume_track_timeout_always</item>
</string-array> </string-array>
<string name="chart_x_axis_key" translatable="false">chartXAxis</string>
<string name="chart_x_axis_default" translatable="false">@string/chart_x_axis_distance</string>
<string-array name="chart_x_axis_values">
<item>@string/chart_x_axis_distance</item>
<item>@string/chart_x_axis_time</item>
</string-array>
<string name="chart_x_axis_time" translatable="false">TIME</string>
<string name="chart_x_axis_distance" translatable="false">DISTANCE</string>
<string-array name="chart_x_axis_options">
<item>@string/settings_chart_by_distance</item>
<item>@string/settings_chart_by_time</item>
</string-array>
<string name="split_frequency_key" translatable="false">splitFrequency</string> <string name="split_frequency_key" translatable="false">splitFrequency</string>
<string name="split_frequency_default" translatable="false">@string/frequency_off</string> <string name="split_frequency_default" translatable="false">@string/frequency_off</string>
<string name="voice_frequency_key" translatable="false">voiceFrequency</string> <string name="voice_frequency_key" translatable="false">voiceFrequency</string>
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- This file contains old and now unused settings. -->
<!-- It is recommended not to reuse the keys. -->
<string name="chart_x_axis_key" translatable="false">chartXAxis</string>
<string name="chart_x_axis_default" translatable="false">@string/chart_x_axis_distance</string>
<string-array name="chart_x_axis_values">
<item>@string/chart_x_axis_distance</item>
<item>@string/chart_x_axis_time</item>
</string-array>
<string name="chart_x_axis_time" translatable="false">TIME</string>
<string name="chart_x_axis_distance" translatable="false">DISTANCE</string>
<string-array name="chart_x_axis_options">
<item>@string/settings_chart_by_distance</item>
<item>@string/settings_chart_by_time</item>
</string-array>
</resources>
-7
View File
@@ -52,13 +52,6 @@ limitations under the License.
</PreferenceCategory> </PreferenceCategory>
<PreferenceCategory android:title="@string/track_detail_chart_tab"> <PreferenceCategory android:title="@string/track_detail_chart_tab">
<ListPreference
android:defaultValue="@string/chart_x_axis_default"
android:entries="@array/chart_x_axis_options"
android:entryValues="@array/chart_x_axis_values"
android:key="@string/chart_x_axis_key"
android:title="@string/settings_chart_x_axis"
app:useSimpleSummaryProvider="true" />
<CheckBoxPreference <CheckBoxPreference
android:defaultValue="true" android:defaultValue="true"
android:key="@string/chart_show_elevation_key" android:key="@string/chart_show_elevation_key"