From b584a95c9cdfe98a363b7d809654e650da25635a Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Tue, 2 Dec 2025 17:53:15 +0100 Subject: [PATCH] Bugfix: crash when opening Marker Detail. Introduced in 5b4b54694c56ed88c0a29b537749335e54791547 --- .../de/dennisguse/opentracks/data/MarkerIterator.java | 8 +++++++- .../opentracks/data/TrackPointIterator.java | 8 +++++++- .../opentracks/ui/markers/MarkerDetailActivity.java | 5 ++--- .../opentracks/util/AutoCloseableIterator.java | 11 +++++++++++ 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/data/MarkerIterator.java b/src/main/java/de/dennisguse/opentracks/data/MarkerIterator.java index 6a5449527..da2f68ca8 100644 --- a/src/main/java/de/dennisguse/opentracks/data/MarkerIterator.java +++ b/src/main/java/de/dennisguse/opentracks/data/MarkerIterator.java @@ -24,6 +24,12 @@ class MarkerIterator extends AutoCloseableIterator { cursor = contentProviderUtils.getMarkerCursor(trackId, maxCount); } + @NonNull + @Override + public Marker get() { + return contentProviderUtils.createMarker(cursor); + } + @Override public boolean hasNext() { if (cursor == null) { @@ -38,7 +44,7 @@ class MarkerIterator extends AutoCloseableIterator { if (cursor == null || !cursor.moveToNext()) { throw new NoSuchElementException(); } - return contentProviderUtils.createMarker(cursor); + return get(); } @Override diff --git a/src/main/java/de/dennisguse/opentracks/data/TrackPointIterator.java b/src/main/java/de/dennisguse/opentracks/data/TrackPointIterator.java index eac0ca919..7f41085fa 100644 --- a/src/main/java/de/dennisguse/opentracks/data/TrackPointIterator.java +++ b/src/main/java/de/dennisguse/opentracks/data/TrackPointIterator.java @@ -33,13 +33,19 @@ class TrackPointIterator extends AutoCloseableIterator { return !cursor.isLast() && !cursor.isAfterLast(); } + @Override + @NonNull + public TrackPoint get() { + return ContentProviderUtils.fillTrackPoint(cursor, indexes); + } + @Override @NonNull public TrackPoint next() { if (cursor == null || !cursor.moveToNext()) { throw new NoSuchElementException(); } - return ContentProviderUtils.fillTrackPoint(cursor, indexes); + return get(); } @Override diff --git a/src/main/java/de/dennisguse/opentracks/ui/markers/MarkerDetailActivity.java b/src/main/java/de/dennisguse/opentracks/ui/markers/MarkerDetailActivity.java index 0490de04a..8f24d61df 100644 --- a/src/main/java/de/dennisguse/opentracks/ui/markers/MarkerDetailActivity.java +++ b/src/main/java/de/dennisguse/opentracks/ui/markers/MarkerDetailActivity.java @@ -123,7 +123,7 @@ public class MarkerDetailActivity extends AbstractActivity implements DeleteMark @NonNull public Fragment createFragment(int position) { markerAutoCloseableIterator.moveToPosition(position); - return MarkerDetailFragment.newInstance(markerAutoCloseableIterator.next().id()); + return MarkerDetailFragment.newInstance(markerAutoCloseableIterator.get(position).id()); } @Override @@ -133,8 +133,7 @@ public class MarkerDetailActivity extends AbstractActivity implements DeleteMark @Nullable public CharSequence getPageTitle(int position) { - markerAutoCloseableIterator.moveToPosition(position); - return getString(R.string.marker_detail_title, position + 1, getItemCount(), markerAutoCloseableIterator.next().name()); + return getString(R.string.marker_detail_title, position + 1, getItemCount(), markerAutoCloseableIterator.get().name()); } } } \ No newline at end of file diff --git a/src/main/java/de/dennisguse/opentracks/util/AutoCloseableIterator.java b/src/main/java/de/dennisguse/opentracks/util/AutoCloseableIterator.java index 7605c789f..1abc11ab9 100644 --- a/src/main/java/de/dennisguse/opentracks/util/AutoCloseableIterator.java +++ b/src/main/java/de/dennisguse/opentracks/util/AutoCloseableIterator.java @@ -1,5 +1,7 @@ package de.dennisguse.opentracks.util; +import androidx.annotation.NonNull; + import java.util.Iterator; public abstract class AutoCloseableIterator implements Iterator, AutoCloseable { @@ -13,5 +15,14 @@ public abstract class AutoCloseableIterator implements Iterator, AutoClose public abstract boolean moveToPosition(int position); + @NonNull + public abstract T get(); + + @NonNull + public T get(int position) { + moveToPosition(position); + return get(); + } + public abstract int getCount(); }