TaskerSettings now binded to TaskerActivities.

This commit is contained in:
nightoftune 2019-01-15 21:53:50 +01:00
parent 9dee59f61a
commit c6b20ea534
20 changed files with 356 additions and 177 deletions

View File

@ -417,16 +417,16 @@
android:name=".activities.FindPhoneActivity"
android:label="Find Phone" />
<activity
android:name=".tasker.settings.TaskerActivity"
android:name=".tasker.settings.activities.TaskerActivity"
android:label="@string/tasker" />
<activity
android:name=".tasker.settings.TaskerEventActivity"
android:name=".tasker.settings.activities.TaskerEventActivity"
android:label="@string/tasker"
android:parentActivityName=".tasker.settings.TaskerEventsActivity" />
android:parentActivityName=".tasker.settings.activities.TaskerEventsActivity" />
<activity
android:name=".tasker.settings.TaskerEventsActivity"
android:name=".tasker.settings.activities.TaskerEventsActivity"
android:label="@string/tasker"
android:parentActivityName=".tasker.settings.TaskerActivity" />
android:parentActivityName=".tasker.settings.activities.TaskerActivity" />
<provider
android:name=".contentprovider.PebbleContentProvider"

View File

@ -57,7 +57,7 @@ import nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst;
import nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandPreferencesActivity;
import nodomain.freeyourgadget.gadgetbridge.model.CannedMessagesSpec;
import nodomain.freeyourgadget.gadgetbridge.tasker.service.TaskerConstants;
import nodomain.freeyourgadget.gadgetbridge.tasker.settings.TaskerActivity;
import nodomain.freeyourgadget.gadgetbridge.tasker.settings.activities.TaskerActivity;
import nodomain.freeyourgadget.gadgetbridge.util.AndroidUtils;
import nodomain.freeyourgadget.gadgetbridge.util.FileUtils;
import nodomain.freeyourgadget.gadgetbridge.util.GB;

View File

@ -25,7 +25,9 @@ import java.util.List;
import java.util.Map;
import java.util.UUID;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.tasker.event.TaskerEventType;
import nodomain.freeyourgadget.gadgetbridge.tasker.service.AbstractTaskerSpec;
import nodomain.freeyourgadget.gadgetbridge.tasker.settings.TaskerSettings;
import nodomain.freeyourgadget.gadgetbridge.tasker.service.TaskerSpec;
@ -49,10 +51,6 @@ public class XWatchService {
XWATCH_DEBUG.put(UUID_SERVICE, "Get service");
}
public static TaskerSpec getTaskerSpec() {
return new XWatchTaskerSpec();
}
public static String lookup(UUID uuid, String fallback) {
String name = XWATCH_DEBUG.get(uuid);
if (name == null) {
@ -61,33 +59,4 @@ public class XWatchService {
return name;
}
private static class XWatchTaskerSpec implements TaskerSpec {
@Override
public TaskerEventType getEventType(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
if (UUID_NOTIFY.equals(characteristic.getUuid())) {
byte[] data = characteristic.getValue();
if (data[0] == XWatchService.COMMAND_ACTIVITY_DATA) {
return TaskerEventType.DATA;
}
if (data[0] == XWatchService.COMMAND_ACTION_BUTTON) {
return TaskerEventType.BUTTON;
}
if (data[0] == XWatchService.COMMAND_CONNECTED) {
return TaskerEventType.CONNECTION;
}
}
return TaskerEventType.NO_OP;
}
@Override
public List<TaskerEventType> getSupportedTypes() {
return Arrays.asList(TaskerEventType.BUTTON, TaskerEventType.DATA, TaskerEventType.CONNECTION);
}
@Override
public TaskerSettings getTaskerSettings(TaskerEventType eventType) {
return null;
}
}
}

View File

@ -0,0 +1,36 @@
package nodomain.freeyourgadget.gadgetbridge.devices.xwatch;
import android.bluetooth.BluetoothGatt;
import android.bluetooth.BluetoothGattCharacteristic;
import java.util.Arrays;
import java.util.List;
import nodomain.freeyourgadget.gadgetbridge.tasker.event.TaskerEventType;
import nodomain.freeyourgadget.gadgetbridge.tasker.service.AbstractTaskerSpec;
public class XWatchTaskerSpec extends AbstractTaskerSpec {
@Override
public TaskerEventType getEventType(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
if (XWatchService.UUID_NOTIFY.equals(characteristic.getUuid())) {
byte[] data = characteristic.getValue();
if (data[0] == XWatchService.COMMAND_ACTIVITY_DATA) {
return TaskerEventType.DATA;
}
if (data[0] == XWatchService.COMMAND_ACTION_BUTTON) {
return TaskerEventType.BUTTON;
}
if (data[0] == XWatchService.COMMAND_CONNECTED) {
return TaskerEventType.CONNECTION;
}
}
return TaskerEventType.NO_OP;
}
@Override
public List<TaskerEventType> getSupportedTypes() {
return Arrays.asList(TaskerEventType.BUTTON, TaskerEventType.DATA, TaskerEventType.CONNECTION);
}
}

View File

@ -61,6 +61,7 @@ import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder;
import nodomain.freeyourgadget.gadgetbridge.service.btle.actions.SetDeviceStateAction;
import nodomain.freeyourgadget.gadgetbridge.service.devices.miband.DeviceInfo;
import nodomain.freeyourgadget.gadgetbridge.tasker.service.TaskerBleProfile;
import nodomain.freeyourgadget.gadgetbridge.tasker.service.TaskerConstants;
import nodomain.freeyourgadget.gadgetbridge.tasker.task.TaskerTaskProvider;
import nodomain.freeyourgadget.gadgetbridge.tasker.service.TaskerService;
import nodomain.freeyourgadget.gadgetbridge.tasker.event.TaskerEvent;
@ -81,7 +82,7 @@ public class XWatchSupport extends AbstractBTLEDeviceSupport {
addSupportedService(XWatchService.UUID_SERVICE);
addSupportedService(XWatchService.UUID_WRITE);
addSupportedService(XWatchService.UUID_NOTIFY);
addSupportedProfile(new TaskerBleProfile<>(this, XWatchService.getTaskerSpec()));
addSupportedProfile(new TaskerBleProfile<>(this, TaskerConstants.TaskerDevice.XWATCH));
}
public static byte[] crcChecksum(byte[] data) {

View File

@ -9,6 +9,14 @@ public interface SettingSupplier<T> {
T get();
void set(T object);
boolean isPresent();
SettingSupplier<T> onChanged(SettingListener<T> onChanged);
interface SettingListener<T> {
void changed(T object);
}
}

View File

@ -0,0 +1,36 @@
package nodomain.freeyourgadget.gadgetbridge.tasker.event;
public class SettingSupplierImpl<T> implements SettingSupplier<T> {
private T object;
private SettingListener<T> onChanged;
public SettingSupplierImpl() {
}
public SettingSupplierImpl(T object) {
this.object = object;
}
@Override
public T get() {
return object;
}
@Override
public void set(T object) {
this.object = object;
onChanged.changed(object);
}
@Override
public boolean isPresent() {
return object != null;
}
@Override
public SettingSupplier<T> onChanged(SettingListener<T> onChanged) {
this.onChanged = onChanged;
return this;
}
}

View File

@ -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.
* <p>
* One instance per thread/device! The service is not threadsafe.
*/
public abstract class AbstractTaskerService {
protected SettingSupplier<Boolean> enabled;
private ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
private Map<TaskerEventType, TaskerTask> tasks = new HashMap<>();
private static final long DEFAULT_THRESHOLD = 50L;
public AbstractTaskerService() {
this.enabled = new SettingSupplierImpl<Boolean>() {
@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<TaskerTaskProvider> taskProvider = taskProvider(type);
if (taskProvider.isPresent()) {
SettingSupplier<Long> 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<Long> threshold(TaskerEventType type);
protected abstract SettingSupplier<TaskerTaskProvider> taskProvider(TaskerEventType type);
public static boolean ready() {
return TaskerIntent.testStatus(GBApplication.getContext()).equals(TaskerIntent.Status.OK);
}
}

View File

@ -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<TaskerEventType, TaskerSettings> 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<Boolean> consumingEvents = new SettingSupplierImpl<>();
private SettingSupplier<Boolean> enabled = new SettingSupplierImpl<>();
private SettingSupplier<Long> threshold = new SettingSupplierImpl<>();
private SettingSupplier<TaskerTaskProvider> taskProvider = new SettingSupplierImpl<>();
@Override
public SettingSupplier<Boolean> isConsumingEvents() {
return consumingEvents;
}
@Override
public SettingSupplier<Boolean> isEnabled() {
return enabled;
}
@Override
public SettingSupplier<Long> getThreshold() {
return threshold;
}
@Override
public SettingSupplier<TaskerTaskProvider> getTaskProvider() {
return taskProvider;
}
}
private class NoOpTaskerSettings implements TaskerSettings {
@Override
public SettingSupplier<Boolean> isConsumingEvents() {
return new NoOpSupplier<>();
}
@Override
public SettingSupplier<Boolean> isEnabled() {
return new NoOpSupplier<>();
}
@Override
public SettingSupplier<Long> getThreshold() {
return new NoOpSupplier<>();
}
@Override
public SettingSupplier<TaskerTaskProvider> getTaskProvider() {
return new NoOpSupplier<>();
}
}
private class NoOpSupplier<T> implements SettingSupplier<T> {
@Override
public T get() {
return null;
}
@Override
public void set(T object) {
}
@Override
public boolean isPresent() {
return false;
}
@Override
public SettingSupplier<T> onChanged(SettingListener<T> onChanged) {
return this;
}
}
}

View File

@ -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<Long> threshold(TaskerEventType type) {
return spec.getSettings(type).getThreshold();
}
@Override
protected SettingSupplier<TaskerTaskProvider> taskProvider(TaskerEventType type) {
return spec.getSettings(type).getTaskProvider();
}
}

View File

@ -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;
}
}

View File

@ -17,33 +17,26 @@ import nodomain.freeyourgadget.gadgetbridge.tasker.settings.TaskerSettings;
*/
public class TaskerBleProfile<T extends AbstractBTLEDeviceSupport> extends AbstractBleProfile<T> {
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();
}

View File

@ -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;

View File

@ -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}.
* <p>
* One instance per thread/device! The service is not threadsafe.
*/
public class TaskerService {
public class TaskerService extends AbstractTaskerService {
private SettingSupplier<Boolean> enabled;
private ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
private Map<TaskerEventType, TaskerTask> tasks = new HashMap<>();
private Map<TaskerEventType, SettingSupplier<Long>> threshold = new HashMap<>();
private Map<TaskerEventType, SettingSupplier<TaskerTaskProvider>> typeProvider = new HashMap<>();
private long defaultThreshold = 50L;
// Builder
public TaskerService() {
this.enabled = new SettingSupplier<Boolean>() {
@Override
public Boolean get() {
return GBApplication.getPrefs().getBoolean(TaskerConstants.TASKER_ENABLED, false);
}
@Override
public boolean isPresent() {
return true;
}
};
}
public TaskerService(SettingSupplier<Boolean> 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<Long> 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<TaskerTaskProvider>(new TaskerTaskProvider() {
typeProvider.put(type, new SettingSupplierImpl<TaskerTaskProvider>(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<TaskerTaskProvider> 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<Long> threshold(TaskerEventType type) {
return threshold.get(type);
}
private TaskerTaskProvider taskProvider(TaskerEventType type) {
protected SettingSupplier<TaskerTaskProvider> 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<T> implements SettingSupplier<T> {
private T setting;
public StaticSettingSupplier(T setting) {
this.setting = setting;
}
@Override
public T get() {
return setting;
}
@Override
public boolean isPresent() {
return true;
}
}
}

View File

@ -14,6 +14,6 @@ public interface TaskerSpec {
List<TaskerEventType> getSupportedTypes();
TaskerSettings getTaskerSettings(TaskerEventType eventType);
TaskerSettings getSettings(TaskerEventType eventType);
}

View File

@ -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;

View File

@ -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 {

View File

@ -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());

View File

@ -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;

View File

@ -15,11 +15,11 @@
android:key="act_tasker_threshold"
android:summary="@string/tasker_threshold_sum"
android:title="@string/tasker_threshold" />
<nodomain.freeyourgadget.gadgetbridge.tasker.settings.ButtonPreference
<nodomain.freeyourgadget.gadgetbridge.tasker.settings.activities.ButtonPreference
android:key="act_tasker_task_add"
android:summary="@string/tasker_task_sum"
android:title="@string/tasker_task"
android:widgetLayout="@layout/tasker_add_button"></nodomain.freeyourgadget.gadgetbridge.tasker.settings.ButtonPreference>
android:widgetLayout="@layout/tasker_add_button"></nodomain.freeyourgadget.gadgetbridge.tasker.settings.activities.ButtonPreference>
</PreferenceCategory>
<EditTextPreference
android:key="act_tasker_task"