mirror of https://github.com/tasks/tasks
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
167 lines
6.3 KiB
Java
167 lines
6.3 KiB
Java
/**
|
|
* Copyright (c) 2012 Todoroo Inc
|
|
*
|
|
* See the file "LICENSE" for the full license governing this code.
|
|
*/
|
|
package com.todoroo.astrid.core;
|
|
|
|
import android.os.Bundle;
|
|
|
|
import com.todoroo.andlib.sql.Criterion;
|
|
import com.todoroo.andlib.sql.Query;
|
|
import com.todoroo.astrid.dao.Database;
|
|
import com.todoroo.astrid.dao.TaskDao;
|
|
import com.todoroo.astrid.data.Task;
|
|
|
|
import org.tasks.R;
|
|
import org.tasks.calendars.CalendarEventProvider;
|
|
import org.tasks.dialogs.DialogBuilder;
|
|
import org.tasks.injection.ActivityComponent;
|
|
import org.tasks.injection.InjectingPreferenceActivity;
|
|
import org.tasks.preferences.Preferences;
|
|
import org.tasks.ui.ProgressDialogAsyncTask;
|
|
|
|
import java.util.List;
|
|
|
|
import javax.inject.Inject;
|
|
|
|
public class OldTaskPreferences extends InjectingPreferenceActivity {
|
|
|
|
@Inject DialogBuilder dialogBuilder;
|
|
@Inject Preferences preferences;
|
|
@Inject Database database;
|
|
@Inject TaskDao taskDao;
|
|
@Inject CalendarEventProvider calendarEventProvider;
|
|
|
|
@Override
|
|
public void onCreate(Bundle savedInstanceState) {
|
|
super.onCreate(savedInstanceState);
|
|
|
|
addPreferencesFromResource(R.xml.preferences_oldtasks);
|
|
|
|
findPreference(getString(R.string.EPr_manage_purge_deleted)).setOnPreferenceClickListener(preference -> {
|
|
purgeDeletedTasks();
|
|
return false;
|
|
});
|
|
|
|
findPreference(getString(R.string.EPr_manage_delete_completed_gcal)).setOnPreferenceClickListener(preference -> {
|
|
deleteCompletedEvents();
|
|
return false;
|
|
});
|
|
|
|
findPreference(getString(R.string.EPr_manage_delete_all_gcal)).setOnPreferenceClickListener(preference -> {
|
|
deleteAllCalendarEvents();
|
|
return false;
|
|
});
|
|
|
|
findPreference(getString(R.string.EPr_reset_preferences)).setOnPreferenceClickListener(preference -> {
|
|
resetPreferences();
|
|
return false;
|
|
});
|
|
|
|
findPreference(getString(R.string.EPr_delete_task_data)).setOnPreferenceClickListener(preference -> {
|
|
deleteTaskData();
|
|
return false;
|
|
});
|
|
}
|
|
|
|
private void purgeDeletedTasks() {
|
|
dialogBuilder.newMessageDialog(R.string.EPr_manage_purge_deleted_message)
|
|
.setPositiveButton(android.R.string.ok, (dialog, which) -> new ProgressDialogAsyncTask(OldTaskPreferences.this, dialogBuilder) {
|
|
@Override
|
|
protected Integer doInBackground(Void... params) {
|
|
Query query = Query.select(Task.ID, Task.CALENDAR_URI)
|
|
.where(Criterion.and(Task.DELETION_DATE.gt(0)));
|
|
for (Task task : taskDao.toList(query)) {
|
|
calendarEventProvider.deleteEvent(task);
|
|
taskDao.delete(task.getId());
|
|
}
|
|
return taskDao.deleteWhere(Task.DELETION_DATE.gt(0));
|
|
}
|
|
|
|
@Override
|
|
protected int getResultResource() {
|
|
return R.string.EPr_manage_purge_deleted_status;
|
|
}
|
|
}.execute())
|
|
.setNegativeButton(android.R.string.cancel, null)
|
|
.show();
|
|
}
|
|
|
|
private void deleteCompletedEvents() {
|
|
dialogBuilder.newMessageDialog(R.string.EPr_manage_delete_completed_gcal_message)
|
|
.setPositiveButton(android.R.string.ok, (dialog, which) -> new ProgressDialogAsyncTask(OldTaskPreferences.this, dialogBuilder) {
|
|
|
|
@Override
|
|
protected Integer doInBackground(Void... params) {
|
|
return deleteCalendarEvents(Criterion.and(Task.COMPLETION_DATE.gt(0), Task.CALENDAR_URI.isNotNull()));
|
|
}
|
|
|
|
@Override
|
|
protected int getResultResource() {
|
|
return R.string.EPr_manage_delete_completed_gcal_status;
|
|
}
|
|
}.execute())
|
|
.setNegativeButton(android.R.string.cancel, null)
|
|
.show();
|
|
}
|
|
|
|
private void deleteAllCalendarEvents() {
|
|
dialogBuilder.newMessageDialog(R.string.EPr_manage_delete_all_gcal_message)
|
|
.setPositiveButton(android.R.string.ok, (dialog, which) -> new ProgressDialogAsyncTask(OldTaskPreferences.this, dialogBuilder) {
|
|
@Override
|
|
protected Integer doInBackground(Void... params) {
|
|
return deleteCalendarEvents(Task.CALENDAR_URI.isNotNull());
|
|
}
|
|
|
|
@Override
|
|
protected int getResultResource() {
|
|
return R.string.EPr_manage_delete_all_gcal_status;
|
|
}
|
|
}.execute())
|
|
.setNegativeButton(android.R.string.cancel, null)
|
|
.show();
|
|
}
|
|
|
|
private int deleteCalendarEvents(Criterion criterion) {
|
|
int deletedEventCount = 0;
|
|
List<Task> tasks = taskDao.toList(Query.select(Task.ID, Task.CALENDAR_URI).where(criterion));
|
|
for (Task task : tasks) {
|
|
if (calendarEventProvider.deleteEvent(task)) {
|
|
deletedEventCount++;
|
|
}
|
|
}
|
|
// mass update the CALENDAR_URI here,
|
|
// since the GCalHelper doesnt save it due to performance-reasons
|
|
Task template = new Task();
|
|
template.setCalendarUri(""); //$NON-NLS-1$
|
|
taskDao.update(criterion, template);
|
|
return deletedEventCount;
|
|
}
|
|
|
|
private void resetPreferences() {
|
|
dialogBuilder.newMessageDialog(R.string.EPr_reset_preferences_warning)
|
|
.setPositiveButton(R.string.EPr_reset_preferences, (dialog, which) -> {
|
|
preferences.reset();
|
|
System.exit(0);
|
|
})
|
|
.setNegativeButton(android.R.string.cancel, null)
|
|
.show();
|
|
}
|
|
|
|
private void deleteTaskData() {
|
|
dialogBuilder.newMessageDialog(R.string.EPr_delete_task_data_warning)
|
|
.setPositiveButton(R.string.EPr_delete_task_data, (dialog, which) -> {
|
|
deleteDatabase(database.getName());
|
|
System.exit(0);
|
|
})
|
|
.setNegativeButton(android.R.string.cancel, null)
|
|
.show();
|
|
}
|
|
|
|
@Override
|
|
public void inject(ActivityComponent component) {
|
|
component.inject(this);
|
|
}
|
|
}
|