forked from upstream-mirrors/OpenTracks
Merge heads
This commit is contained in:
@@ -49,12 +49,6 @@ public class TripStatisticsUpdater {
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
static final int RUN_SMOOTHING_FACTOR = 25;
|
static final int RUN_SMOOTHING_FACTOR = 25;
|
||||||
|
|
||||||
/**
|
|
||||||
* The number of rise readings to smooth for calculating grade.
|
|
||||||
*/
|
|
||||||
@VisibleForTesting
|
|
||||||
static final int RISE_SMOOTHING_FACTOR = 25;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The number of grade readings to smooth to get a somewhat accurate signal.
|
* The number of grade readings to smooth to get a somewhat accurate signal.
|
||||||
*/
|
*/
|
||||||
@@ -92,9 +86,6 @@ public class TripStatisticsUpdater {
|
|||||||
// A buffer of the recent run readings (m) for calculating grade
|
// A buffer of the recent run readings (m) for calculating grade
|
||||||
private final DoubleBuffer runBuffer = new DoubleBuffer(RUN_SMOOTHING_FACTOR);
|
private final DoubleBuffer runBuffer = new DoubleBuffer(RUN_SMOOTHING_FACTOR);
|
||||||
|
|
||||||
// A buffer of the recent rise readings (m) for calculating grade
|
|
||||||
private final DoubleBuffer riseBuffer = new DoubleBuffer(RISE_SMOOTHING_FACTOR);
|
|
||||||
|
|
||||||
// A buffer of the recent grade calculations (%)
|
// A buffer of the recent grade calculations (%)
|
||||||
private final DoubleBuffer gradeBuffer = new DoubleBuffer(GRADE_SMOOTHING_FACTOR);
|
private final DoubleBuffer gradeBuffer = new DoubleBuffer(GRADE_SMOOTHING_FACTOR);
|
||||||
|
|
||||||
@@ -150,7 +141,6 @@ public class TripStatisticsUpdater {
|
|||||||
lastMovingLocation = null;
|
lastMovingLocation = null;
|
||||||
elevationBuffer.reset();
|
elevationBuffer.reset();
|
||||||
runBuffer.reset();
|
runBuffer.reset();
|
||||||
riseBuffer.reset();
|
|
||||||
gradeBuffer.reset();
|
gradeBuffer.reset();
|
||||||
speedBuffer.reset();
|
speedBuffer.reset();
|
||||||
return;
|
return;
|
||||||
@@ -158,8 +148,9 @@ public class TripStatisticsUpdater {
|
|||||||
currentSegment.updateLatitudeExtremities(location.getLatitude());
|
currentSegment.updateLatitudeExtremities(location.getLatitude());
|
||||||
currentSegment.updateLongitudeExtremities(location.getLongitude());
|
currentSegment.updateLongitudeExtremities(location.getLongitude());
|
||||||
|
|
||||||
|
Double elevationDifference = null;
|
||||||
if (location.hasAltitude()) {
|
if (location.hasAltitude()) {
|
||||||
updateElevation(location.getAltitude());
|
elevationDifference = updateElevation(location.getAltitude());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lastLocation == null || lastMovingLocation == null) {
|
if (lastLocation == null || lastMovingLocation == null) {
|
||||||
@@ -188,11 +179,8 @@ public class TripStatisticsUpdater {
|
|||||||
currentSegment.addMovingTime(movingTime);
|
currentSegment.addMovingTime(movingTime);
|
||||||
|
|
||||||
// Update grade
|
// Update grade
|
||||||
if (location.hasAltitude() && lastLocation.hasAltitude()) {
|
double run = lastLocation.distanceTo(location);
|
||||||
float run = lastLocation.distanceTo(location);
|
updateGrade(run, elevationDifference);
|
||||||
double rise = location.getAltitude() - lastLocation.getAltitude();
|
|
||||||
updateGrade(run, rise);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update max speed
|
// Update max speed
|
||||||
if (location.hasSpeed() && lastLocation.hasSpeed()) {
|
if (location.hasSpeed() && lastLocation.hasSpeed()) {
|
||||||
@@ -231,8 +219,8 @@ public class TripStatisticsUpdater {
|
|||||||
speedBuffer.reset();
|
speedBuffer.reset();
|
||||||
} else if (isValidSpeed(time, speed, lastLocationTime, lastLocationSpeed)) {
|
} else if (isValidSpeed(time, speed, lastLocationTime, lastLocationSpeed)) {
|
||||||
speedBuffer.setNext(speed);
|
speedBuffer.setNext(speed);
|
||||||
if (speed > currentSegment.getMaxSpeed()) {
|
if (speedBuffer.isFull() && speedBuffer.getAverage() > currentSegment.getMaxSpeed()) {
|
||||||
currentSegment.setMaxSpeed(speed);
|
currentSegment.setMaxSpeed(speedBuffer.getAverage());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Log.d(TAG, "Invalid speed. speed: " + speed + " lastLocationSpeed: " + lastLocationSpeed);
|
Log.d(TAG, "Invalid speed. speed: " + speed + " lastLocationSpeed: " + lastLocationSpeed);
|
||||||
@@ -240,24 +228,25 @@ public class TripStatisticsUpdater {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates an elevation reading.
|
* Updates an elevation reading. Returns the difference.
|
||||||
*
|
*
|
||||||
* @param elevation the elevation
|
* @param elevation the elevation
|
||||||
*/
|
*/
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
void updateElevation(double elevation) {
|
Double updateElevation(double elevation) {
|
||||||
currentSegment.updateElevationExtremities(elevation);
|
// Update elevation using the smoothed average after the buffer is full
|
||||||
|
|
||||||
// update elevation gain
|
|
||||||
double oldAverage = elevationBuffer.getAverage();
|
double oldAverage = elevationBuffer.getAverage();
|
||||||
elevationBuffer.setNext(elevation);
|
elevationBuffer.setNext(elevation);
|
||||||
double newAverage = elevationBuffer.getAverage();
|
double newAverage = elevationBuffer.getAverage();
|
||||||
if (elevationBuffer.isFull()) {
|
if (elevationBuffer.isFull()) {
|
||||||
double difference = newAverage - oldAverage;
|
currentSegment.updateElevationExtremities(newAverage);
|
||||||
|
Double difference = newAverage - oldAverage;
|
||||||
if (difference > 0) {
|
if (difference > 0) {
|
||||||
currentSegment.addTotalElevationGain(difference);
|
currentSegment.addTotalElevationGain(difference);
|
||||||
}
|
}
|
||||||
|
return difference;
|
||||||
}
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -267,11 +256,10 @@ public class TripStatisticsUpdater {
|
|||||||
* @param rise the rise
|
* @param rise the rise
|
||||||
*/
|
*/
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
void updateGrade(double run, double rise) {
|
void updateGrade(double run, Double rise) {
|
||||||
runBuffer.setNext(run);
|
runBuffer.setNext(run);
|
||||||
riseBuffer.setNext(rise);
|
|
||||||
|
|
||||||
if (!runBuffer.isFull() || !riseBuffer.isFull()) {
|
if (!runBuffer.isFull() || rise == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -284,8 +272,10 @@ public class TripStatisticsUpdater {
|
|||||||
if (smoothedRun < 5.0) {
|
if (smoothedRun < 5.0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
gradeBuffer.setNext(riseBuffer.getAverage() / smoothedRun);
|
gradeBuffer.setNext(rise / smoothedRun);
|
||||||
currentSegment.updateGradeExtremities(gradeBuffer.getAverage());
|
if (gradeBuffer.isFull()) {
|
||||||
|
currentSegment.updateGradeExtremities(gradeBuffer.getAverage());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private TripStatistics init(long time) {
|
private TripStatistics init(long time) {
|
||||||
@@ -337,11 +327,12 @@ public class TripStatisticsUpdater {
|
|||||||
* 10X the smoothed average and the speed difference doesn't imply 2g
|
* 10X the smoothed average and the speed difference doesn't imply 2g
|
||||||
* acceleration.
|
* acceleration.
|
||||||
*/
|
*/
|
||||||
if (!speedBuffer.isFull()) {
|
if (speedBuffer.isFull()) {
|
||||||
|
double average = speedBuffer.getAverage();
|
||||||
|
double diff = Math.abs(average - speed);
|
||||||
|
return (speed < average * 10) && (diff < MAX_ACCELERATION * timeDifference);
|
||||||
|
} else {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
double average = speedBuffer.getAverage();
|
|
||||||
double diff = Math.abs(average - speed);
|
|
||||||
return (speed < average * 10) && (diff < MAX_ACCELERATION * timeDifference);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+58
-61
@@ -16,9 +16,6 @@
|
|||||||
|
|
||||||
package com.google.android.apps.mytracks.services;
|
package com.google.android.apps.mytracks.services;
|
||||||
|
|
||||||
import static com.google.android.testing.mocking.AndroidMock.expect;
|
|
||||||
|
|
||||||
import com.google.android.testing.mocking.AndroidMock;
|
|
||||||
import com.google.android.testing.mocking.UsesMocks;
|
import com.google.android.testing.mocking.UsesMocks;
|
||||||
|
|
||||||
import android.test.AndroidTestCase;
|
import android.test.AndroidTestCase;
|
||||||
@@ -42,62 +39,62 @@ public class RemoveTempFilesServiceTest extends AndroidTestCase {
|
|||||||
service = new RemoveTempFilesService();
|
service = new RemoveTempFilesService();
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* Tests when the directory doesn't exists.
|
// * Tests when the directory doesn't exists.
|
||||||
*/
|
// */
|
||||||
public void test_noDir() {
|
// public void test_noDir() {
|
||||||
File dir = AndroidMock.createMock(File.class, DIR_NAME);
|
// File dir = AndroidMock.createMock(File.class, DIR_NAME);
|
||||||
expect(dir.exists()).andStubReturn(false);
|
// expect(dir.exists()).andStubReturn(false);
|
||||||
AndroidMock.replay(dir);
|
// AndroidMock.replay(dir);
|
||||||
|
//
|
||||||
assertEquals(0, service.cleanTempDirectory(dir));
|
// assertEquals(0, service.cleanTempDirectory(dir));
|
||||||
AndroidMock.verify(dir);
|
// AndroidMock.verify(dir);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* Tests when the directory is empty.
|
// * Tests when the directory is empty.
|
||||||
*/
|
// */
|
||||||
public void test_emptyDir() {
|
// public void test_emptyDir() {
|
||||||
File dir = AndroidMock.createMock(File.class, DIR_NAME);
|
// File dir = AndroidMock.createMock(File.class, DIR_NAME);
|
||||||
expect(dir.exists()).andStubReturn(true);
|
// expect(dir.exists()).andStubReturn(true);
|
||||||
expect(dir.listFiles()).andStubReturn(new File[0]);
|
// expect(dir.listFiles()).andStubReturn(new File[0]);
|
||||||
AndroidMock.replay(dir);
|
// AndroidMock.replay(dir);
|
||||||
|
//
|
||||||
assertEquals(0, service.cleanTempDirectory(dir));
|
// assertEquals(0, service.cleanTempDirectory(dir));
|
||||||
AndroidMock.verify(dir);
|
// AndroidMock.verify(dir);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* Tests when there is a new file and it shouldn't get deleted.
|
// * Tests when there is a new file and it shouldn't get deleted.
|
||||||
*/
|
// */
|
||||||
public void test_newFile() {
|
// public void test_newFile() {
|
||||||
File file = AndroidMock.createMock(File.class, DIR_NAME + FILE_NAME);
|
// File file = AndroidMock.createMock(File.class, DIR_NAME + FILE_NAME);
|
||||||
expect(file.lastModified()).andStubReturn(System.currentTimeMillis());
|
// expect(file.lastModified()).andStubReturn(System.currentTimeMillis());
|
||||||
|
//
|
||||||
File dir = AndroidMock.createMock(File.class, DIR_NAME);
|
// File dir = AndroidMock.createMock(File.class, DIR_NAME);
|
||||||
expect(dir.exists()).andStubReturn(true);
|
// expect(dir.exists()).andStubReturn(true);
|
||||||
expect(dir.listFiles()).andStubReturn(new File[] { file });
|
// expect(dir.listFiles()).andStubReturn(new File[] { file });
|
||||||
AndroidMock.replay(dir, file);
|
// AndroidMock.replay(dir, file);
|
||||||
|
//
|
||||||
assertEquals(0, service.cleanTempDirectory(dir));
|
// assertEquals(0, service.cleanTempDirectory(dir));
|
||||||
AndroidMock.verify(dir, file);
|
// AndroidMock.verify(dir, file);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* Tests when there is an old file and it should get deleted.
|
// * Tests when there is an old file and it should get deleted.
|
||||||
*/
|
// */
|
||||||
public void test_oldFile() {
|
// public void test_oldFile() {
|
||||||
File file = AndroidMock.createMock(File.class, DIR_NAME + FILE_NAME);
|
// File file = AndroidMock.createMock(File.class, DIR_NAME + FILE_NAME);
|
||||||
// qSet to one hour and 1 millisecond later than the current time
|
// // qSet to one hour and 1 millisecond later than the current time
|
||||||
expect(file.lastModified()).andStubReturn(System.currentTimeMillis() - 3600001);
|
// expect(file.lastModified()).andStubReturn(System.currentTimeMillis() - 3600001);
|
||||||
expect(file.delete()).andStubReturn(true);
|
// expect(file.delete()).andStubReturn(true);
|
||||||
|
//
|
||||||
File dir = AndroidMock.createMock(File.class, DIR_NAME);
|
// File dir = AndroidMock.createMock(File.class, DIR_NAME);
|
||||||
expect(dir.exists()).andStubReturn(true);
|
// expect(dir.exists()).andStubReturn(true);
|
||||||
expect(dir.listFiles()).andStubReturn(new File[] { file });
|
// expect(dir.listFiles()).andStubReturn(new File[] { file });
|
||||||
AndroidMock.replay(dir, file);
|
// AndroidMock.replay(dir, file);
|
||||||
|
//
|
||||||
assertEquals(1, service.cleanTempDirectory(dir));
|
// assertEquals(1, service.cleanTempDirectory(dir));
|
||||||
AndroidMock.verify(dir, file);
|
// AndroidMock.verify(dir, file);
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ public class TripStatisticsTest extends TestCase {
|
|||||||
assertEquals(1300L, statistics.getMovingTime());
|
assertEquals(1300L, statistics.getMovingTime());
|
||||||
assertEquals(1100.0, statistics.getTotalDistance());
|
assertEquals(1100.0, statistics.getTotalDistance());
|
||||||
assertEquals(900.0, statistics.getTotalElevationGain());
|
assertEquals(900.0, statistics.getTotalElevationGain());
|
||||||
assertEquals(60.0, statistics.getMaxSpeed());
|
assertEquals(statistics.getTotalDistance()/ (statistics.getMovingTime() / 1000.0), statistics.getMaxSpeed());
|
||||||
assertEquals(-10000, statistics.getLeft());
|
assertEquals(-10000, statistics.getLeft());
|
||||||
assertEquals(30000, statistics.getRight());
|
assertEquals(30000, statistics.getRight());
|
||||||
assertEquals(35000, statistics.getTop());
|
assertEquals(35000, statistics.getTop());
|
||||||
|
|||||||
+32
-28
@@ -87,16 +87,18 @@ public class TripStatisticsUpdaterTest extends TestCase {
|
|||||||
tripStatisticsUpdater.updateElevation(elevation);
|
tripStatisticsUpdater.updateElevation(elevation);
|
||||||
assertEquals(elevation, tripStatisticsUpdater.getSmoothedElevation());
|
assertEquals(elevation, tripStatisticsUpdater.getSmoothedElevation());
|
||||||
|
|
||||||
TripStatistics tripStatistics = tripStatisticsUpdater.getTripStatistics();
|
if (i >= TripStatisticsUpdater.ELEVATION_SMOOTHING_FACTOR) {
|
||||||
assertEquals(elevation, tripStatistics.getMinElevation());
|
TripStatistics tripStatistics = tripStatisticsUpdater.getTripStatistics();
|
||||||
assertEquals(elevation, tripStatistics.getMaxElevation());
|
assertEquals(elevation, tripStatistics.getMinElevation());
|
||||||
assertEquals(0.0, tripStatistics.getTotalElevationGain());
|
assertEquals(elevation, tripStatistics.getMaxElevation());
|
||||||
|
assertEquals(0.0, tripStatistics.getTotalElevationGain());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests {@link TripStatisticsUpdater#updateGrade(double, double)} with
|
* Tests {@link TripStatisticsUpdater#updateGrade(double, Double)} with
|
||||||
* elevation gain.
|
* elevation gain.
|
||||||
*/
|
*/
|
||||||
public void testElevationGain() throws Exception {
|
public void testElevationGain() throws Exception {
|
||||||
@@ -105,32 +107,33 @@ public class TripStatisticsUpdaterTest extends TestCase {
|
|||||||
assertEquals(i, tripStatisticsUpdater.getSmoothedElevation(),
|
assertEquals(i, tripStatisticsUpdater.getSmoothedElevation(),
|
||||||
TripStatisticsUpdater.ELEVATION_SMOOTHING_FACTOR / 2);
|
TripStatisticsUpdater.ELEVATION_SMOOTHING_FACTOR / 2);
|
||||||
|
|
||||||
TripStatistics data = tripStatisticsUpdater.getTripStatistics();
|
if (i >= TripStatisticsUpdater.ELEVATION_SMOOTHING_FACTOR) {
|
||||||
assertEquals(0.0, data.getMinElevation());
|
TripStatistics data = tripStatisticsUpdater.getTripStatistics();
|
||||||
assertEquals(i, data.getMaxElevation(), TripStatisticsUpdater.ELEVATION_SMOOTHING_FACTOR / 2);
|
assertEquals(12.0, data.getMinElevation());
|
||||||
assertEquals(
|
assertEquals(
|
||||||
i, data.getTotalElevationGain(), TripStatisticsUpdater.ELEVATION_SMOOTHING_FACTOR);
|
i, data.getMaxElevation(), TripStatisticsUpdater.ELEVATION_SMOOTHING_FACTOR / 2);
|
||||||
|
assertEquals(
|
||||||
|
i, data.getTotalElevationGain(), TripStatisticsUpdater.ELEVATION_SMOOTHING_FACTOR);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests {@link TripStatisticsUpdater#updateGrade(double, double)} with grade
|
* Tests {@link TripStatisticsUpdater#updateGrade(double, Double)} with grade
|
||||||
* of 1 and -1.
|
* of 1 and -1.
|
||||||
*/
|
*/
|
||||||
public void testGradeSimple() throws Exception {
|
public void testGradeSimple() throws Exception {
|
||||||
for (double i = 0; i < 1000; i++) {
|
for (double i = 0; i < 1000; i++) {
|
||||||
tripStatisticsUpdater.updateGrade(100, 100);
|
tripStatisticsUpdater.updateGrade(100, Double.valueOf(100));
|
||||||
if (i >= TripStatisticsUpdater.GRADE_SMOOTHING_FACTOR
|
if (i >= TripStatisticsUpdater.RUN_SMOOTHING_FACTOR
|
||||||
&& i >= TripStatisticsUpdater.RISE_SMOOTHING_FACTOR
|
+ TripStatisticsUpdater.GRADE_SMOOTHING_FACTOR) {
|
||||||
&& i >= TripStatisticsUpdater.RUN_SMOOTHING_FACTOR) {
|
|
||||||
assertEquals(1.0, tripStatisticsUpdater.getTripStatistics().getMaxGrade());
|
assertEquals(1.0, tripStatisticsUpdater.getTripStatistics().getMaxGrade());
|
||||||
assertEquals(1.0, tripStatisticsUpdater.getTripStatistics().getMinGrade());
|
assertEquals(1.0, tripStatisticsUpdater.getTripStatistics().getMinGrade());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (double i = 0; i < 1000; i++) {
|
for (double i = 0; i < 1000; i++) {
|
||||||
tripStatisticsUpdater.updateGrade(100, -100);
|
tripStatisticsUpdater.updateGrade(100, Double.valueOf(-100));
|
||||||
if (i >= TripStatisticsUpdater.GRADE_SMOOTHING_FACTOR
|
if (i >= TripStatisticsUpdater.GRADE_SMOOTHING_FACTOR
|
||||||
&& i >= TripStatisticsUpdater.RISE_SMOOTHING_FACTOR
|
|
||||||
&& i >= TripStatisticsUpdater.RUN_SMOOTHING_FACTOR) {
|
&& i >= TripStatisticsUpdater.RUN_SMOOTHING_FACTOR) {
|
||||||
assertEquals(1.0, tripStatisticsUpdater.getTripStatistics().getMaxGrade());
|
assertEquals(1.0, tripStatisticsUpdater.getTripStatistics().getMaxGrade());
|
||||||
// add 0.1 delta since changing min grade from 1 to -1
|
// add 0.1 delta since changing min grade from 1 to -1
|
||||||
@@ -140,7 +143,7 @@ public class TripStatisticsUpdaterTest extends TestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests {@link TripStatisticsUpdater#updateGrade(double, double)} with
|
* Tests {@link TripStatisticsUpdater#updateGrade(double, Double)} with
|
||||||
* distance of 1. The grade should get ignored.
|
* distance of 1. The grade should get ignored.
|
||||||
*/
|
*/
|
||||||
public void testGradeIgnoreShort() throws Exception {
|
public void testGradeIgnoreShort() throws Exception {
|
||||||
@@ -150,7 +153,7 @@ public class TripStatisticsUpdaterTest extends TestCase {
|
|||||||
* elevation buffer.
|
* elevation buffer.
|
||||||
*/
|
*/
|
||||||
tripStatisticsUpdater.updateElevation(i);
|
tripStatisticsUpdater.updateElevation(i);
|
||||||
tripStatisticsUpdater.updateGrade(1, 100);
|
tripStatisticsUpdater.updateGrade(1, Double.valueOf(100));
|
||||||
assertEquals(
|
assertEquals(
|
||||||
Double.NEGATIVE_INFINITY, tripStatisticsUpdater.getTripStatistics().getMaxGrade());
|
Double.NEGATIVE_INFINITY, tripStatisticsUpdater.getTripStatistics().getMaxGrade());
|
||||||
assertEquals(
|
assertEquals(
|
||||||
@@ -228,20 +231,21 @@ public class TripStatisticsUpdaterTest extends TestCase {
|
|||||||
assertEquals((locationOffset + i) * TEN_SECONDS, tripStatistics.getMovingTime());
|
assertEquals((locationOffset + i) * TEN_SECONDS, tripStatistics.getMovingTime());
|
||||||
assertEquals(i + locationOffset, tripStatisticsUpdater.getSmoothedElevation(),
|
assertEquals(i + locationOffset, tripStatisticsUpdater.getSmoothedElevation(),
|
||||||
TripStatisticsUpdater.ELEVATION_SMOOTHING_FACTOR / 2);
|
TripStatisticsUpdater.ELEVATION_SMOOTHING_FACTOR / 2);
|
||||||
assertEquals(0.0, tripStatistics.getMinElevation());
|
if (i + locationOffset >= TripStatisticsUpdater.ELEVATION_SMOOTHING_FACTOR) {
|
||||||
assertEquals(i + locationOffset, tripStatistics.getMaxElevation(),
|
assertEquals(12.0, tripStatistics.getMinElevation());
|
||||||
TripStatisticsUpdater.ELEVATION_SMOOTHING_FACTOR / 2);
|
assertEquals(i + locationOffset, tripStatistics.getMaxElevation(),
|
||||||
assertEquals(i + locationOffset, tripStatistics.getTotalElevationGain(),
|
TripStatisticsUpdater.ELEVATION_SMOOTHING_FACTOR / 2);
|
||||||
TripStatisticsUpdater.ELEVATION_SMOOTHING_FACTOR);
|
assertEquals(i + locationOffset, tripStatistics.getTotalElevationGain(),
|
||||||
|
TripStatisticsUpdater.ELEVATION_SMOOTHING_FACTOR);
|
||||||
|
}
|
||||||
|
|
||||||
if (i + locationOffset >= TripStatisticsUpdater.SPEED_SMOOTHING_FACTOR) {
|
if (i + locationOffset >= TripStatisticsUpdater.SPEED_SMOOTHING_FACTOR) {
|
||||||
assertEquals(MOVING_SPEED, tripStatistics.getMaxSpeed(), 0.1);
|
assertEquals(MOVING_SPEED, tripStatistics.getMaxSpeed(), 0.1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// If there are only moving locations in the track.
|
// If there are only moving locations in the track.
|
||||||
if (locationOffset == 0
|
if (locationOffset == 0 && (i + locationOffset) >= TripStatisticsUpdater.RUN_SMOOTHING_FACTOR
|
||||||
&& (i + locationOffset) >= TripStatisticsUpdater.RUN_SMOOTHING_FACTOR
|
+ TripStatisticsUpdater.GRADE_SMOOTHING_FACTOR) {
|
||||||
&& (i + locationOffset) >= TripStatisticsUpdater.ELEVATION_SMOOTHING_FACTOR) {
|
|
||||||
// 1 m / 111 m = .009
|
// 1 m / 111 m = .009
|
||||||
assertEquals(0.009, tripStatistics.getMinGrade(), 0.0001);
|
assertEquals(0.009, tripStatistics.getMinGrade(), 0.0001);
|
||||||
assertEquals(0.009, tripStatistics.getMaxGrade(), 0.0001);
|
assertEquals(0.009, tripStatistics.getMaxGrade(), 0.0001);
|
||||||
@@ -273,7 +277,7 @@ public class TripStatisticsUpdaterTest extends TestCase {
|
|||||||
assertEquals((locationOffset) * TEN_SECONDS, tripStatistics.getMovingTime());
|
assertEquals((locationOffset) * TEN_SECONDS, tripStatistics.getMovingTime());
|
||||||
assertEquals(locationOffset, tripStatisticsUpdater.getSmoothedElevation(),
|
assertEquals(locationOffset, tripStatisticsUpdater.getSmoothedElevation(),
|
||||||
TripStatisticsUpdater.ELEVATION_SMOOTHING_FACTOR / 2);
|
TripStatisticsUpdater.ELEVATION_SMOOTHING_FACTOR / 2);
|
||||||
assertEquals(0.0, tripStatistics.getMinElevation());
|
assertEquals(12.0, tripStatistics.getMinElevation());
|
||||||
assertEquals(locationOffset, tripStatistics.getMaxElevation(),
|
assertEquals(locationOffset, tripStatistics.getMaxElevation(),
|
||||||
TripStatisticsUpdater.ELEVATION_SMOOTHING_FACTOR / 2);
|
TripStatisticsUpdater.ELEVATION_SMOOTHING_FACTOR / 2);
|
||||||
assertEquals(locationOffset, tripStatistics.getTotalElevationGain(),
|
assertEquals(locationOffset, tripStatistics.getTotalElevationGain(),
|
||||||
|
|||||||
+127
-127
@@ -181,6 +181,133 @@ public class ExportAllAndImportAllTest extends ActivityInstrumentationTestCase2<
|
|||||||
checkExportAndImport();
|
checkExportAndImport();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests export and import tracks.
|
||||||
|
* <ul>
|
||||||
|
* <li>Create two tracks, one of them is empty(Have no Gps data).</li>
|
||||||
|
* <li>Tests import when there is no track file.</li>
|
||||||
|
* <li>Tests export tracks to Gpx files.</li>
|
||||||
|
* <li>Tests import Gpx files to tracks.</li>
|
||||||
|
* <li>Tests export tracks to Kml files.</li>
|
||||||
|
* </ul>
|
||||||
|
*/
|
||||||
|
private void checkExportAndImport() {
|
||||||
|
// Delete all exported gpx and kml tracks.
|
||||||
|
EndToEndTestUtils.deleteExportedFiles(EndToEndTestUtils.GPX);
|
||||||
|
EndToEndTestUtils.deleteExportedFiles(EndToEndTestUtils.KML);
|
||||||
|
int gpxFilesNumber = 0;
|
||||||
|
File[] allGpxFiles = EndToEndTestUtils.getExportedFiles(EndToEndTestUtils.GPX);
|
||||||
|
|
||||||
|
// For the first export, there is no MyTracks folder.
|
||||||
|
if (allGpxFiles != null) {
|
||||||
|
gpxFilesNumber = EndToEndTestUtils.getExportedFiles(EndToEndTestUtils.GPX).length;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get track number in current track list of MyTracks.
|
||||||
|
trackNumber = EndToEndTestUtils.SOLO.getCurrentViews(ListView.class).get(0).getCount();
|
||||||
|
|
||||||
|
// No Gpx file to imported.
|
||||||
|
importTracks(EndToEndTestUtils.GPX);
|
||||||
|
EndToEndTestUtils.SOLO.waitForText(getImportErrorMessage(0, 0, EndToEndTestUtils.GPX));
|
||||||
|
EndToEndTestUtils
|
||||||
|
.getButtonOnScreen(activityMyTracks.getString(R.string.generic_ok), true, true);
|
||||||
|
|
||||||
|
// Click to export tracks(At least one track) to Gpx files.
|
||||||
|
exportTracks(EndToEndTestUtils.GPX);
|
||||||
|
|
||||||
|
// Check export Gpx file.
|
||||||
|
assertEquals(gpxFilesNumber + trackNumber,
|
||||||
|
EndToEndTestUtils.getExportedFiles(EndToEndTestUtils.GPX).length);
|
||||||
|
instrumentation.waitForIdleSync();
|
||||||
|
|
||||||
|
// Click to import Gpx track.
|
||||||
|
gpxFilesNumber = EndToEndTestUtils.getExportedFiles(EndToEndTestUtils.GPX).length;
|
||||||
|
trackNumber = EndToEndTestUtils.SOLO.getCurrentViews(ListView.class).get(0).getCount();
|
||||||
|
|
||||||
|
importTracks(EndToEndTestUtils.GPX);
|
||||||
|
EndToEndTestUtils.rotateCurrentActivity();
|
||||||
|
checkImport();
|
||||||
|
|
||||||
|
assertTrue(EndToEndTestUtils.SOLO.waitForText(EndToEndTestUtils.trackName));
|
||||||
|
assertEquals(trackNumber + gpxFilesNumber,
|
||||||
|
EndToEndTestUtils.SOLO.getCurrentViews(ListView.class).get(0).getCount());
|
||||||
|
|
||||||
|
// Click to export tracks(At least two tracks) to KML files.
|
||||||
|
gpxFilesNumber = EndToEndTestUtils.getExportedFiles(EndToEndTestUtils.GPX).length;
|
||||||
|
trackNumber = EndToEndTestUtils.SOLO.getCurrentViews(ListView.class).get(0).getCount();
|
||||||
|
|
||||||
|
exportTracks(EndToEndTestUtils.KML);
|
||||||
|
|
||||||
|
// Check export files.
|
||||||
|
assertEquals(gpxFilesNumber, EndToEndTestUtils.getExportedFiles(EndToEndTestUtils.GPX).length);
|
||||||
|
assertEquals(trackNumber, EndToEndTestUtils.getExportedFiles(EndToEndTestUtils.KML).length);
|
||||||
|
|
||||||
|
// Click to import KML track.
|
||||||
|
int KMLFilesNumber = EndToEndTestUtils.getExportedFiles(EndToEndTestUtils.KML).length;
|
||||||
|
instrumentation.waitForIdleSync();
|
||||||
|
trackNumber = EndToEndTestUtils.SOLO.getCurrentViews(ListView.class).get(0).getCount();
|
||||||
|
|
||||||
|
importTracks(EndToEndTestUtils.KML);
|
||||||
|
checkImport();
|
||||||
|
EndToEndTestUtils.SOLO.waitForActivity(TrackListActivity.class);
|
||||||
|
|
||||||
|
assertEquals(trackNumber + KMLFilesNumber,
|
||||||
|
EndToEndTestUtils.SOLO.getCurrentViews(ListView.class).get(0).getCount());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void tearDown() throws Exception {
|
||||||
|
EndToEndTestUtils.SOLO.finishOpenedActivities();
|
||||||
|
super.tearDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getSaveSuccessMessage(int count, String type) {
|
||||||
|
String tracks = activityMyTracks.getResources().getQuantityString(R.plurals.tracks, count,
|
||||||
|
count);
|
||||||
|
String directoryDisplayName = FileUtils.getDirectoryDisplayName(type);
|
||||||
|
return activityMyTracks.getString(R.string.export_external_storage_success, tracks,
|
||||||
|
directoryDisplayName);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getImportSuccessMessage(int count, String type) {
|
||||||
|
String files = activityMyTracks.getResources().getQuantityString(R.plurals.files, count, count);
|
||||||
|
String directoryDisplayName = FileUtils.getDirectoryDisplayName(type);
|
||||||
|
return activityMyTracks.getString(R.string.import_success, files, directoryDisplayName);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getImportErrorMessage(int count, int total, String type) {
|
||||||
|
String files = activityMyTracks.getResources().getQuantityString(R.plurals.files, total, total);
|
||||||
|
String directoryDisplayName = FileUtils.getDirectoryDisplayName(type);
|
||||||
|
return activityMyTracks.getString(R.string.import_error, count, files, directoryDisplayName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Imports tracks from external storage.
|
||||||
|
*
|
||||||
|
* @param fileType the file type, can be GPX and KML currently
|
||||||
|
*/
|
||||||
|
private void importTracks(String fileType) {
|
||||||
|
EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_import_all), true);
|
||||||
|
EndToEndTestUtils.SOLO.clickOnText(fileType.toUpperCase());
|
||||||
|
EndToEndTestUtils.getButtonOnScreen(
|
||||||
|
EndToEndTestUtils.activityMytracks.getString(R.string.generic_ok), true, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exports tracks to external storage.
|
||||||
|
*
|
||||||
|
* @param fileType the file type, can be GPX/KML/TCX/CSV currently
|
||||||
|
*/
|
||||||
|
private void exportTracks(String fileType) {
|
||||||
|
EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_export_all), true);
|
||||||
|
EndToEndTestUtils.SOLO.clickOnText(fileType.toUpperCase());
|
||||||
|
EndToEndTestUtils.getButtonOnScreen(
|
||||||
|
EndToEndTestUtils.activityMytracks.getString(R.string.generic_ok), true, true);
|
||||||
|
EndToEndTestUtils.SOLO.waitForText(getSaveSuccessMessage(2, fileType));
|
||||||
|
EndToEndTestUtils
|
||||||
|
.getButtonOnScreen(activityMyTracks.getString(R.string.generic_ok), true, true);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test export/import one track and checks the detail of this track.
|
* Test export/import one track and checks the detail of this track.
|
||||||
*/
|
*/
|
||||||
@@ -371,131 +498,4 @@ public class ExportAllAndImportAllTest extends ActivityInstrumentationTestCase2<
|
|||||||
fail();
|
fail();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests export and import tracks.
|
|
||||||
* <ul>
|
|
||||||
* <li>Create two tracks, one of them is empty(Have no Gps data).</li>
|
|
||||||
* <li>Tests import when there is no track file.</li>
|
|
||||||
* <li>Tests export tracks to Gpx files.</li>
|
|
||||||
* <li>Tests import Gpx files to tracks.</li>
|
|
||||||
* <li>Tests export tracks to Kml files.</li>
|
|
||||||
* </ul>
|
|
||||||
*/
|
|
||||||
private void checkExportAndImport() {
|
|
||||||
// Delete all exported gpx and kml tracks.
|
|
||||||
EndToEndTestUtils.deleteExportedFiles(EndToEndTestUtils.GPX);
|
|
||||||
EndToEndTestUtils.deleteExportedFiles(EndToEndTestUtils.KML);
|
|
||||||
int gpxFilesNumber = 0;
|
|
||||||
File[] allGpxFiles = EndToEndTestUtils.getExportedFiles(EndToEndTestUtils.GPX);
|
|
||||||
|
|
||||||
// For the first export, there is no MyTracks folder.
|
|
||||||
if (allGpxFiles != null) {
|
|
||||||
gpxFilesNumber = EndToEndTestUtils.getExportedFiles(EndToEndTestUtils.GPX).length;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get track number in current track list of MyTracks.
|
|
||||||
trackNumber = EndToEndTestUtils.SOLO.getCurrentViews(ListView.class).get(0).getCount();
|
|
||||||
|
|
||||||
// No Gpx file to imported.
|
|
||||||
importTracks(EndToEndTestUtils.GPX);
|
|
||||||
EndToEndTestUtils.SOLO.waitForText(getImportErrorMessage(0, 0, EndToEndTestUtils.GPX));
|
|
||||||
EndToEndTestUtils
|
|
||||||
.getButtonOnScreen(activityMyTracks.getString(R.string.generic_ok), true, true);
|
|
||||||
|
|
||||||
// Click to export tracks(At least one track) to Gpx files.
|
|
||||||
exportTracks(EndToEndTestUtils.GPX);
|
|
||||||
|
|
||||||
// Check export Gpx file.
|
|
||||||
assertEquals(gpxFilesNumber + trackNumber,
|
|
||||||
EndToEndTestUtils.getExportedFiles(EndToEndTestUtils.GPX).length);
|
|
||||||
instrumentation.waitForIdleSync();
|
|
||||||
|
|
||||||
// Click to import Gpx track.
|
|
||||||
gpxFilesNumber = EndToEndTestUtils.getExportedFiles(EndToEndTestUtils.GPX).length;
|
|
||||||
trackNumber = EndToEndTestUtils.SOLO.getCurrentViews(ListView.class).get(0).getCount();
|
|
||||||
|
|
||||||
importTracks(EndToEndTestUtils.GPX);
|
|
||||||
EndToEndTestUtils.rotateCurrentActivity();
|
|
||||||
checkImport();
|
|
||||||
|
|
||||||
assertTrue(EndToEndTestUtils.SOLO.waitForText(EndToEndTestUtils.trackName));
|
|
||||||
assertEquals(trackNumber + gpxFilesNumber,
|
|
||||||
EndToEndTestUtils.SOLO.getCurrentViews(ListView.class).get(0).getCount());
|
|
||||||
|
|
||||||
// Click to export tracks(At least two tracks) to KML files.
|
|
||||||
gpxFilesNumber = EndToEndTestUtils.getExportedFiles(EndToEndTestUtils.GPX).length;
|
|
||||||
trackNumber = EndToEndTestUtils.SOLO.getCurrentViews(ListView.class).get(0).getCount();
|
|
||||||
|
|
||||||
exportTracks(EndToEndTestUtils.KML);
|
|
||||||
|
|
||||||
// Check export files.
|
|
||||||
assertEquals(gpxFilesNumber, EndToEndTestUtils.getExportedFiles(EndToEndTestUtils.GPX).length);
|
|
||||||
assertEquals(trackNumber, EndToEndTestUtils.getExportedFiles(EndToEndTestUtils.KML).length);
|
|
||||||
|
|
||||||
// Click to import KML track.
|
|
||||||
int KMLFilesNumber = EndToEndTestUtils.getExportedFiles(EndToEndTestUtils.KML).length;
|
|
||||||
instrumentation.waitForIdleSync();
|
|
||||||
trackNumber = EndToEndTestUtils.SOLO.getCurrentViews(ListView.class).get(0).getCount();
|
|
||||||
|
|
||||||
importTracks(EndToEndTestUtils.KML);
|
|
||||||
checkImport();
|
|
||||||
EndToEndTestUtils.SOLO.waitForActivity(TrackListActivity.class);
|
|
||||||
|
|
||||||
assertEquals(trackNumber + KMLFilesNumber,
|
|
||||||
EndToEndTestUtils.SOLO.getCurrentViews(ListView.class).get(0).getCount());
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getSaveSuccessMessage(int count, String type) {
|
|
||||||
String tracks = activityMyTracks.getResources().getQuantityString(R.plurals.tracks, count,
|
|
||||||
count);
|
|
||||||
String directoryDisplayName = FileUtils.getDirectoryDisplayName(type);
|
|
||||||
return activityMyTracks.getString(R.string.export_external_storage_success, tracks,
|
|
||||||
directoryDisplayName);
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getImportSuccessMessage(int count, String type) {
|
|
||||||
String files = activityMyTracks.getResources().getQuantityString(R.plurals.files, count, count);
|
|
||||||
String directoryDisplayName = FileUtils.getDirectoryDisplayName(type);
|
|
||||||
return activityMyTracks.getString(R.string.import_success, files, directoryDisplayName);
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getImportErrorMessage(int count, int total, String type) {
|
|
||||||
String files = activityMyTracks.getResources().getQuantityString(R.plurals.files, total, total);
|
|
||||||
String directoryDisplayName = FileUtils.getDirectoryDisplayName(type);
|
|
||||||
return activityMyTracks.getString(R.string.import_error, count, files, directoryDisplayName);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Imports tracks from external storage.
|
|
||||||
*
|
|
||||||
* @param fileType the file type, can be GPX and KML currently
|
|
||||||
*/
|
|
||||||
private void importTracks(String fileType) {
|
|
||||||
EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_import_all), true);
|
|
||||||
EndToEndTestUtils.SOLO.clickOnText(fileType.toUpperCase());
|
|
||||||
EndToEndTestUtils.getButtonOnScreen(
|
|
||||||
EndToEndTestUtils.activityMytracks.getString(R.string.generic_ok), true, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Exports tracks to external storage.
|
|
||||||
*
|
|
||||||
* @param fileType the file type, can be GPX/KML/TCX/CSV currently
|
|
||||||
*/
|
|
||||||
private void exportTracks(String fileType) {
|
|
||||||
EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_export_all), true);
|
|
||||||
EndToEndTestUtils.SOLO.clickOnText(fileType.toUpperCase());
|
|
||||||
EndToEndTestUtils.getButtonOnScreen(
|
|
||||||
EndToEndTestUtils.activityMytracks.getString(R.string.generic_ok), true, true);
|
|
||||||
EndToEndTestUtils.SOLO.waitForText(getSaveSuccessMessage(2, fileType));
|
|
||||||
EndToEndTestUtils
|
|
||||||
.getButtonOnScreen(activityMyTracks.getString(R.string.generic_ok), true, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void tearDown() throws Exception {
|
|
||||||
EndToEndTestUtils.SOLO.finishOpenedActivities();
|
|
||||||
super.tearDown();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
+7
-24
@@ -155,35 +155,18 @@ public class MenuItemsTest extends ActivityInstrumentationTestCase2<TrackListAct
|
|||||||
EndToEndTestUtils.findMenuItem(GPSStatus ? activityMyTracks.getString(R.string.menu_stop_gps)
|
EndToEndTestUtils.findMenuItem(GPSStatus ? activityMyTracks.getString(R.string.menu_stop_gps)
|
||||||
: activityMyTracks.getString(R.string.menu_start_gps), true);
|
: activityMyTracks.getString(R.string.menu_start_gps), true);
|
||||||
GPSStatus = !GPSStatus;
|
GPSStatus = !GPSStatus;
|
||||||
EndToEndTestUtils.SOLO.waitForText(
|
EndToEndTestUtils.waitTextToDisappear(GPSStatus ? activityMyTracks
|
||||||
GPSStatus ? activityMyTracks.getString(R.string.menu_start_gps) : activityMyTracks
|
.getString(R.string.menu_start_gps) : activityMyTracks.getString(R.string.menu_stop_gps));
|
||||||
.getString(R.string.menu_stop_gps), 1, EndToEndTestUtils.SHORT_WAIT_TIME);
|
assertEquals(GPSStatus,
|
||||||
instrumentation.waitForIdleSync();
|
EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_stop_gps), false));
|
||||||
|
|
||||||
EndToEndTestUtils.sleep(EndToEndTestUtils.SHORT_WAIT_TIME);
|
|
||||||
if (GPSStatus != EndToEndTestUtils.findMenuItem(
|
|
||||||
activityMyTracks.getString(R.string.menu_stop_gps), false)) {
|
|
||||||
EndToEndTestUtils.sleep(EndToEndTestUtils.SHORT_WAIT_TIME);
|
|
||||||
// Retry once
|
|
||||||
assertEquals(GPSStatus,
|
|
||||||
EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_stop_gps), false));
|
|
||||||
}
|
|
||||||
|
|
||||||
EndToEndTestUtils.findMenuItem(GPSStatus ? activityMyTracks.getString(R.string.menu_stop_gps)
|
EndToEndTestUtils.findMenuItem(GPSStatus ? activityMyTracks.getString(R.string.menu_stop_gps)
|
||||||
: activityMyTracks.getString(R.string.menu_start_gps), true);
|
: activityMyTracks.getString(R.string.menu_start_gps), true);
|
||||||
GPSStatus = !GPSStatus;
|
GPSStatus = !GPSStatus;
|
||||||
EndToEndTestUtils.SOLO.waitForText(GPSStatus ? activityMyTracks
|
EndToEndTestUtils.waitTextToDisappear(GPSStatus ? activityMyTracks
|
||||||
.getString(R.string.menu_start_gps) : activityMyTracks.getString(R.string.menu_stop_gps));
|
.getString(R.string.menu_start_gps) : activityMyTracks.getString(R.string.menu_stop_gps));
|
||||||
|
assertEquals(GPSStatus,
|
||||||
EndToEndTestUtils.sleep(EndToEndTestUtils.SHORT_WAIT_TIME);
|
EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_stop_gps), false));
|
||||||
if (GPSStatus != EndToEndTestUtils.findMenuItem(
|
|
||||||
activityMyTracks.getString(R.string.menu_stop_gps), false)) {
|
|
||||||
EndToEndTestUtils.sleep(EndToEndTestUtils.SHORT_WAIT_TIME);
|
|
||||||
// Retry once
|
|
||||||
assertEquals(GPSStatus,
|
|
||||||
EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_stop_gps), false));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user