diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/GarminByteBufferReader.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/GarminByteBufferReader.java index 9e12885b9..468de2892 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/GarminByteBufferReader.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/GarminByteBufferReader.java @@ -24,8 +24,6 @@ public class GarminByteBufferReader { } public int readByte() { - if (!byteBuffer.hasRemaining()) throw new IllegalStateException(); - return Byte.toUnsignedInt(byteBuffer.get()); } @@ -34,32 +32,22 @@ public class GarminByteBufferReader { } public int readShort() { - if (byteBuffer.remaining() < 2) throw new IllegalStateException(); - return Short.toUnsignedInt(byteBuffer.getShort()); } public int readInt() { - if (byteBuffer.remaining() < 4) throw new IllegalStateException(); - return byteBuffer.getInt(); } public long readLong() { - if (byteBuffer.remaining() < 8) throw new IllegalStateException(); - return byteBuffer.getLong(); } public float readFloat32() { - if (byteBuffer.remaining() < 4) throw new IllegalStateException(); - return byteBuffer.getFloat(); } public double readFloat64() { - if (byteBuffer.remaining() < 8) throw new IllegalStateException(); - return byteBuffer.getDouble(); } @@ -79,5 +67,4 @@ public class GarminByteBufferReader { return bytes; } - } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/FindMyPhoneCancelMessage.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/FindMyPhoneCancelMessage.java new file mode 100644 index 000000000..9ddc504b6 --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/FindMyPhoneCancelMessage.java @@ -0,0 +1,29 @@ +package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.messages; + + +import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEvent; +import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventFindPhone; + +public class FindMyPhoneCancelMessage extends GFDIMessage { + public FindMyPhoneCancelMessage(GarminMessage garminMessage) { + this.garminMessage = garminMessage; + + this.statusMessage = getStatusMessage(); + } + + public static FindMyPhoneCancelMessage parseIncoming(MessageReader reader, GarminMessage garminMessage) { + return new FindMyPhoneCancelMessage(garminMessage); + } + + @Override + public GBDeviceEvent getGBDeviceEvent() { + final GBDeviceEventFindPhone findPhoneEvent = new GBDeviceEventFindPhone(); + findPhoneEvent.event = GBDeviceEventFindPhone.Event.STOP; + return findPhoneEvent; + } + + @Override + protected boolean generateOutgoing() { + return false; + } +} diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/FindMyPhoneRequestMessage.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/FindMyPhoneRequestMessage.java index 198ebaf95..1d924e622 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/FindMyPhoneRequestMessage.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/FindMyPhoneRequestMessage.java @@ -23,7 +23,7 @@ public class FindMyPhoneRequestMessage extends GFDIMessage { @Override public GBDeviceEvent getGBDeviceEvent() { final GBDeviceEventFindPhone findPhoneEvent = new GBDeviceEventFindPhone(); - findPhoneEvent.event = garminMessage == GarminMessage.FIND_MY_PHONE ? GBDeviceEventFindPhone.Event.START : GBDeviceEventFindPhone.Event.STOP; + findPhoneEvent.event = GBDeviceEventFindPhone.Event.START; return findPhoneEvent; } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/GFDIMessage.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/GFDIMessage.java index 72b01608c..18ce09b6a 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/GFDIMessage.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/messages/GFDIMessage.java @@ -46,11 +46,15 @@ public abstract class GFDIMessage { final int messageType = messageReader.readShort(); try { - GarminMessage garminMessage = GarminMessage.fromId(messageType); - Method m = garminMessage.objectClass.getMethod("parseIncoming", MessageReader.class, GarminMessage.class); + final GarminMessage garminMessage = GarminMessage.fromId(messageType); + if (garminMessage == null) { + LOG.warn("Unknown message type {}, message {}", messageType, message); + return new UnhandledMessage(messageType); + } + final Method m = garminMessage.objectClass.getMethod("parseIncoming", MessageReader.class, GarminMessage.class); return garminMessage.objectClass.cast(m.invoke(null, messageReader, garminMessage)); - } catch (Exception e) { - LOG.error("UNHANDLED GFDI MESSAGE TYPE {}, MESSAGE {}", messageType, message); + } catch (final Exception e) { + LOG.error("UNHANDLED GFDI MESSAGE TYPE {}, MESSAGE {}", messageType, message, e); return new UnhandledMessage(messageType); } finally { messageReader.warnIfLeftover(messageType); @@ -110,8 +114,8 @@ public abstract class GFDIMessage { NOTIFICATION_CONTROL(5034, NotificationControlMessage.class), NOTIFICATION_DATA(5035, NotificationDataMessage.class), NOTIFICATION_SUBSCRIPTION(5036, NotificationSubscriptionMessage.class), - FIND_MY_PHONE(5039, FindMyPhoneRequestMessage.class), - CANCEL_FIND_MY_PHONE(5040, FindMyPhoneRequestMessage.class), + FIND_MY_PHONE_REQUEST(5039, FindMyPhoneRequestMessage.class), + FIND_MY_PHONE_CANCEL(5040, FindMyPhoneCancelMessage.class), MUSIC_CONTROL(5041, MusicControlMessage.class), MUSIC_CONTROL_CAPABILITIES(5042, MusicControlCapabilitiesMessage.class), PROTOBUF_REQUEST(5043, ProtobufMessage.class),