mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2024-12-26 10:35:50 +01:00
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)
This commit is contained in:
parent
1165a5d03c
commit
bf762a25a5
@ -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
|
||||
|
@ -17,17 +17,10 @@
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
||||
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<? extends Activity> getAppsManagementActivity() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public Collection<? extends ScanFilter> createBLEScanFilters() {
|
||||
ParcelUuid asteroidUUID = ParcelUuid.fromString(AsteroidOSConstants.SERVICE_UUID.toString());
|
||||
ScanFilter serviceFilter = new ScanFilter.Builder().setServiceUuid(asteroidUUID).build();
|
||||
|
||||
List<ScanFilter> filters = new ArrayList();
|
||||
List<ScanFilter> 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<? extends Activity> getPairingActivity() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supportsActivityDataFetching() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supportsActivityTracking() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SampleProvider<? extends ActivitySample> 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;
|
||||
|
@ -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 += "</insert>";
|
||||
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";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
|
Loading…
Reference in New Issue
Block a user