From 65cbea6713a29da4b497c152059390895a43cb55 Mon Sep 17 00:00:00 2001 From: vanous Date: Sat, 19 Feb 2022 16:04:48 +0100 Subject: [PATCH] Add HUAMI button/device action to control fitness tracking - Fitness App Tracking Start already works, Stop is commented out for time being - Catch exception in case the package name for controlled app doesn't exist/work --- .../devices/huami/HuamiConst.java | 2 ++ .../externalevents/OpenTracksController.java | 8 ++++- .../service/devices/huami/HuamiSupport.java | 35 ++++++++++++++----- app/src/main/res/values/arrays.xml | 24 +++++++++++++ app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/values/values.xml | 2 ++ 6 files changed, 64 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/HuamiConst.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/HuamiConst.java index d57ae38167..d9cdc70b0d 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/HuamiConst.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/HuamiConst.java @@ -80,6 +80,8 @@ public class HuamiConst { public static final String PREF_BUTTON_ACTION_BROADCAST = "button_action_broadcast"; public static final String PREF_BUTTON_ACTION_SELECTION_OFF = "UNKNOWN"; public static final String PREF_BUTTON_ACTION_SELECTION_BROADCAST = "BROADCAST"; + public static final String PREF_BUTTON_ACTION_SELECTION_FITNESS_APP_START = "FITNESS_CONTROL_START"; + public static final String PREF_BUTTON_ACTION_SELECTION_FITNESS_APP_STOP = "FITNESS_CONTROL_STOP"; public static final String PREF_DEVICE_ACTION_SELECTION_OFF = "UNKNOWN"; public static final String PREF_DEVICE_ACTION_SELECTION_BROADCAST = "BROADCAST"; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/OpenTracksController.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/OpenTracksController.java index 4a9f5de991..3ebefaf922 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/OpenTracksController.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/OpenTracksController.java @@ -22,6 +22,7 @@ import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; +import android.widget.Toast; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -29,6 +30,7 @@ import org.slf4j.LoggerFactory; import java.util.ArrayList; import nodomain.freeyourgadget.gadgetbridge.GBApplication; +import nodomain.freeyourgadget.gadgetbridge.util.GB; import nodomain.freeyourgadget.gadgetbridge.util.Prefs; public class OpenTracksController extends Activity { @@ -70,7 +72,11 @@ public class OpenTracksController extends Activity { intent.setClassName(packageName, className); intent.putExtra("STATS_TARGET_PACKAGE", context.getPackageName()); intent.putExtra("STATS_TARGET_CLASS", "nodomain.freeyourgadget.gadgetbridge.externalevents.OpenTracksController"); - context.startActivity(intent); + try { + context.startActivity(intent); + } catch (Exception e) { + GB.toast(e.getMessage(), Toast.LENGTH_LONG, GB.WARN); + } } public static void startRecording(Context context) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiSupport.java index ef15030a3b..313ac3b1ba 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiSupport.java @@ -93,6 +93,7 @@ import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession; import nodomain.freeyourgadget.gadgetbridge.entities.Device; import nodomain.freeyourgadget.gadgetbridge.entities.MiBandActivitySample; import nodomain.freeyourgadget.gadgetbridge.entities.User; +import nodomain.freeyourgadget.gadgetbridge.externalevents.OpenTracksController; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice.State; import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample; import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser; @@ -157,6 +158,8 @@ import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.Dev import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_TIMEFORMAT; import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_WEARLOCATION; import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst.PREF_BUTTON_ACTION_SELECTION_BROADCAST; +import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst.PREF_BUTTON_ACTION_SELECTION_FITNESS_APP_START; +import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst.PREF_BUTTON_ACTION_SELECTION_FITNESS_APP_STOP; import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst.PREF_BUTTON_ACTION_SELECTION_OFF; import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst.PREF_DEVICE_ACTION_FELL_SLEEP_BROADCAST; import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst.PREF_DEVICE_ACTION_FELL_SLEEP_SELECTION; @@ -1408,10 +1411,18 @@ public class HuamiSupport extends AbstractBTLEDeviceSupport { if (prefs.getBoolean(HuamiConst.PREF_BUTTON_ACTION_VIBRATE, false)) { vibrateOnce(); } - if (buttonPreference.equals(PREF_BUTTON_ACTION_SELECTION_BROADCAST)) { - sendSystemBroadcastWithButtonId(); - } else { - handleMediaButton(buttonPreference); + switch (buttonPreference) { + case PREF_BUTTON_ACTION_SELECTION_BROADCAST: + sendSystemBroadcastWithButtonId(); + break; + case PREF_BUTTON_ACTION_SELECTION_FITNESS_APP_START: + OpenTracksController.startRecording(this.getContext()); + break; + case PREF_BUTTON_ACTION_SELECTION_FITNESS_APP_STOP: + OpenTracksController.stopRecording(this.getContext()); + break; + default: + handleMediaButton(buttonPreference); } } @@ -1419,10 +1430,18 @@ public class HuamiSupport extends AbstractBTLEDeviceSupport { if (deviceAction.equals(PREF_DEVICE_ACTION_SELECTION_OFF)) { return; } - if (deviceAction.equals(PREF_DEVICE_ACTION_SELECTION_BROADCAST)) { - sendSystemBroadcast(message); - }else { - handleMediaButton(deviceAction); + switch (deviceAction) { + case PREF_BUTTON_ACTION_SELECTION_BROADCAST: + sendSystemBroadcast(message); + break; + case PREF_BUTTON_ACTION_SELECTION_FITNESS_APP_START: + OpenTracksController.startRecording(this.getContext()); + break; + case PREF_BUTTON_ACTION_SELECTION_FITNESS_APP_STOP: + OpenTracksController.stopRecording(this.getContext()); + break; + default: + handleMediaButton(deviceAction); } } diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 3438d69ad1..635c391fea 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -1654,6 +1654,12 @@ @string/pref_media_forward @string/pref_media_rewind @string/pref_device_action_broadcast + @string/pref_device_action_fitness_app_control_start + @@ -1668,6 +1674,12 @@ @string/pref_media_forward_value @string/pref_media_rewind_value @string/pref_device_action_broadcast_value + @string/pref_device_action_fitness_app_control_start_value + @@ -1676,6 +1688,12 @@ @string/pref_media_pause @string/pref_media_playpause @string/pref_device_action_broadcast + @string/pref_device_action_fitness_app_control_start + @@ -1684,6 +1702,12 @@ @string/pref_media_pause_value @string/pref_media_playpause_value @string/pref_device_action_broadcast_value + @string/pref_device_action_fitness_app_control_start_value + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index de7113abdf..7189f706cc 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1495,6 +1495,8 @@ Skip forward Skip back Send Broadcast + Fitness App Tracking Start + Fitness App Tracking Stop ###m diff --git a/app/src/main/res/values/values.xml b/app/src/main/res/values/values.xml index d606a27a09..d8343afb71 100644 --- a/app/src/main/res/values/values.xml +++ b/app/src/main/res/values/values.xml @@ -106,6 +106,8 @@ FORWARD REWIND BROADCAST + FITNESS_CONTROL_START + FITNESS_CONTROL_STOP Voice Assistant Active Noise Cancelling Quick Ambient Sound