mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge.git
synced 2025-02-10 15:57:00 +01:00
Changed Settings to Fragment based perferences and implemented the scope.
This commit is contained in:
parent
20e14ec883
commit
a857be6c21
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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<EditTextPreference> 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<EditTextPreference> 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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user