diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCardAction.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCardAction.java index 5315188d39..8450dc08a3 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCardAction.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCardAction.java @@ -17,11 +17,15 @@ package nodomain.freeyourgadget.gadgetbridge.devices; import android.content.Context; +import android.content.Intent; import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import nodomain.freeyourgadget.gadgetbridge.R; +import nodomain.freeyourgadget.gadgetbridge.activities.CameraActivity; +import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventCameraRemote; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; public interface DeviceCardAction { @@ -41,4 +45,28 @@ public interface DeviceCardAction { } void onClick(@NonNull final GBDevice device, @NonNull final Context context); + + class CameraAction implements DeviceCardAction { + @Override + public int getIcon(@NonNull GBDevice device) { + return R.drawable.ic_camera_remote; + } + + @NonNull + @Override + public String getDescription(@NonNull GBDevice device, @NonNull Context context) { + return context.getString(R.string.open_camera); + } + + @Override + public void onClick(@NonNull GBDevice device, @NonNull Context context) { + final Intent cameraIntent = new Intent(context, CameraActivity.class); + cameraIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + cameraIntent.putExtra( + CameraActivity.intentExtraEvent, + GBDeviceEventCameraRemote.eventToInt(GBDeviceEventCameraRemote.Event.OPEN_CAMERA) + ); + context.startActivity(cameraIntent); + } + } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/fitpro/FitProDeviceCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/fitpro/FitProDeviceCoordinator.java index 239b8add08..26505ce777 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/fitpro/FitProDeviceCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/fitpro/FitProDeviceCoordinator.java @@ -26,15 +26,19 @@ import androidx.annotation.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.Collections; import java.util.EnumSet; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.regex.Pattern; import de.greenrobot.dao.AbstractDao; import de.greenrobot.dao.Property; import nodomain.freeyourgadget.gadgetbridge.R; +import nodomain.freeyourgadget.gadgetbridge.activities.CameraActivity; import nodomain.freeyourgadget.gadgetbridge.devices.AbstractBLEDeviceCoordinator; +import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCardAction; import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider; import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession; import nodomain.freeyourgadget.gadgetbridge.entities.FitProActivitySampleDao; @@ -175,4 +179,13 @@ public class FitProDeviceCoordinator extends AbstractBLEDeviceCoordinator { public DeviceKind getDeviceKind(@NonNull GBDevice device) { return DeviceKind.FITNESS_BAND; } + + @Override + public List getCustomActions() { + if (!CameraActivity.supportsCamera()) { + return Collections.emptyList(); + } + + return Collections.singletonList(new DeviceCardAction.CameraAction()); + } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/gloryfit/GloryFitCoordinator.kt b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/gloryfit/GloryFitCoordinator.kt index 0aa0acd1f0..a615d0608d 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/gloryfit/GloryFitCoordinator.kt +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/gloryfit/GloryFitCoordinator.kt @@ -16,8 +16,6 @@ along with this program. If not, see . */ package nodomain.freeyourgadget.gadgetbridge.devices.gloryfit -import android.content.Context -import android.content.Intent import de.greenrobot.dao.AbstractDao import de.greenrobot.dao.Property import nodomain.freeyourgadget.gadgetbridge.R @@ -26,7 +24,6 @@ import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpec import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettingsCustomizer import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettingsScreen import nodomain.freeyourgadget.gadgetbridge.capabilities.HeartRateCapability.MeasurementInterval -import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventCameraRemote import nodomain.freeyourgadget.gadgetbridge.devices.AbstractBLEDeviceCoordinator import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCardAction import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator @@ -251,25 +248,7 @@ abstract class GloryFitCoordinator : AbstractBLEDeviceCoordinator() { } return listOf( - object : DeviceCardAction { - override fun getIcon(device: GBDevice): Int { - return R.drawable.ic_camera_remote - } - - override fun getDescription(device: GBDevice, context: Context): String { - return context.getString(R.string.open_camera) - } - - override fun onClick(device: GBDevice, context: Context) { - val cameraIntent = Intent(context, CameraActivity::class.java) - cameraIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK) - cameraIntent.putExtra( - CameraActivity.intentExtraEvent, - GBDeviceEventCameraRemote.eventToInt(GBDeviceEventCameraRemote.Event.OPEN_CAMERA) - ) - context.startActivity(cameraIntent) - } - } + DeviceCardAction.CameraAction() ) } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/fitpro/FitProDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/fitpro/FitProDeviceSupport.java index 4a4f266499..4c3400ff3a 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/fitpro/FitProDeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/fitpro/FitProDeviceSupport.java @@ -122,6 +122,7 @@ import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSett import nodomain.freeyourgadget.gadgetbridge.database.DBHandler; import nodomain.freeyourgadget.gadgetbridge.database.DBHelper; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventBatteryInfo; +import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventCameraRemote; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventFindPhone; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventMusicControl; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventVersionInfo; @@ -789,7 +790,10 @@ public class FitProDeviceSupport extends AbstractBTLESingleDeviceSupport { */ public void handleCamera(byte command) { - GB.toast(getContext(), "Camera buttons are detected but not further handled.", Toast.LENGTH_SHORT, GB.INFO); + LOG.debug("Got camera button: {}", String.format("0x%02x", command)); + final GBDeviceEventCameraRemote cameraEvent = new GBDeviceEventCameraRemote(); + cameraEvent.event = GBDeviceEventCameraRemote.Event.TAKE_PICTURE; + evaluateGBDeviceEvent(cameraEvent); } public void handleFindPhone() {