mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2024-08-04 13:02:12 +02:00
Improve notification support for InfiniTime (PineTime) :
- InfiniTime 0.9 now supports messages up to 100 chars (instead of max 18 previously) - Remove the hack that was implemented as a workaround to a bug in InfiniTime that would ignore the last character of the notification message (https://github.com/JF002/Pinetime/issues/109). These 2 features are enabled only if the firmware version is >= 0.9.
This commit is contained in:
parent
c85e30cb07
commit
9d6ac2b985
@ -24,6 +24,7 @@ import android.widget.Toast;
|
|||||||
|
|
||||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
@ -72,6 +73,10 @@ public class PineTimeJFSupport extends AbstractBTLEDeviceSupport implements DfuL
|
|||||||
private static final Logger LOG = LoggerFactory.getLogger(PineTimeJFSupport.class);
|
private static final Logger LOG = LoggerFactory.getLogger(PineTimeJFSupport.class);
|
||||||
private final GBDeviceEventVersionInfo versionCmd = new GBDeviceEventVersionInfo();
|
private final GBDeviceEventVersionInfo versionCmd = new GBDeviceEventVersionInfo();
|
||||||
private final DeviceInfoProfile<PineTimeJFSupport> deviceInfoProfile;
|
private final DeviceInfoProfile<PineTimeJFSupport> deviceInfoProfile;
|
||||||
|
private final int MaxNotificationLength = 100;
|
||||||
|
private int firmwareVersionMajor = 0;
|
||||||
|
private int firmwareVersionMinor = 0;
|
||||||
|
private int firmwareVersionPatch = 0;
|
||||||
/**
|
/**
|
||||||
* These are used to keep track when long strings haven't changed,
|
* These are used to keep track when long strings haven't changed,
|
||||||
* thus avoiding unnecessary transfers that are (potentially) very slow.
|
* thus avoiding unnecessary transfers that are (potentially) very slow.
|
||||||
@ -227,8 +232,19 @@ public class PineTimeJFSupport extends AbstractBTLEDeviceSupport implements DfuL
|
|||||||
@Override
|
@Override
|
||||||
public void onNotification(NotificationSpec notificationSpec) {
|
public void onNotification(NotificationSpec notificationSpec) {
|
||||||
TransactionBuilder builder = new TransactionBuilder("notification");
|
TransactionBuilder builder = new TransactionBuilder("notification");
|
||||||
NewAlert alert = new NewAlert(AlertCategory.CustomHuami, 1, notificationSpec.body + " "); // HACK: no idea why the last byte is swallowed
|
String message = notificationSpec.body;
|
||||||
|
if(!IsFirmwareAtLeastVersion0_9()) {
|
||||||
|
// Firmware versions prior to 0.9 ignore the last characters of the notification message
|
||||||
|
// Add an space character so that the whole message will be displayed
|
||||||
|
message += " ";
|
||||||
|
}
|
||||||
|
NewAlert alert = new NewAlert(AlertCategory.CustomHuami, 1, message);
|
||||||
AlertNotificationProfile<?> profile = new AlertNotificationProfile<>(this);
|
AlertNotificationProfile<?> profile = new AlertNotificationProfile<>(this);
|
||||||
|
if(IsFirmwareAtLeastVersion0_9()) {
|
||||||
|
// InfiniTime 0.9+ support notification message of up to 100 characters
|
||||||
|
// Instead of 18 by default
|
||||||
|
profile.setMaxLength(MaxNotificationLength);
|
||||||
|
}
|
||||||
profile.newAlert(builder, alert, OverflowStrategy.TRUNCATE);
|
profile.newAlert(builder, alert, OverflowStrategy.TRUNCATE);
|
||||||
builder.queue(getQueue());
|
builder.queue(getQueue());
|
||||||
}
|
}
|
||||||
@ -573,9 +589,24 @@ public class PineTimeJFSupport extends AbstractBTLEDeviceSupport implements DfuL
|
|||||||
LOG.warn("Device info: " + info);
|
LOG.warn("Device info: " + info);
|
||||||
versionCmd.hwVersion = info.getHardwareRevision();
|
versionCmd.hwVersion = info.getHardwareRevision();
|
||||||
versionCmd.fwVersion = info.getFirmwareRevision();
|
versionCmd.fwVersion = info.getFirmwareRevision();
|
||||||
|
|
||||||
|
if(versionCmd.fwVersion != null && !versionCmd.fwVersion.isEmpty()) {
|
||||||
|
// FW version format : "major.minor.patch". Ex : "0.8.2"
|
||||||
|
String[] tokens = StringUtils.split(versionCmd.fwVersion, ".");
|
||||||
|
if(tokens.length == 3) {
|
||||||
|
firmwareVersionMajor = Integer.parseInt(tokens[0]);
|
||||||
|
firmwareVersionMinor = Integer.parseInt(tokens[1]);
|
||||||
|
firmwareVersionPatch = Integer.parseInt(tokens[2]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
handleGBDeviceEvent(versionCmd);
|
handleGBDeviceEvent(versionCmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean IsFirmwareAtLeastVersion0_9() {
|
||||||
|
return firmwareVersionMajor > 0 || firmwareVersionMinor >= 9;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Nordic DFU needs this function to log DFU-related messages
|
* Nordic DFU needs this function to log DFU-related messages
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user