diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/profiles/alertnotification/AlertNotificationProfile.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/profiles/alertnotification/AlertNotificationProfile.java index 48b11552..5f12e155 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/profiles/alertnotification/AlertNotificationProfile.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/profiles/alertnotification/AlertNotificationProfile.java @@ -33,12 +33,16 @@ import nodomain.freeyourgadget.gadgetbridge.util.StringUtils; public class AlertNotificationProfile extends AbstractBleProfile { private static final Logger LOG = LoggerFactory.getLogger(AlertNotificationProfile.class); - private static final int MAX_MSG_LENGTH = 18; + private int maxLength = 18; // Mi2-ism? public AlertNotificationProfile(T support) { super(support); } + public void setMaxLength(int maxLength) { + this.maxLength = maxLength; + } + public void configure(TransactionBuilder builder, AlertNotificationControl control) { BluetoothGattCharacteristic characteristic = getCharacteristic(GattCharacteristic.UUID_CHARACTERISTIC_ALERT_NOTIFICATION_CONTROL_POINT); if (characteristic != null) { @@ -57,21 +61,21 @@ public class AlertNotificationProfile exten BluetoothGattCharacteristic characteristic = getCharacteristic(GattCharacteristic.UUID_CHARACTERISTIC_NEW_ALERT); if (characteristic != null) { String message = StringUtils.ensureNotNull(alert.getMessage()); - if (message.length() > MAX_MSG_LENGTH && strategy == OverflowStrategy.TRUNCATE) { - message = StringUtils.truncate(message, MAX_MSG_LENGTH); + if (message.length() > maxLength && strategy == OverflowStrategy.TRUNCATE) { + message = StringUtils.truncate(message, maxLength); } - int numChunks = message.length() / MAX_MSG_LENGTH; - if (message.length() % MAX_MSG_LENGTH > 0) { + int numChunks = message.length() / maxLength; + if (message.length() % maxLength > 0) { numChunks++; } try { boolean hasAlerted = false; for (int i = 0; i < numChunks; i++) { - int offset = i * MAX_MSG_LENGTH; + int offset = i * maxLength; int restLength = message.length() - offset; - message = message.substring(offset, offset + Math.min(MAX_MSG_LENGTH, restLength)); + message = message.substring(offset, offset + Math.min(maxLength, restLength)); if (hasAlerted && message.length() == 0) { // no need to do it again when there is no text content break; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/amazfitbip/AmazfitBipSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/amazfitbip/AmazfitBipSupport.java index bd23a9c0..005bbb28 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/amazfitbip/AmazfitBipSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/amazfitbip/AmazfitBipSupport.java @@ -33,7 +33,6 @@ import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder; import nodomain.freeyourgadget.gadgetbridge.service.devices.common.SimpleNotification; import nodomain.freeyourgadget.gadgetbridge.service.devices.miband.NotificationStrategy; import nodomain.freeyourgadget.gadgetbridge.service.devices.miband2.MiBand2Support; -import nodomain.freeyourgadget.gadgetbridge.util.NotificationUtils; import nodomain.freeyourgadget.gadgetbridge.util.StringUtils; public class AmazfitBipSupport extends MiBand2Support { @@ -48,13 +47,17 @@ public class AmazfitBipSupport extends MiBand2Support { onAlarmClock(notificationSpec); return; } - String message = NotificationUtils.getPreferredTextFor(notificationSpec, 40, 40, getContext()).trim(); - // Fixup purging notification text in getPreferredTextFor() in case of UNKNOWN - if (notificationSpec.type == NotificationType.UNKNOWN) { - message = StringUtils.getFirstOf(notificationSpec.title, notificationSpec.body); + String senderOrTiltle = StringUtils.getFirstOf(notificationSpec.sender, notificationSpec.title); + String message = StringUtils.truncate(senderOrTiltle, 32) + "\0"; + if (notificationSpec.subject != null) { + message += StringUtils.truncate(notificationSpec.subject, 128) + "\n\n"; } + if (notificationSpec.body != null) { + message += StringUtils.truncate(notificationSpec.body, 128); + } + String origin = notificationSpec.type.getGenericType(); SimpleNotification simpleNotification = new SimpleNotification(message, BLETypeConversions.toAlertCategory(notificationSpec.type)); performPreferredNotification(origin + " received", origin, simpleNotification, MiBand2Service.ALERT_LEVEL_MESSAGE, null); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/amazfitbip/AmazfitBipTextNotificationStrategy.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/amazfitbip/AmazfitBipTextNotificationStrategy.java index eb3da164..a3554932 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/amazfitbip/AmazfitBipTextNotificationStrategy.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/amazfitbip/AmazfitBipTextNotificationStrategy.java @@ -46,6 +46,7 @@ class AmazfitBipTextNotificationStrategy extends Mi2TextNotificationStrategy { @Override protected void sendAlert(@NonNull SimpleNotification simpleNotification, TransactionBuilder builder) { AlertNotificationProfile profile = new AlertNotificationProfile<>(getSupport()); + profile.setMaxLength(255); // TODO: find out real limit, certainly it is more than 18 which is default AlertCategory category = simpleNotification.getAlertCategory(); switch (simpleNotification.getAlertCategory()) { @@ -59,6 +60,6 @@ class AmazfitBipTextNotificationStrategy extends Mi2TextNotificationStrategy { category = AlertCategory.SMS; } NewAlert alert = new NewAlert(category, 1, simpleNotification.getMessage()); - profile.newAlert(builder, alert, OverflowStrategy.MAKE_MULTIPLE); + profile.newAlert(builder, alert, OverflowStrategy.TRUNCATE); } }