forked from upstream-mirrors/OpenTracks
Cleanup: use Position instead of Android's location.
This commit is contained in:
+5
-15
@@ -27,7 +27,6 @@ import android.content.ContentUris;
|
|||||||
import android.content.ContentValues;
|
import android.content.ContentValues;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.location.Location;
|
|
||||||
import android.util.Pair;
|
import android.util.Pair;
|
||||||
|
|
||||||
import androidx.test.core.app.ApplicationProvider;
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
@@ -861,24 +860,15 @@ public class CustomContentProviderUtilsTest {
|
|||||||
TrackPoint trackPoint = trackPointIterator.next();
|
TrackPoint trackPoint = trackPointIterator.next();
|
||||||
assertEquals(startTrackPointId.id() + i, trackPoint.getId().id());
|
assertEquals(startTrackPointId.id() + i, trackPoint.getId().id());
|
||||||
|
|
||||||
checkLocation(i, trackPoint.getLocation());
|
Position position = trackPoint.getPosition();
|
||||||
|
assertEquals(TestDataUtil.INITIAL_LATITUDE + i / 10000.0, position.latitude(), 0.01);
|
||||||
|
assertEquals(TestDataUtil.INITIAL_LONGITUDE - i / 10000.0, position.longitude(), 0.01);
|
||||||
|
assertEquals(i / 100.0, position.horizontalAccuracy().distance_m(), 0.01);
|
||||||
|
assertEquals(i * TestDataUtil.ALTITUDE_INTERVAL, position.altitude().toM(), 0.01);
|
||||||
}
|
}
|
||||||
assertFalse(trackPointIterator.hasNext());
|
assertFalse(trackPointIterator.hasNext());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks the value of a location.
|
|
||||||
*
|
|
||||||
* @param i the index of this location which created in the method {@link TestDataUtil#createTrack(Track.Id, int)}
|
|
||||||
* @param location the location to be checked
|
|
||||||
*/
|
|
||||||
private void checkLocation(int i, Location location) {
|
|
||||||
assertEquals(TestDataUtil.INITIAL_LATITUDE + (double) i / 10000.0, location.getLatitude(), 0.01);
|
|
||||||
assertEquals(TestDataUtil.INITIAL_LONGITUDE - (double) i / 10000.0, location.getLongitude(), 0.01);
|
|
||||||
assertEquals((float) i / 100.0f, location.getAccuracy(), 0.01);
|
|
||||||
assertEquals(i * TestDataUtil.ALTITUDE_INTERVAL, location.getAltitude(), 0.01);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testFormatIdListForUri() {
|
public void testFormatIdListForUri() {
|
||||||
assertEquals("", ContentProviderUtils.formatIdListForUri());
|
assertEquals("", ContentProviderUtils.formatIdListForUri());
|
||||||
|
|||||||
@@ -278,7 +278,7 @@ public class TrackRecordingActivity extends AbstractActivity implements ChooseAc
|
|||||||
Intent intent = IntentUtils
|
Intent intent = IntentUtils
|
||||||
.newIntent(this, MarkerEditActivity.class)
|
.newIntent(this, MarkerEditActivity.class)
|
||||||
.putExtra(MarkerEditActivity.EXTRA_TRACK_ID, trackId)
|
.putExtra(MarkerEditActivity.EXTRA_TRACK_ID, trackId)
|
||||||
.putExtra(MarkerEditActivity.EXTRA_LOCATION, trackPoint.getLocation());
|
.putExtra(MarkerEditActivity.EXTRA_LOCATION, trackPoint.getPosition().toLocation());
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import androidx.annotation.Nullable;
|
|||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
|
|
||||||
//TODO Use everywhere instead of android.location.Location.
|
|
||||||
public record Position(
|
public record Position(
|
||||||
@Nullable Instant time,
|
@Nullable Instant time,
|
||||||
@Nullable Double latitude,
|
@Nullable Double latitude,
|
||||||
|
|||||||
@@ -15,7 +15,6 @@
|
|||||||
*/
|
*/
|
||||||
package de.dennisguse.opentracks.data.models;
|
package de.dennisguse.opentracks.data.models;
|
||||||
|
|
||||||
import android.location.Location;
|
|
||||||
import android.os.Parcel;
|
import android.os.Parcel;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
|
|
||||||
@@ -157,12 +156,6 @@ public class TrackPoint {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
@NonNull
|
|
||||||
public Location getLocation() {
|
|
||||||
return getPosition().toLocation();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean hasAltitudeGainLoss() {
|
public boolean hasAltitudeGainLoss() {
|
||||||
return altitudeGainLoss != null;
|
return altitudeGainLoss != null;
|
||||||
}
|
}
|
||||||
@@ -268,34 +261,18 @@ public class TrackPoint {
|
|||||||
throw new RuntimeException("Cannot compute distance.");
|
throw new RuntimeException("Cannot compute distance.");
|
||||||
}
|
}
|
||||||
|
|
||||||
return Distance.of(getLocation().distanceTo(previous.getLocation()));
|
return Distance.of(getPosition().toLocation().distanceTo(previous.getPosition().toLocation()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean fulfillsAccuracy(Distance thresholdHorizontalAccuracy) {
|
public boolean fulfillsAccuracy(Distance thresholdHorizontalAccuracy) {
|
||||||
return position.fulfillsAccuracy(thresholdHorizontalAccuracy);
|
return position.fulfillsAccuracy(thresholdHorizontalAccuracy);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Optional<Float> bearingTo(@NonNull Position dest) {
|
|
||||||
if (!dest.hasLocation() || !hasLocation()) {
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
return bearingTo(dest.toLocation());
|
|
||||||
}
|
|
||||||
|
|
||||||
public Optional<Float> bearingTo(@NonNull TrackPoint dest) {
|
public Optional<Float> bearingTo(@NonNull TrackPoint dest) {
|
||||||
if (!dest.hasLocation() || !hasLocation()) {
|
if (!dest.hasLocation() || !hasLocation()) {
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
return bearingTo(dest.getLocation());
|
return Optional.of(getPosition().toLocation().bearingTo(dest.getPosition().toLocation()));
|
||||||
}
|
|
||||||
|
|
||||||
//TODO Bearing requires a location; what do we do if we don't have any?
|
|
||||||
@Deprecated
|
|
||||||
public Optional<Float> bearingTo(@NonNull Location dest) {
|
|
||||||
if (!hasLocation()) {
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
return Optional.of(getLocation().bearingTo(dest));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sensor data
|
// Sensor data
|
||||||
|
|||||||
+1
-1
@@ -28,7 +28,7 @@ public class AltitudeCorrectionManager {
|
|||||||
// AltitudeConverterCompat uses internally a RoomDatabase that cannot be access from main thread and thus fails on version <= 34.
|
// AltitudeConverterCompat uses internally a RoomDatabase that cannot be access from main thread and thus fails on version <= 34.
|
||||||
Thread t = new Thread(() -> {
|
Thread t = new Thread(() -> {
|
||||||
try {
|
try {
|
||||||
Location loc = trackPoint.getLocation();
|
Location loc = trackPoint.getPosition().toLocation();
|
||||||
AltitudeConverterCompat.addMslAltitudeToLocation(context, loc);
|
AltitudeConverterCompat.addMslAltitudeToLocation(context, loc);
|
||||||
trackPoint.setAltitude(Altitude.EGM2008.of(LocationCompat.getMslAltitudeMeters(loc)));
|
trackPoint.setAltitude(Altitude.EGM2008.of(LocationCompat.getMslAltitudeMeters(loc)));
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
|||||||
@@ -37,7 +37,6 @@ import androidx.activity.result.ActivityResultLauncher;
|
|||||||
import androidx.activity.result.PickVisualMediaRequest;
|
import androidx.activity.result.PickVisualMediaRequest;
|
||||||
import androidx.activity.result.contract.ActivityResultContracts;
|
import androidx.activity.result.contract.ActivityResultContracts;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.lifecycle.LiveData;
|
|
||||||
import androidx.lifecycle.ViewModelProvider;
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
|
|
||||||
import java.io.FileDescriptor;
|
import java.io.FileDescriptor;
|
||||||
@@ -61,13 +60,14 @@ public class MarkerEditActivity extends AbstractActivity {
|
|||||||
|
|
||||||
public static final String EXTRA_TRACK_ID = "track_id";
|
public static final String EXTRA_TRACK_ID = "track_id";
|
||||||
public static final String EXTRA_MARKER_ID = "marker_id";
|
public static final String EXTRA_MARKER_ID = "marker_id";
|
||||||
|
//TODO Check if we can send a position instead.
|
||||||
public static final String EXTRA_LOCATION = "location";
|
public static final String EXTRA_LOCATION = "location";
|
||||||
|
|
||||||
private static final String CAMERA_PHOTO_URI_KEY = "camera_photo_uri_key";
|
private static final String CAMERA_PHOTO_URI_KEY = "camera_photo_uri_key";
|
||||||
|
|
||||||
private static final String TAG = MarkerEditActivity.class.getSimpleName();
|
private static final String TAG = MarkerEditActivity.class.getSimpleName();
|
||||||
private Track.Id trackId;
|
private Track.Id trackId;
|
||||||
private Location location;
|
private Position position;
|
||||||
private Marker.Id markerId;
|
private Marker.Id markerId;
|
||||||
private Marker marker;
|
private Marker marker;
|
||||||
|
|
||||||
@@ -97,7 +97,7 @@ public class MarkerEditActivity extends AbstractActivity {
|
|||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
trackId = getIntent().getParcelableExtra(EXTRA_TRACK_ID);
|
trackId = getIntent().getParcelableExtra(EXTRA_TRACK_ID);
|
||||||
location = getIntent().getParcelableExtra(EXTRA_LOCATION);
|
Location location = getIntent().getParcelableExtra(EXTRA_LOCATION);
|
||||||
markerId = getIntent().getParcelableExtra(EXTRA_MARKER_ID);
|
markerId = getIntent().getParcelableExtra(EXTRA_MARKER_ID);
|
||||||
if ((trackId == null || location == null) && markerId == null) {
|
if ((trackId == null || location == null) && markerId == null) {
|
||||||
throw new IllegalStateException("TrackId and Location must be provided or an existing markerId");
|
throw new IllegalStateException("TrackId and Location must be provided or an existing markerId");
|
||||||
@@ -139,8 +139,7 @@ public class MarkerEditActivity extends AbstractActivity {
|
|||||||
new ActivityResultContracts.StartActivityForResult(),
|
new ActivityResultContracts.StartActivityForResult(),
|
||||||
result -> {
|
result -> {
|
||||||
switch (result.getResultCode()) {
|
switch (result.getResultCode()) {
|
||||||
case RESULT_CANCELED ->
|
case RESULT_CANCELED -> Toast.makeText(this, R.string.marker_add_photo_canceled, Toast.LENGTH_LONG).show();
|
||||||
Toast.makeText(this, R.string.marker_add_photo_canceled, Toast.LENGTH_LONG).show();
|
|
||||||
case RESULT_OK -> viewModel.onNewCameraPhoto(cameraPhotoUri,
|
case RESULT_OK -> viewModel.onNewCameraPhoto(cameraPhotoUri,
|
||||||
viewBinding.markerEditName.getText().toString(),
|
viewBinding.markerEditName.getText().toString(),
|
||||||
viewBinding.markerEditMarkerType.getText().toString(),
|
viewBinding.markerEditMarkerType.getText().toString(),
|
||||||
@@ -162,7 +161,9 @@ public class MarkerEditActivity extends AbstractActivity {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (isNewMarker) {
|
if (isNewMarker) {
|
||||||
createNewMarker().observe(this, this::loadMarkerData);
|
TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, Position.of(location, Instant.now()));
|
||||||
|
viewModel.createNewMarker(trackId, trackPoint)
|
||||||
|
.observe(this, this::loadMarkerData);
|
||||||
} else {
|
} else {
|
||||||
loadMarkerData(markerId);
|
loadMarkerData(markerId);
|
||||||
}
|
}
|
||||||
@@ -170,11 +171,6 @@ public class MarkerEditActivity extends AbstractActivity {
|
|||||||
setSupportActionBar(viewBinding.bottomAppBarLayout.bottomAppBar);
|
setSupportActionBar(viewBinding.bottomAppBarLayout.bottomAppBar);
|
||||||
}
|
}
|
||||||
|
|
||||||
private LiveData<Marker> createNewMarker() {
|
|
||||||
TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, Position.of(location, Instant.now()));
|
|
||||||
return viewModel.createNewMarker(trackId, trackPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void loadMarkerData(Marker.Id markerId) {
|
private void loadMarkerData(Marker.Id markerId) {
|
||||||
viewModel.getMarkerData(markerId).observe(this, this::loadMarkerData);
|
viewModel.getMarkerData(markerId).observe(this, this::loadMarkerData);
|
||||||
}
|
}
|
||||||
@@ -198,7 +194,7 @@ public class MarkerEditActivity extends AbstractActivity {
|
|||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
|
|
||||||
trackId = null;
|
trackId = null;
|
||||||
location = null;
|
position = null;
|
||||||
markerId = null;
|
markerId = null;
|
||||||
viewBinding = null;
|
viewBinding = null;
|
||||||
viewModel = null;
|
viewModel = null;
|
||||||
|
|||||||
Reference in New Issue
Block a user