forked from upstream-mirrors/OpenTracks
StatisticsCustomLayoutEditAdapter: use StatisticsViewHolder (with demo data).
Part of #1118.
This commit is contained in:
+47
-9
@@ -1,6 +1,7 @@
|
||||
package de.dennisguse.opentracks.ui.customRecordingLayout;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
@@ -9,18 +10,54 @@ import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.content.res.AppCompatResources;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.time.Instant;
|
||||
import java.time.ZoneOffset;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
import de.dennisguse.opentracks.R;
|
||||
import de.dennisguse.opentracks.data.models.Altitude;
|
||||
import de.dennisguse.opentracks.data.models.Distance;
|
||||
import de.dennisguse.opentracks.data.models.Speed;
|
||||
import de.dennisguse.opentracks.data.models.Track;
|
||||
import de.dennisguse.opentracks.data.models.TrackPoint;
|
||||
import de.dennisguse.opentracks.databinding.CustomStatsItemBinding;
|
||||
import de.dennisguse.opentracks.util.StatisticsUtils;
|
||||
import de.dennisguse.opentracks.services.RecordingData;
|
||||
import de.dennisguse.opentracks.settings.UnitSystem;
|
||||
import de.dennisguse.opentracks.stats.TrackStatistics;
|
||||
import de.dennisguse.opentracks.viewmodels.Mapping;
|
||||
import de.dennisguse.opentracks.viewmodels.StatisticViewHolder;
|
||||
|
||||
public class SettingsCustomLayoutEditAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||
|
||||
private static final String TAG = SettingsCustomLayoutEditAdapter.class.getSimpleName();
|
||||
|
||||
private static final RecordingData demoData;
|
||||
|
||||
static {
|
||||
TrackStatistics trackStatistics = new TrackStatistics();
|
||||
trackStatistics.setStartTime(Instant.ofEpochMilli(0));
|
||||
trackStatistics.setMovingTime(Duration.ofMinutes(0));
|
||||
trackStatistics.setTotalTime(Duration.ofMinutes(0));
|
||||
|
||||
trackStatistics.setTotalDistance(Distance.of(0));
|
||||
|
||||
trackStatistics.setTotalAltitudeGain(0f);
|
||||
trackStatistics.setTotalAltitudeLoss(0f);
|
||||
Track track = new Track(ZoneOffset.UTC);
|
||||
track.setTrackStatistics(trackStatistics);
|
||||
|
||||
TrackPoint lastTrackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, Instant.ofEpochMilli(0));
|
||||
lastTrackPoint.setLatitude(0);
|
||||
lastTrackPoint.setLongitude(0);
|
||||
lastTrackPoint.setAltitude(Altitude.EGM2008.of(0));
|
||||
lastTrackPoint.setSpeed(Speed.of(0));
|
||||
|
||||
demoData = new RecordingData(track, lastTrackPoint, null);
|
||||
}
|
||||
|
||||
private Layout layout;
|
||||
private final Context context;
|
||||
private final SettingsCustomLayoutItemClickListener itemClickListener;
|
||||
@@ -39,7 +76,6 @@ public class SettingsCustomLayoutEditAdapter extends RecyclerView.Adapter<Recycl
|
||||
@Override
|
||||
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
CustomStatsItemBinding binding = CustomStatsItemBinding.inflate(LayoutInflater.from(context), parent, false);
|
||||
//TODO CustomStatsItemBinding or rather use mapping.get().call() directly
|
||||
return new SettingsCustomLayoutEditAdapter.ViewHolder(binding);
|
||||
}
|
||||
|
||||
@@ -49,15 +85,17 @@ public class SettingsCustomLayoutEditAdapter extends RecyclerView.Adapter<Recycl
|
||||
DataField field = layout.getFields().get(position);
|
||||
viewHolder.itemView.setTag(field.getKey());
|
||||
try {
|
||||
viewHolder.viewBinding.statsLayout.statsDescriptionMain.setText(mapping.get(field.getKey()).call().getTitleId());
|
||||
StatisticViewHolder<?> m = mapping.get(field.getKey()).call();
|
||||
m.initialize(context, LayoutInflater.from(context));
|
||||
m.configureUI(field);
|
||||
m.onChanged(UnitSystem.METRIC, demoData);
|
||||
|
||||
viewHolder.viewBinding.statsLayout.removeAllViews(); //TODO this is not really performant
|
||||
viewHolder.viewBinding.statsLayout.addView(m.getView());
|
||||
} catch (Exception e) {
|
||||
//Ignored.
|
||||
Log.e(TAG, "Couldn't to instantiate UI for DataField with key " + field.getKey() + " " + e.getMessage());
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
viewHolder.viewBinding.statsLayout.statsValue.setText(StatisticsUtils.emptyValue(context, field.getKey()));
|
||||
|
||||
viewHolder.viewBinding.statsLayout.statsDescriptionMain.setTextAppearance(context, field.isVisible() ? (field.isPrimary() ? R.style.TextAppearance_OpenTracks_PrimaryHeader : R.style.TextAppearance_OpenTracks_SecondaryHeader) : R.style.TextAppearance_OpenTracks_HiddenHeader);
|
||||
viewHolder.viewBinding.statsLayout.statsValue.setTextAppearance(context, field.isVisible() ? (field.isPrimary() ? R.style.TextAppearance_OpenTracks_PrimaryValue : R.style.TextAppearance_OpenTracks_SecondaryValue) : R.style.TextAppearance_OpenTracks_HiddenValue);
|
||||
viewHolder.viewBinding.statsIconShowStatus.setVisibility(field.isVisible() ? View.GONE : View.VISIBLE);
|
||||
viewHolder.viewBinding.statsIconShowStatus.setImageDrawable(AppCompatResources.getDrawable(context, R.drawable.ic_baseline_visibility_off_24));
|
||||
viewHolder.viewBinding.statsIvDragIndicator.setVisibility(field.isVisible() ? View.VISIBLE : View.GONE);
|
||||
|
||||
@@ -12,6 +12,7 @@ import de.dennisguse.opentracks.ui.customRecordingLayout.Layout;
|
||||
|
||||
public class StatisticsUtils {
|
||||
|
||||
@Deprecated
|
||||
public static String emptyValue(@NonNull Context context, @NonNull String statTitle) {
|
||||
if (PreferencesUtils.isKey(R.string.stats_custom_layout_total_time_key, statTitle) || PreferencesUtils.isKey(R.string.stats_custom_layout_moving_time_key, statTitle) || PreferencesUtils.isKey(R.string.stats_custom_layout_pace_key, statTitle) || PreferencesUtils.isKey(R.string.stats_custom_layout_average_moving_pace_key, statTitle) || PreferencesUtils.isKey(R.string.stats_custom_layout_average_pace_key, statTitle) || PreferencesUtils.isKey(R.string.stats_custom_layout_fastest_pace_key, statTitle) || PreferencesUtils.isKey(R.string.stats_custom_layout_clock_key, statTitle)) {
|
||||
return context.getString(R.string.stats_empty_value_time);
|
||||
@@ -24,6 +25,7 @@ public class StatisticsUtils {
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated //Add to Layout?
|
||||
public static Layout filterVisible(Layout layout, boolean visible) {
|
||||
Layout result = new Layout(layout.getName());
|
||||
result.addFields(layout.getFields().stream().filter(f -> f.isVisible() == visible).collect(Collectors.toList()));
|
||||
|
||||
@@ -21,11 +21,6 @@ public class ClockViewHolder extends StatisticViewHolder<StatsClockItemBinding>
|
||||
getBinding().statsClock.setTextAppearance(getContext(), dataField.isPrimary() ? R.style.TextAppearance_OpenTracks_PrimaryValue : R.style.TextAppearance_OpenTracks_SecondaryValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTitleId() {
|
||||
return R.string.stats_clock;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChanged(UnitSystem unitSystem, RecordingData data) {
|
||||
}
|
||||
|
||||
@@ -30,11 +30,6 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder<St
|
||||
|
||||
public static class Distance extends GenericStatisticsViewHolder {
|
||||
|
||||
@Override
|
||||
public int getTitleId() {
|
||||
return R.string.stats_distance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChanged(UnitSystem unitSystem, RecordingData data) {
|
||||
Pair<String, String> valueAndUnit = DistanceFormatter.Builder()
|
||||
@@ -49,11 +44,6 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder<St
|
||||
|
||||
public static class TotalTime extends GenericStatisticsViewHolder {
|
||||
|
||||
@Override
|
||||
public int getTitleId() {
|
||||
return R.string.stats_total_time;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChanged(UnitSystem unitSystem, RecordingData data) {
|
||||
Pair<String, String> valueAndUnit = new Pair<>(StringUtils.formatElapsedTime(data.getTrackStatistics().getTotalTime()), null);
|
||||
@@ -66,11 +56,6 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder<St
|
||||
|
||||
public static class MovingTime extends GenericStatisticsViewHolder {
|
||||
|
||||
@Override
|
||||
public int getTitleId() {
|
||||
return R.string.stats_moving_time;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChanged(UnitSystem unitSystem, RecordingData data) {
|
||||
String value = StringUtils.formatElapsedTime(data.getTrackStatistics().getMovingTime());
|
||||
@@ -82,11 +67,6 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder<St
|
||||
|
||||
public static class SpeedOrPace extends GenericStatisticsViewHolder {
|
||||
|
||||
@Override
|
||||
public int getTitleId() {
|
||||
return R.string.stats_speed;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChanged(UnitSystem unitSystem, RecordingData data) {
|
||||
// TODO Pace wont work for now
|
||||
@@ -115,11 +95,6 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder<St
|
||||
|
||||
public static class AverageMovingSpeed extends GenericStatisticsViewHolder {
|
||||
|
||||
@Override
|
||||
public int getTitleId() {
|
||||
return R.string.stats_average_moving_speed;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChanged(UnitSystem unitSystem, RecordingData data) {
|
||||
SpeedFormatter speedFormatterSpeed = SpeedFormatter.Builder()
|
||||
@@ -137,11 +112,6 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder<St
|
||||
|
||||
public static class AverageSpeed extends GenericStatisticsViewHolder {
|
||||
|
||||
@Override
|
||||
public int getTitleId() {
|
||||
return R.string.stats_average_speed;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChanged(UnitSystem unitSystem, RecordingData data) {
|
||||
SpeedFormatter speedFormatterSpeed = SpeedFormatter.Builder()
|
||||
@@ -159,11 +129,6 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder<St
|
||||
|
||||
public static class MaxSpeed extends GenericStatisticsViewHolder {
|
||||
|
||||
@Override
|
||||
public int getTitleId() {
|
||||
return R.string.stats_max_speed;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChanged(UnitSystem unitSystem, RecordingData data) {
|
||||
SpeedFormatter speedFormatterSpeed = SpeedFormatter.Builder()
|
||||
@@ -181,11 +146,6 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder<St
|
||||
|
||||
public static class AverageMovingPace extends GenericStatisticsViewHolder {
|
||||
|
||||
@Override
|
||||
public int getTitleId() {
|
||||
return R.string.stats_average_moving_pace;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChanged(UnitSystem unitSystem, RecordingData data) {
|
||||
SpeedFormatter speedFormatterSpeed = SpeedFormatter.Builder()
|
||||
@@ -203,11 +163,6 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder<St
|
||||
|
||||
public static class AveragePace extends GenericStatisticsViewHolder {
|
||||
|
||||
@Override
|
||||
public int getTitleId() {
|
||||
return R.string.stats_average_pace;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChanged(UnitSystem unitSystem, RecordingData data) {
|
||||
SpeedFormatter speedFormatterSpeed = SpeedFormatter.Builder()
|
||||
@@ -225,11 +180,6 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder<St
|
||||
|
||||
public static class FastestPace extends GenericStatisticsViewHolder {
|
||||
|
||||
@Override
|
||||
public int getTitleId() {
|
||||
return R.string.stats_fastest_pace;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChanged(UnitSystem unitSystem, RecordingData data) {
|
||||
SpeedFormatter speedFormatterSpeed = SpeedFormatter.Builder()
|
||||
@@ -247,11 +197,6 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder<St
|
||||
|
||||
public static class Altitude extends GenericStatisticsViewHolder {
|
||||
|
||||
@Override
|
||||
public int getTitleId() {
|
||||
return R.string.stats_altitude;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChanged(UnitSystem unitSystem, RecordingData data) {
|
||||
TrackPoint latestTrackPoint = data.getLatestTrackPoint();
|
||||
@@ -268,11 +213,6 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder<St
|
||||
|
||||
public static class Gain extends GenericStatisticsViewHolder {
|
||||
|
||||
@Override
|
||||
public int getTitleId() {
|
||||
return R.string.stats_gain;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChanged(UnitSystem unitSystem, RecordingData data) {
|
||||
|
||||
@@ -286,11 +226,6 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder<St
|
||||
|
||||
public static class Loss extends GenericStatisticsViewHolder {
|
||||
|
||||
@Override
|
||||
public int getTitleId() {
|
||||
return R.string.stats_loss;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChanged(UnitSystem unitSystem, RecordingData data) {
|
||||
|
||||
@@ -304,11 +239,6 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder<St
|
||||
|
||||
public static class Coordinates extends GenericStatisticsViewHolder {
|
||||
|
||||
@Override
|
||||
public int getTitleId() {
|
||||
return R.string.stats_coordinates;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChanged(UnitSystem unitSystem, RecordingData data) {
|
||||
TrackPoint latestTrackPoint = data.getLatestTrackPoint();
|
||||
@@ -326,11 +256,6 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder<St
|
||||
|
||||
public static class SensorHeartRate extends GenericStatisticsViewHolder {
|
||||
|
||||
@Override
|
||||
public int getTitleId() {
|
||||
return R.string.stats_sensors_heart_rate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChanged(UnitSystem unitSystem, RecordingData data) {
|
||||
SensorDataSet sensorDataSet = data.getSensorDataSet();
|
||||
@@ -353,11 +278,6 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder<St
|
||||
|
||||
public static class SensorCadence extends GenericStatisticsViewHolder {
|
||||
|
||||
@Override
|
||||
public int getTitleId() {
|
||||
return R.string.stats_sensors_cadence;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChanged(UnitSystem unitSystem, RecordingData data) {
|
||||
SensorDataSet sensorDataSet = data.getSensorDataSet();
|
||||
@@ -380,11 +300,6 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder<St
|
||||
|
||||
public static class SensorPower extends GenericStatisticsViewHolder {
|
||||
|
||||
@Override
|
||||
public int getTitleId() {
|
||||
return R.string.stats_sensors_power;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChanged(UnitSystem unitSystem, RecordingData data) {
|
||||
SensorDataSet sensorDataSet = data.getSensorDataSet();
|
||||
|
||||
@@ -25,9 +25,6 @@ public abstract class StatisticViewHolder<T extends ViewBinding> {
|
||||
|
||||
public abstract void configureUI(DataField dataField);
|
||||
|
||||
@Deprecated
|
||||
public abstract int getTitleId();
|
||||
|
||||
public abstract void onChanged(UnitSystem unitSystem, RecordingData data);
|
||||
|
||||
public View getView() {
|
||||
|
||||
Reference in New Issue
Block a user