add option to remove of inner callback from RoutingHelper if no aidl callbacks registered.

This commit is contained in:
madwasp79 2019-04-08 12:31:21 +03:00
parent 44885666e1
commit cf10d7394b
2 changed files with 19 additions and 14 deletions

View file

@ -26,6 +26,7 @@ import android.view.View;
import android.widget.ArrayAdapter;
import java.util.HashMap;
import java.util.Map.Entry;
import net.osmand.CallbackWithObject;
import net.osmand.IndexConstants;
import net.osmand.PlatformUtil;
@ -1930,10 +1931,13 @@ public class OsmandAidlApi {
if (params.isSubscribeToUpdates()) {
updateCallbackId++;
callbacks.put(updateCallbackId, callback);
startNavigationalUpdates(updateCallbackId);
startNavigationalUpdates();
return updateCallbackId;
} else {
callbacks.remove(params.getCallbackId());
if (callbacks.size() == 0) {
navUpdateListener = null;
}
return -1;
}
}
@ -1944,14 +1948,14 @@ public class OsmandAidlApi {
return callbacks.size() > 0;
}
private void startNavigationalUpdates(final long updateCallbackId) {
private void startNavigationalUpdates() {
final ADirectionInfo directionInfo = new ADirectionInfo(-1, -1, false);
final NextDirectionInfo baseNdi = new NextDirectionInfo();
if (navUpdateListener == null) {
navUpdateListener = new NavUpdateListener() {
@Override
public void onNavUpdate() {
RoutingHelper rh = app.getRoutingHelper();
if (callbacks.containsKey(updateCallbackId)) {
if (rh.isDeviatedFromRoute()) {
directionInfo.setTurnType(TurnType.OFFR);
directionInfo.setDistanceTo((int) rh.getRouteDeviation());
@ -1962,8 +1966,9 @@ public class OsmandAidlApi {
directionInfo.setTurnType(ndi.directionInfo.getTurnType().getValue());
}
}
for (Entry<Long, IOsmAndAidlCallback> cb : callbacks.entrySet()) {
try {
callbacks.get(updateCallbackId).updateNavigationInfo(directionInfo);
cb.getValue().updateNavigationInfo(directionInfo);
} catch (Exception e) {
LOG.debug(e.getMessage(), e);
}
@ -1971,6 +1976,7 @@ public class OsmandAidlApi {
}
};
}
}
public interface NavUpdateListener {
void onNavUpdate();

View file

@ -11,7 +11,6 @@ import android.os.RemoteException;
import android.support.annotation.Nullable;
import net.osmand.PlatformUtil;
import net.osmand.aidl.OsmandAidlApi.DirectionsUpdateCallback;
import net.osmand.aidl.OsmandAidlApi.GpxBitmapCreatedCallback;
import net.osmand.aidl.OsmandAidlApi.OsmandAppInitCallback;
import net.osmand.aidl.OsmandAidlApi.SearchCompleteCallback;