Changed Settings to Fragment based perferences and implemented the scope.

This commit is contained in:
Chris 2019-01-20 15:50:59 +01:00
parent 20e14ec883
commit a857be6c21
2 changed files with 193 additions and 101 deletions

View File

@ -1,4 +1,30 @@
package nodomain.freeyourgadget.gadgetbridge.tasker.settings.activities; 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;
}
} }

View File

@ -3,8 +3,10 @@ package nodomain.freeyourgadget.gadgetbridge.tasker.settings.activities;
import android.os.Bundle; import android.os.Bundle;
import android.preference.EditTextPreference; import android.preference.EditTextPreference;
import android.preference.Preference; import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.preference.PreferenceScreen; import android.preference.PreferenceScreen;
import android.preference.SwitchPreference; import android.preference.SwitchPreference;
import android.support.annotation.Nullable;
import android.view.View; import android.view.View;
import java.util.ArrayList; import java.util.ArrayList;
@ -32,44 +34,77 @@ import nodomain.freeyourgadget.gadgetbridge.util.StringUtils;
*/ */
public class TaskerEventActivity extends AbstractSettingsActivity { public class TaskerEventActivity extends AbstractSettingsActivity {
private TaskerDevice device;
private TaskerEventType eventType;
private Prefs prefs = GBApplication.getPrefs();
private List<EditTextPreference> taskPreferences = new ArrayList<>();
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(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();
} }
public static class TaskerEventFragment extends PreferenceFragment {
private TaskerDevice device;
private TaskerEventType eventType;
private TaskerSettings settings;
private Prefs prefs = GBApplication.getPrefs();
private SwitchPreference enableEvent;
private SwitchPreference enableThreshold;
private NumberPreference threshold;
private ButtonPreference addTask;
private List<EditTextPreference> tasks = new ArrayList<>();
@Override @Override
protected void onPostCreate(Bundle savedInstanceState) { public void onCreate(@Nullable Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState); super.onCreate(savedInstanceState);
device = (TaskerDevice) getIntent().getSerializableExtra(TaskerConstants.INTENT_DEVICE); device = (TaskerDevice) getArguments().get(TaskerConstants.INTENT_DEVICE);
eventType = (TaskerEventType) getIntent().getSerializableExtra(TaskerConstants.INTENT_EVENT); eventType = (TaskerEventType) getArguments().get(TaskerConstants.INTENT_EVENT);
final TaskerSettings settings = device.getSpec().getSettings(eventType); settings = device.getSpec().getSettings(eventType);
SwitchPreference enabled = (SwitchPreference) findPreference(scoped(TaskerConstants.ACTIVITY_EVENT_ENABLED)); initEnableEvent();
settings.isEnabled().set(prefs.getBoolean(scoped(TaskerConstants.ACTIVITY_EVENT_ENABLED), false)); initAddTask();
enabled.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { initEnableThreshold();
initThreshold();
initTasks();
}
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 @Override
public boolean onPreferenceChange(Preference preference, Object newValue) { public boolean onPreferenceChange(Preference preference, Object newValue) {
settings.isEnabled().set((Boolean) newValue); settings.isEnabled().set((Boolean) newValue);
return true; return true;
} }
}); });
eventType = (TaskerEventType) getIntent().getSerializableExtra(TaskerConstants.INTENT_EVENT); settings.isEnabled().set(prefs.getBoolean(key, false));
final PreferenceScreen tasks = (PreferenceScreen) findPreference(scoped(TaskerConstants.ACTIVITY_TASKS)); getPreferenceScreen().addPreference(enableEvent);
initThreshold(settings, tasks);
initTasks(settings, tasks);
} }
private String scoped(TaskerConstants.ScopedString scopedString) { private void initEnableThreshold() {
return scopedString.withScope(device.name()).withScope(eventType.getType()).toString(); 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(final TaskerSettings settings, final PreferenceScreen tasks) { private void initThreshold() {
final EditTextPreference threshold = (EditTextPreference) findPreference(scoped(TaskerConstants.ACTIVITY_THRESHOLD)); 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); setThresholdIfDefined(settings);
threshold.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { threshold.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override @Override
@ -78,17 +113,16 @@ public class TaskerEventActivity extends AbstractSettingsActivity {
return true; return true;
} }
}); });
final Preference thresholdEnabled = findPreference(scoped(TaskerConstants.ACTIVITY_THRESHOLD_ENABLED));
if (prefs.getBoolean(scoped(TaskerConstants.ACTIVITY_THRESHOLD_ENABLED), false)) { if (prefs.getBoolean(scoped(TaskerConstants.ACTIVITY_THRESHOLD_ENABLED), false)) {
settings.getThreshold().set(null); settings.getThreshold().set(null);
} }
thresholdEnabled.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { enableThreshold.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override @Override
public boolean onPreferenceChange(Preference preference, Object newValue) { public boolean onPreferenceChange(Preference preference, Object newValue) {
if (newValue.equals(Boolean.FALSE)) { if (newValue.equals(Boolean.FALSE)) {
for (EditTextPreference taskPreference : taskPreferences) { for (EditTextPreference taskPreference : tasks) {
if (!taskPreference.getKey().equals(scoped(TaskerConstants.ACTIVITY_TASK))) { if (!taskPreference.getKey().equals(scoped(TaskerConstants.ACTIVITY_TASK))) {
tasks.removePreference(taskPreference); getPreferenceScreen().removePreference(taskPreference);
} }
} }
settings.getThreshold().set(null); settings.getThreshold().set(null);
@ -98,6 +132,19 @@ public class TaskerEventActivity extends AbstractSettingsActivity {
return true; return true;
} }
}); });
getPreferenceScreen().addPreference(threshold);
}
private void initAddTask() {
addTask = new ButtonPreference(getActivity());
addTask.setTitle(R.string.tasker_task);
addTask.setSummary(R.string.tasker_task_sum);
getPreferenceScreen().addPreference(addTask);
}
private String scoped(TaskerConstants.ScopedString scopedString) {
return scopedString.withScope(device.name()).withScope(eventType.getType()).toString();
} }
private void setThresholdIfDefined(TaskerSettings settings) { private void setThresholdIfDefined(TaskerSettings settings) {
@ -107,23 +154,42 @@ public class TaskerEventActivity extends AbstractSettingsActivity {
} }
} }
private void initTasks(final TaskerSettings settings, final PreferenceScreen tasks) { private void loadTasks() {
ButtonPreference addTaskButton = (ButtonPreference) findPreference(TaskerConstants.ACTIVITY_TASK_ADD); tasks = new ArrayList<>();
final EditTextPreference taskNamePreference = (EditTextPreference) findPreference(scoped(TaskerConstants.ACTIVITY_TASK)); for (int i = 0; i < 10; i++) {
taskPreferences.add(taskNamePreference); if (!prefs.getBoolean(scoped(TaskerConstants.ACTIVITY_THRESHOLD_ENABLED), false) && i > 0) {
addTaskButton.setOnClickListener(new View.OnClickListener() { 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 @Override
public void onClick(View v) { public void onClick(View v) {
if (prefs.getBoolean(scoped(TaskerConstants.ACTIVITY_THRESHOLD_ENABLED), false)) { if (prefs.getBoolean(scoped(TaskerConstants.ACTIVITY_THRESHOLD_ENABLED), false)) {
tasks.addPreference(task(tasks, taskNamePreference)); getPreferenceScreen().addPreference(task(scoped(TaskerConstants.ACTIVITY_TASK) + "_" + (tasks.size() - 1)));
} }
} }
}); });
TaskerTaskProvider taskerTaskProvider = new TaskerTaskProvider() { TaskerTaskProvider taskerTaskProvider = new TaskerTaskProvider() {
@Override @Override
public String getTask(TaskerEvent event) { public String getTask(TaskerEvent event) {
if (event.getCount() < taskPreferences.size()) { if (event.getCount() < tasks.size()) {
String text = taskPreferences.get(event.getCount()).getText(); String text = tasks.get(event.getCount()).getText();
if (StringUtils.isEmpty(text)) { if (StringUtils.isEmpty(text)) {
throw new NoTaskDefinedException(); throw new NoTaskDefinedException();
} }
@ -136,21 +202,21 @@ public class TaskerEventActivity extends AbstractSettingsActivity {
settings.getTaskProvider().set(taskerTaskProvider); settings.getTaskProvider().set(taskerTaskProvider);
} }
private Preference task(final PreferenceScreen tasks, Preference build) { private EditTextPreference task(String key) {
final ButtonPreference task = new ButtonPreference(this); final ButtonPreference task = new ButtonPreference(getActivity());
task.setKey(scoped(TaskerConstants.ACTIVITY_TASK) + "_" + tasks.getPreferenceCount()); task.setKey(key);
task.setTitle(build.getTitle()); task.setSummary(R.string.tasker_task_sum);
task.setSummary(build.getSummary());
task.setButtonText(R.string.tasker_remove); task.setButtonText(R.string.tasker_remove);
task.setWidgetLayoutResource(R.layout.button_preference_layout); task.setWidgetLayoutResource(R.layout.button_preference_layout);
task.setOnClickListener(new View.OnClickListener() { task.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
tasks.removePreference(task); getPreferenceScreen().removePreference(task);
} }
}); });
taskPreferences.add(task);
return task; return task;
} }
} }
}