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 3fad9ecca..ebd2f9ec7 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 @@ -2,9 +2,13 @@ package nodomain.freeyourgadget.gadgetbridge.devices.asteroidos; import java.util.UUID; +/** + * A class to hold all the constants needed by the AsteroidOS devices + */ public class AsteroidOSConstants { - - // A list of all the supported devices and their codenames + /** + * A list of all the supported devices and their codenames + */ public static final String[] SUPPORTED_DEVICE_CODENAMES = { "bass", "sturgeon", "catfish", "catfish_ext", "catshark", "lenok", "smelt", "carp", @@ -15,40 +19,102 @@ public class AsteroidOSConstants { "minnow", "sprat", "tetra" }; - // AsteroidOS Service Watch Filter UUID + /** + * AsteroidOS Service Watch Filter UUID + */ public static final UUID SERVICE_UUID = UUID.fromString("00000000-0000-0000-0000-00A57E401D05"); - // Battery level + /** + * Battery level service + */ public static final UUID BATTERY_SERVICE_UUID = UUID.fromString("0000180F-0000-1000-8000-00805F9B34FB"); + /** + * Battery level characteristic + */ public static final UUID BATTERY_UUID = UUID.fromString("00002A19-0000-1000-8000-00805F9B34FB"); - // Time + /** + * Time service + */ public static final UUID TIME_SERVICE_UUID = UUID.fromString("00005071-0000-0000-0000-00A57E401D05"); + /** + * Time characteristic + */ public static final UUID TIME_SET_CHAR = UUID.fromString("00005001-0000-0000-0000-00A57E401D05"); - // ScreenshotService + /** + * Screenshot service + */ public static final UUID SCREENSHOT_SERVICE_UUID = UUID.fromString("00006071-0000-0000-0000-00A57E401D05"); + /** + * Screenshot request characteristic + */ public static final UUID SCREENSHOT_REQUEST = UUID.fromString("00006001-0000-0000-0000-00A57E401D05"); + /** + * Screenshot content characteristic + */ public static final UUID SCREENSHOT_CONTENT = UUID.fromString("00006002-0000-0000-0000-00A57E401D05"); - // MediaService + /** + * Media service + */ public static final UUID MEDIA_SERVICE_UUID = UUID.fromString("00007071-0000-0000-0000-00A57E401D05"); + /** + * Media title characteristic + */ public static final UUID MEDIA_TITLE_CHAR = UUID.fromString("00007001-0000-0000-0000-00A57E401D05"); + /** + * Media album characteristic + */ public static final UUID MEDIA_ALBUM_CHAR = UUID.fromString("00007002-0000-0000-0000-00A57E401D05"); + /** + * Media artist characteristic + */ public static final UUID MEDIA_ARTIST_CHAR = UUID.fromString("00007003-0000-0000-0000-00A57E401D05"); + /** + * Media playing status characteristic + */ public static final UUID MEDIA_PLAYING_CHAR = UUID.fromString("00007004-0000-0000-0000-00A57E401D05"); + /** + * Media command characteristic + */ public static final UUID MEDIA_COMMANDS_CHAR = UUID.fromString("00007005-0000-0000-0000-00A57E401D05"); + /** + * Media volume characteristic + */ public static final UUID MEDIA_VOLUME_CHAR = UUID.fromString("00007006-0000-0000-0000-00A57E401D05"); - // WeatherService + /** + * Weather service + */ public static final UUID WEATHER_SERVICE_UUID = UUID.fromString("00008071-0000-0000-0000-00A57E401D05"); + /** + * Weather city name characteristic + */ public static final UUID WEATHER_CITY_CHAR = UUID.fromString("00008001-0000-0000-0000-00A57E401D05"); + /** + * Weather condition codes characteristic + */ public static final UUID WEATHER_IDS_CHAR = UUID.fromString("00008002-0000-0000-0000-00A57E401D05"); + /** + * Weather minimum temps characteristic + */ public static final UUID WEATHER_MIN_TEMPS_CHAR = UUID.fromString("00008003-0000-0000-0000-00A57E401D05"); + /** + * Weather maximum temps characteristic + */ public static final UUID WEATHER_MAX_TEMPS_CHAR = UUID.fromString("00008004-0000-0000-0000-00A57E401D05"); - // Notification Service + /** + * Notification service + */ public static final UUID NOTIFICATION_SERVICE_UUID = UUID.fromString("00009071-0000-0000-0000-00A57E401D05"); + /** + * Notification update characteristic + */ public static final UUID NOTIFICATION_UPDATE_CHAR = UUID.fromString("00009001-0000-0000-0000-00A57E401D05"); + /** + * Notification feedback characteristic + */ public static final UUID NOTIFICATION_FEEDBACK_CHAR = UUID.fromString("00009002-0000-0000-0000-00A57E401D05"); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/asteroidos/AsteroidOSDeviceCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/asteroidos/AsteroidOSDeviceCoordinator.java index 27f7e9f1e..9cec68d5d 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/asteroidos/AsteroidOSDeviceCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/asteroidos/AsteroidOSDeviceCoordinator.java @@ -156,6 +156,4 @@ public class AsteroidOSDeviceCoordinator extends AbstractDeviceCoordinator { public boolean supportsMusicInfo() { return true; } - - } 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 e68688aa8..c23c03455 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 @@ -4,6 +4,9 @@ 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 + */ public class AsteroidOSMediaCommand { public static final byte COMMAND_PREVIOUS = 0x0; public static final byte COMMAND_NEXT = 0x1; @@ -16,6 +19,10 @@ public class AsteroidOSMediaCommand { command = value; } + /** + * Convert the MediaCommand to a music control event + * @return the matching music control event + */ public GBDeviceEventMusicControl toMusicControlEvent() { GBDeviceEventMusicControl event = new GBDeviceEventMusicControl(); switch (command) { @@ -34,9 +41,7 @@ public class AsteroidOSMediaCommand { case COMMAND_VOLUME: default: event.event = GBDeviceEventMusicControl.Event.UNKNOWN; - } - return event; } } 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 52f289762..c2f3c3d14 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 @@ -11,6 +11,9 @@ import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.model.CallSpec; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; +/** + * An adapter for notifications on AsteroidOS + */ public class AsteroidOSNotification { private String packageName = null; private Integer id = null; @@ -20,6 +23,9 @@ public class AsteroidOSNotification { private String icon = null; private Boolean remove = false; + /** + * The vibration strength of a notification + */ public enum VibrationStrength { STRONG, NORMAL, @@ -33,6 +39,11 @@ public class AsteroidOSNotification { } } private VibrationStrength vibrationStrength = VibrationStrength.NORMAL; + + /** + * Creates a notification + * @param spec The NotificationSpec to create the notification from + */ public AsteroidOSNotification(NotificationSpec spec) { this.body = spec.body; this.applicationName = spec.sourceName; @@ -57,7 +68,6 @@ public class AsteroidOSNotification { default: this.id = (callSpec.name + callSpec.number).hashCode(); this.remove = true; - break; } } @@ -71,6 +81,9 @@ public class AsteroidOSNotification { } @Override + /** + * Converts the notification to a string to be sent to the device + */ public String toString() { if (remove) { return "" + this.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 1c1ff2942..5c1fc6949 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 @@ -6,26 +6,63 @@ import java.nio.charset.StandardCharsets; import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec; + +/** + * An adapter class for weather + */ public class AsteroidOSWeather { + /** + * Provides a day's worth of weather + */ public class Day { + /** + * The minimum temp of the day + */ public int minTemp; + /** + * The maximum temp of the day + */ public int maxTemp; + /** + * The current OWM weather condition code + */ public int condition; + + /** + * Creates a Day from the forecast given + * @param forecast + */ public Day(WeatherSpec.Forecast forecast) { minTemp = forecast.minTemp; maxTemp = forecast.maxTemp; condition = forecast.conditionCode; } + + /** + * Creates a Day from the WeatherSpec given + * @param spec + */ public Day(WeatherSpec spec) { minTemp = spec.todayMinTemp; maxTemp = spec.todayMaxTemp; condition = spec.currentConditionCode; } } + + /** + * The days of the weather + */ public Day[] days = new Day[5]; + /** + * The city name of the weather + */ public String cityName = ""; + /** + * Creates an AsteroidOSWeather from the WeatherSpec given + * @param spec + */ public AsteroidOSWeather(WeatherSpec spec) { cityName = spec.location; days[0] = new Day(spec); @@ -34,10 +71,18 @@ public class AsteroidOSWeather { } } + /** + * Returns a byte array of the city name + * @return a byte array of the city name + */ public byte[] getCityName() { return cityName.getBytes(StandardCharsets.UTF_8); } + /** + * Parses the days' weather conditions and returns them in a format AsteroidOS can handle + * @return a byte array to be sent to the device + */ public byte[] getWeatherConditions() { ByteArrayOutputStream stream = new ByteArrayOutputStream(); for (Day day : days) { @@ -47,6 +92,10 @@ public class AsteroidOSWeather { return stream.toByteArray(); } + /** + * Parses the days' min temps and returns them in a format AsteroidOS can handle + * @return a byte array to be sent to the device + */ public byte[] getMinTemps() { ByteArrayOutputStream stream = new ByteArrayOutputStream(); for (Day day : days) { @@ -56,6 +105,10 @@ public class AsteroidOSWeather { return stream.toByteArray(); } + /** + * Parses the days' max temps and returns them in a format AsteroidOS can handle + * @return a byte array to be sent to the device + */ public byte[] getMaxTemps() { ByteArrayOutputStream stream = new ByteArrayOutputStream(); for (Day day : days) { 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 2496440b6..9e59688b4 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 @@ -43,8 +43,8 @@ import nodomain.freeyourgadget.gadgetbridge.service.btle.profiles.battery.Batter public class AsteroidOSDeviceSupport extends AbstractBTLEDeviceSupport { private static final Logger LOG = LoggerFactory.getLogger(AsteroidOSDeviceSupport.class); private final BatteryInfoProfile batteryInfoProfile; - private final GBDeviceEventBatteryInfo batteryCmd = new GBDeviceEventBatteryInfo(); + public AsteroidOSDeviceSupport() { super(LOG); addSupportedService(AsteroidOSConstants.SERVICE_UUID); @@ -68,8 +68,6 @@ public class AsteroidOSDeviceSupport extends AbstractBTLEDeviceSupport { batteryInfoProfile = new BatteryInfoProfile<>(this); batteryInfoProfile.addListener(mListener); addSupportedProfile(batteryInfoProfile); - - } private void handleBatteryInfo(nodomain.freeyourgadget.gadgetbridge.service.btle.profiles.battery.BatteryInfo info) { @@ -232,6 +230,12 @@ public class AsteroidOSDeviceSupport extends AbstractBTLEDeviceSupport { return false; } + + /** + * Handles a media command sent from the AsteroidOS device + * @param gatt The bluetooth device's GATT info + * @param characteristic The Characteristic information + */ public void handleMediaCommand (BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) { LOG.info("handle media command"); AsteroidOSMediaCommand command = new AsteroidOSMediaCommand(characteristic.getValue()[0]);