From b54b30690c0c5b3805977fe7d1daba0da8cc4792 Mon Sep 17 00:00:00 2001 From: nightoftune Date: Thu, 31 Jan 2019 20:54:02 +0100 Subject: [PATCH] Started bug fixing. --- .../devices/xwatch/XWatchTaskerSpec.java | 4 +- .../tasker/plugin/TaskerBleProfile.java | 5 ++- .../tasker/plugin/TaskerDevice.java | 2 +- .../tasker/service/TaskerUtil.java | 13 ++++-- .../settings/PreferenceSettingSupplier.java | 10 ++--- .../settings/activities/ButtonPreference.java | 32 ++++++++++---- .../activities/TaskerEventActivity.java | 42 ++----------------- .../tasker/spec/AbstractTaskerSpec.java | 5 ++- .../tasker/spec/PreferenceTaskerSettings.java | 17 ++++---- .../gadgetbridge/tasker/task/TaskerTask.java | 2 +- .../tasker/task/TaskerTaskProvider.java | 8 ---- .../res/layout/button_preference_layout.xml | 7 ++-- 12 files changed, 66 insertions(+), 81 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/xwatch/XWatchTaskerSpec.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/xwatch/XWatchTaskerSpec.java index 9d9bfc69d..7277fa9d1 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/xwatch/XWatchTaskerSpec.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/xwatch/XWatchTaskerSpec.java @@ -6,13 +6,13 @@ import android.bluetooth.BluetoothGattCharacteristic; import java.util.Arrays; import java.util.List; +import nodomain.freeyourgadget.gadgetbridge.model.DeviceType; import nodomain.freeyourgadget.gadgetbridge.tasker.event.TaskerEventType; -import nodomain.freeyourgadget.gadgetbridge.tasker.plugin.TaskerDevice; import nodomain.freeyourgadget.gadgetbridge.tasker.spec.AbstractTaskerSpec; public class XWatchTaskerSpec extends AbstractTaskerSpec { - protected XWatchTaskerSpec(TaskerDevice device) { + public XWatchTaskerSpec(DeviceType device) { super(device); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/plugin/TaskerBleProfile.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/plugin/TaskerBleProfile.java index fe8ac776b..0570ba248 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/plugin/TaskerBleProfile.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/plugin/TaskerBleProfile.java @@ -2,6 +2,9 @@ package nodomain.freeyourgadget.gadgetbridge.tasker.plugin; import android.bluetooth.BluetoothGatt; import android.bluetooth.BluetoothGattCharacteristic; +import android.os.AsyncTask; +import android.os.Handler; +import android.os.Looper; import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLEDeviceSupport; import nodomain.freeyourgadget.gadgetbridge.service.btle.profiles.AbstractBleProfile; @@ -42,7 +45,7 @@ public class TaskerBleProfile extends Abstr try { run = taskerService.runForType(eventType); } catch (NoTaskDefinedException e) { - TaskerUtil.noTaskDefinedInformation().show(); + TaskerUtil.noTaskDefinedInformation(); } if (settings.isConsumeEvent().isPresent() && settings.isConsumeEvent().get()) { return run; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/plugin/TaskerDevice.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/plugin/TaskerDevice.java index ce9efd5ee..21286ca44 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/plugin/TaskerDevice.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/plugin/TaskerDevice.java @@ -13,7 +13,7 @@ import nodomain.freeyourgadget.gadgetbridge.tasker.spec.TaskerSpec; */ public enum TaskerDevice implements Serializable { - XWATCH(DeviceType.XWATCH, new XWatchTaskerSpec()); + XWATCH(DeviceType.XWATCH, new XWatchTaskerSpec(DeviceType.XWATCH)); private DeviceType type; private TaskerSpec spec; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/service/TaskerUtil.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/service/TaskerUtil.java index f95f902ec..c98adf12e 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/service/TaskerUtil.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/service/TaskerUtil.java @@ -1,5 +1,7 @@ package nodomain.freeyourgadget.gadgetbridge.tasker.service; +import android.os.Handler; +import android.os.Looper; import android.widget.Toast; import nodomain.freeyourgadget.gadgetbridge.GBApplication; @@ -33,11 +35,14 @@ public class TaskerUtil { /** * Creates a {@link android.widget.Toast} for the user to show that Tasker is enabled but no task is defined. - * - * @return {@link Toast} */ - public static Toast noTaskDefinedInformation() { - return Toast.makeText(GBApplication.getContext(), R.string.tasker_no_task_defined, Toast.LENGTH_LONG); + public static void noTaskDefinedInformation() { + new Handler(Looper.getMainLooper()).post(new Runnable() { + @Override + public void run() { + Toast.makeText(GBApplication.getContext(), R.string.tasker_no_task_defined, Toast.LENGTH_LONG).show(); + } + }); } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/PreferenceSettingSupplier.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/PreferenceSettingSupplier.java index b69bb2edf..64dbd54f8 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/PreferenceSettingSupplier.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/PreferenceSettingSupplier.java @@ -20,11 +20,11 @@ public final class PreferenceSettingSupplier implements SettingSupplier { throw new SettingsException("Undefined", "Key can not be empty!"); } if (type == null || - !Boolean.class.isAssignableFrom(type.getClass()) || - !Long.class.isAssignableFrom(type.getClass()) || - !Integer.class.isAssignableFrom(type.getClass()) || - !Float.class.isAssignableFrom(type.getClass()) || - !String.class.isAssignableFrom(type.getClass()) || + !Boolean.class.isAssignableFrom(type.getClass()) && + !Long.class.isAssignableFrom(type.getClass()) && + !Integer.class.isAssignableFrom(type.getClass()) && + !Float.class.isAssignableFrom(type.getClass()) && + !String.class.isAssignableFrom(type.getClass()) && (Set.class.isAssignableFrom(type.getClass()) && !(((ParameterizedType) type).getActualTypeArguments()[0] instanceof Class) && !String.class.isAssignableFrom((Class) ((ParameterizedType) type).getActualTypeArguments()[0]))) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/activities/ButtonPreference.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/activities/ButtonPreference.java index 8784185a3..817b15296 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/activities/ButtonPreference.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/activities/ButtonPreference.java @@ -2,7 +2,9 @@ package nodomain.freeyourgadget.gadgetbridge.tasker.settings.activities; import android.content.Context; import android.preference.EditTextPreference; +import android.preference.Preference; import android.util.AttributeSet; +import android.view.MotionEvent; import android.view.View; import android.widget.Button; @@ -16,7 +18,7 @@ import nodomain.freeyourgadget.gadgetbridge.R; public class ButtonPreference extends EditTextPreference { private View.OnClickListener onClickListener; - private Button button; + private int buttonTextResource; public ButtonPreference(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); @@ -25,20 +27,36 @@ public class ButtonPreference extends EditTextPreference { public ButtonPreference(Context context, AttributeSet attrs) { super(context, attrs); + setWidgetLayoutResource(R.layout.button_preference_layout); } public ButtonPreference(Context context) { super(context); + setWidgetLayoutResource(R.layout.button_preference_layout); } @Override - protected void onBindView(View view) { - super.onBindView(view); - View button = view.findViewById(R.id.tasker_button); + protected void onBindView(final View view) { + Button button = view.findViewById(R.id.tasker_button); if (button != null) { button.setOnClickListener(onClickListener); - this.button = (Button) button; + button.setText(buttonTextResource); } + view.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (getDialog() != null && getDialog().isShowing()) { + return; + } + showDialog(null); + } + }); + super.onBindView(view); + } + + @Override + protected void onClick() { + super.onClick(); } /** @@ -56,8 +74,6 @@ public class ButtonPreference extends EditTextPreference { * @param resourceId {@link R.string} */ public void setButtonText(int resourceId) { - if (button != null) { - button.setText(resourceId); - } + buttonTextResource = resourceId; } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/activities/TaskerEventActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/activities/TaskerEventActivity.java index 9d2b45beb..4d8c079aa 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/activities/TaskerEventActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/activities/TaskerEventActivity.java @@ -85,9 +85,9 @@ public class TaskerEventActivity extends AbstractSettingsActivity { device = (TaskerDevice) getArguments().get(TaskerConstants.INTENT_DEVICE); eventType = (TaskerEventType) getArguments().get(TaskerConstants.INTENT_EVENT); initEnableEvent(); - initAddTask(); initEnableThreshold(); initThreshold(); + initAddTask(); initTasks(); } @@ -101,14 +101,6 @@ public class TaskerEventActivity extends AbstractSettingsActivity { enableEvent = new SwitchPreference(getActivity()); enableEvent.setKey(key); enableEvent.setTitle(R.string.tasker_event_enabled); -// enableEvent.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { -// @Override -// public boolean onPreferenceChange(Preference preference, Object newValue) { -// settings.isEnabled().set((Boolean) newValue); -// return true; -// } -// }); -// settings.isEnabled().set(prefs.getBoolean(key, false)); getPreferenceScreen().addPreference(enableEvent); } @@ -129,17 +121,6 @@ public class TaskerEventActivity extends AbstractSettingsActivity { threshold.setSummary(R.string.tasker_threshold_sum); threshold.getNumberPicker().setMinValue(50); threshold.getNumberPicker().setMaxValue(10000); -// setThresholdIfDefined(settings); -// threshold.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { -// @Override -// public boolean onPreferenceChange(Preference preference, Object newValue) { -// settings.getThreshold().set(Long.valueOf(newValue.toString())); -// return true; -// } -// }); -// if (prefs.getBoolean(scoped(TaskerConstants.ACTIVITY_THRESHOLD_ENABLED), false)) { -// settings.getThreshold().set(null); -// } enableThreshold.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { @@ -160,6 +141,7 @@ public class TaskerEventActivity extends AbstractSettingsActivity { private void initAddTask() { addTask = new ButtonPreference(getActivity()); addTask.setTitle(R.string.tasker_task); + addTask.setButtonText(R.string.tasker_add); addTask.setSummary(R.string.tasker_task_sum); getPreferenceScreen().addPreference(addTask); } @@ -191,7 +173,6 @@ public class TaskerEventActivity extends AbstractSettingsActivity { } private void initTasks() { - loadTasks(); addTask.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -200,29 +181,14 @@ public class TaskerEventActivity extends AbstractSettingsActivity { } } }); -// TaskerTaskProvider taskerTaskProvider = new TaskerTaskProvider() { -// @Override -// public String getTask(TaskerEvent event) { -// if (event.getCount() < tasks.size()) { -// String text = tasks.get(event.getCount()).getText(); -// if (text == null || StringUtils.isEmpty(text)) { -// throw new NoTaskDefinedException(); -// } -// return text; -// } -// return null; -// } -// -// }; -// settings.getTaskProvider().set(taskerTaskProvider); + loadTasks(); } private EditTextPreference task(String key) { final ButtonPreference task = new ButtonPreference(getActivity()); task.setKey(key); - task.setSummary(R.string.tasker_task_sum); + task.setSummary(R.string.tasker_task_name); task.setButtonText(R.string.tasker_remove); - task.setWidgetLayoutResource(R.layout.button_preference_layout); task.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/spec/AbstractTaskerSpec.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/spec/AbstractTaskerSpec.java index c5e55cab1..f984689f2 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/spec/AbstractTaskerSpec.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/spec/AbstractTaskerSpec.java @@ -3,6 +3,7 @@ package nodomain.freeyourgadget.gadgetbridge.tasker.spec; import java.util.HashMap; import java.util.Map; +import nodomain.freeyourgadget.gadgetbridge.model.DeviceType; import nodomain.freeyourgadget.gadgetbridge.tasker.plugin.TaskerDevice; import nodomain.freeyourgadget.gadgetbridge.tasker.settings.SettingSupplier; import nodomain.freeyourgadget.gadgetbridge.tasker.settings.SettingSupplierImpl; @@ -20,9 +21,9 @@ import nodomain.freeyourgadget.gadgetbridge.tasker.task.TaskerTaskProvider; public abstract class AbstractTaskerSpec implements TaskerSpec { private Map settings = new HashMap<>(); - private TaskerDevice device; + private DeviceType device; - protected AbstractTaskerSpec(TaskerDevice device) { + protected AbstractTaskerSpec(DeviceType device) { this.device = device; } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/spec/PreferenceTaskerSettings.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/spec/PreferenceTaskerSettings.java index 8a624583b..704bfef29 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/spec/PreferenceTaskerSettings.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/spec/PreferenceTaskerSettings.java @@ -3,10 +3,12 @@ package nodomain.freeyourgadget.gadgetbridge.tasker.spec; import android.content.SharedPreferences; import nodomain.freeyourgadget.gadgetbridge.GBApplication; +import nodomain.freeyourgadget.gadgetbridge.model.DeviceType; import nodomain.freeyourgadget.gadgetbridge.tasker.event.TaskerEvent; import nodomain.freeyourgadget.gadgetbridge.tasker.event.TaskerEventType; import nodomain.freeyourgadget.gadgetbridge.tasker.plugin.TaskerConstants; import nodomain.freeyourgadget.gadgetbridge.tasker.plugin.TaskerDevice; +import nodomain.freeyourgadget.gadgetbridge.tasker.service.NoTaskDefinedException; import nodomain.freeyourgadget.gadgetbridge.tasker.settings.PreferenceSettingSupplier; import nodomain.freeyourgadget.gadgetbridge.tasker.settings.SettingSupplier; import nodomain.freeyourgadget.gadgetbridge.tasker.settings.TaskerSettings; @@ -21,7 +23,7 @@ import nodomain.freeyourgadget.gadgetbridge.tasker.task.TaskerTaskProvider; */ public class PreferenceTaskerSettings implements TaskerSettings { - private TaskerDevice device; + private DeviceType device; private TaskerEventType eventType; private SettingSupplier consumingEvents; private SettingSupplier enabled; @@ -29,7 +31,7 @@ public class PreferenceTaskerSettings implements TaskerSettings { private SettingSupplier taskProvider; private SharedPreferences preferences; - public PreferenceTaskerSettings(TaskerDevice device, TaskerEventType eventType) { + public PreferenceTaskerSettings(DeviceType device, TaskerEventType eventType) { this.device = device; this.eventType = eventType; this.preferences = GBApplication.getPrefs().getPreferences(); @@ -67,15 +69,14 @@ public class PreferenceTaskerSettings implements TaskerSettings { public String getTask(TaskerEvent event) { String key = scope(TaskerConstants.ACTIVITY_TASK).withScope(String.valueOf(event.getCount())).toString(); if (event.getType().equals(eventType) && preferences.contains(key)) { - return preferences.getString(key, ""); + String taskName = preferences.getString(key, null); + if(taskName != null && !taskName.isEmpty()){ + return taskName; + } } - return null; + throw new NoTaskDefinedException(); } - @Override - public void addTask(TaskerEvent event, String task) { - preferences.edit().putString(scope(TaskerConstants.ACTIVITY_TASK).withScope(String.valueOf(event.getCount())).toString(), task).commit(); - } }; @Override diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/task/TaskerTask.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/task/TaskerTask.java index b499113ea..fe9da7921 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/task/TaskerTask.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/task/TaskerTask.java @@ -54,7 +54,7 @@ public class TaskerTask implements Runnable { } } } catch (NoTaskDefinedException e) { - TaskerUtil.noTaskDefinedInformation().show(); + TaskerUtil.noTaskDefinedInformation(); } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/task/TaskerTaskProvider.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/task/TaskerTaskProvider.java index 5c503723e..24aaf760b 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/task/TaskerTaskProvider.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/task/TaskerTaskProvider.java @@ -15,12 +15,4 @@ public interface TaskerTaskProvider { */ String getTask(TaskerEvent event); - /** - * Add a task to the task provider and specific {@link TaskerEvent}. - * - * @param event {@link TaskerEvent} - * @param task Task name - */ - void addTask(TaskerEvent event, String task); - } diff --git a/app/src/main/res/layout/button_preference_layout.xml b/app/src/main/res/layout/button_preference_layout.xml index 1498ee169..f205c807f 100644 --- a/app/src/main/res/layout/button_preference_layout.xml +++ b/app/src/main/res/layout/button_preference_layout.xml @@ -1,14 +1,15 @@ + android:orientation="vertical" + android:clickable="true"> \ No newline at end of file