forked from upstream-mirrors/OpenTracks
Use MarkerIterator for MarkerDetailActivity.
This commit is contained in:
@@ -435,7 +435,7 @@ public class ContentProviderUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//TODO Use MarkerIterator instead
|
//TODO Use MarkerIterator instead
|
||||||
public Cursor getMarkerCursor(@NonNull Track.Id trackId) {
|
Cursor getMarkerCursor(@NonNull Track.Id trackId) {
|
||||||
return getMarkerCursor(trackId, -1);
|
return getMarkerCursor(trackId, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -455,7 +455,19 @@ public class ContentProviderUtils {
|
|||||||
return getMarkerCursor(null, selection, selectionArgs, MarkerColumns._ID, maxCount);
|
return getMarkerCursor(null, selection, selectionArgs, MarkerColumns._ID, maxCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO Merge with updateMarker
|
/**
|
||||||
|
* @param updateMarker the marker with updated data.
|
||||||
|
* @return true if successful.
|
||||||
|
*/
|
||||||
|
public boolean updateMarker(Context context, Marker updateMarker) {
|
||||||
|
Marker savedMarker = getMarker(updateMarker.getId());
|
||||||
|
if (!updateMarker.hasPhoto()) {
|
||||||
|
deleteMarkerPhoto(context, savedMarker);
|
||||||
|
}
|
||||||
|
int rows = contentResolver.update(MarkerColumns.CONTENT_URI, createContentValues(updateMarker), MarkerColumns._ID + "=?", new String[]{Long.toString(updateMarker.getId().id())});
|
||||||
|
return rows == 1;
|
||||||
|
}
|
||||||
|
|
||||||
public Marker.Id insertMarker(@NonNull Marker marker) {
|
public Marker.Id insertMarker(@NonNull Marker marker) {
|
||||||
marker.setId(null);
|
marker.setId(null);
|
||||||
Uri uri = contentResolver.insert(MarkerColumns.CONTENT_URI, createContentValues(marker));
|
Uri uri = contentResolver.insert(MarkerColumns.CONTENT_URI, createContentValues(marker));
|
||||||
@@ -476,19 +488,6 @@ public class ContentProviderUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param updateMarker the marker with updated data.
|
|
||||||
* @return true if successful.
|
|
||||||
*/
|
|
||||||
public boolean updateMarker(Context context, Marker updateMarker) {
|
|
||||||
Marker savedMarker = getMarker(updateMarker.getId());
|
|
||||||
if (!updateMarker.hasPhoto()) {
|
|
||||||
deleteMarkerPhoto(context, savedMarker);
|
|
||||||
}
|
|
||||||
int rows = contentResolver.update(MarkerColumns.CONTENT_URI, createContentValues(updateMarker), MarkerColumns._ID + "=?", new String[]{Long.toString(updateMarker.getId().id())});
|
|
||||||
return rows == 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
ContentValues createContentValues(@NonNull Marker marker) {
|
ContentValues createContentValues(@NonNull Marker marker) {
|
||||||
ContentValues values = new ContentValues();
|
ContentValues values = new ContentValues();
|
||||||
|
|
||||||
|
|||||||
@@ -47,6 +47,11 @@ class MarkerIterator extends AutoCloseableIterator<Marker> {
|
|||||||
return cursor.getPosition();
|
return cursor.getPosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean moveToPosition(int position) {
|
||||||
|
return cursor.moveToPosition(position);
|
||||||
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
public int getCount() {
|
public int getCount() {
|
||||||
return cursor.getCount();
|
return cursor.getCount();
|
||||||
|
|||||||
@@ -47,6 +47,11 @@ class TrackPointIterator extends AutoCloseableIterator<TrackPoint> {
|
|||||||
return cursor.getPosition();
|
return cursor.getPosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean moveToPosition(int position) {
|
||||||
|
return cursor.moveToPosition(position);
|
||||||
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
public int getCount() {
|
public int getCount() {
|
||||||
return cursor.getCount();
|
return cursor.getCount();
|
||||||
|
|||||||
@@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
package de.dennisguse.opentracks.ui.markers;
|
package de.dennisguse.opentracks.ui.markers;
|
||||||
|
|
||||||
import android.database.Cursor;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
@@ -35,6 +34,7 @@ import de.dennisguse.opentracks.data.models.Marker;
|
|||||||
import de.dennisguse.opentracks.data.tables.MarkerColumns;
|
import de.dennisguse.opentracks.data.tables.MarkerColumns;
|
||||||
import de.dennisguse.opentracks.databinding.MarkerDetailActivityBinding;
|
import de.dennisguse.opentracks.databinding.MarkerDetailActivityBinding;
|
||||||
import de.dennisguse.opentracks.ui.markers.DeleteMarkerDialogFragment.DeleteMarkerCaller;
|
import de.dennisguse.opentracks.ui.markers.DeleteMarkerDialogFragment.DeleteMarkerCaller;
|
||||||
|
import de.dennisguse.opentracks.util.AutoCloseableIterator;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An activity to display marker detail info.
|
* An activity to display marker detail info.
|
||||||
@@ -51,7 +51,7 @@ public class MarkerDetailActivity extends AbstractActivity implements DeleteMark
|
|||||||
|
|
||||||
private MarkerDetailActivityBinding viewBinding;
|
private MarkerDetailActivityBinding viewBinding;
|
||||||
|
|
||||||
private Cursor cursor;
|
private AutoCloseableIterator<Marker> markerAutoCloseableIterator;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle bundle) {
|
protected void onCreate(Bundle bundle) {
|
||||||
@@ -67,23 +67,19 @@ public class MarkerDetailActivity extends AbstractActivity implements DeleteMark
|
|||||||
ContentProviderUtils contentProviderUtils = new ContentProviderUtils(this);
|
ContentProviderUtils contentProviderUtils = new ContentProviderUtils(this);
|
||||||
Marker marker = contentProviderUtils.getMarker(markerId);
|
Marker marker = contentProviderUtils.getMarker(markerId);
|
||||||
|
|
||||||
//TODO only load used data: ID + name
|
markerAutoCloseableIterator = contentProviderUtils.getMarkerIterator(marker.getTrackId());
|
||||||
cursor = contentProviderUtils.getMarkerCursor(marker.getTrackId());
|
if (markerAutoCloseableIterator == null) {
|
||||||
if (cursor == null) {
|
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
int markerIndex = -1;
|
int markerIndex = -1;
|
||||||
if (cursor != null && cursor.moveToFirst()) {
|
while (markerAutoCloseableIterator.hasNext()) {
|
||||||
while (markerIndex == -1 && cursor.moveToNext()) {
|
if (markerId.equals(markerAutoCloseableIterator.next().getId())) {
|
||||||
Marker.Id currentId = new Marker.Id(cursor.getLong(cursor.getColumnIndexOrThrow(MarkerColumns._ID)));
|
markerIndex = markerAutoCloseableIterator.getPosition();
|
||||||
if (markerId.equals(currentId)) {
|
break;
|
||||||
markerIndex = cursor.getPosition();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
final MarkerDetailPagerAdapter markerAdapter = new MarkerDetailPagerAdapter(this);
|
final MarkerDetailPagerAdapter markerAdapter = new MarkerDetailPagerAdapter(this);
|
||||||
viewBinding.makerDetailActivityViewPager.setAdapter(markerAdapter);
|
viewBinding.makerDetailActivityViewPager.setAdapter(markerAdapter);
|
||||||
viewBinding.makerDetailActivityViewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
|
viewBinding.makerDetailActivityViewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
|
||||||
@@ -109,8 +105,8 @@ public class MarkerDetailActivity extends AbstractActivity implements DeleteMark
|
|||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
viewBinding = null;
|
viewBinding = null;
|
||||||
|
|
||||||
if (cursor != null) cursor.close();
|
if (markerAutoCloseableIterator != null) markerAutoCloseableIterator.close();
|
||||||
cursor = null;
|
markerAutoCloseableIterator = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -127,19 +123,19 @@ public class MarkerDetailActivity extends AbstractActivity implements DeleteMark
|
|||||||
@Override
|
@Override
|
||||||
@NonNull
|
@NonNull
|
||||||
public Fragment createFragment(int position) {
|
public Fragment createFragment(int position) {
|
||||||
cursor.moveToPosition(position);
|
markerAutoCloseableIterator.moveToPosition(position);
|
||||||
return MarkerDetailFragment.newInstance(new Marker.Id(cursor.getLong(cursor.getColumnIndexOrThrow(MarkerColumns._ID))));
|
return MarkerDetailFragment.newInstance(markerAutoCloseableIterator.next().getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getItemCount() {
|
public int getItemCount() {
|
||||||
return cursor.getCount();
|
return markerAutoCloseableIterator.getCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public CharSequence getPageTitle(int position) {
|
public CharSequence getPageTitle(int position) {
|
||||||
cursor.moveToPosition(position);
|
markerAutoCloseableIterator.moveToPosition(position);
|
||||||
return getString(R.string.marker_detail_title, position + 1, getItemCount(), cursor.getString(cursor.getColumnIndexOrThrow(MarkerColumns.NAME)));
|
return getString(R.string.marker_detail_title, position + 1, getItemCount(), markerAutoCloseableIterator.next().getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -11,5 +11,7 @@ public abstract class AutoCloseableIterator<T> implements Iterator<T>, AutoClose
|
|||||||
|
|
||||||
public abstract int getPosition();
|
public abstract int getPosition();
|
||||||
|
|
||||||
|
public abstract boolean moveToPosition(int position);
|
||||||
|
|
||||||
public abstract int getCount();
|
public abstract int getCount();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user