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 9284983fef

View file

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