Browse Source

onClick action from mobile notification center

pull/10420/head
ViacheslavKlimov 3 years ago
parent
commit
641008c262
  1. 22
      application/src/main/java/org/thingsboard/server/service/notification/channels/MobileAppNotificationChannel.java
  2. 4
      common/util/src/main/java/org/thingsboard/common/util/JacksonUtil.java

22
application/src/main/java/org/thingsboard/server/service/notification/channels/MobileAppNotificationChannel.java

@ -16,6 +16,7 @@
package org.thingsboard.server.service.notification.channels; package org.thingsboard.server.service.notification.channels;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import com.google.firebase.messaging.FirebaseMessagingException; import com.google.firebase.messaging.FirebaseMessagingException;
import com.google.firebase.messaging.MessagingErrorCode; import com.google.firebase.messaging.MessagingErrorCode;
@ -60,6 +61,19 @@ public class MobileAppNotificationChannel implements NotificationChannel<User, M
@Override @Override
public void sendNotification(User recipient, MobileAppDeliveryMethodNotificationTemplate processedTemplate, NotificationProcessingContext ctx) throws Exception { public void sendNotification(User recipient, MobileAppDeliveryMethodNotificationTemplate processedTemplate, NotificationProcessingContext ctx) throws Exception {
NotificationRequest request = ctx.getRequest(); NotificationRequest request = ctx.getRequest();
NotificationInfo info = request.getInfo();
if (info != null && info.getDashboardId() != null) {
ObjectNode additionalConfig = JacksonUtil.asObject(processedTemplate.getAdditionalConfig());
ObjectNode onClick = JacksonUtil.asObject(additionalConfig.get("onClick"));
if (onClick.get("enabled") == null || !Boolean.parseBoolean(onClick.get("enabled").asText())) {
onClick.put("enabled", true);
onClick.put("linkType", "DASHBOARD");
onClick.put("setEntityIdInState", true);
onClick.put("dashboardId", info.getDashboardId().toString());
additionalConfig.set("onClick", onClick);
}
processedTemplate.setAdditionalConfig(additionalConfig);
}
Notification notification = Notification.builder() Notification notification = Notification.builder()
.requestId(request.getId()) .requestId(request.getId())
.recipientId(recipient.getId()) .recipientId(recipient.getId())
@ -68,7 +82,7 @@ public class MobileAppNotificationChannel implements NotificationChannel<User, M
.subject(processedTemplate.getSubject()) .subject(processedTemplate.getSubject())
.text(processedTemplate.getBody()) .text(processedTemplate.getBody())
.additionalConfig(processedTemplate.getAdditionalConfig()) .additionalConfig(processedTemplate.getAdditionalConfig())
.info(request.getInfo()) .info(info)
.status(NotificationStatus.SENT) .status(NotificationStatus.SENT)
.build(); .build();
notificationService.saveNotification(recipient.getTenantId(), notification); notificationService.saveNotification(recipient.getTenantId(), notification);
@ -114,12 +128,6 @@ public class MobileAppNotificationChannel implements NotificationChannel<User, M
Optional.ofNullable(info.getStateEntityId()).ifPresent(stateEntityId -> { Optional.ofNullable(info.getStateEntityId()).ifPresent(stateEntityId -> {
data.put("stateEntityId", stateEntityId.getId().toString()); data.put("stateEntityId", stateEntityId.getId().toString());
data.put("stateEntityType", stateEntityId.getEntityType().name()); data.put("stateEntityType", stateEntityId.getEntityType().name());
if (!"true".equals(data.get("onClick.enabled")) && info.getDashboardId() != null) {
data.put("onClick.enabled", "true");
data.put("onClick.linkType", "DASHBOARD");
data.put("onClick.setEntityIdInState", "true");
data.put("onClick.dashboardId", info.getDashboardId().toString());
}
}); });
data.put("notificationType", ctx.getNotificationType().name()); data.put("notificationType", ctx.getNotificationType().name());
switch (ctx.getNotificationType()) { switch (ctx.getNotificationType()) {

4
common/util/src/main/java/org/thingsboard/common/util/JacksonUtil.java

@ -231,6 +231,10 @@ public class JacksonUtil {
return node; return node;
} }
public static ObjectNode asObject(JsonNode node) {
return node != null && node.isObject() ? ((ObjectNode) node) : newObjectNode();
}
public static void replaceUuidsRecursively(JsonNode node, Set<String> skippedRootFields, Pattern includedFieldsPattern, UnaryOperator<UUID> replacer, boolean root) { public static void replaceUuidsRecursively(JsonNode node, Set<String> skippedRootFields, Pattern includedFieldsPattern, UnaryOperator<UUID> replacer, boolean root) {
if (node == null) { if (node == null) {
return; return;

Loading…
Cancel
Save