forked from upstream-mirrors/OpenTracks
Show chart for distance as well as time.
Also removed configuration option.
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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>
|
||||||
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user