Skip to content

Commit

Permalink
#81 Forcing ETA refresh when the user doesn't use the expected travel…
Browse files Browse the repository at this point in the history
… mode logic added.

Merge pull request #82 from Woosmap/forceETARefresh
  • Loading branch information
lpernelle-woosmap committed Jun 28, 2022
2 parents 0732f82 + a23a5e9 commit 2175279
Show file tree
Hide file tree
Showing 7 changed files with 48 additions and 9 deletions.
8 changes: 4 additions & 4 deletions woosmapgeofencing/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -72,10 +72,10 @@ dependencies {
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'


implementation 'androidx.room:room-runtime:2.3.0'
annotationProcessor 'androidx.room:room-compiler:2.3.0'
implementation 'androidx.room:room-rxjava2:2.3.0'
implementation 'androidx.room:room-guava:2.3.0'
implementation 'androidx.room:room-runtime:2.4.2'
annotationProcessor 'androidx.room:room-compiler:2.4.2'
implementation 'androidx.room:room-rxjava2:2.4.2'
implementation 'androidx.room:room-guava:2.4.2'
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.5.30'
implementation 'com.android.volley:volley:1.2.1'

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -162,15 +162,28 @@ class PositionsManager(val context: Context, private val db: WoosmapDb) {
if (distance < WoosmapSettings.distanceMaxAirDistanceFilter) {
if ( it.dateTime == 0L ) {
regionsBeUpdated = true
continue
//continue
break //break will exit the loop after one region needs to be update which is required behaviour.
}
var spendtime = System.currentTimeMillis() - it.dateTime
var timeLimit = (it.duration - it.radius)/2
if (spendtime/1000 > timeLimit) {
if(spendtime/1000 > WoosmapSettings.distanceTimeFilter) {
regionsBeUpdated = true
continue
//continue
break
}
}else if(!optimizeDistanceRequest){
var distanceFromTheLastRefresh = this.distanceBetweenTwoPositions(movingPosition, this.db.movingPositionsDao.getMovingPositionById(it.locationId))
val spendTimeInSecond=spendtime/1000 //spendtime is in millisecond.
if((spendTimeInSecond/60f)>1f){
val averageSpeed=(distanceFromTheLastRefresh/spendTimeInSecond)
if(averageSpeed>(it.expectedAverageSpeed*2)){
regionsBeUpdated = true
break
}
}

}
}
}
Expand Down Expand Up @@ -387,6 +400,16 @@ class PositionsManager(val context: Context, private val db: WoosmapDb) {
return location.distanceTo(locationFromPosition)
}

private fun distanceBetweenTwoPositions(positionA: MovingPosition, positionB: MovingPosition): Float {
val locationFromPositionA = Location("woosmap")
locationFromPositionA.latitude = positionA.lat
locationFromPositionA.longitude = positionA.lng
val locationFromPositionB = Location("woosmap")
locationFromPositionB.latitude = positionB.lat
locationFromPositionB.longitude = positionB.lng
return locationFromPositionA.distanceTo(locationFromPositionB)
}

private fun timeBetweenLocationAndPosition(position: MovingPosition, location: Location): Long {
return (location.time - position.dateTime) / 1000
}
Expand Down Expand Up @@ -1013,6 +1036,13 @@ class PositionsManager(val context: Context, private val db: WoosmapDb) {
region.distanceText = distance.distanceText
region.duration = distance.duration
region.durationText = distance.durationText
region.locationId = distance.locationId
if(distance.duration==0){
region.expectedAverageSpeed=0f
}else{
region.expectedAverageSpeed=(distance.distance/distance.duration).toFloat()
}

if(distance.duration <= region.radius) {
if(region.isCurrentPositionInside == false) {
region.isCurrentPositionInside = true
Expand Down Expand Up @@ -1470,4 +1500,4 @@ class PositionsManager(val context: Context, private val db: WoosmapDb) {
}.start()
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ public static void saveSettings(Context context){
prefsEditor.putString("userPropertiesFilter", userPropertiesHashMapString).apply();
String SFMCCredentialsHashMapString = gson.toJson(SFMCCredentials);
prefsEditor.putString("SFMCCredentials", SFMCCredentialsHashMapString).apply();
prefsEditor.putBoolean( "optimizeDistanceRequest",optimizeDistanceRequest );


prefsEditor.commit();
Expand Down Expand Up @@ -129,6 +130,7 @@ public static void loadSettings(Context context) {
WoosmapSettings.WoosmapNotificationDescriptionChannel = mPrefs.getString( "WoosmapNotificationDescriptionChannel",WoosmapSettings.WoosmapNotificationDescriptionChannel );
WoosmapSettings.WoosmapNotificationActive = mPrefs.getBoolean( "WoosmapNotificationActive", WoosmapSettings.WoosmapNotificationActive );
WoosmapSettings.SFMCAccessToken = mPrefs.getString( "SFMCAccessToken",WoosmapSettings.SFMCAccessToken );
WoosmapSettings.optimizeDistanceRequest = mPrefs.getBoolean( "optimizeDistanceRequest", WoosmapSettings.optimizeDistanceRequest );

//convert to string using gson
Gson gson = new Gson();
Expand Down Expand Up @@ -237,6 +239,7 @@ public static void setSearchAPILastRequestTimeStamp(long searchAPILastRequestTim

//Enable/disable DistanceAPI
static public boolean distanceAPIEnable = true;
static public boolean optimizeDistanceRequest=true;

//Mode transportation DistanceAPI
private static final String drivingMode = "driving";
Expand Down Expand Up @@ -368,6 +371,7 @@ public static String getDistanceUnits() {




public static class Tags {
public static final String WoosmapSdkTag = "WoosmapSdk";
static final String WoosmapBackgroundTag = "WoosmapBackground";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ public interface MovingPositionsDao {
@Query("SELECT * FROM movingpositions ORDER BY dateTime DESC LIMIT 1")
MovingPosition getLastMovingPosition();

@Query("SELECT * FROM movingpositions WHERE id = :id")
MovingPosition getMovingPositionById(int id);

@Query("SELECT * FROM movingpositions ORDER BY dateTime DESC LIMIT 1,2")
MovingPosition getPreviousLastMovingPosition();

Expand All @@ -42,4 +45,4 @@ public interface MovingPositionsDao {

@Query("DELETE FROM movingpositions WHERE dateTime <= :dataDurationDelay")
void deleteMovingOlderThan(long dataDurationDelay);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,5 @@ public class Region {
public int duration = 0;
public String durationText = "";
public String type = "circle";
public float expectedAverageSpeed=-1f;
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,5 @@ public class RegionLog {
public int duration = 0;
public String durationText = "";
public String type = "circle";
public float expectedAverageSpeed=-1f;
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

import static android.content.Context.MODE_PRIVATE;

@Database(entities = {Visit.class, MovingPosition.class, POI.class, ZOI.class, Region.class, RegionLog.class, Distance.class}, version = 28, exportSchema = false)
@Database(entities = {Visit.class, MovingPosition.class, POI.class, ZOI.class, Region.class, RegionLog.class, Distance.class}, version = 29, exportSchema = false)
@TypeConverters({Converters.class})
public abstract class WoosmapDb extends RoomDatabase {

Expand Down

0 comments on commit 2175279

Please sign in to comment.