*/
private void updateTriggerChannelsWithTransition(TransitionMessage message) {
String regionName = message.getRegionName();
- triggerRegionChannel(regionName, message.getEvent());
+ triggerRegionChannel(regionName, message.getEvent(), true);
}
/**
*
* @param regionName Region name
* @param event Occurred event
+ * @param forced Force channel triggering in case the transition event is received from the mobile application.
*/
- private void triggerRegionChannel(@NonNull String regionName, @NonNull String event) {
+ private void triggerRegionChannel(@NonNull String regionName, @NonNull String event, boolean forced) {
Boolean lastState = lastTriggeredStates.get(regionName);
Boolean newState = EVENT_ENTER.equals(event);
- if (!newState.equals(lastState) && lastState != null) {
+ if (!newState.equals(lastState) || forced) {
String payload = regionName + "/" + event;
triggerChannel(CHANNEL_REGION_TRIGGER, payload);
lastTriggeredStates.put(regionName, newState);
// convert into meters which is the unit of the calculated distance
double radiusMeter = convertToMeters(ConfigHelper.getRegionRadius(c.getConfiguration()));
if (radiusMeter > newDistance) {
- triggerRegionChannel(regionName, EVENT_ENTER);
+ triggerRegionChannel(regionName, EVENT_ENTER, false);
} else {
- triggerRegionChannel(regionName, EVENT_LEAVE);
+ triggerRegionChannel(regionName, EVENT_LEAVE, false);
}
}
}