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());
}