Looks like it's called for each event:
Thanks, so would need a code change to change that?
Correct.
Great, so having looked at that, I should just be able to remove that if statement and proceeding code block?
if (position != null && geocodeOnRequest && Context.getGeocoder() != null && position.getAddress() == null) {
position.setAddress(Context.getGeocoder()
.getAddress(position.getLatitude(), position.getLongitude(), null));
}
I think so.
I've moved it into here, which seems to have done the trick - it now only does a lookup if the event is one that is sent as a notification:
for (long userId : users) {
if ((event.getGeofenceId() == 0
|| Context.getGeofenceManager().checkItemPermission(userId, event.getGeofenceId()))
&& (event.getMaintenanceId() == 0
|| Context.getMaintenancesManager().checkItemPermission(userId, event.getMaintenanceId()))) {
if (usersToForward != null) {
usersToForward.add(userId);
}
final Set<String> notificators = new HashSet<>();
for (long notificationId : getEffectiveNotifications(userId, deviceId, event.getServerTime())) {
Notification notification = getById(notificationId);
if (getById(notificationId).getType().equals(event.getType())) {
--> if (position != null && geocodeOnRequest && Context.getGeocoder() != null && position.getAddress() == null) {
--> position.setAddress(Context.getGeocoder()
--> .getAddress(position.getLatitude(), position.getLongitude(), null));
--> }
boolean filter = false;
if (event.getType().equals(Event.TYPE_ALARM)) {
String alarmsAttribute = notification.getString("alarms");
if (alarmsAttribute == null) {
filter = true;
} else {
List<String> alarms = Arrays.asList(alarmsAttribute.split(","));
filter = !alarms.contains(event.getString(Position.KEY_ALARM));
}
Feel free to send a PR.
I have opencage geocoder set with geocoder.onRequest set to true, however it is constantly being called for alarm events, regardless of if a notification is sent or not.
Is there a way to not geocode for alarm events if no notification is sent?