onChanged) {
+ this.onChanged = onChanged;
+ return this;
+ }
+}
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/service/AbstractTaskerService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/service/AbstractTaskerService.java
new file mode 100644
index 000000000..6e4c620cb
--- /dev/null
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/service/AbstractTaskerService.java
@@ -0,0 +1,63 @@
+package nodomain.freeyourgadget.gadgetbridge.tasker.service;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+
+import nodomain.freeyourgadget.gadgetbridge.GBApplication;
+import nodomain.freeyourgadget.gadgetbridge.tasker.event.SettingSupplier;
+import nodomain.freeyourgadget.gadgetbridge.tasker.event.SettingSupplierImpl;
+import nodomain.freeyourgadget.gadgetbridge.tasker.event.TaskerEventType;
+import nodomain.freeyourgadget.gadgetbridge.tasker.task.TaskerTask;
+import nodomain.freeyourgadget.gadgetbridge.tasker.task.TaskerTaskProvider;
+
+/**
+ * Tasker service for scheduling task with specific thresholds.
+ *
+ * One instance per thread/device! The service is not threadsafe.
+ */
+public abstract class AbstractTaskerService {
+
+ protected SettingSupplier enabled;
+ private ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
+ private Map tasks = new HashMap<>();
+ private static final long DEFAULT_THRESHOLD = 50L;
+
+ public AbstractTaskerService() {
+ this.enabled = new SettingSupplierImpl() {
+ @Override
+ public Boolean get() {
+ return GBApplication.getPrefs().getBoolean(TaskerConstants.TASKER_ENABLED, false);
+ }
+ };
+ }
+
+ public boolean isActive() {
+ return enabled.get();
+ }
+
+ public boolean runForType(TaskerEventType type) {
+ if (type != null && !TaskerEventType.NO_OP.equals(type) && isActive() && ready()) {
+ if (!tasks.containsKey(type)) {
+ SettingSupplier taskProvider = taskProvider(type);
+ if (taskProvider.isPresent()) {
+ SettingSupplier threshold = threshold(type);
+ tasks.put(type, new TaskerTask(type, taskProvider.get(), threshold.isPresent() ? threshold.get() : DEFAULT_THRESHOLD));
+ }
+ }
+ tasks.get(type).schedule(executor);
+ return true;
+ }
+ return false;
+ }
+
+ protected abstract SettingSupplier threshold(TaskerEventType type);
+
+ protected abstract SettingSupplier taskProvider(TaskerEventType type);
+
+ public static boolean ready() {
+ return TaskerIntent.testStatus(GBApplication.getContext()).equals(TaskerIntent.Status.OK);
+ }
+
+}
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/service/AbstractTaskerSpec.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/service/AbstractTaskerSpec.java
new file mode 100644
index 000000000..bdc7c1239
--- /dev/null
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/service/AbstractTaskerSpec.java
@@ -0,0 +1,105 @@
+package nodomain.freeyourgadget.gadgetbridge.tasker.service;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.preference.PreferenceManager;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import nodomain.freeyourgadget.gadgetbridge.tasker.event.SettingSupplier;
+import nodomain.freeyourgadget.gadgetbridge.tasker.event.SettingSupplierImpl;
+import nodomain.freeyourgadget.gadgetbridge.tasker.event.TaskerEventType;
+import nodomain.freeyourgadget.gadgetbridge.tasker.settings.TaskerSettings;
+import nodomain.freeyourgadget.gadgetbridge.tasker.task.TaskerTaskProvider;
+
+public abstract class AbstractTaskerSpec implements TaskerSpec {
+
+ private Map settings = new HashMap<>();
+
+ @Override
+ public TaskerSettings getSettings(TaskerEventType eventType) {
+ if (!settings.containsKey(eventType)) {
+ if (!getSupportedTypes().contains(eventType)) {
+ settings.put(eventType, new NoOpTaskerSettings());
+ } else {
+ settings.put(eventType, new SimpleTaskerSettings());
+ }
+ }
+ return settings.get(eventType);
+ }
+
+ private class SimpleTaskerSettings implements TaskerSettings {
+ private SettingSupplier consumingEvents = new SettingSupplierImpl<>();
+ private SettingSupplier enabled = new SettingSupplierImpl<>();
+ private SettingSupplier threshold = new SettingSupplierImpl<>();
+ private SettingSupplier taskProvider = new SettingSupplierImpl<>();
+
+ @Override
+ public SettingSupplier isConsumingEvents() {
+ return consumingEvents;
+ }
+
+ @Override
+ public SettingSupplier isEnabled() {
+ return enabled;
+ }
+
+ @Override
+ public SettingSupplier getThreshold() {
+ return threshold;
+ }
+
+ @Override
+ public SettingSupplier getTaskProvider() {
+ return taskProvider;
+ }
+ }
+
+
+ private class NoOpTaskerSettings implements TaskerSettings {
+ @Override
+ public SettingSupplier isConsumingEvents() {
+ return new NoOpSupplier<>();
+ }
+
+ @Override
+ public SettingSupplier isEnabled() {
+ return new NoOpSupplier<>();
+ }
+
+ @Override
+ public SettingSupplier getThreshold() {
+ return new NoOpSupplier<>();
+ }
+
+ @Override
+ public SettingSupplier getTaskProvider() {
+ return new NoOpSupplier<>();
+ }
+ }
+
+ private class NoOpSupplier implements SettingSupplier {
+
+ @Override
+ public T get() {
+ return null;
+ }
+
+ @Override
+ public void set(T object) {
+ }
+
+ @Override
+ public boolean isPresent() {
+ return false;
+ }
+
+ @Override
+ public SettingSupplier onChanged(SettingListener onChanged) {
+ return this;
+ }
+
+ }
+
+}
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/service/SpecTaskerService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/service/SpecTaskerService.java
new file mode 100644
index 000000000..fe3c7a554
--- /dev/null
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/service/SpecTaskerService.java
@@ -0,0 +1,27 @@
+package nodomain.freeyourgadget.gadgetbridge.tasker.service;
+
+import nodomain.freeyourgadget.gadgetbridge.tasker.event.SettingSupplier;
+import nodomain.freeyourgadget.gadgetbridge.tasker.event.TaskerEventType;
+import nodomain.freeyourgadget.gadgetbridge.tasker.task.TaskerTaskProvider;
+
+/**
+ * {@link TaskerSpec} impl for {@link AbstractTaskerService}.
+ */
+public class SpecTaskerService extends AbstractTaskerService {
+
+ private TaskerSpec spec;
+
+ public SpecTaskerService(TaskerSpec spec) {
+ this.spec = spec;
+ }
+
+ @Override
+ protected SettingSupplier threshold(TaskerEventType type) {
+ return spec.getSettings(type).getThreshold();
+ }
+
+ @Override
+ protected SettingSupplier taskProvider(TaskerEventType type) {
+ return spec.getSettings(type).getTaskProvider();
+ }
+}
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/service/TaskerAbstractSpec.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/service/TaskerAbstractSpec.java
index 08771676a..40b92f342 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/service/TaskerAbstractSpec.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/service/TaskerAbstractSpec.java
@@ -6,7 +6,7 @@ import nodomain.freeyourgadget.gadgetbridge.tasker.settings.TaskerSettings;
public abstract class TaskerAbstractSpec implements TaskerSpec {
@Override
- public TaskerSettings getTaskerSettings(TaskerEventType eventType) {
+ public TaskerSettings getSettings(TaskerEventType eventType) {
return null;
}
}
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/service/TaskerBleProfile.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/service/TaskerBleProfile.java
index ae9742a46..815963a20 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/service/TaskerBleProfile.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/service/TaskerBleProfile.java
@@ -17,33 +17,26 @@ import nodomain.freeyourgadget.gadgetbridge.tasker.settings.TaskerSettings;
*/
public class TaskerBleProfile extends AbstractBleProfile {
- private TaskerService taskerService;
- private TaskerSpec taskerSpec;
+ private SpecTaskerService taskerService;
+ private TaskerConstants.TaskerDevice taskerDevice;
- public TaskerBleProfile(T support, TaskerSpec taskerSpec) {
+ public TaskerBleProfile(T support, TaskerConstants.TaskerDevice taskerDevice) {
super(support);
- this.taskerSpec = taskerSpec;
- taskerService = new TaskerService();
+ this.taskerDevice = taskerDevice;
+ taskerService = new SpecTaskerService(taskerDevice.getSpec());
}
@Override
public boolean onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
- TaskerEventType eventType = taskerSpec.getEventType(gatt, characteristic);
+ TaskerEventType eventType = taskerDevice.getSpec().getEventType(gatt, characteristic);
if (TaskerEventType.NO_OP.equals(eventType)) {
return false;
}
- TaskerSettings settings = taskerSpec.getTaskerSettings(eventType);
+ TaskerSettings settings = taskerDevice.getSpec().getSettings(eventType);
if (settings.isEnabled().isPresent() && settings.isEnabled().get()) {
- TaskerService service = taskerService;
- if (settings.getThreshold().isPresent()) {
- service = service.withThreshold(eventType, settings.getThreshold().get());
- }
- if (settings.getTaskProvider().isPresent()) {
- service = service.withProvider(eventType, settings.getTaskProvider().get());
- }
boolean run = false;
try {
- run = service.runForType(eventType);
+ run = taskerService.runForType(eventType);
} catch (NoTaskDefinedException e) {
TaskerUtil.noTaskDefinedInformation().show();
}
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/service/TaskerConstants.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/service/TaskerConstants.java
index 9071fc115..afd8af24f 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/service/TaskerConstants.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/service/TaskerConstants.java
@@ -4,6 +4,7 @@ import java.io.Serializable;
import nodomain.freeyourgadget.gadgetbridge.devices.xwatch.XWatchConstants;
import nodomain.freeyourgadget.gadgetbridge.devices.xwatch.XWatchService;
+import nodomain.freeyourgadget.gadgetbridge.devices.xwatch.XWatchTaskerSpec;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class TaskerConstants {
@@ -30,7 +31,7 @@ public class TaskerConstants {
public enum TaskerDevice implements Serializable {
- XWATCH(DeviceType.XWATCH, XWatchService.getTaskerSpec());
+ XWATCH(DeviceType.XWATCH, new XWatchTaskerSpec());
private DeviceType type;
private TaskerSpec spec;
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/service/TaskerService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/service/TaskerService.java
index bdaea14e5..1bd85dedc 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/service/TaskerService.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/service/TaskerService.java
@@ -10,61 +10,33 @@ import java.util.function.Supplier;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.tasker.event.SettingSupplier;
+import nodomain.freeyourgadget.gadgetbridge.tasker.event.SettingSupplierImpl;
import nodomain.freeyourgadget.gadgetbridge.tasker.event.TaskerEvent;
import nodomain.freeyourgadget.gadgetbridge.tasker.event.TaskerEventType;
import nodomain.freeyourgadget.gadgetbridge.tasker.task.TaskerTask;
import nodomain.freeyourgadget.gadgetbridge.tasker.task.TaskerTaskProvider;
/**
- * Tasker service for scheduling task with specific thresholds.
+ * Default impl for {@link AbstractTaskerService}.
*
* One instance per thread/device! The service is not threadsafe.
*/
-public class TaskerService {
+public class TaskerService extends AbstractTaskerService {
- private SettingSupplier enabled;
- private ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
- private Map tasks = new HashMap<>();
private Map> threshold = new HashMap<>();
private Map> typeProvider = new HashMap<>();
- private long defaultThreshold = 50L;
-
- // Builder
-
- public TaskerService() {
- this.enabled = new SettingSupplier() {
- @Override
- public Boolean get() {
- return GBApplication.getPrefs().getBoolean(TaskerConstants.TASKER_ENABLED, false);
- }
-
- @Override
- public boolean isPresent() {
- return true;
- }
- };
- }
-
- public TaskerService(SettingSupplier enabled) {
- this.enabled = enabled;
- }
public TaskerService(boolean enabled) {
- this.enabled = new StaticSettingSupplier<>(enabled);
+ this.enabled = new SettingSupplierImpl<>(enabled);
}
public TaskerService withThreshold(TaskerEventType type, long threshold) {
- this.threshold.put(type, new StaticSettingSupplier<>(threshold));
- return this;
- }
-
- public TaskerService withThreshold(TaskerEventType type, SettingSupplier threshold) {
- this.threshold.put(type, threshold);
+ this.threshold.put(type, new SettingSupplierImpl<>(threshold));
return this;
}
public TaskerService withTask(TaskerEventType type, final String task) {
- typeProvider.put(type, new StaticSettingSupplier(new TaskerTaskProvider() {
+ typeProvider.put(type, new SettingSupplierImpl(new TaskerTaskProvider() {
@Override
public String getTask(TaskerEvent event) {
return task;
@@ -74,83 +46,22 @@ public class TaskerService {
}
public TaskerService withProvider(TaskerEventType type, TaskerTaskProvider provider) {
- typeProvider.put(type, new StaticSettingSupplier<>(provider));
+ typeProvider.put(type, new SettingSupplierImpl<>(provider));
return this;
}
- public TaskerService withProvider(TaskerEventType type, SettingSupplier provider) {
- typeProvider.put(type, provider);
- return this;
- }
-
- // Public
-
- public boolean isActive() {
- return enabled.get();
- }
-
- public boolean buttonPressed(int index) {
- return runForType(TaskerEventType.BUTTON.withIndex(index));
- }
-
- public boolean deviceConnected(int index) {
- return runForType(TaskerEventType.CONNECTION.withIndex(index));
- }
-
- public boolean dataReceived(int index) {
- return runForType(TaskerEventType.DATA.withIndex(index));
- }
-
- public boolean runForType(TaskerEventType type) {
- if (type != null && !TaskerEventType.NO_OP.equals(type) && isActive() && ready()) {
- if (!tasks.containsKey(type)) {
- if (taskProvider(type) != null) {
- tasks.put(type, new TaskerTask(type, taskProvider(type), threshold(type)));
- }
- }
- tasks.get(type).schedule(executor);
- return true;
- }
- return false;
- }
-
// Private
- private long threshold(TaskerEventType type) {
- return threshold.containsKey(type) && threshold.get(type).isPresent() ? threshold.get(type).get() : defaultThreshold;
+ protected SettingSupplier threshold(TaskerEventType type) {
+ return threshold.get(type);
}
- private TaskerTaskProvider taskProvider(TaskerEventType type) {
+ protected SettingSupplier taskProvider(TaskerEventType type) {
if (typeProvider.containsKey(type) && typeProvider.get(type).isPresent()) {
- return typeProvider.get(type).get();
+ return typeProvider.get(type);
}
throw new NoTaskDefinedException();
}
- // Static
-
- public static boolean ready() {
- return TaskerIntent.testStatus(GBApplication.getContext()).equals(TaskerIntent.Status.OK);
- }
-
- private static class StaticSettingSupplier implements SettingSupplier {
-
- private T setting;
-
- public StaticSettingSupplier(T setting) {
- this.setting = setting;
- }
-
- @Override
- public T get() {
- return setting;
- }
-
- @Override
- public boolean isPresent() {
- return true;
- }
-
- }
}
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/service/TaskerSpec.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/service/TaskerSpec.java
index 20862dfd7..eee05c2da 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/service/TaskerSpec.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/service/TaskerSpec.java
@@ -14,6 +14,6 @@ public interface TaskerSpec {
List getSupportedTypes();
- TaskerSettings getTaskerSettings(TaskerEventType eventType);
+ TaskerSettings getSettings(TaskerEventType eventType);
}
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/ButtonPreference.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/activities/ButtonPreference.java
similarity index 94%
rename from app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/ButtonPreference.java
rename to app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/activities/ButtonPreference.java
index d5909c9f9..4b383a36a 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/ButtonPreference.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/activities/ButtonPreference.java
@@ -1,4 +1,4 @@
-package nodomain.freeyourgadget.gadgetbridge.tasker.settings;
+package nodomain.freeyourgadget.gadgetbridge.tasker.settings.activities;
import android.content.Context;
import android.preference.EditTextPreference;
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/TaskerActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/activities/TaskerActivity.java
similarity index 90%
rename from app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/TaskerActivity.java
rename to app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/activities/TaskerActivity.java
index 5b31eaf5e..8cc5dac3b 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/TaskerActivity.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/activities/TaskerActivity.java
@@ -1,14 +1,12 @@
-package nodomain.freeyourgadget.gadgetbridge.tasker.settings;
+package nodomain.freeyourgadget.gadgetbridge.tasker.settings.activities;
import android.content.Intent;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceCategory;
-import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.activities.AbstractSettingsActivity;
-import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.tasker.service.TaskerConstants;
public class TaskerActivity extends AbstractSettingsActivity {
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/TaskerEventActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/activities/TaskerEventActivity.java
similarity index 64%
rename from app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/TaskerEventActivity.java
rename to app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/activities/TaskerEventActivity.java
index 52678c006..01d862a38 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/TaskerEventActivity.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/activities/TaskerEventActivity.java
@@ -1,18 +1,19 @@
-package nodomain.freeyourgadget.gadgetbridge.tasker.settings;
+package nodomain.freeyourgadget.gadgetbridge.tasker.settings.activities;
-import android.content.res.Resources;
import android.os.Bundle;
import android.preference.EditTextPreference;
import android.preference.Preference;
-import android.preference.PreferenceCategory;
import android.preference.PreferenceScreen;
import android.view.View;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.activities.AbstractSettingsActivity;
+import nodomain.freeyourgadget.gadgetbridge.tasker.event.TaskerEvent;
import nodomain.freeyourgadget.gadgetbridge.tasker.event.TaskerEventType;
import nodomain.freeyourgadget.gadgetbridge.tasker.service.TaskerConstants;
+import nodomain.freeyourgadget.gadgetbridge.tasker.settings.TaskerSettings;
+import nodomain.freeyourgadget.gadgetbridge.tasker.task.TaskerTaskProvider;
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
public class TaskerEventActivity extends AbstractSettingsActivity {
@@ -34,19 +35,23 @@ public class TaskerEventActivity extends AbstractSettingsActivity {
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
device = (TaskerConstants.TaskerDevice) getIntent().getSerializableExtra(TaskerConstants.DEVICE_INTENT);
+ final TaskerSettings settings = device.getSpec().getSettings(eventType);
eventType = (TaskerEventType) getIntent().getSerializableExtra(TaskerConstants.EVENT_INTENT);
final PreferenceScreen tasks = (PreferenceScreen) findPreference(TaskerConstants.ACTIVITY_TASKS);
- ButtonPreference addTaskButton = (ButtonPreference) findPreference(TaskerConstants.ACTIVITY_TASK_ADD);
- final EditTextPreference taskNamePreference = (EditTextPreference) findPreference(TaskerConstants.ACTIVITY_TASK);
- final Preference thresholdEnabled = findPreference(TaskerConstants.ACTIVITY_THESHOLD_ENABELD);
- addTaskButton.setOnClickListener(new View.OnClickListener() {
+ initThreshold(settings, tasks);
+ initTasks(settings, tasks);
+ }
+
+ private void initThreshold(final TaskerSettings settings, final PreferenceScreen tasks) {
+ EditTextPreference threshold = (EditTextPreference) findPreference(TaskerConstants.ACTIVITY_THRESHOLD);
+ threshold.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
- public void onClick(View v) {
- if (prefs.getBoolean(thresholdEnabled.getKey(), false)) {
- tasks.addPreference(task(tasks, taskNamePreference));
- }
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ settings.getThreshold().set(Long.valueOf(newValue.toString()));
+ return true;
}
});
+ final Preference thresholdEnabled = findPreference(TaskerConstants.ACTIVITY_THESHOLD_ENABELD);
thresholdEnabled.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
@@ -55,11 +60,38 @@ public class TaskerEventActivity extends AbstractSettingsActivity {
tasks.removePreference(tasks.getPreference(tasks.getPreferenceCount()));
}
}
+ settings.getThreshold().set(null);
return true;
}
});
}
+ private void initTasks(final TaskerSettings settings, final PreferenceScreen tasks) {
+ ButtonPreference addTaskButton = (ButtonPreference) findPreference(TaskerConstants.ACTIVITY_TASK_ADD);
+ final EditTextPreference taskNamePreference = (EditTextPreference) findPreference(TaskerConstants.ACTIVITY_TASK);
+ addTaskButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (prefs.getBoolean(TaskerConstants.ACTIVITY_THESHOLD_ENABELD, false)) {
+ tasks.addPreference(task(tasks, taskNamePreference));
+ }
+ }
+ });
+ TaskerTaskProvider taskerTaskProvider = new TaskerTaskProvider() {
+ @Override
+ public String getTask(TaskerEvent event) {
+ for (int i = 1; i < tasks.getPreferenceCount(); i++) {
+ if (event.getCount() == i - 1) {
+ return ((EditTextPreference) tasks.getPreference(i)).getText();
+ }
+ }
+ return null;
+ }
+
+ };
+ settings.getTaskProvider().set(taskerTaskProvider);
+ }
+
private Preference task(final PreferenceScreen tasks, Preference build) {
final ButtonPreference task = new ButtonPreference(this);
task.setKey(TaskerConstants.ACTIVITY_TASK + "_" + tasks.getPreferenceCount());
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/TaskerEventsActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/activities/TaskerEventsActivity.java
similarity index 93%
rename from app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/TaskerEventsActivity.java
rename to app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/activities/TaskerEventsActivity.java
index 1aaa53a11..704dda355 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/TaskerEventsActivity.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/activities/TaskerEventsActivity.java
@@ -1,4 +1,4 @@
-package nodomain.freeyourgadget.gadgetbridge.tasker.settings;
+package nodomain.freeyourgadget.gadgetbridge.tasker.settings.activities;
import android.content.Intent;
import android.os.Bundle;
@@ -7,7 +7,6 @@ import android.preference.PreferenceCategory;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.activities.AbstractSettingsActivity;
-import nodomain.freeyourgadget.gadgetbridge.tasker.event.TaskerEvent;
import nodomain.freeyourgadget.gadgetbridge.tasker.event.TaskerEventType;
import nodomain.freeyourgadget.gadgetbridge.tasker.service.TaskerConstants;
diff --git a/app/src/main/res/xml/tasker_event_preferences.xml b/app/src/main/res/xml/tasker_event_preferences.xml
index 43b838068..03290a80b 100644
--- a/app/src/main/res/xml/tasker_event_preferences.xml
+++ b/app/src/main/res/xml/tasker_event_preferences.xml
@@ -15,11 +15,11 @@
android:key="act_tasker_threshold"
android:summary="@string/tasker_threshold_sum"
android:title="@string/tasker_threshold" />
-
+ android:widgetLayout="@layout/tasker_add_button">