diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/activities/NumberPreference.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/activities/NumberPreference.java index dded07658..fd76f8402 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/activities/NumberPreference.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/tasker/settings/activities/NumberPreference.java @@ -1,4 +1,30 @@ package nodomain.freeyourgadget.gadgetbridge.tasker.settings.activities; -public class NumberPreference { +import android.content.Context; +import android.preference.DialogPreference; +import android.util.AttributeSet; +import android.view.View; +import android.view.ViewGroup; +import android.widget.NumberPicker; + +import nodomain.freeyourgadget.gadgetbridge.R; + +public class NumberPreference extends DialogPreference { + + private NumberPicker numberPicker; + + public NumberPreference(Context context) { + super(context, null); + numberPicker = new NumberPicker(getContext()); + } + + @Override + protected View onCreateDialogView() { + return numberPicker; + } + + public NumberPicker getNumberPicker() { + return numberPicker; + } + } 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 badc79f29..eeaa6359a 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 @@ -3,8 +3,10 @@ package nodomain.freeyourgadget.gadgetbridge.tasker.settings.activities; import android.os.Bundle; import android.preference.EditTextPreference; import android.preference.Preference; +import android.preference.PreferenceFragment; import android.preference.PreferenceScreen; import android.preference.SwitchPreference; +import android.support.annotation.Nullable; import android.view.View; import java.util.ArrayList; @@ -32,125 +34,189 @@ import nodomain.freeyourgadget.gadgetbridge.util.StringUtils; */ public class TaskerEventActivity extends AbstractSettingsActivity { - private TaskerDevice device; - private TaskerEventType eventType; - private Prefs prefs = GBApplication.getPrefs(); - private List taskPreferences = new ArrayList<>(); - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - addPreferencesFromResource(R.xml.tasker_event_preferences); + TaskerEventFragment taskerEventFragment = new TaskerEventFragment(); + Bundle arguments = new Bundle(); + arguments.putSerializable(TaskerConstants.INTENT_DEVICE, getIntent().getSerializableExtra(TaskerConstants.INTENT_DEVICE)); + arguments.putSerializable(TaskerConstants.INTENT_EVENT, getIntent().getSerializableExtra(TaskerConstants.INTENT_EVENT)); + taskerEventFragment.setArguments(arguments); + getFragmentManager().beginTransaction().replace(android.R.id.content, + taskerEventFragment).commit(); } - @Override - protected void onPostCreate(Bundle savedInstanceState) { - super.onPostCreate(savedInstanceState); - device = (TaskerDevice) getIntent().getSerializableExtra(TaskerConstants.INTENT_DEVICE); - eventType = (TaskerEventType) getIntent().getSerializableExtra(TaskerConstants.INTENT_EVENT); - final TaskerSettings settings = device.getSpec().getSettings(eventType); - SwitchPreference enabled = (SwitchPreference) findPreference(scoped(TaskerConstants.ACTIVITY_EVENT_ENABLED)); - settings.isEnabled().set(prefs.getBoolean(scoped(TaskerConstants.ACTIVITY_EVENT_ENABLED), false)); - enabled.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { - @Override - public boolean onPreferenceChange(Preference preference, Object newValue) { - settings.isEnabled().set((Boolean) newValue); - return true; - } - }); - eventType = (TaskerEventType) getIntent().getSerializableExtra(TaskerConstants.INTENT_EVENT); - final PreferenceScreen tasks = (PreferenceScreen) findPreference(scoped(TaskerConstants.ACTIVITY_TASKS)); - initThreshold(settings, tasks); - initTasks(settings, tasks); - } + public static class TaskerEventFragment extends PreferenceFragment { - private String scoped(TaskerConstants.ScopedString scopedString) { - return scopedString.withScope(device.name()).withScope(eventType.getType()).toString(); - } + private TaskerDevice device; + private TaskerEventType eventType; + private TaskerSettings settings; + private Prefs prefs = GBApplication.getPrefs(); - private void initThreshold(final TaskerSettings settings, final PreferenceScreen tasks) { - final EditTextPreference threshold = (EditTextPreference) findPreference(scoped(TaskerConstants.ACTIVITY_THRESHOLD)); - setThresholdIfDefined(settings); - threshold.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { - @Override - public boolean onPreferenceChange(Preference preference, Object newValue) { - settings.getThreshold().set(Long.valueOf(newValue.toString())); - return true; - } - }); - final Preference thresholdEnabled = findPreference(scoped(TaskerConstants.ACTIVITY_THRESHOLD_ENABLED)); - if (prefs.getBoolean(scoped(TaskerConstants.ACTIVITY_THRESHOLD_ENABLED), false)) { - settings.getThreshold().set(null); + private SwitchPreference enableEvent; + private SwitchPreference enableThreshold; + private NumberPreference threshold; + private ButtonPreference addTask; + private List tasks = new ArrayList<>(); + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + device = (TaskerDevice) getArguments().get(TaskerConstants.INTENT_DEVICE); + eventType = (TaskerEventType) getArguments().get(TaskerConstants.INTENT_EVENT); + settings = device.getSpec().getSettings(eventType); + initEnableEvent(); + initAddTask(); + initEnableThreshold(); + initThreshold(); + initTasks(); } - thresholdEnabled.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { - @Override - public boolean onPreferenceChange(Preference preference, Object newValue) { - if (newValue.equals(Boolean.FALSE)) { - for (EditTextPreference taskPreference : taskPreferences) { - if (!taskPreference.getKey().equals(scoped(TaskerConstants.ACTIVITY_TASK))) { - tasks.removePreference(taskPreference); - } - } - settings.getThreshold().set(null); + + private void initEnableEvent() { + String key = scoped(TaskerConstants.ACTIVITY_EVENT_ENABLED); + 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; } - setThresholdIfDefined(settings); - return true; - } - }); - } - - private void setThresholdIfDefined(TaskerSettings settings) { - long thresholdValue = prefs.getLong(scoped(TaskerConstants.ACTIVITY_THRESHOLD), 0L); - if (thresholdValue != 0L) { - settings.getThreshold().set(prefs.getLong(scoped(TaskerConstants.ACTIVITY_THRESHOLD), 50L)); + }); + settings.isEnabled().set(prefs.getBoolean(key, false)); + getPreferenceScreen().addPreference(enableEvent); } - } - private void initTasks(final TaskerSettings settings, final PreferenceScreen tasks) { - ButtonPreference addTaskButton = (ButtonPreference) findPreference(TaskerConstants.ACTIVITY_TASK_ADD); - final EditTextPreference taskNamePreference = (EditTextPreference) findPreference(scoped(TaskerConstants.ACTIVITY_TASK)); - taskPreferences.add(taskNamePreference); - addTaskButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (prefs.getBoolean(scoped(TaskerConstants.ACTIVITY_THRESHOLD_ENABLED), false)) { - tasks.addPreference(task(tasks, taskNamePreference)); + private void initEnableThreshold() { + String key = scoped(TaskerConstants.ACTIVITY_THRESHOLD_ENABLED); + enableThreshold = new SwitchPreference(getActivity()); + enableThreshold.setKey(key); + enableThreshold.setTitle(R.string.tasker_threshold_enable); + enableThreshold.setSummary(R.string.tasker_threshold_enable_sum); + getPreferenceScreen().addPreference(enableThreshold); + } + + private void initThreshold() { + String key = scoped(TaskerConstants.ACTIVITY_THRESHOLD); + threshold = new NumberPreference(getActivity()); + threshold.setKey(key); + threshold.setTitle(R.string.tasker_threshold); + 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); } - }); - TaskerTaskProvider taskerTaskProvider = new TaskerTaskProvider() { - @Override - public String getTask(TaskerEvent event) { - if (event.getCount() < taskPreferences.size()) { - String text = taskPreferences.get(event.getCount()).getText(); - if (StringUtils.isEmpty(text)) { - throw new NoTaskDefinedException(); + enableThreshold.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + if (newValue.equals(Boolean.FALSE)) { + for (EditTextPreference taskPreference : tasks) { + if (!taskPreference.getKey().equals(scoped(TaskerConstants.ACTIVITY_TASK))) { + getPreferenceScreen().removePreference(taskPreference); + } + } + settings.getThreshold().set(null); + return true; } - return text; + setThresholdIfDefined(settings); + return true; } - return null; - } + }); + getPreferenceScreen().addPreference(threshold); + } - }; - settings.getTaskProvider().set(taskerTaskProvider); - } + private void initAddTask() { + addTask = new ButtonPreference(getActivity()); + addTask.setTitle(R.string.tasker_task); + addTask.setSummary(R.string.tasker_task_sum); + getPreferenceScreen().addPreference(addTask); + } - private Preference task(final PreferenceScreen tasks, Preference build) { - final ButtonPreference task = new ButtonPreference(this); - task.setKey(scoped(TaskerConstants.ACTIVITY_TASK) + "_" + tasks.getPreferenceCount()); - task.setTitle(build.getTitle()); - task.setSummary(build.getSummary()); - task.setButtonText(R.string.tasker_remove); - task.setWidgetLayoutResource(R.layout.button_preference_layout); - task.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - tasks.removePreference(task); + + private String scoped(TaskerConstants.ScopedString scopedString) { + return scopedString.withScope(device.name()).withScope(eventType.getType()).toString(); + } + + private void setThresholdIfDefined(TaskerSettings settings) { + long thresholdValue = prefs.getLong(scoped(TaskerConstants.ACTIVITY_THRESHOLD), 0L); + if (thresholdValue != 0L) { + settings.getThreshold().set(prefs.getLong(scoped(TaskerConstants.ACTIVITY_THRESHOLD), 50L)); } - }); - taskPreferences.add(task); - return task; + } + + private void loadTasks() { + tasks = new ArrayList<>(); + for (int i = 0; i < 10; i++) { + if (!prefs.getBoolean(scoped(TaskerConstants.ACTIVITY_THRESHOLD_ENABLED), false) && i > 0) { + break; + } + String key = scoped(TaskerConstants.ACTIVITY_TASK) + "_" + i; + if (prefs.getPreferences().contains(key)) { + EditTextPreference task = task(key); + tasks.add(task); + getPreferenceScreen().addPreference(task); + } + } + // Add default task + if (tasks.isEmpty()) { + EditTextPreference task = task(scoped(TaskerConstants.ACTIVITY_TASK) + "_" + 0); + tasks.add(task); + getPreferenceScreen().addPreference(task); + } + } + + private void initTasks() { + loadTasks(); + addTask.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (prefs.getBoolean(scoped(TaskerConstants.ACTIVITY_THRESHOLD_ENABLED), false)) { + getPreferenceScreen().addPreference(task(scoped(TaskerConstants.ACTIVITY_TASK) + "_" + (tasks.size() - 1))); + } + } + }); + TaskerTaskProvider taskerTaskProvider = new TaskerTaskProvider() { + @Override + public String getTask(TaskerEvent event) { + if (event.getCount() < tasks.size()) { + String text = tasks.get(event.getCount()).getText(); + if (StringUtils.isEmpty(text)) { + throw new NoTaskDefinedException(); + } + return text; + } + return null; + } + + }; + settings.getTaskProvider().set(taskerTaskProvider); + } + + private EditTextPreference task(String key) { + final ButtonPreference task = new ButtonPreference(getActivity()); + task.setKey(key); + task.setSummary(R.string.tasker_task_sum); + task.setButtonText(R.string.tasker_remove); + task.setWidgetLayoutResource(R.layout.button_preference_layout); + task.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + getPreferenceScreen().removePreference(task); + } + }); + return task; + } + } }