StatisticsCustomLayoutEditAdapter: use StatisticsViewHolder (with demo data).

Part of #1118.
This commit is contained in:
Dennis Guse
2022-11-15 22:56:54 +01:00
parent dbac595754
commit d3cf2957cc
6 changed files with 50 additions and 104 deletions
@@ -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);