diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/QHybridSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/QHybridSupport.java index a132c7a3f..fb0ca45a6 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/QHybridSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/QHybridSupport.java @@ -40,6 +40,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.BatteryState; import nodomain.freeyourgadget.gadgetbridge.model.GenericItem; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; import nodomain.freeyourgadget.gadgetbridge.model.RecordedDataTypes; +import nodomain.freeyourgadget.gadgetbridge.service.btle.GattCallback; import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder; import nodomain.freeyourgadget.gadgetbridge.service.btle.actions.SetDeviceStateAction; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.WatchAdapter; @@ -73,6 +74,7 @@ public class QHybridSupport extends QHybridBaseSupport { public static final String ITEM_EXTENDED_VIBRATION_SUPPORT = "EXTENDED_VIBRATION"; public static final String ITEM_HAS_ACTIVITY_HAND = "HAS_ACTIVITY_HAND"; public static final String ITEM_USE_ACTIVITY_HAND = "USE_ACTIVITY_HAND"; + public static final String ITEM_LAST_HEARTBEAT = "LAST_HEARTBEAT"; private static final Logger logger = LoggerFactory.getLogger(QHybridSupport.class); @@ -354,9 +356,8 @@ public class QHybridSupport extends QHybridBaseSupport { @Override public void onFindDevice(boolean start) { try { - if (start && !watchAdapter.supportsExtendedVibration()) { + if (watchAdapter.supportsExtendedVibration()) { GB.toast("Device does not support brr brr", Toast.LENGTH_SHORT, GB.INFO); - return; } } catch (UnsupportedOperationException e) { notifiyException(e); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/adapter/WatchAdapter.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/adapter/WatchAdapter.java index f28830666..663bd1d64 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/adapter/WatchAdapter.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/adapter/WatchAdapter.java @@ -40,6 +40,7 @@ public abstract class WatchAdapter { public abstract void syncNotificationSettings(); public abstract void onTestNewFunction(); + public abstract boolean supportsFindDevice(); public abstract boolean supportsExtendedVibration(); public abstract boolean supportsActivityHand(); public abstract String getModelName(); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/adapter/fossil/FossilWatchAdapter.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/adapter/fossil/FossilWatchAdapter.java index 6d73c4dd8..304c8fa50 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/adapter/fossil/FossilWatchAdapter.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/adapter/fossil/FossilWatchAdapter.java @@ -5,17 +5,18 @@ import android.bluetooth.BluetoothGattCharacteristic; import android.util.Log; import android.widget.Toast; -import java.util.ArrayDeque; +import java.text.DateFormat; import java.util.ArrayList; import java.util.Date; import java.util.GregorianCalendar; -import java.util.Queue; import java.util.TimeZone; import nodomain.freeyourgadget.gadgetbridge.GBException; import nodomain.freeyourgadget.gadgetbridge.devices.qhybrid.NotificationConfiguration; import nodomain.freeyourgadget.gadgetbridge.devices.qhybrid.PackageConfigHelper; +import nodomain.freeyourgadget.gadgetbridge.entities.NotificationFilter; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; +import nodomain.freeyourgadget.gadgetbridge.model.GenericItem; import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.QHybridSupport; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.WatchAdapter; @@ -23,9 +24,8 @@ import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.Req import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.FossilRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.configuration.ConfigurationGetRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.configuration.ConfigurationPutRequest; -import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FileGetRequest; -import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FileLookupRequest; -import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FilePrepareRequest; +import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FileCloseRequest; +import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FileDeleteRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FilePutRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.notification.NotificationFilterPutRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.notification.PlayNotificationRequest; @@ -47,10 +47,13 @@ public class FossilWatchAdapter extends WatchAdapter { @Override public void initialize() { - playPairingAnimation(); - queueWrite(new ConfigurationGetRequest(this)); - - syncNotificationSettings(); + // playPairingAnimation(); + // queueWrite(new FileDeleteRequest((short) 0x0200)); + // queueWrite(new ConfigurationGetRequest(this)); +// + // syncNotificationSettings(); + getDeviceSupport().getDevice().setState(GBDevice.State.INITIALIZED); + getDeviceSupport().getDevice().sendDeviceUpdateIntent(getContext()); } @Override @@ -153,26 +156,20 @@ public class FossilWatchAdapter extends WatchAdapter { PackageConfigHelper helper = new PackageConfigHelper(getContext()); final ArrayList configurations = helper.getNotificationConfigurations(); if (configurations.size() == 1) configurations.add(configurations.get(0)); - queueWrite(new FilePrepareRequest((short) 0x0C00) { + queueWrite(new NotificationFilterPutRequest(configurations, FossilWatchAdapter.this) { @Override - public void onPrepare() { - super.onPrepare(); - queueWrite(new NotificationFilterPutRequest(configurations, FossilWatchAdapter.this) { - @Override - public void onFilePut(boolean success) { - super.onFilePut(success); + public void onFilePut(boolean success) { + super.onFilePut(success); - if (!success) { - GB.toast("error writing notification settings", Toast.LENGTH_SHORT, GB.ERROR); + if (!success) { + GB.toast("error writing notification settings", Toast.LENGTH_SHORT, GB.ERROR); - getDeviceSupport().getDevice().setState(GBDevice.State.NOT_CONNECTED); - getDeviceSupport().getDevice().sendDeviceUpdateIntent(getContext()); - } + getDeviceSupport().getDevice().setState(GBDevice.State.NOT_CONNECTED); + getDeviceSupport().getDevice().sendDeviceUpdateIntent(getContext()); + } - getDeviceSupport().getDevice().setState(GBDevice.State.INITIALIZED); - getDeviceSupport().getDevice().sendDeviceUpdateIntent(getContext()); - } - }); + getDeviceSupport().getDevice().setState(GBDevice.State.INITIALIZED); + getDeviceSupport().getDevice().sendDeviceUpdateIntent(getContext()); } }); } catch (GBException e) { @@ -182,25 +179,23 @@ public class FossilWatchAdapter extends WatchAdapter { @Override public void onTestNewFunction() { - try { - queueWrite(new NotificationFilterPutRequest(new PackageConfigHelper(getContext()).getNotificationConfigurations(), this)); - } catch (GBException e) { - e.printStackTrace(); - } + } + + @Override + public boolean supportsFindDevice() { + return false; } @Override public boolean supportsExtendedVibration() { - /*String modelNumber = getDeviceSupport().getDevice().getModel(); + String modelNumber = getDeviceSupport().getDevice().getModel(); switch (modelNumber) { case "HW.0.0": return true; case "HL.0.0": return false; } - throw new UnsupportedOperationException("model " + modelNumber + " not supported");*/ - - return false; + throw new UnsupportedOperationException("model " + modelNumber + " not supported"); } @Override @@ -229,15 +224,19 @@ public class FossilWatchAdapter extends WatchAdapter { @Override public void onFetchActivityData() { - NotificationConfiguration config = new NotificationConfiguration((short) 0, (short) 0, (short) 0, null); - config.setPackageName("org.telegram.messenger"); - playNotification(config); + + // queueWrite(new ConfigurationPutRequest(new ConfigurationPutRequest.ConfigItem[0], this)); + queueWrite(new ConfigurationPutRequest(new ConfigurationPutRequest.VibrationStrengthConfigItem((byte) 100), this)); // queueWrite(new ConfigurationGetRequest(this)); } @Override public boolean onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) { switch (characteristic.getUuid().toString()) { + case "3dda0006-957f-7d4a-34a6-74696673696d": { + handleBackgroundCharacteristic(characteristic); + break; + } case "3dda0002-957f-7d4a-34a6-74696673696d": { break; } @@ -251,13 +250,14 @@ public class FossilWatchAdapter extends WatchAdapter { } catch (RuntimeException e) { e.printStackTrace(); getDeviceSupport().notifiyException(e); + GB.toast(fossilRequest.getName() + " failed", Toast.LENGTH_SHORT, GB.ERROR); requestFinished = true; } if (requestFinished) { log(fossilRequest.getName() + " finished"); fossilRequest = null; - }else{ + } else { return true; } } @@ -271,11 +271,26 @@ public class FossilWatchAdapter extends WatchAdapter { return true; } + private void handleBackgroundCharacteristic(BluetoothGattCharacteristic characteristic){ + byte[] value = characteristic.getValue(); + switch (value[1]){ + case 2: { + byte syncId = value[2]; + getDeviceSupport().getDevice().addDeviceInfo(new GenericItem(QHybridSupport.ITEM_LAST_HEARTBEAT, DateFormat.getTimeInstance().format(new Date()))); + break; + } + case 8: { + + break; + } + } + } + private void log(String message) { Log.d("FossilWatchAdapter", message); } - public void queueWrite(Request request){ + public void queueWrite(Request request) { this.queueWrite(request, false); } @@ -287,10 +302,10 @@ public class FossilWatchAdapter extends WatchAdapter { } } else { if (fossilRequest != null) { - log( "queing request: " + request.getName()); - if(priorise){ + log("queing request: " + request.getName()); + if (priorise) { requestQueue.add(0, request); - }else { + } else { requestQueue.add(request); } return; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/adapter/misfit/MisfitWatchAdapter.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/adapter/misfit/MisfitWatchAdapter.java index 7e17c57d2..2ccae55ac 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/adapter/misfit/MisfitWatchAdapter.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/adapter/misfit/MisfitWatchAdapter.java @@ -397,6 +397,11 @@ public class MisfitWatchAdapter extends WatchAdapter { } + @Override + public boolean supportsFindDevice() { + return supportsExtendedVibration(); + } + @Override public boolean supportsExtendedVibration() { String modelNumber = getDeviceSupport().getDevice().getModel(); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/requests/fossil/FossilRequest.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/requests/fossil/FossilRequest.java index a9a3d1cab..5a4ba18b6 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/requests/fossil/FossilRequest.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/requests/fossil/FossilRequest.java @@ -1,7 +1,15 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil; +import java.util.UUID; + import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.Request; public abstract class FossilRequest extends Request { public abstract boolean isFinished(); + + + @Override + public UUID getRequestUUID() { + return UUID.fromString("3dda0003-957f-7d4a-34a6-74696673696d"); + } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/requests/fossil/configuration/ConfigurationPutRequest.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/requests/fossil/configuration/ConfigurationPutRequest.java index 65b57aacd..d212511f6 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/requests/fossil/configuration/ConfigurationPutRequest.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/requests/fossil/configuration/ConfigurationPutRequest.java @@ -8,6 +8,7 @@ import java.util.ArrayList; import java.util.HashMap; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter; +import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FileCloseAndPutRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FilePutRequest; public class ConfigurationPutRequest extends FilePutRequest { @@ -57,15 +58,25 @@ public class ConfigurationPutRequest extends FilePutRequest { } public ConfigurationPutRequest(ConfigItem item, FossilWatchAdapter adapter) { - super((short) 0x0800, createFileContent(item), adapter); + super((short) 0x0800, createFileContent(new ConfigItem[]{item}), adapter); } - public static byte[] createFileContent(ConfigItem item) { - ByteBuffer buffer = ByteBuffer.allocate(item.getItemSize() + 3); + public ConfigurationPutRequest(ConfigItem[] items, FossilWatchAdapter adapter) { + super((short) 0x0800, createFileContent(items), adapter); + } + + private static byte[] createFileContent(ConfigItem[] items) { + int overallSize = 0; + for(ConfigItem item : items){ + overallSize += item.getItemSize() + 3; + } + ByteBuffer buffer = ByteBuffer.allocate(overallSize); buffer.order(ByteOrder.LITTLE_ENDIAN); - buffer.putShort(item.getId()); - buffer.put((byte) item.getItemSize()); - buffer.put(item.getContent()); + for(ConfigItem item : items){ + buffer.putShort(item.getId()); + buffer.put((byte) item.getItemSize()); + buffer.put(item.getContent()); + } return buffer.array(); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/requests/fossil/file/FileCloseAndPutRequest.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/requests/fossil/file/FileCloseAndPutRequest.java new file mode 100644 index 000000000..340c4fe7b --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/requests/fossil/file/FileCloseAndPutRequest.java @@ -0,0 +1,37 @@ +package nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file; + +import android.widget.Toast; + +import nodomain.freeyourgadget.gadgetbridge.devices.qhybrid.NotificationConfiguration; +import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; +import nodomain.freeyourgadget.gadgetbridge.service.DeviceSupport; +import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter; +import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.notification.NotificationFilterPutRequest; +import nodomain.freeyourgadget.gadgetbridge.util.GB; + +public class FileCloseAndPutRequest extends FileCloseRequest { + FossilWatchAdapter adapter; + byte[] data; + + public FileCloseAndPutRequest(short fileHandle, byte[] data, FossilWatchAdapter adapter) { + super(fileHandle); + this.adapter = adapter; + this.data = data; + } + + @Override + public void onPrepare() { + super.onPrepare(); + adapter.queueWrite(new FilePutRequest(getHandle(), this.data, adapter) { + @Override + public void onFilePut(boolean success) { + super.onFilePut(success); + FileCloseAndPutRequest.this.onFilePut(success); + } + }); + } + + public void onFilePut(boolean success){ + + } +} diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/requests/fossil/file/FilePrepareRequest.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/requests/fossil/file/FileCloseRequest.java similarity index 92% rename from app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/requests/fossil/file/FilePrepareRequest.java rename to app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/requests/fossil/file/FileCloseRequest.java index ab0899e5c..d6742db15 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/requests/fossil/file/FilePrepareRequest.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/requests/fossil/file/FileCloseRequest.java @@ -9,11 +9,11 @@ import java.util.UUID; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.Request; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.FossilRequest; -public class FilePrepareRequest extends FossilRequest { +public class FileCloseRequest extends FossilRequest { private boolean isFinished = false; private short handle; - public FilePrepareRequest(short fileHandle) { + public FileCloseRequest(short fileHandle) { this.handle = fileHandle; ByteBuffer buffer = this.createBuffer(); buffer.putShort(fileHandle); @@ -21,6 +21,10 @@ public class FilePrepareRequest extends FossilRequest { this.data = buffer.array(); } + public short getHandle() { + return handle; + } + @Override public void handleResponse(BluetoothGattCharacteristic characteristic) { super.handleResponse(characteristic); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/requests/fossil/file/FileDeleteRequest.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/requests/fossil/file/FileDeleteRequest.java new file mode 100644 index 000000000..1b8f18599 --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/requests/fossil/file/FileDeleteRequest.java @@ -0,0 +1,59 @@ +package nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file; + +import android.bluetooth.BluetoothGattCharacteristic; + +import java.nio.ByteBuffer; +import java.nio.ByteOrder; + +import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.FossilRequest; + +public class FileDeleteRequest extends FossilRequest { + private boolean finished = false; + private short handle; + + public FileDeleteRequest(short handle) { + this.handle = handle; + + ByteBuffer buffer = createBuffer(); + + buffer.putShort(handle); + + this.data = buffer.array(); + } + + @Override + public void handleResponse(BluetoothGattCharacteristic characteristic) { + super.handleResponse(characteristic); + if(!characteristic.getUuid().toString().equals("3dda0003-957f-7d4a-34a6-74696673696d")) + throw new RuntimeException("wrong response UUID"); + byte[] value = characteristic.getValue(); + + if(value.length != 4) throw new RuntimeException("wrong response length"); + + if(value[0] != (byte) 0x8B) throw new RuntimeException("wrong response start"); + + ByteBuffer buffer = ByteBuffer.wrap(value); + buffer.order(ByteOrder.LITTLE_ENDIAN); + + if(buffer.getShort(1) != this.handle) throw new RuntimeException("wrong response handle"); + + if(buffer.get(3) != 0) throw new RuntimeException("wrong response status: " + buffer.get(3)); + + this.finished = true; + } + + @Override + public boolean isFinished() { + return finished; + } + + @Override + public byte[] getStartSequence() { + return new byte[]{(byte) 0x0B}; + } + + @Override + public int getPayloadLength() { + return 3; + } +} diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/requests/fossil/file/FileLookupAndGetRequest.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/requests/fossil/file/FileLookupAndGetRequest.java index a2121eaae..1232c5f1e 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/requests/fossil/file/FileLookupAndGetRequest.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/requests/fossil/file/FileLookupAndGetRequest.java @@ -14,7 +14,7 @@ public abstract class FileLookupAndGetRequest extends FileLookupRequest { public void handleFileData(byte[] fileData) { FileLookupAndGetRequest.this.handleFileData(fileData); } - }); + }, true); } abstract public void handleFileData(byte[] fileData); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/requests/fossil/file/FilePutRequest.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/requests/fossil/file/FilePutRequest.java index 10b4d587e..a9fd6a389 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/requests/fossil/file/FilePutRequest.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/requests/fossil/file/FilePutRequest.java @@ -161,6 +161,7 @@ public class FilePutRequest extends FossilRequest { break; } case 9: { + this.onFilePut(false); throw new RuntimeException("file put timeout"); /*timeout = true; ByteBuffer buffer2 = ByteBuffer.allocate(3); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/requests/fossil/notification/NotificationFilterPutRequest.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/requests/fossil/notification/NotificationFilterPutRequest.java index 25bf3fbbe..bd90142e1 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/requests/fossil/notification/NotificationFilterPutRequest.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/requests/fossil/notification/NotificationFilterPutRequest.java @@ -7,6 +7,7 @@ import java.util.zip.CRC32; import nodomain.freeyourgadget.gadgetbridge.devices.qhybrid.NotificationConfiguration; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter; +import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FileCloseAndPutRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FilePutRequest; public class NotificationFilterPutRequest extends FilePutRequest {