mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2025-01-27 01:57:32 +01:00
send broadcast and vibration on button action only if enabled
This commit is contained in:
parent
403dd3b6d7
commit
074bc885c8
@ -73,6 +73,8 @@ public class HuamiConst {
|
|||||||
public static final String PREF_BUTTON_ACTION_PRESS_MAX_INTERVAL = "button_action_press_max_interval";
|
public static final String PREF_BUTTON_ACTION_PRESS_MAX_INTERVAL = "button_action_press_max_interval";
|
||||||
public static final String PREF_BUTTON_ACTION_BROADCAST_DELAY = "button_action_broadcast_delay";
|
public static final String PREF_BUTTON_ACTION_BROADCAST_DELAY = "button_action_broadcast_delay";
|
||||||
public static final String PREF_BUTTON_ACTION_BROADCAST = "button_action_broadcast";
|
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_DEVICE_ACTION_SELECTION_OFF = "UNKNOWN";
|
public static final String PREF_DEVICE_ACTION_SELECTION_OFF = "UNKNOWN";
|
||||||
public static final String PREF_DEVICE_ACTION_SELECTION_BROADCAST = "BROADCAST";
|
public static final String PREF_DEVICE_ACTION_SELECTION_BROADCAST = "BROADCAST";
|
||||||
|
@ -142,13 +142,15 @@ import nodomain.freeyourgadget.gadgetbridge.util.StringUtils;
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.util.Version;
|
import nodomain.freeyourgadget.gadgetbridge.util.Version;
|
||||||
|
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_ALLOW_HIGH_MTU;
|
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_ALLOW_HIGH_MTU;
|
||||||
|
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_BT_CONNECTED_ADVERTISEMENT;
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_DATEFORMAT;
|
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_DATEFORMAT;
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_LANGUAGE;
|
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_LANGUAGE;
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_RESERVER_ALARMS_CALENDAR;
|
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_RESERVER_ALARMS_CALENDAR;
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_SYNC_CALENDAR;
|
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_SYNC_CALENDAR;
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_TIMEFORMAT;
|
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.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_WEARLOCATION;
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_BT_CONNECTED_ADVERTISEMENT;
|
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_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_BROADCAST;
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst.PREF_DEVICE_ACTION_FELL_SLEEP_SELECTION;
|
import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst.PREF_DEVICE_ACTION_FELL_SLEEP_SELECTION;
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst.PREF_DEVICE_ACTION_SELECTION_BROADCAST;
|
import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst.PREF_DEVICE_ACTION_SELECTION_BROADCAST;
|
||||||
@ -1136,7 +1138,7 @@ public class HuamiSupport extends AbstractBTLEDeviceSupport {
|
|||||||
// not supported
|
// not supported
|
||||||
}
|
}
|
||||||
|
|
||||||
// this could go though onion code with preferrednotification, but I this should work on all huami devices
|
// this could go though onion code with preferred notification, but I this should work on all huami devices
|
||||||
private void vibrateOnce() {
|
private void vibrateOnce() {
|
||||||
BluetoothGattCharacteristic characteristic = getCharacteristic(UUID_CHARACTERISTIC_ALERT_LEVEL);
|
BluetoothGattCharacteristic characteristic = getCharacteristic(UUID_CHARACTERISTIC_ALERT_LEVEL);
|
||||||
try {
|
try {
|
||||||
@ -1148,48 +1150,50 @@ public class HuamiSupport extends AbstractBTLEDeviceSupport {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void runButtonAction() {
|
private void processButtonAction() {
|
||||||
Prefs prefs = new Prefs(GBApplication.getDeviceSpecificSharedPrefs(gbDevice.getAddress()));
|
|
||||||
|
|
||||||
if (currentButtonTimerActivationTime != currentButtonPressTime) {
|
if (currentButtonTimerActivationTime != currentButtonPressTime) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//handle user events settings. 0 is long press, rest are button_id 1-3
|
//handle user events settings. 0 is long press, rest are button_id 1-3
|
||||||
switch (currentButtonActionId) {
|
switch (currentButtonActionId) {
|
||||||
case 0:
|
case 0:
|
||||||
handleMediaButton(prefs.getString("button_long_press_action_selection","UNKNOWN"));
|
executeButtonAction("button_long_press_action_selection");
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
handleMediaButton(prefs.getString("button_single_press_action_selection", "UNKNOWN"));
|
executeButtonAction("button_single_press_action_selection");
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
handleMediaButton(prefs.getString("button_double_press_action_selection", "UNKNOWN"));
|
executeButtonAction("button_double_press_action_selection");
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
handleMediaButton(prefs.getString("button_triple_press_action_selection", "UNKNOWN"));
|
executeButtonAction("button_triple_press_action_selection");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
String requiredButtonPressMessage = prefs.getString(HuamiConst.PREF_BUTTON_ACTION_BROADCAST,
|
|
||||||
this.getContext().getString(R.string.mi2_prefs_button_press_broadcast_default_value));
|
|
||||||
|
|
||||||
Intent in = new Intent();
|
|
||||||
in.setAction(requiredButtonPressMessage);
|
|
||||||
in.putExtra("button_id", currentButtonActionId);
|
|
||||||
LOG.info("Sending " + requiredButtonPressMessage + " with button_id " + currentButtonActionId);
|
|
||||||
this.getContext().getApplicationContext().sendBroadcast(in);
|
|
||||||
|
|
||||||
if (prefs.getBoolean(HuamiConst.PREF_BUTTON_ACTION_VIBRATE, false)) {
|
|
||||||
vibrateOnce();
|
|
||||||
}
|
|
||||||
|
|
||||||
currentButtonActionId = 0;
|
currentButtonActionId = 0;
|
||||||
currentButtonPressCount = 0;
|
currentButtonPressCount = 0;
|
||||||
currentButtonPressTime = System.currentTimeMillis();
|
currentButtonPressTime = System.currentTimeMillis();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void executeButtonAction(String buttonKey) {
|
||||||
|
Prefs prefs = new Prefs(GBApplication.getDeviceSpecificSharedPrefs(gbDevice.getAddress()));
|
||||||
|
String buttonPreference = prefs.getString(buttonKey, PREF_BUTTON_ACTION_SELECTION_OFF);
|
||||||
|
|
||||||
|
if (buttonPreference.equals(PREF_BUTTON_ACTION_SELECTION_OFF)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (prefs.getBoolean(HuamiConst.PREF_BUTTON_ACTION_VIBRATE, false)) {
|
||||||
|
vibrateOnce();
|
||||||
|
}
|
||||||
|
if (buttonPreference.equals(PREF_BUTTON_ACTION_SELECTION_BROADCAST)) {
|
||||||
|
sendSystemBroadcastWithButtonId();
|
||||||
|
} else {
|
||||||
|
handleMediaButton(buttonPreference);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void handleDeviceAction(String deviceAction, String message) {
|
private void handleDeviceAction(String deviceAction, String message) {
|
||||||
if (deviceAction.equals(PREF_DEVICE_ACTION_SELECTION_OFF)) {
|
if (deviceAction.equals(PREF_DEVICE_ACTION_SELECTION_OFF)) {
|
||||||
return;
|
return;
|
||||||
@ -1209,6 +1213,18 @@ public class HuamiSupport extends AbstractBTLEDeviceSupport {
|
|||||||
this.getContext().getApplicationContext().sendBroadcast(in);
|
this.getContext().getApplicationContext().sendBroadcast(in);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void sendSystemBroadcastWithButtonId() {
|
||||||
|
Prefs prefs = new Prefs(GBApplication.getDeviceSpecificSharedPrefs(gbDevice.getAddress()));
|
||||||
|
String requiredButtonPressMessage = prefs.getString(HuamiConst.PREF_BUTTON_ACTION_BROADCAST,
|
||||||
|
this.getContext().getString(R.string.mi2_prefs_button_press_broadcast_default_value));
|
||||||
|
Intent in = new Intent();
|
||||||
|
in.setAction(requiredButtonPressMessage);
|
||||||
|
in.putExtra("button_id", currentButtonActionId);
|
||||||
|
LOG.info("Sending " + requiredButtonPressMessage + " with button_id " + currentButtonActionId);
|
||||||
|
this.getContext().getApplicationContext().sendBroadcast(in);
|
||||||
|
}
|
||||||
|
|
||||||
private void handleMediaButton(String MediaAction) {
|
private void handleMediaButton(String MediaAction) {
|
||||||
if (MediaAction.equals(PREF_DEVICE_ACTION_SELECTION_OFF)) {
|
if (MediaAction.equals(PREF_DEVICE_ACTION_SELECTION_OFF)) {
|
||||||
return;
|
return;
|
||||||
@ -1404,7 +1420,7 @@ public class HuamiSupport extends AbstractBTLEDeviceSupport {
|
|||||||
currentButtonActionId = 0;
|
currentButtonActionId = 0;
|
||||||
currentButtonPressTime = System.currentTimeMillis();
|
currentButtonPressTime = System.currentTimeMillis();
|
||||||
currentButtonTimerActivationTime = currentButtonPressTime;
|
currentButtonTimerActivationTime = currentButtonPressTime;
|
||||||
runButtonAction();
|
processButtonAction();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1440,7 +1456,7 @@ public class HuamiSupport extends AbstractBTLEDeviceSupport {
|
|||||||
buttonActionTimer.scheduleAtFixedRate(new TimerTask() {
|
buttonActionTimer.scheduleAtFixedRate(new TimerTask() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
runButtonAction();
|
processButtonAction();
|
||||||
buttonActionTimer.cancel();
|
buttonActionTimer.cancel();
|
||||||
}
|
}
|
||||||
}, buttonPressMaxDelay, buttonPressMaxDelay);
|
}, buttonPressMaxDelay, buttonPressMaxDelay);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user