From bf762a25a547f3f5cb3d62c0287ea80e1172e1c0 Mon Sep 17 00:00:00 2001 From: ~noodlez1232 Date: Wed, 27 Mar 2024 20:43:27 -0700 Subject: [PATCH] Cleanup and update AsteroidOS 1. Added icons to the notifications 2. Cleaned up a lot of the DeviceCoordinator code (Since a lot of them have default implementations now) --- .../asteroidos/AsteroidOSConstants.java | 24 ++--- .../AsteroidOSDeviceCoordinator.java | 91 +------------------ .../asteroidos/AsteroidOSNotification.java | 45 +++++++++ .../asteroidos/AsteroidOSDeviceSupport.java | 26 +++--- 4 files changed, 74 insertions(+), 112 deletions(-) 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 0a94bff30..dade95dc1 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 @@ -23,17 +23,17 @@ import java.util.UUID; */ public class AsteroidOSConstants { /** - * A list of all the supported devices and their codenames + * A list of all the known supported codenames */ - public static final String[] SUPPORTED_DEVICE_CODENAMES = { - "bass", "sturgeon", "catfish", "catfish_ext", - "catshark", "lenok", "smelt", "carp", - "sparrow", "wren", "anthias", "beluga", - "dory", "firefish", "harmony", "inharmony", - "narwhal", "ray", "sawfish", "sawshark", - "skipjack", "tunny", "mooneye", "swift", - "minnow", "sprat", "tetra", "pike", "hoki", - "koi", "ayu" + public static final String[] KNOWN_DEVICE_CODENAMES = { + "bass", "sturgeon", "catfish", "catfish_ext", + "catshark", "lenok", "smelt", "carp", + "sparrow", "wren", "anthias", "beluga", + "dory", "firefish", "harmony", "inharmony", + "narwhal", "ray", "sawfish", "sawshark", + "skipjack", "tunny", "mooneye", "swift", + "minnow", "sprat", "tetra", "pike", "hoki", + "koi", "ayu" }; /** @@ -66,11 +66,11 @@ public class AsteroidOSConstants { /** * Screenshot request characteristic */ - public static final UUID SCREENSHOT_REQUEST = UUID.fromString("00006001-0000-0000-0000-00A57E401D05"); + public static final UUID SCREENSHOT_REQUEST_CHAR = UUID.fromString("00006001-0000-0000-0000-00A57E401D05"); /** * Screenshot content characteristic */ - public static final UUID SCREENSHOT_CONTENT = UUID.fromString("00006002-0000-0000-0000-00A57E401D05"); + public static final UUID SCREENSHOT_CONTENT_CHAR = UUID.fromString("00006002-0000-0000-0000-00A57E401D05"); /** * Media service 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 9785413df..951991d4c 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 @@ -17,17 +17,10 @@ along with this program. If not, see . */ package nodomain.freeyourgadget.gadgetbridge.devices.asteroidos; -import android.app.Activity; import android.bluetooth.le.ScanFilter; -import android.content.Context; -import android.net.Uri; import android.os.ParcelUuid; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.Collection; @@ -36,42 +29,27 @@ import java.util.List; import nodomain.freeyourgadget.gadgetbridge.GBException; import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.devices.AbstractDeviceCoordinator; -import nodomain.freeyourgadget.gadgetbridge.devices.InstallHandler; -import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider; import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession; import nodomain.freeyourgadget.gadgetbridge.entities.Device; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.impl.GBDeviceCandidate; -import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample; -import nodomain.freeyourgadget.gadgetbridge.model.DeviceType; import nodomain.freeyourgadget.gadgetbridge.service.DeviceSupport; import nodomain.freeyourgadget.gadgetbridge.service.devices.asteroidos.AsteroidOSDeviceSupport; public class AsteroidOSDeviceCoordinator extends AbstractDeviceCoordinator { - private static final Logger LOG = LoggerFactory.getLogger(AsteroidOSDeviceCoordinator.class); @Override public String getManufacturer() { return "AsteroidOS"; } - @Override - public boolean supportsAppsManagement(final GBDevice device) { - return false; - } - - @Override - public Class getAppsManagementActivity() { - return null; - } - @NonNull @Override public Collection createBLEScanFilters() { ParcelUuid asteroidUUID = ParcelUuid.fromString(AsteroidOSConstants.SERVICE_UUID.toString()); ScanFilter serviceFilter = new ScanFilter.Builder().setServiceUuid(asteroidUUID).build(); - List filters = new ArrayList(); + List filters = new ArrayList<>(); filters.add(serviceFilter); return filters; @@ -81,61 +59,17 @@ public class AsteroidOSDeviceCoordinator extends AbstractDeviceCoordinator { protected void deleteDevice(@NonNull GBDevice gbDevice, @NonNull Device device, @NonNull DaoSession session) throws GBException { } - @NonNull @Override public boolean supports(GBDeviceCandidate candidate) { - if (candidate.supportsService(AsteroidOSConstants.SERVICE_UUID)) { + if (candidate.supportsService(AsteroidOSConstants.SERVICE_UUID)) return true; - } - for (String name : AsteroidOSConstants.SUPPORTED_DEVICE_CODENAMES) { - if (candidate.getName().equals(name)) { + // Some devices still can't see the service + for (String codename : AsteroidOSConstants.KNOWN_DEVICE_CODENAMES) + if (candidate.getName().equals(codename)) return true; - } - } return false; } - @Override - public int getBondingStyle() { - return BONDING_STYLE_ASK; - } - - @Override - public boolean supportsCalendarEvents() { - return false; - } - - @Override - public boolean supportsRealtimeData() { - return false; - } - - @Nullable - @Override - public Class getPairingActivity() { - return null; - } - - @Override - public boolean supportsActivityDataFetching() { - return false; - } - - @Override - public boolean supportsActivityTracking() { - return false; - } - - @Override - public SampleProvider getSampleProvider(GBDevice device, DaoSession session) { - return null; - } - - @Override - public InstallHandler findInstallHandler(Uri uri, Context context) { - return null; - } - @Override public boolean supportsWeather() { return true; @@ -146,21 +80,6 @@ public class AsteroidOSDeviceCoordinator extends AbstractDeviceCoordinator { return true; } - @Override - public boolean supportsScreenshots(final GBDevice device) { - return false; - } - - @Override - public int getAlarmSlotCount(GBDevice device) { - return 0; - } - - @Override - public boolean supportsHeartRateMeasurement(GBDevice device) { - return false; - } - @Override public boolean supportsMusicInfo() { return true; 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 053bcecb9..67a3ad2d6 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 @@ -24,6 +24,7 @@ import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.model.CallSpec; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; +import nodomain.freeyourgadget.gadgetbridge.model.NotificationType; /** * An adapter for notifications on AsteroidOS @@ -64,6 +65,7 @@ public class AsteroidOSNotification { this.summary = spec.subject; this.id = spec.getId(); this.packageName = spec.sourceAppId; + this.icon = this.gbNotificationTypeToIcon(spec.type); } /** @@ -78,6 +80,7 @@ public class AsteroidOSNotification { this.body = callSpec.number; this.vibrationStrength = VibrationStrength.RINGTONE; this.id = (callSpec.name + callSpec.number).hashCode(); + this.icon = "ios-call-outline"; break; case CallSpec.CALL_OUTGOING: break; @@ -128,4 +131,46 @@ public class AsteroidOSNotification { retString += ""; return retString; } + + public String gbNotificationTypeToIcon(NotificationType type) { + switch (type) { + // Logos + case FACEBOOK: + return "logo-facebook"; + case INSTAGRAM: + return "logo-instagram"; + case LINKEDIN: + return "logo-linkedin"; + case SIGNAL: + return "logo-signal"; + case SKYPE: + return "logo-skype"; + case SNAPCHAT: + return "logo-snapchat"; + case TWITTER: + return "logo-twitter"; + case WHATSAPP: + return "logo-whatsapp"; + case YAHOO_MAIL: + return "logo-yahoo"; + // Generic + default: + switch (type.getGenericType()) { + case "generic_email": + return "ios-mail-outline"; + case "generic_navigation": + return "ios-navigate-outline"; + case "generic_sms": + return "ios-chatboxes-outline"; + case "generic_alarm_clock": + return "ios-alarm-outline"; + case "generic_social": + return "ios-people-outline"; + case "generic_chat": + return "ios-chatbubbles-outline"; + default: + return "ios-notifications-outline"; + } + } + } } 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 09a3330f3..5dc37af27 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 @@ -18,15 +18,18 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.asteroidos; import android.bluetooth.BluetoothGatt; import android.bluetooth.BluetoothGattCharacteristic; -import android.content.Intent; + +import androidx.annotation.NonNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.ByteArrayOutputStream; import java.nio.charset.StandardCharsets; +import java.util.Arrays; import java.util.Calendar; import java.util.GregorianCalendar; +import java.util.Objects; import java.util.UUID; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventBatteryInfo; @@ -63,14 +66,10 @@ public class AsteroidOSDeviceSupport extends AbstractBTLEDeviceSupport { addSupportedService(AsteroidOSConstants.NOTIFICATION_SERVICE_UUID); addSupportedService(AsteroidOSConstants.MEDIA_SERVICE_UUID); - IntentListener mListener = new IntentListener() { - @Override - public void notify(Intent intent) { - String action = intent.getAction(); - if (BatteryInfoProfile.ACTION_BATTERY_INFO.equals(action)) { - handleBatteryInfo((nodomain.freeyourgadget.gadgetbridge.service.btle.profiles.battery.BatteryInfo) intent.getParcelableExtra(BatteryInfoProfile.EXTRA_BATTERY_INFO)); - - } + IntentListener mListener = intent -> { + String action = intent.getAction(); + if (BatteryInfoProfile.ACTION_BATTERY_INFO.equals(action)) { + handleBatteryInfo(Objects.requireNonNull(intent.getParcelableExtra(BatteryInfoProfile.EXTRA_BATTERY_INFO))); } }; @@ -79,7 +78,7 @@ public class AsteroidOSDeviceSupport extends AbstractBTLEDeviceSupport { addSupportedProfile(batteryInfoProfile); } - private void handleBatteryInfo(nodomain.freeyourgadget.gadgetbridge.service.btle.profiles.battery.BatteryInfo info) { + private void handleBatteryInfo(@NonNull nodomain.freeyourgadget.gadgetbridge.service.btle.profiles.battery.BatteryInfo info) { batteryCmd.level = info.getPercentCharged(); handleGBDeviceEvent(batteryCmd); } @@ -91,12 +90,12 @@ public class AsteroidOSDeviceSupport extends AbstractBTLEDeviceSupport { UUID characteristicUUID = characteristic.getUuid(); if (characteristicUUID.equals(AsteroidOSConstants.MEDIA_COMMANDS_CHAR)) { - handleMediaCommand(gatt, characteristic); + handleMediaCommand(characteristic); return true; } LOG.info("Characteristic changed UUID: " + characteristicUUID); - LOG.info("Characteristic changed value: " + characteristic.getValue().toString()); + LOG.info("Characteristic changed value: " + Arrays.toString(characteristic.getValue())); return false; } @@ -266,10 +265,9 @@ public class AsteroidOSDeviceSupport extends AbstractBTLEDeviceSupport { /** * 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) { + public void handleMediaCommand (BluetoothGattCharacteristic characteristic) { LOG.info("handle media command"); AsteroidOSMediaCommand command = new AsteroidOSMediaCommand(characteristic.getValue()[0]); GBDeviceEventMusicControl event = command.toMusicControlEvent();