Add ability to add and remove avoid roads via aidl

This commit is contained in:
Vitaliy 2020-12-17 15:45:48 +02:00
parent c20c0aa6e7
commit 625ff2face
10 changed files with 167 additions and 17 deletions

View file

@ -92,7 +92,9 @@ import net.osmand.aidlapi.copyfile.CopyFileParams;
import net.osmand.aidlapi.navigation.ANavigationUpdateParams; import net.osmand.aidlapi.navigation.ANavigationUpdateParams;
import net.osmand.aidlapi.navigation.ANavigationVoiceRouterMessageParams; import net.osmand.aidlapi.navigation.ANavigationVoiceRouterMessageParams;
import net.osmand.aidlapi.navigation.ABlockedRoadParams; import net.osmand.aidlapi.navigation.ABlockedRoad;
import net.osmand.aidlapi.navigation.AddBlockedRoadParams;
import net.osmand.aidlapi.navigation.RemoveBlockedRoadParams;
import net.osmand.aidlapi.contextmenu.ContextMenuButtonsParams; import net.osmand.aidlapi.contextmenu.ContextMenuButtonsParams;
import net.osmand.aidlapi.contextmenu.UpdateContextMenuButtonsParams; import net.osmand.aidlapi.contextmenu.UpdateContextMenuButtonsParams;
@ -894,5 +896,9 @@ interface IOsmAndAidlInterface {
boolean getProfiles(out List<AProfile> profiles); boolean getProfiles(out List<AProfile> profiles);
boolean getBlockedRoads(out List<ABlockedRoadParams> blockedRoads); boolean getBlockedRoads(out List<ABlockedRoad> blockedRoads);
boolean addRoadBlock(in AddBlockedRoadParams params);
boolean removeRoadBlock(in RemoveBlockedRoadParams params);
} }

View file

@ -1,3 +1,3 @@
package net.osmand.aidlapi.navigation; package net.osmand.aidlapi.navigation;
parcelable ABlockedRoadParams; parcelable ABlockedRoad;

View file

@ -5,7 +5,7 @@ import android.os.Parcel;
import net.osmand.aidlapi.AidlParams; import net.osmand.aidlapi.AidlParams;
public class ABlockedRoadParams extends AidlParams { public class ABlockedRoad extends AidlParams {
private long roadId; private long roadId;
private double latitude; private double latitude;
@ -14,7 +14,7 @@ public class ABlockedRoadParams extends AidlParams {
private String name; private String name;
private String appModeKey; private String appModeKey;
public ABlockedRoadParams(long roadId, double latitude, double longitude, double direction, String name, String appModeKey) { public ABlockedRoad(long roadId, double latitude, double longitude, double direction, String name, String appModeKey) {
this.roadId = roadId; this.roadId = roadId;
this.latitude = latitude; this.latitude = latitude;
this.longitude = longitude; this.longitude = longitude;
@ -23,19 +23,19 @@ public class ABlockedRoadParams extends AidlParams {
this.appModeKey = appModeKey; this.appModeKey = appModeKey;
} }
protected ABlockedRoadParams(Parcel in) { protected ABlockedRoad(Parcel in) {
readFromParcel(in); readFromParcel(in);
} }
public static final Creator<ABlockedRoadParams> CREATOR = new Creator<ABlockedRoadParams>() { public static final Creator<ABlockedRoad> CREATOR = new Creator<ABlockedRoad>() {
@Override @Override
public ABlockedRoadParams createFromParcel(Parcel in) { public ABlockedRoad createFromParcel(Parcel in) {
return new ABlockedRoadParams(in); return new ABlockedRoad(in);
} }
@Override @Override
public ABlockedRoadParams[] newArray(int size) { public ABlockedRoad[] newArray(int size) {
return new ABlockedRoadParams[size]; return new ABlockedRoad[size];
} }
}; };

View file

@ -0,0 +1,3 @@
package net.osmand.aidlapi.navigation;
parcelable AddBlockedRoadParams;

View file

@ -0,0 +1,46 @@
package net.osmand.aidlapi.navigation;
import android.os.Bundle;
import android.os.Parcel;
import net.osmand.aidlapi.AidlParams;
public class AddBlockedRoadParams extends AidlParams {
private ABlockedRoad blockedRoad;
public AddBlockedRoadParams(ABlockedRoad blockedRoad) {
this.blockedRoad = blockedRoad;
}
public AddBlockedRoadParams(Parcel in) {
readFromParcel(in);
}
public static final Creator<AddBlockedRoadParams> CREATOR = new Creator<AddBlockedRoadParams>() {
@Override
public AddBlockedRoadParams createFromParcel(Parcel in) {
return new AddBlockedRoadParams(in);
}
@Override
public AddBlockedRoadParams[] newArray(int size) {
return new AddBlockedRoadParams[size];
}
};
public ABlockedRoad getBlockedRoad() {
return blockedRoad;
}
@Override
public void writeToBundle(Bundle bundle) {
bundle.putParcelable("blockedRoad", blockedRoad);
}
@Override
protected void readFromBundle(Bundle bundle) {
bundle.setClassLoader(ABlockedRoad.class.getClassLoader());
blockedRoad = bundle.getParcelable("blockedRoad");
}
}

View file

@ -0,0 +1,3 @@
package net.osmand.aidlapi.navigation;
parcelable RemoveBlockedRoadParams;

View file

@ -0,0 +1,46 @@
package net.osmand.aidlapi.navigation;
import android.os.Bundle;
import android.os.Parcel;
import net.osmand.aidlapi.AidlParams;
public class RemoveBlockedRoadParams extends AidlParams {
private ABlockedRoad blockedRoad;
public RemoveBlockedRoadParams(ABlockedRoad blockedRoad) {
this.blockedRoad = blockedRoad;
}
public RemoveBlockedRoadParams(Parcel in) {
readFromParcel(in);
}
public static final Creator<RemoveBlockedRoadParams> CREATOR = new Creator<RemoveBlockedRoadParams>() {
@Override
public RemoveBlockedRoadParams createFromParcel(Parcel in) {
return new RemoveBlockedRoadParams(in);
}
@Override
public RemoveBlockedRoadParams[] newArray(int size) {
return new RemoveBlockedRoadParams[size];
}
};
public ABlockedRoad getBlockedRoad() {
return blockedRoad;
}
@Override
public void writeToBundle(Bundle bundle) {
bundle.putParcelable("blockedRoad", blockedRoad);
}
@Override
protected void readFromBundle(Bundle bundle) {
bundle.setClassLoader(ABlockedRoad.class.getClassLoader());
blockedRoad = bundle.getParcelable("blockedRoad");
}
}

View file

@ -43,7 +43,7 @@ import net.osmand.aidl.tiles.ASqliteDbFile;
import net.osmand.aidlapi.customization.AProfile; import net.osmand.aidlapi.customization.AProfile;
import net.osmand.aidlapi.info.AppInfoParams; import net.osmand.aidlapi.info.AppInfoParams;
import net.osmand.aidlapi.map.ALatLon; import net.osmand.aidlapi.map.ALatLon;
import net.osmand.aidlapi.navigation.ABlockedRoadParams; import net.osmand.aidlapi.navigation.ABlockedRoad;
import net.osmand.data.FavouritePoint; import net.osmand.data.FavouritePoint;
import net.osmand.data.LatLon; import net.osmand.data.LatLon;
import net.osmand.data.PointDescription; import net.osmand.data.PointDescription;
@ -2376,14 +2376,25 @@ public class OsmandAidlApi {
return true; return true;
} }
public boolean getBlockedRoads(List<ABlockedRoadParams> blockedRoads) { public boolean getBlockedRoads(List<ABlockedRoad> blockedRoads) {
Map<LatLon, AvoidRoadInfo> impassableRoads = app.getAvoidSpecificRoads().getImpassableRoads(); Map<LatLon, AvoidRoadInfo> impassableRoads = app.getAvoidSpecificRoads().getImpassableRoads();
for (AvoidRoadInfo info : impassableRoads.values()) { for (AvoidRoadInfo info : impassableRoads.values()) {
blockedRoads.add(new ABlockedRoadParams(info.id, info.latitude, info.longitude, info.direction, info.name, info.appModeKey)); blockedRoads.add(new ABlockedRoad(info.id, info.latitude, info.longitude, info.direction, info.name, info.appModeKey));
} }
return true; return true;
} }
public boolean addRoadBlock(ABlockedRoad road) {
LatLon latLon = new LatLon(road.getLatitude(), road.getLongitude());
app.getAvoidSpecificRoads().addImpassableRoad(null, latLon, false, false, null);
return true;
}
public boolean removeRoadBlock(ABlockedRoad road) {
app.getAvoidSpecificRoads().removeImpassableRoad(new LatLon(road.getLatitude(), road.getLongitude()));
return true;
}
private static class FileCopyInfo { private static class FileCopyInfo {
long startTime; long startTime;
long lastAccessTime; long lastAccessTime;

View file

@ -73,14 +73,16 @@ import net.osmand.aidlapi.navdrawer.NavDrawerFooterParams;
import net.osmand.aidlapi.navdrawer.NavDrawerHeaderParams; import net.osmand.aidlapi.navdrawer.NavDrawerHeaderParams;
import net.osmand.aidlapi.navdrawer.NavDrawerItem; import net.osmand.aidlapi.navdrawer.NavDrawerItem;
import net.osmand.aidlapi.navdrawer.SetNavDrawerItemsParams; import net.osmand.aidlapi.navdrawer.SetNavDrawerItemsParams;
import net.osmand.aidlapi.navigation.ABlockedRoadParams; import net.osmand.aidlapi.navigation.ABlockedRoad;
import net.osmand.aidlapi.navigation.ANavigationUpdateParams; import net.osmand.aidlapi.navigation.ANavigationUpdateParams;
import net.osmand.aidlapi.navigation.ANavigationVoiceRouterMessageParams; import net.osmand.aidlapi.navigation.ANavigationVoiceRouterMessageParams;
import net.osmand.aidlapi.navigation.AddBlockedRoadParams;
import net.osmand.aidlapi.navigation.MuteNavigationParams; import net.osmand.aidlapi.navigation.MuteNavigationParams;
import net.osmand.aidlapi.navigation.NavigateGpxParams; import net.osmand.aidlapi.navigation.NavigateGpxParams;
import net.osmand.aidlapi.navigation.NavigateParams; import net.osmand.aidlapi.navigation.NavigateParams;
import net.osmand.aidlapi.navigation.NavigateSearchParams; import net.osmand.aidlapi.navigation.NavigateSearchParams;
import net.osmand.aidlapi.navigation.PauseNavigationParams; import net.osmand.aidlapi.navigation.PauseNavigationParams;
import net.osmand.aidlapi.navigation.RemoveBlockedRoadParams;
import net.osmand.aidlapi.navigation.ResumeNavigationParams; import net.osmand.aidlapi.navigation.ResumeNavigationParams;
import net.osmand.aidlapi.navigation.StopNavigationParams; import net.osmand.aidlapi.navigation.StopNavigationParams;
import net.osmand.aidlapi.navigation.UnmuteNavigationParams; import net.osmand.aidlapi.navigation.UnmuteNavigationParams;
@ -1399,7 +1401,7 @@ public class OsmandAidlServiceV2 extends Service implements AidlCallbackListener
} }
@Override @Override
public boolean getBlockedRoads(List<ABlockedRoadParams> blockedRoads) { public boolean getBlockedRoads(List<ABlockedRoad> blockedRoads) {
try { try {
OsmandAidlApi api = getApi("getBlockedRoads"); OsmandAidlApi api = getApi("getBlockedRoads");
return api != null && api.getBlockedRoads(blockedRoads); return api != null && api.getBlockedRoads(blockedRoads);
@ -1408,6 +1410,38 @@ public class OsmandAidlServiceV2 extends Service implements AidlCallbackListener
return false; return false;
} }
} }
@Override
public boolean addRoadBlock(AddBlockedRoadParams params) {
try {
OsmandAidlApi api = getApi("addRoadBlock");
if (params != null && api != null) {
ABlockedRoad road = params.getBlockedRoad();
if (road != null) {
return api.addRoadBlock(road);
}
}
} catch (Exception e) {
handleException(e);
}
return false;
}
@Override
public boolean removeRoadBlock(RemoveBlockedRoadParams params) {
try {
OsmandAidlApi api = getApi("removeRoadBlock");
if (params != null && api != null) {
ABlockedRoad road = params.getBlockedRoad();
if (road != null) {
return api.removeRoadBlock(road);
}
}
} catch (Exception e) {
handleException(e);
}
return false;
}
}; };
private void setCustomization(OsmandAidlApi api, CustomizationInfoParams params) { private void setCustomization(OsmandAidlApi api, CustomizationInfoParams params) {

View file

@ -393,6 +393,7 @@ public class AvoidSpecificRoads {
if (object != null) { if (object != null) {
avoidRoadInfo.id = object.id; avoidRoadInfo.id = object.id;
// avoidRoadInfo.direction = object.directionRoute(0, true); // avoidRoadInfo.direction = object.directionRoute(0, true);
avoidRoadInfo.direction = Double.NaN;
} else { } else {
avoidRoadInfo.id = 0; avoidRoadInfo.id = 0;
avoidRoadInfo.direction = Double.NaN; avoidRoadInfo.direction = Double.NaN;
@ -406,7 +407,7 @@ public class AvoidSpecificRoads {
public static class AvoidRoadInfo { public static class AvoidRoadInfo {
public long id; public long id;
public double direction; public double direction = Double.NaN;
public double latitude; public double latitude;
public double longitude; public double longitude;
public String name; public String name;