mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2024-11-29 05:16:51 +01:00
Support for button actions on Mi Band 2 device (#793)
Implement button actions for MiBand 2
This commit is contained in:
parent
25fdf50525
commit
fcf9be877a
@ -32,6 +32,11 @@ public final class MiBandConst {
|
||||
public static final String PREF_MIBAND_ALARMS = "mi_alarms";
|
||||
public static final String PREF_MIBAND_DONT_ACK_TRANSFER = "mi_dont_ack_transfer";
|
||||
public static final String PREF_MIBAND_RESERVE_ALARM_FOR_CALENDAR = "mi_reserve_alarm_calendar";
|
||||
public static final String PREF_MIBAND_BUTTON_ACTION_ENABLE = "mi2_enable_button_action";
|
||||
public static final String PREF_MIBAND_BUTTON_ACTION_VIBRATE = "mi2_button_action_vibrate";
|
||||
public static final String PREF_MIBAND_BUTTON_PRESS_COUNT = "mi_button_press_count";
|
||||
public static final String PREF_MIBAND_BUTTON_PRESS_MAX_DELAY = "mi_button_press_count_max_delay";
|
||||
public static final String PREF_MIBAND_BUTTON_PRESS_BROADCAST = "mi_button_press_broadcast";
|
||||
public static final String PREF_MIBAND_USE_HR_FOR_SLEEP_DETECTION = "mi_hr_sleep_detection";
|
||||
public static final String PREF_MIBAND_DEVICE_TIME_OFFSET_HOURS = "mi_device_time_offset_hours";
|
||||
public static final String PREF_MI2_DATEFORMAT = "mi2_dateformat";
|
||||
|
@ -24,7 +24,9 @@ import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.SharedPreferences;
|
||||
import android.net.Uri;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.v4.content.LocalBroadcastManager;
|
||||
import android.text.format.DateFormat;
|
||||
import android.widget.Toast;
|
||||
@ -123,6 +125,10 @@ import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.ge
|
||||
|
||||
public class MiBand2Support extends AbstractBTLEDeviceSupport {
|
||||
|
||||
// We introduce key press counter for notification purposes
|
||||
private static int currentButtonPressCount = 0;
|
||||
private static long currentButtonPressTime = 0;
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(MiBand2Support.class);
|
||||
private final DeviceInfoProfile<MiBand2Support> deviceInfoProfile;
|
||||
private final HeartRateProfile<MiBand2Support> heartRateProfile;
|
||||
@ -809,8 +815,48 @@ public class MiBand2Support extends AbstractBTLEDeviceSupport {
|
||||
}
|
||||
|
||||
public void handleButtonPressed(byte[] value) {
|
||||
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this.getContext());
|
||||
|
||||
LOG.info("Button pressed");
|
||||
logMessageContent(value);
|
||||
|
||||
Prefs prefs = GBApplication.getPrefs();
|
||||
|
||||
// If disabled we return from function immediately
|
||||
if (!prefs.getBoolean(MiBandConst.PREF_MIBAND_BUTTON_ACTION_ENABLE, false)) {
|
||||
return;
|
||||
}
|
||||
|
||||
int buttonPressMaxDelay = prefs.getInt(MiBandConst.PREF_MIBAND_BUTTON_PRESS_MAX_DELAY, 2000);
|
||||
int requiredButtonPressCount = prefs.getInt(MiBandConst.PREF_MIBAND_BUTTON_PRESS_COUNT, 0);
|
||||
|
||||
String requiredButtonPressMessage = prefs.getString(MiBandConst.PREF_MIBAND_BUTTON_PRESS_BROADCAST,
|
||||
this.getContext().getString(R.string.mi2_prefs_button_press_broadcast_default_value));
|
||||
|
||||
if (requiredButtonPressCount > 0) {
|
||||
long timeSinceLastPress = System.currentTimeMillis() - currentButtonPressTime;
|
||||
|
||||
if ((currentButtonPressTime == 0) || (timeSinceLastPress < buttonPressMaxDelay)) {
|
||||
currentButtonPressCount++;
|
||||
}
|
||||
else {
|
||||
currentButtonPressCount = 0;
|
||||
}
|
||||
|
||||
currentButtonPressTime = System.currentTimeMillis();
|
||||
if (currentButtonPressCount >= requiredButtonPressCount) {
|
||||
Intent in = new Intent();
|
||||
in.setAction(requiredButtonPressMessage);
|
||||
this.getContext().getApplicationContext().sendBroadcast(in);
|
||||
|
||||
currentButtonPressCount = 0;
|
||||
currentButtonPressTime = System.currentTimeMillis();
|
||||
|
||||
if (prefs.getBoolean(MiBandConst.PREF_MIBAND_BUTTON_ACTION_VIBRATE, false)) {
|
||||
performPreferredNotification(null, null, null, MiBand2Service.ALERT_LEVEL_VIBRATE_ONLY, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void handleUnknownCharacteristic(byte[] value) {
|
||||
|
@ -407,6 +407,19 @@
|
||||
<string name="discovery_pair_question">Vyberte Párování pro spárování s vaším zaříením. Pokud to selže, tak to zkuste bez párování.</string>
|
||||
<string name="discovery_yes_pair">Párování</string>
|
||||
<string name="discovery_dont_pair">Nepárovat</string>
|
||||
<string name="mi2_prefs_button_actions">Akce tlačítka</string>
|
||||
<string name="mi2_prefs_button_actions_summary">Definujte akce při stisku tlačítka na Mi Band 2</string>
|
||||
<string name="mi2_prefs_button_press_count">Počet stisků tlačítka</string>
|
||||
<string name="mi2_prefs_button_press_count_summary">Definujte počet stisknutí tlačítka k vyslání broadcast zprávy</string>
|
||||
<string name="mi2_prefs_button_press_broadcast">Zpráva k vyslání (broadcast)</string>
|
||||
<string name="mi2_prefs_button_press_broadcast_summary">Zpráva k vyslání do systému pokud počtu stisknutí tlačítka (viz výše)</string>
|
||||
<string name="mi2_prefs_button_press_broadcast_default_value">nodomain.freeyourgadget.gadgetbridge.mibandButtonPressed</string>
|
||||
<string name="mi2_prefs_button_action">Povolit akci tlačítka</string>
|
||||
<string name="mi2_prefs_button_action_summary">Povolit akci tlačítka na definovaný počet stisknutí</string>
|
||||
<string name="mi2_prefs_button_action_vibrate">Povolit vibrace náramku</string>
|
||||
<string name="mi2_prefs_button_action_vibrate_summary">Povolit vibrace náramku při vyslání broadcast zprávy</string>
|
||||
<string name="mi2_prefs_button_press_count_max_delay">Maximální prodleva mezi stisky</string>
|
||||
<string name="mi2_prefs_button_press_count_max_delay_summary">Maximální prodleva mezi stisky tlačítka v milisekundách</string>
|
||||
<string name="fw_upgrade_notice_amazfitbip">Chystáte se nainstalovat firmware %s namísto toho, který je aktuálně na vašem Amazfit Bipu.
|
||||
\n
|
||||
\nUjistěte se, že jste nainstalovali firmware .gps, pak soubor .res a nakonec soubor .fw. Hodiny se po instalaci souboru .fw restartují.
|
||||
@ -415,4 +428,4 @@
|
||||
\n
|
||||
\nEXPERIMENTÁLNÍ PROCES, DĚLÁTE NA VAŠE VLASTNÍ RIZIKO</string>
|
||||
<string name="amazfitbip_firmware">"Firmware Amazfit Bipu %1$s"</string>
|
||||
</resources>
|
||||
</resources>
|
||||
|
@ -351,6 +351,19 @@
|
||||
<string name="miband2_prefs_dateformat">Mi2: Date format</string>
|
||||
<string name="dateformat_time">Time</string>
|
||||
<string name="dateformat_date_time"><![CDATA[Time & date]]></string>
|
||||
<string name="mi2_prefs_button_actions">Button actions</string>
|
||||
<string name="mi2_prefs_button_actions_summary">Specify actions on Mi Band 2 button press</string>
|
||||
<string name="mi2_prefs_button_press_count">Button press count</string>
|
||||
<string name="mi2_prefs_button_press_count_summary">Number of button presses to trigger message broadcast</string>
|
||||
<string name="mi2_prefs_button_press_broadcast">Broadcast message to send</string>
|
||||
<string name="mi2_prefs_button_press_broadcast_summary">Broadcast message on defined number of button presses reached</string>
|
||||
<string name="mi2_prefs_button_press_broadcast_default_value">nodomain.freeyourgadget.gadgetbridge.mibandButtonPressed</string>
|
||||
<string name="mi2_prefs_button_action">Enable button action</string>
|
||||
<string name="mi2_prefs_button_action_summary">Enable action on specified number of button presses</string>
|
||||
<string name="mi2_prefs_button_action_vibrate">Enable band vibration</string>
|
||||
<string name="mi2_prefs_button_action_vibrate_summary">Enable band vibration on button action triggered</string>
|
||||
<string name="mi2_prefs_button_press_count_max_delay">Maximum delay between presses</string>
|
||||
<string name="mi2_prefs_button_press_count_max_delay_summary">Maximum delay between button presses in milliseconds</string>
|
||||
<string name="mi2_prefs_goal_notification">Goal notification</string>
|
||||
<string name="mi2_prefs_goal_notification_summary">The band will vibrate when the daily steps goal is reached</string>
|
||||
<string name="mi2_prefs_display_items">Display items</string>
|
||||
|
@ -30,6 +30,50 @@
|
||||
android:summary="@string/mi2_prefs_goal_notification_summary"
|
||||
android:title="@string/mi2_prefs_goal_notification" />
|
||||
|
||||
<PreferenceScreen
|
||||
android:key="mi2_button_actions_key"
|
||||
android:summary="@string/mi2_prefs_button_actions_summary"
|
||||
android:title="@string/mi2_prefs_button_actions"
|
||||
android:persistent="false">
|
||||
|
||||
<!-- workaround for missing toolbar -->
|
||||
<PreferenceCategory
|
||||
android:title="@string/mi2_prefs_button_action"
|
||||
/>
|
||||
|
||||
<CheckBoxPreference
|
||||
android:defaultValue="false"
|
||||
android:key="mi2_enable_button_action"
|
||||
android:summary="@string/mi2_prefs_button_action_summary"
|
||||
android:title="@string/mi2_prefs_button_action" />
|
||||
|
||||
<CheckBoxPreference
|
||||
android:defaultValue="false"
|
||||
android:key="mi2_button_action_vibrate"
|
||||
android:summary="@string/mi2_prefs_button_action_vibrate_summary"
|
||||
android:title="@string/mi2_prefs_button_action_vibrate" />
|
||||
|
||||
<EditTextPreference
|
||||
android:defaultValue="6"
|
||||
android:inputType="number"
|
||||
android:key="mi_button_press_count"
|
||||
android:summary="@string/mi2_prefs_button_press_count_summary"
|
||||
android:title="@string/mi2_prefs_button_press_count" />
|
||||
|
||||
<EditTextPreference
|
||||
android:defaultValue="@string/mi2_prefs_button_press_broadcast_default_value"
|
||||
android:key="mi_button_press_broadcast"
|
||||
android:summary="@string/mi2_prefs_button_press_broadcast_summary"
|
||||
android:title="@string/mi2_prefs_button_press_broadcast" />
|
||||
|
||||
<EditTextPreference
|
||||
android:defaultValue="2000"
|
||||
android:inputType="number"
|
||||
android:key="mi_button_press_count_max_delay"
|
||||
android:summary="@string/mi2_prefs_button_press_count_max_delay_summary"
|
||||
android:title="@string/mi2_prefs_button_press_count_max_delay" />
|
||||
</PreferenceScreen>
|
||||
|
||||
<EditTextPreference
|
||||
android:defaultValue="0"
|
||||
android:inputType="number"
|
||||
|
Loading…
Reference in New Issue
Block a user