From c4747e2e23e6dd1b609b4a13bcd82717c9209bd5 Mon Sep 17 00:00:00 2001 From: Daniele Gobbetti Date: Tue, 20 Feb 2024 16:16:58 +0100 Subject: [PATCH] Nothing: add option to auto-reply to incoming phone calls The new preference to toggle the auto-reply behavior is not prefixed with the device name, as I guess it could be useful also for other bluetooth headphones --- .../DeviceSettingsPreferenceConst.java | 2 ++ .../DeviceSpecificSettingsFragment.java | 1 + .../service/devices/nothing/Ear1Support.java | 35 ++++++++++++++++--- app/src/main/res/values/strings.xml | 2 ++ .../res/xml/devicesettings_nothing_ear1.xml | 6 ++++ 5 files changed, 41 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSettingsPreferenceConst.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSettingsPreferenceConst.java index 7edd6506b..21c78ab9e 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSettingsPreferenceConst.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSettingsPreferenceConst.java @@ -436,4 +436,6 @@ public class DeviceSettingsPreferenceConst { public static final String PREF_CLAP_HANDS_TO_WAKEUP_DEVICE = "pref_key_clap_hands_to_wakeup_device"; public static final String PREF_POWER_SAVING = "pref_key_power_saving"; public static final String PREF_FORCE_CONNECTION_TYPE = "pref_force_connection_type"; + + public static final String PREF_AUTO_REPLY_INCOMING_CALL = "pref_auto_reply_phonecall"; } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSpecificSettingsFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSpecificSettingsFragment.java index 2b7386c20..b150f4c9c 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSpecificSettingsFragment.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSpecificSettingsFragment.java @@ -476,6 +476,7 @@ public class DeviceSpecificSettingsFragment extends AbstractPreferenceFragment i addPreferenceHandlerFor(PREF_DISPLAY_CALLER); addPreferenceHandlerFor(PREF_NOTIFICATION_DELAY_CALLS); addPreferenceHandlerFor(PREF_CALL_REJECT_METHOD); + addPreferenceHandlerFor(PREF_AUTO_REPLY_INCOMING_CALL); addPreferenceHandlerFor(PREF_SLEEP_MODE_SLEEP_SCREEN); addPreferenceHandlerFor(PREF_SLEEP_MODE_SMART_ENABLE); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/nothing/Ear1Support.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/nothing/Ear1Support.java index 6547650f8..2f5157661 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/nothing/Ear1Support.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/nothing/Ear1Support.java @@ -16,15 +16,17 @@ along with this program. If not, see . */ package nodomain.freeyourgadget.gadgetbridge.service.devices.nothing; -import android.net.Uri; +import android.content.SharedPreferences; +import android.os.Handler; +import android.os.Looper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; -import java.util.UUID; - -import nodomain.freeyourgadget.gadgetbridge.model.Alarm; +import nodomain.freeyourgadget.gadgetbridge.GBApplication; +import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst; +import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventCallControl; +import nodomain.freeyourgadget.gadgetbridge.model.CallSpec; import nodomain.freeyourgadget.gadgetbridge.service.serial.AbstractSerialDeviceSupport; import nodomain.freeyourgadget.gadgetbridge.service.serial.GBDeviceIoThread; import nodomain.freeyourgadget.gadgetbridge.service.serial.GBDeviceProtocol; @@ -33,6 +35,29 @@ public class Ear1Support extends AbstractSerialDeviceSupport { private static final Logger LOG = LoggerFactory.getLogger(Ear1Support.class); + @Override + public void onSetCallState(CallSpec callSpec) { + SharedPreferences prefs = GBApplication.getDeviceSpecificSharedPrefs(getDevice().getAddress()); + + if (!prefs.getBoolean(DeviceSettingsPreferenceConst.PREF_AUTO_REPLY_INCOMING_CALL, false)) + return; + + if(CallSpec.CALL_INCOMING != callSpec.command) + return; + + LOG.debug("Incoming call, scheduling auto answer in 10 seconds."); + Looper mainLooper = Looper.getMainLooper(); + new Handler(mainLooper).postDelayed(new Runnable() { + @Override + public void run() { + GBDeviceEventCallControl callCmd = new GBDeviceEventCallControl(); + callCmd.event = GBDeviceEventCallControl.Event.ACCEPT; + evaluateGBDeviceEvent(callCmd); + } + }, 15000); //15s + + } + @Override public void onSendConfiguration(String config) { super.onSendConfiguration(config); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e409626cd..8cbc46f30 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2774,4 +2774,6 @@ Combine activity data from specific devices for the totals on the dashboard Heart rate interval The amount of minutes the chart shows \'worn\' after each successful heart rate measurement + The phone will automatically pick-up incoming phonecalls + Automatically answer phone calls diff --git a/app/src/main/res/xml/devicesettings_nothing_ear1.xml b/app/src/main/res/xml/devicesettings_nothing_ear1.xml index 633444d1f..f32b9c7a8 100644 --- a/app/src/main/res/xml/devicesettings_nothing_ear1.xml +++ b/app/src/main/res/xml/devicesettings_nothing_ear1.xml @@ -14,4 +14,10 @@ android:key="pref_nothing_audiomode" android:summary="%s" android:title="@string/nothing_prefs_audiomode_title" /> +