mirror of
https://codeberg.org/OpenTracksApp/OpenTracks.git
synced 2026-10-02 09:33:06 +02:00
Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9225d90e45 | |||
| 32dc6fef82 | |||
| 96fb65b6b0 | |||
| 936bbf9264 |
+3
-3
@@ -64,8 +64,8 @@ android {
|
|||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "de.dennisguse.opentracks"
|
applicationId "de.dennisguse.opentracks"
|
||||||
versionCode 5189
|
versionCode 5194
|
||||||
versionName "v4.3.2"
|
versionName "v4.3.3"
|
||||||
|
|
||||||
buildConfigField "String", "VERSION_NAME_FULL", "\"${getVersionName()}\""
|
buildConfigField "String", "VERSION_NAME_FULL", "\"${getVersionName()}\""
|
||||||
|
|
||||||
@@ -143,7 +143,7 @@ dependencies {
|
|||||||
androidTestImplementation 'androidx.test:rules:1.5.0'
|
androidTestImplementation 'androidx.test:rules:1.5.0'
|
||||||
androidTestImplementation 'androidx.test:runner:1.5.2'
|
androidTestImplementation 'androidx.test:runner:1.5.2'
|
||||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
|
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
|
||||||
androidTestImplementation 'org.mockito:mockito-android:5.3.0'
|
androidTestImplementation 'org.mockito:mockito-android:5.3.1'
|
||||||
|
|
||||||
androidTestUtil 'androidx.test:orchestrator:1.4.2'
|
androidTestUtil 'androidx.test:orchestrator:1.4.2'
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
v4.3.3: OpenTracks
|
||||||
|
|
||||||
|
Bugfixes:
|
||||||
|
- Hidden fields were shown (introduced in v4.2.0)
|
||||||
|
- Speed was shown instead of pace (introduced in v4.2.0)
|
||||||
@@ -52,8 +52,8 @@ public class StatisticsUtilsTest extends TestCase {
|
|||||||
recordingLayout.addField(new DataField("key5", true, true, false));
|
recordingLayout.addField(new DataField("key5", true, true, false));
|
||||||
|
|
||||||
// when
|
// when
|
||||||
RecordingLayout resultTrue = StatisticsUtils.filterVisible(recordingLayout, true);
|
RecordingLayout resultTrue = recordingLayout.toRecordingLayout(true);
|
||||||
RecordingLayout resultFalse = StatisticsUtils.filterVisible(recordingLayout, false);
|
RecordingLayout resultFalse = recordingLayout.toRecordingLayout(false);
|
||||||
|
|
||||||
// then
|
// then
|
||||||
assertEquals(resultTrue.getFields().size(), 3);
|
assertEquals(resultTrue.getFields().size(), 3);
|
||||||
|
|||||||
@@ -131,8 +131,7 @@ public class StatisticsRecordingFragment extends Fragment {
|
|||||||
|
|
||||||
int rowIndex = 0;
|
int rowIndex = 0;
|
||||||
int columnIndex = 0;
|
int columnIndex = 0;
|
||||||
for (int i = 0; i < recordingLayout.getFields().size(); i++) {
|
for (DataField dataField : recordingLayout.toRecordingLayout(true).getFields()) {
|
||||||
DataField dataField = recordingLayout.getFields().get(i);
|
|
||||||
GridLayout.LayoutParams param = new GridLayout.LayoutParams();
|
GridLayout.LayoutParams param = new GridLayout.LayoutParams();
|
||||||
param.setGravity(Gravity.FILL_HORIZONTAL);
|
param.setGravity(Gravity.FILL_HORIZONTAL);
|
||||||
param.width = 0;
|
param.width = 0;
|
||||||
|
|||||||
+2
-3
@@ -20,7 +20,6 @@ import de.dennisguse.opentracks.ui.customRecordingLayout.DataField;
|
|||||||
import de.dennisguse.opentracks.ui.customRecordingLayout.RecordingLayout;
|
import de.dennisguse.opentracks.ui.customRecordingLayout.RecordingLayout;
|
||||||
import de.dennisguse.opentracks.ui.customRecordingLayout.SettingsCustomLayoutEditAdapter;
|
import de.dennisguse.opentracks.ui.customRecordingLayout.SettingsCustomLayoutEditAdapter;
|
||||||
import de.dennisguse.opentracks.ui.util.ArrayAdapterFilterDisabled;
|
import de.dennisguse.opentracks.ui.util.ArrayAdapterFilterDisabled;
|
||||||
import de.dennisguse.opentracks.util.StatisticsUtils;
|
|
||||||
|
|
||||||
public class SettingsCustomLayoutEditActivity extends AbstractActivity implements SettingsCustomLayoutEditAdapter.SettingsCustomLayoutItemClickListener {
|
public class SettingsCustomLayoutEditActivity extends AbstractActivity implements SettingsCustomLayoutEditAdapter.SettingsCustomLayoutItemClickListener {
|
||||||
|
|
||||||
@@ -41,7 +40,7 @@ public class SettingsCustomLayoutEditActivity extends AbstractActivity implement
|
|||||||
// Recycler view with visible stats.
|
// Recycler view with visible stats.
|
||||||
RecordingLayout recordingLayout = getIntent().getParcelableExtra(EXTRA_LAYOUT);
|
RecordingLayout recordingLayout = getIntent().getParcelableExtra(EXTRA_LAYOUT);
|
||||||
profile = recordingLayout.getName();
|
profile = recordingLayout.getName();
|
||||||
recordingLayoutFieldsVisible = StatisticsUtils.filterVisible(recordingLayout, true);
|
recordingLayoutFieldsVisible = recordingLayout.toRecordingLayout(true);
|
||||||
adapterFieldsVisible = new SettingsCustomLayoutEditAdapter(this, this, recordingLayoutFieldsVisible);
|
adapterFieldsVisible = new SettingsCustomLayoutEditAdapter(this, this, recordingLayoutFieldsVisible);
|
||||||
|
|
||||||
numColumns = recordingLayout.getColumnsPerRow();
|
numColumns = recordingLayout.getColumnsPerRow();
|
||||||
@@ -90,7 +89,7 @@ public class SettingsCustomLayoutEditActivity extends AbstractActivity implement
|
|||||||
viewBinding.rowsOptions.setText(rowsOptionAdapter.getItem(numColumns - 1).toString(), false);
|
viewBinding.rowsOptions.setText(rowsOptionAdapter.getItem(numColumns - 1).toString(), false);
|
||||||
|
|
||||||
// Recycler view with not visible stats.
|
// Recycler view with not visible stats.
|
||||||
recordingLayoutFieldsHidden = StatisticsUtils.filterVisible(recordingLayout, false);
|
recordingLayoutFieldsHidden = recordingLayout.toRecordingLayout(false);
|
||||||
adapterFieldsHidden = new SettingsCustomLayoutEditAdapter(this, this, recordingLayoutFieldsHidden);
|
adapterFieldsHidden = new SettingsCustomLayoutEditAdapter(this, this, recordingLayoutFieldsHidden);
|
||||||
RecyclerView recyclerViewNotVisible = viewBinding.recyclerViewNotVisible;
|
RecyclerView recyclerViewNotVisible = viewBinding.recyclerViewNotVisible;
|
||||||
recyclerViewNotVisible.setLayoutManager(new LinearLayoutManager(this));
|
recyclerViewNotVisible.setLayoutManager(new LinearLayoutManager(this));
|
||||||
|
|||||||
@@ -66,6 +66,12 @@ public class RecordingLayout implements Parcelable {
|
|||||||
return new ArrayList<>(dataFields);
|
return new ArrayList<>(dataFields);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public RecordingLayout toRecordingLayout(boolean visibility) {
|
||||||
|
RecordingLayout result = new RecordingLayout(this.getName());
|
||||||
|
result.addFields(dataFields.stream().filter(f -> f.isVisible() == visibility).collect(Collectors.toList()));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
public void moveField(int from, int to) {
|
public void moveField(int from, int to) {
|
||||||
DataField dataFieldToMove = dataFields.remove(from);
|
DataField dataFieldToMove = dataFields.remove(from);
|
||||||
dataFields.add(to, dataFieldToMove);
|
dataFields.add(to, dataFieldToMove);
|
||||||
|
|||||||
@@ -4,11 +4,8 @@ import android.content.Context;
|
|||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import de.dennisguse.opentracks.R;
|
import de.dennisguse.opentracks.R;
|
||||||
import de.dennisguse.opentracks.settings.PreferencesUtils;
|
import de.dennisguse.opentracks.settings.PreferencesUtils;
|
||||||
import de.dennisguse.opentracks.ui.customRecordingLayout.RecordingLayout;
|
|
||||||
|
|
||||||
public class StatisticsUtils {
|
public class StatisticsUtils {
|
||||||
|
|
||||||
@@ -24,11 +21,4 @@ public class StatisticsUtils {
|
|||||||
return context.getString(R.string.stats_empty_value_integer);
|
return context.getString(R.string.stats_empty_value_integer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated //Add to Layout?
|
|
||||||
public static RecordingLayout filterVisible(RecordingLayout recordingLayout, boolean visible) {
|
|
||||||
RecordingLayout result = new RecordingLayout(recordingLayout.getName());
|
|
||||||
result.addFields(recordingLayout.getFields().stream().filter(f -> f.isVisible() == visible).collect(Collectors.toList()));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,15 +65,20 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder<St
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class SpeedOrPace extends GenericStatisticsViewHolder {
|
public abstract static class SpeedOrPace extends GenericStatisticsViewHolder {
|
||||||
|
|
||||||
|
private final boolean reportSpeed;
|
||||||
|
|
||||||
|
public SpeedOrPace(boolean reportSpeed) {
|
||||||
|
this.reportSpeed = reportSpeed;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onChanged(UnitSystem unitSystem, RecordingData data) {
|
public void onChanged(UnitSystem unitSystem, RecordingData data) {
|
||||||
// TODO Pace wont work for now
|
|
||||||
boolean reportSpeed = true;
|
|
||||||
SpeedFormatter localSpeedFormatter = SpeedFormatter.Builder()
|
SpeedFormatter localSpeedFormatter = SpeedFormatter.Builder()
|
||||||
.setUnit(unitSystem)
|
.setUnit(unitSystem)
|
||||||
.setReportSpeedOrPace(reportSpeed).build(getContext());
|
.setReportSpeedOrPace(reportSpeed)
|
||||||
|
.build(getContext());
|
||||||
|
|
||||||
Pair<String, String> valueAndUnit;
|
Pair<String, String> valueAndUnit;
|
||||||
|
|
||||||
@@ -85,7 +90,9 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder<St
|
|||||||
} else {
|
} else {
|
||||||
Speed speed = latestTrackPoint != null && latestTrackPoint.hasSpeed() ? latestTrackPoint.getSpeed() : null;
|
Speed speed = latestTrackPoint != null && latestTrackPoint.hasSpeed() ? latestTrackPoint.getSpeed() : null;
|
||||||
valueAndUnit = localSpeedFormatter.getSpeedParts(speed);
|
valueAndUnit = localSpeedFormatter.getSpeedParts(speed);
|
||||||
getBinding().statsDescriptionMain.setText(getContext().getString(R.string.description_speed_source_gps));
|
|
||||||
|
String title = reportSpeed ? getContext().getString(R.string.stats_speed) : getContext().getString(R.string.stats_pace);
|
||||||
|
getBinding().statsDescriptionMain.setText(title);
|
||||||
}
|
}
|
||||||
|
|
||||||
getBinding().statsValue.setText(valueAndUnit.first);
|
getBinding().statsValue.setText(valueAndUnit.first);
|
||||||
@@ -93,6 +100,20 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder<St
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class SpeedVH extends SpeedOrPace {
|
||||||
|
|
||||||
|
public SpeedVH() {
|
||||||
|
super(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class PaceVH extends SpeedOrPace {
|
||||||
|
|
||||||
|
public PaceVH() {
|
||||||
|
super(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static class AverageMovingSpeed extends GenericStatisticsViewHolder {
|
public static class AverageMovingSpeed extends GenericStatisticsViewHolder {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ public class Mapping {
|
|||||||
|
|
||||||
m.put(context.getString(R.string.stats_custom_layout_distance_key), GenericStatisticsViewHolder.Distance::new);
|
m.put(context.getString(R.string.stats_custom_layout_distance_key), GenericStatisticsViewHolder.Distance::new);
|
||||||
|
|
||||||
m.put(context.getString(R.string.stats_custom_layout_speed_key), GenericStatisticsViewHolder.SpeedOrPace::new);
|
m.put(context.getString(R.string.stats_custom_layout_speed_key), GenericStatisticsViewHolder.SpeedVH::new);
|
||||||
m.put(context.getString(R.string.stats_custom_layout_pace_key), GenericStatisticsViewHolder.SpeedOrPace::new);
|
m.put(context.getString(R.string.stats_custom_layout_pace_key), GenericStatisticsViewHolder.PaceVH::new);
|
||||||
m.put(context.getString(R.string.stats_custom_layout_average_moving_speed_key), GenericStatisticsViewHolder.AverageMovingSpeed::new);
|
m.put(context.getString(R.string.stats_custom_layout_average_moving_speed_key), GenericStatisticsViewHolder.AverageMovingSpeed::new);
|
||||||
m.put(context.getString(R.string.stats_custom_layout_average_speed_key), GenericStatisticsViewHolder.AverageSpeed::new);
|
m.put(context.getString(R.string.stats_custom_layout_average_speed_key), GenericStatisticsViewHolder.AverageSpeed::new);
|
||||||
m.put(context.getString(R.string.stats_custom_layout_max_speed_key), GenericStatisticsViewHolder.MaxSpeed::new);
|
m.put(context.getString(R.string.stats_custom_layout_max_speed_key), GenericStatisticsViewHolder.MaxSpeed::new);
|
||||||
|
|||||||
Reference in New Issue
Block a user