mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2024-11-29 13:26:50 +01:00
Handle notifications with long body
This commit is contained in:
parent
cf61ab9d38
commit
290a90ec0e
@ -28,8 +28,8 @@ public final class WatchXPlusConstants {
|
|||||||
public static final UUID UUID_CHARACTERISTIC_UNKNOWN_3 = UUID.fromString("0000a803-0000-1000-8000-00805f9b34fb");
|
public static final UUID UUID_CHARACTERISTIC_UNKNOWN_3 = UUID.fromString("0000a803-0000-1000-8000-00805f9b34fb");
|
||||||
public static final UUID UUID_CHARACTERISTIC_UNKNOWN_4 = UUID.fromString("0000a804-0000-1000-8000-00805f9b34fb");
|
public static final UUID UUID_CHARACTERISTIC_UNKNOWN_4 = UUID.fromString("0000a804-0000-1000-8000-00805f9b34fb");
|
||||||
|
|
||||||
public static final int NOTIFICATION_CHANNEL_DEFAULT = 7;
|
public static final int NOTIFICATION_CHANNEL_DEFAULT = 0;
|
||||||
public static final int NOTIFICATION_CHANNEL_PHONE_CALL = 1024;
|
public static final int NOTIFICATION_CHANNEL_PHONE_CALL = 10;
|
||||||
|
|
||||||
public static final byte RESPONSE = 0x13;
|
public static final byte RESPONSE = 0x13;
|
||||||
public static final byte REQUEST = 0x31;
|
public static final byte REQUEST = 0x31;
|
||||||
|
@ -142,14 +142,13 @@ public class WatchXPlusDeviceSupport extends AbstractBTLEDeviceSupport {
|
|||||||
|
|
||||||
String senderOrTitle = StringUtils.getFirstOf(notificationSpec.sender, notificationSpec.title);
|
String senderOrTitle = StringUtils.getFirstOf(notificationSpec.sender, notificationSpec.title);
|
||||||
|
|
||||||
String message = StringUtils.truncate(senderOrTitle, 32) + "\0";
|
String message = StringUtils.truncate(senderOrTitle, 14) + "\0";
|
||||||
// TODO: Commented out to simplify testing
|
if (notificationSpec.subject != null) {
|
||||||
// if (notificationSpec.subject != null) {
|
message += StringUtils.truncate(notificationSpec.subject, 20) + ": ";
|
||||||
// message += StringUtils.truncate(notificationSpec.subject, 128) + "\n\n";
|
}
|
||||||
// }
|
if (notificationSpec.body != null) {
|
||||||
// if (notificationSpec.body != null) {
|
message += StringUtils.truncate(notificationSpec.body, 64);
|
||||||
// message += StringUtils.truncate(notificationSpec.body, 128);
|
}
|
||||||
// }
|
|
||||||
|
|
||||||
sendNotification(WatchXPlusConstants.NOTIFICATION_CHANNEL_DEFAULT, message);
|
sendNotification(WatchXPlusConstants.NOTIFICATION_CHANNEL_DEFAULT, message);
|
||||||
}
|
}
|
||||||
@ -159,17 +158,36 @@ public class WatchXPlusDeviceSupport extends AbstractBTLEDeviceSupport {
|
|||||||
TransactionBuilder builder = performInitialized("showNotification");
|
TransactionBuilder builder = performInitialized("showNotification");
|
||||||
byte[] command = WatchXPlusConstants.CMD_NOTIFICATION_TEXT_TASK;
|
byte[] command = WatchXPlusConstants.CMD_NOTIFICATION_TEXT_TASK;
|
||||||
byte[] text = notificationText.getBytes("UTF-8");
|
byte[] text = notificationText.getBytes("UTF-8");
|
||||||
byte[] value = new byte[text.length + 2];
|
byte[] messagePart;
|
||||||
value[0] = (byte)(notificationChannel);
|
|
||||||
// TODO: Split message into 9-byte arrays and send them one by one.
|
|
||||||
// Set the message index to FF to indicate end of message
|
|
||||||
value[1] = (byte) 0xFF;
|
|
||||||
System.arraycopy(text, 0, value, 2, text.length);
|
|
||||||
|
|
||||||
|
int messageLength = text.length;
|
||||||
|
int parts = messageLength / 9;
|
||||||
|
int remainder = messageLength % 9;
|
||||||
|
|
||||||
|
// Increment parts quantity if message length is not multiple of 9
|
||||||
|
if (remainder != 0) {
|
||||||
|
parts++;
|
||||||
|
}
|
||||||
|
for (int messageIndex = 0; messageIndex < parts; messageIndex++) {
|
||||||
|
if(messageIndex+1 != parts || remainder == 0) {
|
||||||
|
messagePart = new byte[11];
|
||||||
|
} else {
|
||||||
|
messagePart = new byte[remainder+2];
|
||||||
|
}
|
||||||
|
|
||||||
|
System.arraycopy(text, messageIndex*9, messagePart, 2, messagePart.length-2);
|
||||||
|
|
||||||
|
if(messageIndex+1 == parts) {
|
||||||
|
messageIndex = 0xFF;
|
||||||
|
}
|
||||||
|
messagePart[0] = (byte)notificationChannel;
|
||||||
|
messagePart[1] = (byte)messageIndex;
|
||||||
builder.write(getCharacteristic(WatchXPlusConstants.UUID_CHARACTERISTIC_WRITE),
|
builder.write(getCharacteristic(WatchXPlusConstants.UUID_CHARACTERISTIC_WRITE),
|
||||||
buildCommand(command,
|
buildCommand(command,
|
||||||
WatchXPlusConstants.KEEP_ALIVE,
|
WatchXPlusConstants.KEEP_ALIVE,
|
||||||
value));
|
messagePart));
|
||||||
|
}
|
||||||
|
|
||||||
performImmediately(builder);
|
performImmediately(builder);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
LOG.warn("Unable to send notification", e);
|
LOG.warn("Unable to send notification", e);
|
||||||
|
Loading…
Reference in New Issue
Block a user