1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-06-08 22:28:20 +02:00

Add events forwarding for HUAMI Bip, MB3 (#1980)

Remove unneeded function call

Re-done to simplify

Add media actions

Rename function to make meaning clearer

Add events forwarding for HUAMI Bip, MB3

Co-authored-by: vanous <petr@linuks.cz>
Reviewed-on: https://codeberg.org/Freeyourgadget/Gadgetbridge/pulls/1980
This commit is contained in:
vanous 2020-08-16 22:07:55 +02:00 committed by Andreas Shimokawa
parent 19ac94e138
commit 20faa23843
8 changed files with 262 additions and 3 deletions

View File

@ -32,6 +32,7 @@ import org.slf4j.LoggerFactory;
import java.util.Objects;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
import nodomain.freeyourgadget.gadgetbridge.devices.makibeshr3.MakibesHR3Constants;
import nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst;
@ -68,6 +69,14 @@ import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst.PREF
import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst.PREF_DISPLAY_ON_LIFT_START;
import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst.PREF_EXPOSE_HR_THIRDPARTY;
import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst.PREF_SHORTCUTS;
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_OFF;
import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst.PREF_DEVICE_ACTION_SELECTION_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_START_NON_WEAR_BROADCAST;
import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst.PREF_DEVICE_ACTION_START_NON_WEAR_SELECTION;
import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst.PREF_DEVICE_ACTION_WOKE_UP_BROADCAST;
import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst.PREF_DEVICE_ACTION_WOKE_UP_SELECTION;
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_DO_NOT_DISTURB;
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_DO_NOT_DISTURB_END;
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_DO_NOT_DISTURB_OFF;
@ -430,6 +439,94 @@ public class DeviceSpecificSettingsFragment extends PreferenceFragmentCompat {
setInputTypeFor(MiBandConst.PREF_MIBAND_DEVICE_TIME_OFFSET_HOURS, InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED);
setInputTypeFor(MakibesHR3Constants.PREF_FIND_PHONE_DURATION, InputType.TYPE_CLASS_NUMBER);
setInputTypeFor(DeviceSettingsPreferenceConst.PREF_RESERVER_ALARMS_CALENDAR, InputType.TYPE_CLASS_NUMBER);
String deviceActionsFellSleepSelection = prefs.getString(PREF_DEVICE_ACTION_FELL_SLEEP_SELECTION, PREF_DEVICE_ACTION_SELECTION_OFF);
final String deviceActionsFellSleepBroadcastValue = prefs.getString(PREF_DEVICE_ACTION_FELL_SLEEP_BROADCAST,
this.getContext().getString(R.string.prefs_events_forwarding_fellsleep_broadcast_default_value));
final Preference deviceActionsFellSleep = findPreference(PREF_DEVICE_ACTION_FELL_SLEEP_SELECTION);
final Preference deviceActionsFellSleepBroadcast = findPreference(PREF_DEVICE_ACTION_FELL_SLEEP_BROADCAST);
boolean deviceActionsFellSleepSelectionBroadcast = deviceActionsFellSleepSelection.equals(PREF_DEVICE_ACTION_SELECTION_BROADCAST);
if (deviceActionsFellSleep != null) {
deviceActionsFellSleep.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newVal) {
final boolean broadcast = PREF_DEVICE_ACTION_SELECTION_BROADCAST.equals(newVal.toString());
Objects.requireNonNull(deviceActionsFellSleepBroadcast).setEnabled(broadcast);
return true;
}
});
}
if (deviceActionsFellSleepBroadcast != null) {
deviceActionsFellSleepBroadcast.setSummary(deviceActionsFellSleepBroadcastValue);
deviceActionsFellSleepBroadcast.setEnabled(deviceActionsFellSleepSelectionBroadcast);
deviceActionsFellSleepBroadcast.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newVal) {
deviceActionsFellSleepBroadcast.setSummary(newVal.toString());
return true;
}
});
}
String deviceActionsWokeUpSelection = prefs.getString(PREF_DEVICE_ACTION_WOKE_UP_SELECTION, PREF_DEVICE_ACTION_SELECTION_OFF);
final String deviceActionsWokeUpBroadcastValue = prefs.getString(PREF_DEVICE_ACTION_WOKE_UP_BROADCAST,
this.getContext().getString(R.string.prefs_events_forwarding_wokeup_broadcast_default_value));
final Preference deviceActionsWokeUp = findPreference(PREF_DEVICE_ACTION_WOKE_UP_SELECTION);
final Preference deviceActionsWokeUpBroadcast = findPreference(PREF_DEVICE_ACTION_WOKE_UP_BROADCAST);
boolean deviceActionsWokeUpSelectionBroadcast = deviceActionsWokeUpSelection.equals(PREF_DEVICE_ACTION_SELECTION_BROADCAST);
if (deviceActionsWokeUp != null) {
deviceActionsWokeUp.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newVal) {
final boolean broadcast = PREF_DEVICE_ACTION_SELECTION_BROADCAST.equals(newVal.toString());
Objects.requireNonNull(deviceActionsWokeUpBroadcast).setEnabled(broadcast);
return true;
}
});
}
if (deviceActionsWokeUpBroadcast != null) {
deviceActionsWokeUpBroadcast.setSummary(deviceActionsWokeUpBroadcastValue);
deviceActionsWokeUpBroadcast.setEnabled(deviceActionsWokeUpSelectionBroadcast);
deviceActionsWokeUpBroadcast.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newVal) {
deviceActionsWokeUpBroadcast.setSummary(newVal.toString());
return true;
}
});
}
String deviceActionsStartNonWearSelection = prefs.getString(PREF_DEVICE_ACTION_START_NON_WEAR_SELECTION, PREF_DEVICE_ACTION_SELECTION_OFF);
final String deviceActionsStartNonWearBroadcastValue = prefs.getString(PREF_DEVICE_ACTION_START_NON_WEAR_BROADCAST,
this.getContext().getString(R.string.prefs_events_forwarding_startnonwear_broadcast_default_value));
final Preference deviceActionsStartNonWear = findPreference(PREF_DEVICE_ACTION_START_NON_WEAR_SELECTION);
final Preference deviceActionsStartNonWearBroadcast = findPreference(PREF_DEVICE_ACTION_START_NON_WEAR_BROADCAST);
boolean deviceActionsStartNonWearSelectionBroadcast = deviceActionsStartNonWearSelection.equals(PREF_DEVICE_ACTION_SELECTION_BROADCAST);
if (deviceActionsStartNonWear != null) {
deviceActionsStartNonWear.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newVal) {
final boolean broadcast = PREF_DEVICE_ACTION_SELECTION_BROADCAST.equals(newVal.toString());
Objects.requireNonNull(deviceActionsStartNonWearBroadcast).setEnabled(broadcast);
return true;
}
});
}
if (deviceActionsStartNonWearBroadcast != null) {
deviceActionsStartNonWearBroadcast.setSummary(deviceActionsStartNonWearBroadcastValue);
deviceActionsStartNonWearBroadcast.setEnabled(deviceActionsStartNonWearSelectionBroadcast);
deviceActionsStartNonWearBroadcast.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newVal) {
deviceActionsStartNonWearBroadcast.setSummary(newVal.toString());
return true;
}
});
}
}
static DeviceSpecificSettingsFragment newInstance(String settingsFileSuffix, @NonNull int[] supportedSettings) {

View File

@ -71,6 +71,16 @@ public class HuamiConst {
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_DEVICE_ACTION_SELECTION_OFF = "UNKNOWN";
public static final String PREF_DEVICE_ACTION_SELECTION_BROADCAST = "BROADCAST";
public static final String PREF_DEVICE_ACTION_FELL_SLEEP_SELECTION = "events_forwarding_fellsleep_action_selection";
public static final String PREF_DEVICE_ACTION_FELL_SLEEP_BROADCAST = "prefs_events_forwarding_fellsleep_broadcast";
public static final String PREF_DEVICE_ACTION_WOKE_UP_SELECTION = "events_forwarding_wokeup_action_selection";
public static final String PREF_DEVICE_ACTION_WOKE_UP_BROADCAST = "prefs_events_forwarding_wokeup_broadcast";
public static final String PREF_DEVICE_ACTION_START_NON_WEAR_SELECTION = "events_forwarding_startnonwear_action_selection";
public static final String PREF_DEVICE_ACTION_START_NON_WEAR_BROADCAST = "prefs_events_forwarding_startnonwear_broadcast";
public static int toActivityKind(int rawType) {
switch (rawType) {
case TYPE_DEEP_SLEEP:

View File

@ -89,6 +89,7 @@ public class AmazfitBipCoordinator extends HuamiCoordinator {
R.xml.devicesettings_sync_calendar,
R.xml.devicesettings_expose_hr_thirdparty,
R.xml.devicesettings_buttonactions_with_longpress,
R.xml.devicesettings_device_actions,
R.xml.devicesettings_pairingkey
};
}

View File

@ -112,6 +112,7 @@ public class MiBand3Coordinator extends HuamiCoordinator {
R.xml.devicesettings_swipeunlock,
R.xml.devicesettings_sync_calendar,
R.xml.devicesettings_expose_hr_thirdparty,
R.xml.devicesettings_device_actions,
R.xml.devicesettings_pairingkey
};
}

View File

@ -144,6 +144,12 @@ import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.Dev
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_WEARLOCATION;
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_START_NON_WEAR_BROADCAST;
import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst.PREF_DEVICE_ACTION_START_NON_WEAR_SELECTION;
import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst.PREF_DEVICE_ACTION_WOKE_UP_BROADCAST;
import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst.PREF_DEVICE_ACTION_WOKE_UP_SELECTION;
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.DEFAULT_VALUE_VIBRATION_COUNT;
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.DEFAULT_VALUE_VIBRATION_PROFILE;
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.VIBRATION_COUNT;
@ -151,7 +157,8 @@ import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.VI
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.getNotificationPrefIntValue;
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.getNotificationPrefStringValue;
import static nodomain.freeyourgadget.gadgetbridge.service.btle.GattCharacteristic.UUID_CHARACTERISTIC_ALERT_LEVEL;
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_OFF;
public class HuamiSupport extends AbstractBTLEDeviceSupport {
@ -1168,8 +1175,27 @@ public class HuamiSupport extends AbstractBTLEDeviceSupport {
currentButtonPressTime = System.currentTimeMillis();
}
private void handleDeviceAction(String deviceAction, String message) {
if (deviceAction.equals(PREF_DEVICE_ACTION_SELECTION_OFF)) {
return;
}
if (deviceAction.equals(PREF_DEVICE_ACTION_SELECTION_BROADCAST)) {
sendSystemBroadcast(message);
}else {
handleMediaButton(deviceAction);
}
}
private void sendSystemBroadcast(String message){
if (message !=null) {
Intent in = new Intent();
in.setAction(message);
LOG.info("Sending broadcast " + message);
this.getContext().getApplicationContext().sendBroadcast(in);
}
}
private void handleMediaButton(String MediaAction) {
if (MediaAction.equals("UNKNOWN")) {
if (MediaAction.equals(PREF_DEVICE_ACTION_SELECTION_OFF)) {
return;
}
GBDeviceEventMusicControl deviceEventMusicControl = new GBDeviceEventMusicControl();
@ -1204,6 +1230,7 @@ public class HuamiSupport extends AbstractBTLEDeviceSupport {
break;
case HuamiDeviceEvent.START_NONWEAR:
LOG.info("non-wear start detected");
processDeviceEvent(HuamiDeviceEvent.START_NONWEAR);
break;
case HuamiDeviceEvent.ALARM_TOGGLED:
LOG.info("An alarm was toggled");
@ -1213,9 +1240,11 @@ public class HuamiSupport extends AbstractBTLEDeviceSupport {
break;
case HuamiDeviceEvent.FELL_ASLEEP:
LOG.info("Fell asleep");
processDeviceEvent(HuamiDeviceEvent.FELL_ASLEEP);
break;
case HuamiDeviceEvent.WOKE_UP:
LOG.info("Woke up");
processDeviceEvent(HuamiDeviceEvent.WOKE_UP);
break;
case HuamiDeviceEvent.STEPSGOAL_REACHED:
LOG.info("Steps goal reached");
@ -1319,6 +1348,37 @@ public class HuamiSupport extends AbstractBTLEDeviceSupport {
}
}
private void processDeviceEvent(int event){
LOG.debug("Handling device event: " + event);
Prefs prefs = new Prefs(GBApplication.getDeviceSpecificSharedPrefs(gbDevice.getAddress()));
String deviceActionBroadcastMessage=null;
switch (event) {
case HuamiDeviceEvent.WOKE_UP:
String wakeupAction = prefs.getString(PREF_DEVICE_ACTION_WOKE_UP_SELECTION,PREF_DEVICE_ACTION_SELECTION_OFF);
if (wakeupAction.equals(PREF_DEVICE_ACTION_SELECTION_OFF)) return;
deviceActionBroadcastMessage= prefs.getString(PREF_DEVICE_ACTION_WOKE_UP_BROADCAST,
this.getContext().getString(R.string.prefs_events_forwarding_wokeup_broadcast_default_value));
handleDeviceAction(wakeupAction, deviceActionBroadcastMessage);
break;
case HuamiDeviceEvent.FELL_ASLEEP:
String fellsleepAction = prefs.getString(PREF_DEVICE_ACTION_FELL_SLEEP_SELECTION,PREF_DEVICE_ACTION_SELECTION_OFF);
if (fellsleepAction.equals(PREF_DEVICE_ACTION_SELECTION_OFF)) return;
deviceActionBroadcastMessage= prefs.getString(PREF_DEVICE_ACTION_FELL_SLEEP_BROADCAST,
this.getContext().getString(R.string.prefs_events_forwarding_fellsleep_broadcast_default_value));
handleDeviceAction(fellsleepAction, deviceActionBroadcastMessage);
break;
case HuamiDeviceEvent.START_NONWEAR:
String nonwearAction = prefs.getString(PREF_DEVICE_ACTION_START_NON_WEAR_SELECTION,PREF_DEVICE_ACTION_SELECTION_OFF);
if (nonwearAction.equals(PREF_DEVICE_ACTION_SELECTION_OFF)) return;
deviceActionBroadcastMessage= prefs.getString(PREF_DEVICE_ACTION_START_NON_WEAR_BROADCAST,
this.getContext().getString(R.string.prefs_events_forwarding_startnonwear_broadcast_default_value));
handleDeviceAction(nonwearAction, deviceActionBroadcastMessage);
break;
}
}
private void handleLongButtonEvent(){
Prefs prefs = new Prefs(GBApplication.getDeviceSpecificSharedPrefs(gbDevice.getAddress()));

View File

@ -877,6 +877,7 @@
<item>@string/pref_media_volumedown</item>
<item>@string/pref_media_forward</item>
<item>@string/pref_media_rewind</item>
<item>@string/pref_device_action_broadcast</item>
</string-array>
<string name="pref_button_action_disabled">Disabled</string>
@ -889,6 +890,8 @@
<string name="pref_media_volumedown">Volume Down</string>
<string name="pref_media_forward">Skip forward</string>
<string name="pref_media_rewind">Skip back</string>
<string name="pref_device_action_broadcast">Send Broadcast</string>
<string-array name="button_action_values">
<item>@string/pref_button_action_disabled_value</item>
@ -901,6 +904,8 @@
<item>@string/pref_media_volumedown_value</item>
<item>@string/pref_media_forward_value</item>
<item>@string/pref_media_rewind_value</item>
<item>@string/pref_device_action_broadcast_value</item>
</string-array>
@ -914,7 +919,23 @@
<string name="pref_media_volumedown_value" translatable="false">VOLUMEDOWN</string>
<string name="pref_media_forward_value" translatable="false">FORWARD</string>
<string name="pref_media_rewind_value" translatable="false">REWIND</string>
<string name="pref_device_action_broadcast_value" translatable="false">BROADCAST</string>
<string-array name="device_action_options">
<item>@string/pref_button_action_disabled</item>
<item>@string/pref_media_play</item>
<item>@string/pref_media_pause</item>
<item>@string/pref_media_playpause</item>
<item>@string/pref_device_action_broadcast</item>
</string-array>
<string-array name="device_action_values">
<item>@string/pref_button_action_disabled_value</item>
<item>@string/pref_media_play_value</item>
<item>@string/pref_media_pause_value</item>
<item>@string/pref_media_playpause_value</item>
<item>@string/pref_device_action_broadcast_value</item>
</string-array>
<string-array name="pref_hybridhr_buttonfunctions">
<item name="notificationsPanelApp">@string/menuitem_notifications</item>

View File

@ -960,6 +960,19 @@
<string name="activity_detail_end_label">End:</string>
<string name="activity_detail_duration_label">Duration:</string>
<string name="activity_detail_show_gps_label">Show GPS Track</string>
<!-- Device Actions Preferences -->
<string name="prefs_events_forwarding_summary">Use device events to trigger actions and Android broadcasts</string>
<string name="prefs_events_forwarding_title">Device actions</string>
<string name="prefs_events_forwarding_fellsleep">On Fall Asleep</string>
<string name="prefs_events_forwarding_fellsleep_broadcast_default_value" translatable="false">nodomain.freeyourgadget.gadgetbridge.FellAsleep</string>
<string name="prefs_events_forwarding_wokeup">On Wake Up</string>
<string name="prefs_events_forwarding_wokeup_broadcast_default_value" translatable="false">nodomain.freeyourgadget.gadgetbridge.WokeUp</string>
<string name="prefs_events_forwarding_startnonwear">On Not Wearing</string>
<string name="prefs_events_forwarding_startnonwear_broadcast_default_value" translatable="false">nodomain.freeyourgadget.gadgetbridge.StartNonWear</string>
<string name="prefs_events_forwarding_broadcast_title">Broadcast message</string>
<string name="prefs_events_forwarding_action_title">Run action</string>
<plurals name="widget_alarm_target_hours">
<item quantity="one">%d hour</item>
<item quantity="two">%d hours</item>
@ -967,4 +980,4 @@
<item quantity="many">%d hours</item>
<item quantity="other">%d hours</item>
</plurals>
</resources>
</resources>

View File

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceScreen
android:key="screen_events_forwarding"
android:persistent="false"
android:summary="@string/prefs_events_forwarding_summary"
android:title="@string/prefs_events_forwarding_title">
<PreferenceCategory android:title="@string/prefs_events_forwarding_fellsleep">
<ListPreference
android:entries="@array/device_action_options"
android:entryValues="@array/device_action_values"
android:key="events_forwarding_fellsleep_action_selection"
android:summary="%s"
android:defaultValue="@string/pref_button_action_disabled_value"
android:title="@string/prefs_events_forwarding_action_title" />
<EditTextPreference
android:defaultValue="@string/prefs_events_forwarding_fellsleep_broadcast_default_value"
android:key="prefs_events_forwarding_fellsleep_broadcast"
android:title="@string/prefs_events_forwarding_broadcast_title" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/prefs_events_forwarding_wokeup">
<ListPreference
android:entries="@array/device_action_options"
android:entryValues="@array/device_action_values"
android:key="events_forwarding_wokeup_action_selection"
android:summary="%s"
android:defaultValue="@string/pref_button_action_disabled_value"
android:title="@string/prefs_events_forwarding_action_title" />
<EditTextPreference
android:defaultValue="@string/prefs_events_forwarding_wokeup_broadcast_default_value"
android:key="prefs_events_forwarding_wokeup_broadcast"
android:title="@string/prefs_events_forwarding_broadcast_title" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/prefs_events_forwarding_startnonwear">
<ListPreference
android:entries="@array/device_action_options"
android:entryValues="@array/device_action_values"
android:key="events_forwarding_startnonwear_action_selection"
android:summary="%s"
android:defaultValue="@string/pref_button_action_disabled_value"
android:title="@string/prefs_events_forwarding_action_title" />
<EditTextPreference
android:defaultValue="@string/prefs_events_forwarding_startnonwear_broadcast_default_value"
android:key="prefs_events_forwarding_startnonwear_broadcast"
android:title="@string/prefs_events_forwarding_broadcast_title" />
</PreferenceCategory>
</PreferenceScreen>
</androidx.preference.PreferenceScreen>