adjusted distance time and markers to be horizontally consistent

formatter

initial date and time are always visible in the list while recording
This commit is contained in:
discollizard
2026-01-01 14:01:43 -03:00
parent 278f6323f1
commit 5f083de530
3 changed files with 72 additions and 57 deletions
@@ -31,7 +31,6 @@ import de.dennisguse.opentracks.util.IntentUtils;
public class TrackListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements ActionMode.Callback {
private static final String TAG = TrackListAdapter.class.getSimpleName();
private final AppCompatActivity context;
private final RecyclerView recyclerView;
@@ -193,19 +192,25 @@ public class TrackListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
viewBinding.trackListItemName.setText(tracksListItem.name());
String timeDistanceText = ListItemUtils.getTimeDistanceText(context, unitSystem, isRecordingThisTrackRecording, tracksListItem.totalTime(), tracksListItem.totalDistance(), tracksListItem.markerCount());
viewBinding.trackListItemTimeDistance.setText(timeDistanceText);
String timeText = ListItemUtils.getTimeText(context, isRecordingThisTrackRecording, tracksListItem.totalTime());
String distanceText = ListItemUtils.getDistanceText(context, unitSystem, isRecordingThisTrackRecording, tracksListItem.totalDistance());
viewBinding.trackListItemMarkerCountIcon.setVisibility(tracksListItem.markerCount() > 0 ? View.VISIBLE : View.GONE);
viewBinding.trackListItemMarkerCount.setText(tracksListItem.markerCount() > 0 ? Integer.toString(tracksListItem.markerCount()) : null);
viewBinding.trackListItemDistance.setText(distanceText);
viewBinding.trackListItemDuration.setText(timeText);
if (!recordingStatus.isRecording()) {
ListItemUtils.setDateAndTime(context, viewBinding.trackListItemDate, viewBinding.trackListItemTime, tracksListItem.startTime(), tracksListItem.zoneOffset());
if (tracksListItem.markerCount() > 0) {
viewBinding.trackListItemDistanceMarkerSeparator.setVisibility(View.VISIBLE);
viewBinding.trackListItemMarkerCountIcon.setVisibility(View.VISIBLE);
viewBinding.trackListItemMarkerCount.setText(Integer.toString(tracksListItem.markerCount()));
} else {
viewBinding.trackListItemDate.setText(null);
viewBinding.trackListItemTime.setText(null);
viewBinding.trackListItemDistanceMarkerSeparator.setVisibility(View.GONE);
viewBinding.trackListItemMarkerCountIcon.setVisibility(View.GONE);
viewBinding.trackListItemMarkerCount.setText(null);
}
ListItemUtils.setDateAndTime(context, viewBinding.trackListItemDate, viewBinding.trackListItemTime, tracksListItem.startTime(), tracksListItem.zoneOffset());
viewBinding.trackListItemActivityTypeLocalized.setText(tracksListItem.activityTypeLocalized());
viewBinding.trackListItemActivityTypeLocalized.setVisibility(TextUtils.isEmpty(tracksListItem.activityTypeLocalized()) ? View.GONE : View.VISIBLE);
@@ -17,7 +17,6 @@
package de.dennisguse.opentracks.ui.util;
import android.content.Context;
import android.text.TextUtils;
import android.widget.TextView;
import java.time.Duration;
@@ -42,50 +41,30 @@ public class ListItemUtils {
private ListItemUtils() {
}
/**
* Gets a string for share owner, total time, and total distance.
*
* @param totalTime the total time. Can be null
* @param totalDistance the total distance. Can be null
*/
private static String getTimeDistance(String totalTime, String totalDistance) {
StringBuilder builder = new StringBuilder();
if (!TextUtils.isEmpty(totalTime)) {
if (builder.length() != 0) {
builder.append(" ‧ ");
}
builder.append(totalTime);
public static String getTimeText(Context context, boolean isRecording, Duration totalTime) {
String timeText;
if (isRecording) {
timeText = context.getString(R.string.generic_recording);
} else {
timeText = StringUtils.formatElapsedTime(totalTime);
}
if (!TextUtils.isEmpty(totalDistance)) {
if (builder.length() != 0) {
builder.append(" ");
}
//TODO Use strings.xml
builder.append("(").append(totalDistance).append(")");
}
return builder.toString();
return timeText;
}
public static String getTimeDistanceText(Context context, UnitSystem unitSystem, boolean isRecording, Duration totalTime, Distance totalDistance, int markerCount) {
String timeDistanceText;
if (isRecording) {
timeDistanceText = context.getString(R.string.generic_recording);
} else {
// Match list_item_time_distance in list_item.xml
public static String getDistanceText(Context context, UnitSystem unitSystem, boolean isRecording, Distance totalDistance) {
String time = StringUtils.formatElapsedTime(totalTime);
String distance = DistanceFormatter.Builder()
StringBuilder builder = new StringBuilder();
if (!isRecording) {
String distanceText = DistanceFormatter.Builder()
.setUnit(unitSystem)
.build(context)
.formatDistance(totalDistance);
timeDistanceText = getTimeDistance(time, distance);
if (markerCount > 0) {
timeDistanceText += " ‧";
}
builder.append("(").append(distanceText).append(")");
}
return timeDistanceText;
return builder.toString();
}
public static void setDateAndTime(Context context, TextView dateView, TextView timeView, Instant time, ZoneOffset timeZone) {
+44 -13
View File
@@ -5,8 +5,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/activated_background"
android:paddingTop="8dp"
android:paddingHorizontal="8dp">
android:paddingHorizontal="8dp"
android:paddingTop="8dp">
<!-- Icon -->
<ImageView
@@ -27,8 +27,8 @@
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:singleLine="true"
app:layout_constraintStart_toEndOf="@id/track_list_item_icon"
app:layout_constraintEnd_toStartOf="@id/track_list_item_date"
app:layout_constraintStart_toEndOf="@id/track_list_item_icon"
app:layout_constraintTop_toTopOf="parent"
tools:text="Main Text" />
@@ -44,14 +44,41 @@
tools:text="2022-02-17" />
<!-- Total time and distance -->
<TextView
android:id="@+id/track_list_item_time_distance"
style="?attr/textAppearanceBodySmall"
android:layout_width="0dp"
android:layout_height="wrap_content"
<LinearLayout
android:id="@+id/track_list_item_duration_distance_wrapper"
android:layout_width="150dp"
android:layout_height="18dp"
android:orientation="horizontal"
app:layout_constraintStart_toStartOf="@id/track_list_item_name"
app:layout_constraintTop_toBottomOf="@id/track_list_item_name"
tools:text="50:43 (50.00km)" />
app:layout_constraintTop_toBottomOf="@id/track_list_item_name">
<TextView
android:id="@+id/track_list_item_duration"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="012:50:43" />
<TextView
android:id="@+id/track_list_item_distance"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="(50.00km)"
android:textAlignment="textEnd" />
</LinearLayout>
<TextView
android:id="@+id/track_list_item_distance_marker_separator"
android:layout_width="10dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text=" ‧"
android:textAlignment="center"
app:layout_constraintBottom_toBottomOf="@id/track_list_item_duration_distance_wrapper"
app:layout_constraintStart_toEndOf="@id/track_list_item_duration_distance_wrapper"
app:layout_constraintTop_toBottomOf="@id/track_list_item_name" />
<!-- Marker Count Icon -->
<ImageView
@@ -61,8 +88,8 @@
android:contentDescription="@string/image_marker_count"
android:scaleType="centerInside"
android:src="@drawable/ic_marker_show_24dp"
app:layout_constraintBottom_toBottomOf="@id/track_list_item_time_distance"
app:layout_constraintStart_toEndOf="@id/track_list_item_time_distance"
app:layout_constraintBottom_toBottomOf="@+id/track_list_item_distance_marker_separator"
app:layout_constraintStart_toEndOf="@+id/track_list_item_distance_marker_separator"
app:layout_constraintTop_toBottomOf="@id/track_list_item_name" />
<!-- Marker count -->
@@ -93,7 +120,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:barrierDirection="bottom"
app:constraint_referenced_ids="track_list_item_time_distance,track_list_item_marker_count_icon,track_list_item_marker_count,track_list_item_time" />
app:constraint_referenced_ids="track_list_item_duration_distance_wrapper,track_list_item_marker_count_icon,track_list_item_marker_count,track_list_item_time" />
<!-- Category and description -->
<TextView
@@ -129,4 +156,8 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/track_list_item_description" />
<androidx.constraintlayout.widget.Guideline
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</androidx.constraintlayout.widget.ConstraintLayout>