mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge.git
synced 2025-02-11 08:00:11 +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;
|
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.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,125 +34,189 @@ 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();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public static class TaskerEventFragment extends PreferenceFragment {
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
private String scoped(TaskerConstants.ScopedString scopedString) {
|
private TaskerDevice device;
|
||||||
return scopedString.withScope(device.name()).withScope(eventType.getType()).toString();
|
private TaskerEventType eventType;
|
||||||
}
|
private TaskerSettings settings;
|
||||||
|
private Prefs prefs = GBApplication.getPrefs();
|
||||||
|
|
||||||
private void initThreshold(final TaskerSettings settings, final PreferenceScreen tasks) {
|
private SwitchPreference enableEvent;
|
||||||
final EditTextPreference threshold = (EditTextPreference) findPreference(scoped(TaskerConstants.ACTIVITY_THRESHOLD));
|
private SwitchPreference enableThreshold;
|
||||||
setThresholdIfDefined(settings);
|
private NumberPreference threshold;
|
||||||
threshold.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
private ButtonPreference addTask;
|
||||||
@Override
|
private List<EditTextPreference> tasks = new ArrayList<>();
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
||||||
settings.getThreshold().set(Long.valueOf(newValue.toString()));
|
@Override
|
||||||
return true;
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
}
|
super.onCreate(savedInstanceState);
|
||||||
});
|
device = (TaskerDevice) getArguments().get(TaskerConstants.INTENT_DEVICE);
|
||||||
final Preference thresholdEnabled = findPreference(scoped(TaskerConstants.ACTIVITY_THRESHOLD_ENABLED));
|
eventType = (TaskerEventType) getArguments().get(TaskerConstants.INTENT_EVENT);
|
||||||
if (prefs.getBoolean(scoped(TaskerConstants.ACTIVITY_THRESHOLD_ENABLED), false)) {
|
settings = device.getSpec().getSettings(eventType);
|
||||||
settings.getThreshold().set(null);
|
initEnableEvent();
|
||||||
|
initAddTask();
|
||||||
|
initEnableThreshold();
|
||||||
|
initThreshold();
|
||||||
|
initTasks();
|
||||||
}
|
}
|
||||||
thresholdEnabled.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
|
||||||
@Override
|
private void initEnableEvent() {
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
String key = scoped(TaskerConstants.ACTIVITY_EVENT_ENABLED);
|
||||||
if (newValue.equals(Boolean.FALSE)) {
|
enableEvent = new SwitchPreference(getActivity());
|
||||||
for (EditTextPreference taskPreference : taskPreferences) {
|
enableEvent.setKey(key);
|
||||||
if (!taskPreference.getKey().equals(scoped(TaskerConstants.ACTIVITY_TASK))) {
|
enableEvent.setTitle(R.string.tasker_event_enabled);
|
||||||
tasks.removePreference(taskPreference);
|
enableEvent.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||||
}
|
@Override
|
||||||
}
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
settings.getThreshold().set(null);
|
settings.isEnabled().set((Boolean) newValue);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
setThresholdIfDefined(settings);
|
});
|
||||||
return true;
|
settings.isEnabled().set(prefs.getBoolean(key, false));
|
||||||
}
|
getPreferenceScreen().addPreference(enableEvent);
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
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));
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private void initTasks(final TaskerSettings settings, final PreferenceScreen tasks) {
|
private void initEnableThreshold() {
|
||||||
ButtonPreference addTaskButton = (ButtonPreference) findPreference(TaskerConstants.ACTIVITY_TASK_ADD);
|
String key = scoped(TaskerConstants.ACTIVITY_THRESHOLD_ENABLED);
|
||||||
final EditTextPreference taskNamePreference = (EditTextPreference) findPreference(scoped(TaskerConstants.ACTIVITY_TASK));
|
enableThreshold = new SwitchPreference(getActivity());
|
||||||
taskPreferences.add(taskNamePreference);
|
enableThreshold.setKey(key);
|
||||||
addTaskButton.setOnClickListener(new View.OnClickListener() {
|
enableThreshold.setTitle(R.string.tasker_threshold_enable);
|
||||||
@Override
|
enableThreshold.setSummary(R.string.tasker_threshold_enable_sum);
|
||||||
public void onClick(View v) {
|
getPreferenceScreen().addPreference(enableThreshold);
|
||||||
if (prefs.getBoolean(scoped(TaskerConstants.ACTIVITY_THRESHOLD_ENABLED), false)) {
|
}
|
||||||
tasks.addPreference(task(tasks, taskNamePreference));
|
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
});
|
enableThreshold.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||||
TaskerTaskProvider taskerTaskProvider = new TaskerTaskProvider() {
|
@Override
|
||||||
@Override
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
public String getTask(TaskerEvent event) {
|
if (newValue.equals(Boolean.FALSE)) {
|
||||||
if (event.getCount() < taskPreferences.size()) {
|
for (EditTextPreference taskPreference : tasks) {
|
||||||
String text = taskPreferences.get(event.getCount()).getText();
|
if (!taskPreference.getKey().equals(scoped(TaskerConstants.ACTIVITY_TASK))) {
|
||||||
if (StringUtils.isEmpty(text)) {
|
getPreferenceScreen().removePreference(taskPreference);
|
||||||
throw new NoTaskDefinedException();
|
}
|
||||||
|
}
|
||||||
|
settings.getThreshold().set(null);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return text;
|
setThresholdIfDefined(settings);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return null;
|
});
|
||||||
}
|
getPreferenceScreen().addPreference(threshold);
|
||||||
|
}
|
||||||
|
|
||||||
};
|
private void initAddTask() {
|
||||||
settings.getTaskProvider().set(taskerTaskProvider);
|
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);
|
private String scoped(TaskerConstants.ScopedString scopedString) {
|
||||||
task.setKey(scoped(TaskerConstants.ACTIVITY_TASK) + "_" + tasks.getPreferenceCount());
|
return scopedString.withScope(device.name()).withScope(eventType.getType()).toString();
|
||||||
task.setTitle(build.getTitle());
|
}
|
||||||
task.setSummary(build.getSummary());
|
|
||||||
task.setButtonText(R.string.tasker_remove);
|
private void setThresholdIfDefined(TaskerSettings settings) {
|
||||||
task.setWidgetLayoutResource(R.layout.button_preference_layout);
|
long thresholdValue = prefs.getLong(scoped(TaskerConstants.ACTIVITY_THRESHOLD), 0L);
|
||||||
task.setOnClickListener(new View.OnClickListener() {
|
if (thresholdValue != 0L) {
|
||||||
@Override
|
settings.getThreshold().set(prefs.getLong(scoped(TaskerConstants.ACTIVITY_THRESHOLD), 50L));
|
||||||
public void onClick(View v) {
|
|
||||||
tasks.removePreference(task);
|
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
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