diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/asteroidos/AsteroidOSConstants.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/asteroidos/AsteroidOSConstants.java index ebd2f9ec7..778dbe6b2 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/asteroidos/AsteroidOSConstants.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/asteroidos/AsteroidOSConstants.java @@ -16,7 +16,8 @@ public class AsteroidOSConstants { "dory", "firefish", "harmony", "inharmony", "narwhal", "ray", "sawfish", "sawshark", "skipjack", "tunny", "mooneye", "swift", - "minnow", "sprat", "tetra" + "minnow", "sprat", "tetra", "pike", "hoki", + "koi", "ayu" }; /** diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/asteroidos/AsteroidOSMediaCommand.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/asteroidos/AsteroidOSMediaCommand.java index c23c03455..54d5a6c70 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/asteroidos/AsteroidOSMediaCommand.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/asteroidos/AsteroidOSMediaCommand.java @@ -1,8 +1,6 @@ package nodomain.freeyourgadget.gadgetbridge.devices.asteroidos; -import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEvent; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventMusicControl; -import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventNotificationControl; /** * An adapter class for the media commands sent by AsteroidOS @@ -14,7 +12,7 @@ public class AsteroidOSMediaCommand { public static final byte COMMAND_PAUSE = 0x3; public static final byte COMMAND_VOLUME = 0x4; - public byte command = 0x0; + public byte command; public AsteroidOSMediaCommand(byte value) { command = value; } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/asteroidos/AsteroidOSNotification.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/asteroidos/AsteroidOSNotification.java index c2f3c3d14..6b2452998 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/asteroidos/AsteroidOSNotification.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/asteroidos/AsteroidOSNotification.java @@ -1,7 +1,5 @@ package nodomain.freeyourgadget.gadgetbridge.devices.asteroidos; -import android.content.Context; - import androidx.annotation.NonNull; import java.util.Locale; @@ -16,7 +14,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; */ public class AsteroidOSNotification { private String packageName = null; - private Integer id = null; + private Integer id; private String applicationName = null; private String body = null; private String summary = null; @@ -65,6 +63,13 @@ public class AsteroidOSNotification { this.vibrationStrength = VibrationStrength.RINGTONE; this.id = (callSpec.name + callSpec.number).hashCode(); break; + case CallSpec.CALL_OUTGOING: + break; + case CallSpec.CALL_REJECT: + case CallSpec.CALL_ACCEPT: + case CallSpec.CALL_END: + case CallSpec.CALL_START: + case CallSpec.CALL_UNDEFINED: default: this.id = (callSpec.name + callSpec.number).hashCode(); this.remove = true; @@ -80,15 +85,16 @@ public class AsteroidOSNotification { this.remove = true; } - @Override /** * Converts the notification to a string to be sent to the device */ + @NonNull + @Override public String toString() { if (remove) { - return "" + this.id + ""; + return "" + this.id + ""; } - String retString = new String(); + String retString = ""; retString += ""; if (id != null) retString += "" + id + ""; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/asteroidos/AsteroidOSWeather.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/asteroidos/AsteroidOSWeather.java index 06a9853c9..20d2a293f 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/asteroidos/AsteroidOSWeather.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/asteroidos/AsteroidOSWeather.java @@ -1,7 +1,6 @@ package nodomain.freeyourgadget.gadgetbridge.devices.asteroidos; import java.io.ByteArrayOutputStream; -import java.io.OutputStream; import java.nio.charset.StandardCharsets; import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec; @@ -14,7 +13,7 @@ public class AsteroidOSWeather { /** * Provides a day's worth of weather */ - public class Day { + public static class Day { /** * The minimum temp of the day */ @@ -30,7 +29,7 @@ public class AsteroidOSWeather { /** * Creates a Day from the forecast given - * @param forecast + * @param forecast A day in the weather forecast */ public Day(WeatherSpec.Daily forecast) { minTemp = forecast.minTemp; @@ -40,7 +39,7 @@ public class AsteroidOSWeather { /** * Creates a Day from the WeatherSpec given - * @param spec + * @param spec The weather spec itself */ public Day(WeatherSpec spec) { minTemp = spec.todayMinTemp; @@ -56,12 +55,12 @@ public class AsteroidOSWeather { /** * The city name of the weather */ - public String cityName = ""; + public String cityName; /** * Creates an AsteroidOSWeather from the WeatherSpec given - * @param spec + * @param spec The WeatherSpec given to the device support class */ public AsteroidOSWeather(WeatherSpec spec) { cityName = spec.location; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/asteroidos/AsteroidOSDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/asteroidos/AsteroidOSDeviceSupport.java index 9e59688b4..4e4e21842 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/asteroidos/AsteroidOSDeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/asteroidos/AsteroidOSDeviceSupport.java @@ -3,20 +3,16 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.asteroidos; import android.bluetooth.BluetoothGatt; import android.bluetooth.BluetoothGattCharacteristic; import android.content.Intent; -import android.net.Uri; -import android.os.Build; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.ByteArrayOutputStream; import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Date; +import java.util.Calendar; import java.util.GregorianCalendar; import java.util.UUID; -import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEvent; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventBatteryInfo; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventMusicControl; import nodomain.freeyourgadget.gadgetbridge.devices.asteroidos.AsteroidOSConstants; @@ -24,10 +20,7 @@ import nodomain.freeyourgadget.gadgetbridge.devices.asteroidos.AsteroidOSMediaCo import nodomain.freeyourgadget.gadgetbridge.devices.asteroidos.AsteroidOSNotification; import nodomain.freeyourgadget.gadgetbridge.devices.asteroidos.AsteroidOSWeather; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; -import nodomain.freeyourgadget.gadgetbridge.model.Alarm; -import nodomain.freeyourgadget.gadgetbridge.model.CalendarEventSpec; import nodomain.freeyourgadget.gadgetbridge.model.CallSpec; -import nodomain.freeyourgadget.gadgetbridge.model.CannedMessagesSpec; import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec; import nodomain.freeyourgadget.gadgetbridge.model.MusicStateSpec; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; @@ -80,7 +73,6 @@ public class AsteroidOSDeviceSupport extends AbstractBTLEDeviceSupport { super.onCharacteristicChanged(gatt, characteristic); UUID characteristicUUID = characteristic.getUuid(); - byte[] value = characteristic.getValue(); if (characteristicUUID.equals(AsteroidOSConstants.MEDIA_COMMANDS_CHAR)) { handleMediaCommand(gatt, characteristic); @@ -88,7 +80,7 @@ public class AsteroidOSDeviceSupport extends AbstractBTLEDeviceSupport { } LOG.info("Characteristic changed UUID: " + characteristicUUID); - LOG.info("Characteristic changed value: " + characteristic.getValue()); + LOG.info("Characteristic changed value: " + characteristic.getValue().toString()); return false; } @@ -104,9 +96,6 @@ public class AsteroidOSDeviceSupport extends AbstractBTLEDeviceSupport { batteryInfoProfile.requestBatteryInfo(builder); batteryInfoProfile.enableNotify(builder, true); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - builder.requestMtu(256); - } return builder; } @@ -129,14 +118,13 @@ public class AsteroidOSDeviceSupport extends AbstractBTLEDeviceSupport { @Override public void onSetTime() { GregorianCalendar now = BLETypeConversions.createCalendar(); - Date nowTime = now.getTime(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); - baos.write((byte) nowTime.getYear()); - baos.write((byte) nowTime.getMonth()); - baos.write((byte) nowTime.getDay() + 1); - baos.write((byte) nowTime.getHours()); - baos.write((byte) nowTime.getMinutes()); - baos.write((byte) nowTime.getSeconds()); + baos.write((byte) now.get(Calendar.YEAR) - 1900); + baos.write((byte) now.get(Calendar.MONTH)); + baos.write((byte) now.get(Calendar.DAY_OF_MONTH)); + baos.write((byte) now.get(Calendar.HOUR_OF_DAY)); + baos.write((byte) now.get(Calendar.MINUTE)); + baos.write((byte) now.get(Calendar.SECOND)); TransactionBuilder builder = new TransactionBuilder("set time"); safeWriteToCharacteristic(builder, AsteroidOSConstants.TIME_SET_CHAR, baos.toByteArray()); builder.queue(getQueue()); @@ -166,11 +154,40 @@ public class AsteroidOSDeviceSupport extends AbstractBTLEDeviceSupport { public void onSetMusicInfo(MusicSpec musicSpec) { TransactionBuilder builder = new TransactionBuilder("send music information"); // Send title - safeWriteToCharacteristic(builder, AsteroidOSConstants.MEDIA_TITLE_CHAR, musicSpec.track.getBytes(StandardCharsets.UTF_8)); + { + byte[] track_bytes; + if (musicSpec.track != null) + track_bytes = musicSpec.track.getBytes(StandardCharsets.UTF_8); + else + track_bytes = "\"\"".getBytes(StandardCharsets.UTF_8); + safeWriteToCharacteristic(builder, AsteroidOSConstants.MEDIA_TITLE_CHAR, track_bytes); + } // Send album - safeWriteToCharacteristic(builder, AsteroidOSConstants.MEDIA_ALBUM_CHAR, musicSpec.album.getBytes(StandardCharsets.UTF_8)); + { + byte[] album_bytes; + if (musicSpec.album != null) + album_bytes = musicSpec.album.getBytes(StandardCharsets.UTF_8); + else + album_bytes = "\"\"".getBytes(StandardCharsets.UTF_8); + safeWriteToCharacteristic(builder, AsteroidOSConstants.MEDIA_ALBUM_CHAR, album_bytes); + } // Send artist - safeWriteToCharacteristic(builder, AsteroidOSConstants.MEDIA_ARTIST_CHAR, musicSpec.artist.getBytes(StandardCharsets.UTF_8)); + { + byte[] artist_bytes; + if (musicSpec.artist != null) + artist_bytes = musicSpec.artist.getBytes(StandardCharsets.UTF_8); + else + artist_bytes = "\"\"".getBytes(StandardCharsets.UTF_8); + safeWriteToCharacteristic(builder, AsteroidOSConstants.MEDIA_ARTIST_CHAR, artist_bytes); + } + builder.queue(getQueue()); + } + + @Override + public void onSetPhoneVolume(float volume) { + TransactionBuilder builder = new TransactionBuilder("send volume information"); + byte volByte = (byte) Math.round(volume); + safeWriteToCharacteristic(builder, AsteroidOSConstants.MEDIA_VOLUME_CHAR, new byte[]{volByte}); builder.queue(getQueue()); }