Move sync list pref, add 'don't sync'

pull/645/head
Alex Baker 6 years ago
parent c7a7d5267d
commit 6f36d6d430

@ -21,4 +21,8 @@ public class GtasksListService {
public GoogleTaskList getList(long storeId) {
return null;
}
public GoogleTaskList getList(String remoteId) {
return null;
}
}

@ -1,6 +1,7 @@
package org.tasks.injection;
import org.tasks.activities.CalendarSelectionDialog;
import org.tasks.activities.RemoteListSupportPicker;
import org.tasks.dialogs.AddAttachmentDialog;
import org.tasks.dialogs.ColorPickerDialog;
import org.tasks.dialogs.RecordAudioDialog;
@ -31,4 +32,6 @@ public interface DialogFragmentComponent {
void inject(RecordAudioDialog recordAudioDialog);
void inject(CustomRecurrenceDialog customRecurrenceDialog);
void inject(RemoteListSupportPicker remoteListSupportPicker);
}

@ -1,28 +0,0 @@
package org.tasks.injection;
import org.tasks.dialogs.DonationDialog;
import org.tasks.dialogs.ExportTasksDialog;
import org.tasks.dialogs.ImportTasksDialog;
import org.tasks.dialogs.NativeDatePickerDialog;
import org.tasks.dialogs.NativeTimePickerDialog;
import org.tasks.dialogs.SeekBarDialog;
import org.tasks.locale.LocalePickerDialog;
import dagger.Subcomponent;
@Subcomponent(modules = NativeDialogFragmentModule.class)
public interface NativeDialogFragmentComponent {
void inject(LocalePickerDialog localePickerDialog);
void inject(NativeDatePickerDialog nativeDatePickerDialog);
void inject(NativeTimePickerDialog nativeTimePickerDialog);
void inject(SeekBarDialog seekBarDialog);
void inject(ExportTasksDialog exportTasksDialog);
void inject(ImportTasksDialog importTasksDialog);
void inject(DonationDialog donationDialog);
}

@ -21,4 +21,8 @@ public class GtasksListService {
public GoogleTaskList getList(long storeId) {
return null;
}
public GoogleTaskList getList(String remoteId) {
return null;
}
}

@ -1,6 +1,7 @@
package org.tasks.injection;
import org.tasks.activities.CalendarSelectionDialog;
import org.tasks.activities.RemoteListSupportPicker;
import org.tasks.dialogs.AddAttachmentDialog;
import org.tasks.dialogs.ColorPickerDialog;
import org.tasks.dialogs.RecordAudioDialog;
@ -31,4 +32,6 @@ public interface DialogFragmentComponent {
void inject(RecordAudioDialog recordAudioDialog);
void inject(CustomRecurrenceDialog customRecurrenceDialog);
void inject(RemoteListSupportPicker remoteListSupportPicker);
}

@ -1,28 +0,0 @@
package org.tasks.injection;
import org.tasks.dialogs.DonationDialog;
import org.tasks.dialogs.ExportTasksDialog;
import org.tasks.dialogs.ImportTasksDialog;
import org.tasks.dialogs.NativeDatePickerDialog;
import org.tasks.dialogs.NativeTimePickerDialog;
import org.tasks.dialogs.SeekBarDialog;
import org.tasks.locale.LocalePickerDialog;
import dagger.Subcomponent;
@Subcomponent(modules = NativeDialogFragmentModule.class)
public interface NativeDialogFragmentComponent {
void inject(LocalePickerDialog localePickerDialog);
void inject(NativeDatePickerDialog nativeDatePickerDialog);
void inject(NativeTimePickerDialog nativeTimePickerDialog);
void inject(SeekBarDialog seekBarDialog);
void inject(ExportTasksDialog exportTasksDialog);
void inject(ImportTasksDialog importTasksDialog);
void inject(DonationDialog donationDialog);
}

@ -8,22 +8,17 @@ package com.todoroo.astrid.gtasks;
import android.content.Intent;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.support.annotation.NonNull;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.GtasksFilter;
import com.todoroo.astrid.gtasks.auth.GtasksLoginActivity;
import org.tasks.R;
import org.tasks.analytics.Tracker;
import org.tasks.analytics.Tracking;
import org.tasks.data.GoogleTaskDao;
import org.tasks.data.GoogleTaskList;
import org.tasks.dialogs.DialogBuilder;
import org.tasks.gtasks.PlayServicesAvailability;
import org.tasks.gtasks.RemoteListSelectionHandler;
import org.tasks.gtasks.SyncAdapterHelper;
import org.tasks.injection.ActivityComponent;
import org.tasks.injection.InjectingPreferenceActivity;
@ -33,17 +28,13 @@ import org.tasks.preferences.PermissionRequestor;
import javax.inject.Inject;
import static org.tasks.PermissionUtil.verifyPermissions;
import static org.tasks.activities.RemoteListNativePicker.newRemoteListNativePicker;
public class GtasksPreferences extends InjectingPreferenceActivity implements RemoteListSelectionHandler {
private static final String FRAG_TAG_GOOGLE_TASK_LIST_SELECTION = "frag_tag_google_task_list_selection";
public class GtasksPreferences extends InjectingPreferenceActivity {
private static final int REQUEST_LOGIN = 0;
@Inject GtasksPreferenceService gtasksPreferenceService;
@Inject ActivityPermissionRequestor permissionRequestor;
@Inject GtasksListService gtasksListService;
@Inject Tracker tracker;
@Inject SyncAdapterHelper syncAdapterHelper;
@Inject PlayServicesAvailability playServicesAvailability;
@ -96,20 +87,6 @@ public class GtasksPreferences extends InjectingPreferenceActivity implements Re
.show();
return true;
});
Preference defaultListPreference = findPreference(R.string.p_gtasks_default_list);
defaultListPreference.setOnPreferenceClickListener(preference -> {
newRemoteListNativePicker(new GtasksFilter(getDefaultList()))
.show(getFragmentManager(), FRAG_TAG_GOOGLE_TASK_LIST_SELECTION);
return false;
});
GoogleTaskList defaultList = getDefaultList();
if (defaultList != null) {
defaultListPreference.setSummary(defaultList.getTitle());
}
}
private GoogleTaskList getDefaultList() {
return gtasksListService.getList(gtasksPreferenceService.getDefaultList());
}
private void requestLogin() {
@ -158,16 +135,4 @@ public class GtasksPreferences extends InjectingPreferenceActivity implements Re
public void inject(ActivityComponent component) {
component.inject(this);
}
@Override
public void selectedList(Filter list) {
if (list instanceof GtasksFilter) {
tracker.reportEvent(Tracking.Events.GTASK_DEFAULT_LIST);
String listId = ((GtasksFilter) list).getRemoteId();
gtasksPreferenceService.setDefaultList(listId);
} else {
throw new RuntimeException("Unhandled filter type");
}
findPreference(R.string.p_gtasks_default_list).setSummary(list.listingTitle);
}
}

@ -32,6 +32,8 @@ import com.google.api.services.tasks.model.TaskLists;
import com.google.api.services.tasks.model.Tasks;
import com.google.common.base.Strings;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.GtasksFilter;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.SyncFlags;
import com.todoroo.astrid.data.Task;
@ -56,6 +58,7 @@ import org.tasks.data.GoogleTaskListDao;
import org.tasks.injection.InjectingAbstractThreadedSyncAdapter;
import org.tasks.injection.SyncAdapterComponent;
import org.tasks.notifications.NotificationManager;
import org.tasks.preferences.DefaultFilterProvider;
import org.tasks.preferences.Preferences;
import org.tasks.sync.RecordSyncStatusCallback;
import org.tasks.time.DateTime;
@ -96,6 +99,7 @@ public class GoogleTaskSyncAdapter extends InjectingAbstractThreadedSyncAdapter
@Inject NotificationManager notificationManager;
@Inject GoogleTaskDao googleTaskDao;
@Inject TaskCreator taskCreator;
@Inject DefaultFilterProvider defaultFilterProvider;
public GoogleTaskSyncAdapter(Context context, boolean autoInitialize) {
super(context, autoInitialize);
@ -174,8 +178,12 @@ public class GoogleTaskSyncAdapter extends InjectingAbstractThreadedSyncAdapter
nextPageToken = remoteLists.getNextPageToken();
} while (nextPageToken != null);
gtasksListService.updateLists(gtaskLists);
if (gtasksListService.getList(gtasksPreferenceService.getDefaultList()) == null) {
gtasksPreferenceService.setDefaultList(null);
Filter defaultRemoteList = defaultFilterProvider.getDefaultRemoteList();
if (defaultRemoteList instanceof GtasksFilter) {
GoogleTaskList list = gtasksListService.getList(((GtasksFilter) defaultRemoteList).getRemoteId());
if (list == null) {
preferences.setString(R.string.p_default_remote_list, null);
}
}
for (final GoogleTaskList list : gtasksListService.getListsToUpdate(gtaskLists)) {
fetchAndApplyRemoteChanges(list);
@ -205,25 +213,21 @@ public class GoogleTaskSyncAdapter extends InjectingAbstractThreadedSyncAdapter
}
GoogleTask gtasksMetadata = googleTaskDao.getByTaskId(task.getId());
if (gtasksMetadata == null) {
return;
}
com.google.api.services.tasks.model.Task remoteModel;
boolean newlyCreated = false;
String remoteId;
String listId = gtasksPreferenceService.getDefaultList();
if (listId == null) {
com.google.api.services.tasks.model.TaskList defaultList = invoker.getGtaskList(DEFAULT_LIST);
if (defaultList != null) {
listId = defaultList.getId();
gtasksPreferenceService.setDefaultList(listId);
} else {
listId = DEFAULT_LIST;
}
}
Filter defaultRemoteList = defaultFilterProvider.getDefaultRemoteList();
String listId = defaultRemoteList instanceof GtasksFilter
? ((GtasksFilter) defaultRemoteList).getRemoteId()
: DEFAULT_LIST;
if (gtasksMetadata == null || Strings.isNullOrEmpty(gtasksMetadata.getRemoteId())) { //Create case
if (gtasksMetadata == null) {
gtasksMetadata = new GoogleTask(task.getId(), listId);
}
if (Strings.isNullOrEmpty(gtasksMetadata.getRemoteId())) { //Create case
String selectedList = gtasksMetadata.getListId();
if (!Strings.isNullOrEmpty(selectedList)) {
listId = selectedList;

@ -12,14 +12,15 @@ import com.todoroo.astrid.api.GtasksFilter;
import com.todoroo.astrid.data.SyncFlags;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.gtasks.GtasksListService;
import com.todoroo.astrid.gtasks.GtasksPreferenceService;
import org.tasks.R;
import org.tasks.analytics.Tracker;
import org.tasks.analytics.Tracking;
import org.tasks.data.GoogleTask;
import org.tasks.data.GoogleTaskDao;
import org.tasks.data.GoogleTaskList;
import org.tasks.injection.FragmentComponent;
import org.tasks.preferences.DefaultFilterProvider;
import javax.inject.Inject;
@ -39,10 +40,10 @@ public class RemoteListFragment extends TaskEditControlFragment {
@BindView(R.id.google_task_list) TextView textView;
@Inject GtasksPreferenceService gtasksPreferenceService;
@Inject GtasksListService gtasksListService;
@Inject GoogleTaskDao googleTaskDao;
@Inject Tracker tracker;
@Inject DefaultFilterProvider defaultFilterProvider;
@Nullable private Filter originalList;
@Nullable private Filter selectedList;
@ -56,16 +57,15 @@ public class RemoteListFragment extends TaskEditControlFragment {
selectedList = savedInstanceState.getParcelable(EXTRA_SELECTED_LIST);
} else {
if (task.isNew()) {
originalList = new GtasksFilter(gtasksListService.getList(task.getTransitory(GoogleTask.KEY)));
originalList = task.hasTransitory(GoogleTask.KEY)
? new GtasksFilter(gtasksListService.getList(task.getTransitory(GoogleTask.KEY)))
: defaultFilterProvider.getDefaultRemoteList();
} else {
GoogleTask googleTask = googleTaskDao.getByTaskId(task.getId());
if (googleTask != null) {
originalList = new GtasksFilter(gtasksListService.getList(googleTask.getListId()));
}
}
if (originalList == null) {
originalList = new GtasksFilter(gtasksListService.getList(gtasksPreferenceService.getDefaultList()));
}
selectedList = originalList;
}
@ -87,7 +87,7 @@ public class RemoteListFragment extends TaskEditControlFragment {
@Override
protected int getLayout() {
return R.layout.control_set_google_task_list;
return R.layout.control_set_remote_list;
}
@Override
@ -108,25 +108,26 @@ public class RemoteListFragment extends TaskEditControlFragment {
@Override
public void apply(Task task) {
if (selectedList == null) {
GoogleTask googleTask = googleTaskDao.getByTaskId(task.getId());
if (googleTask != null && selectedList != null && googleTask.getListId().equals(((GtasksFilter) selectedList).getRemoteId())) {
return;
}
GoogleTask googleTask = googleTaskDao.getByTaskId(task.getId());
if (googleTask == null) {
googleTaskDao.insert(new GoogleTask(task.getId(), ((GtasksFilter) selectedList).getRemoteId()));
} else if (!googleTask.getListId().equals(((GtasksFilter) selectedList).getRemoteId())) {
if (googleTask != null) {
tracker.reportEvent(Tracking.Events.GTASK_MOVE);
task.putTransitory(SyncFlags.FORCE_SYNC, true);
googleTask.setDeleted(now());
googleTaskDao.update(googleTask);
}
if (selectedList != null) {
googleTaskDao.insert(new GoogleTask(task.getId(), ((GtasksFilter) selectedList).getRemoteId()));
}
}
@Override
public boolean hasChanges(Task original) {
return selectedList != null && !selectedList.equals(originalList);
return selectedList == null ? originalList != null : !selectedList.equals(originalList);
}
@Override
@ -135,7 +136,9 @@ public class RemoteListFragment extends TaskEditControlFragment {
}
public void setList(Filter list) {
if (list instanceof GtasksFilter) {
if (list == null) {
this.selectedList = null;
} else if (list instanceof GtasksFilter) {
this.selectedList = list;
} else {
throw new RuntimeException("Unhandled filter type");
@ -144,8 +147,6 @@ public class RemoteListFragment extends TaskEditControlFragment {
}
private void refreshView() {
if (selectedList != null) {
textView.setText(selectedList.listingTitle);
}
textView.setText(selectedList == null ? null : selectedList.listingTitle);
}
}

@ -260,9 +260,15 @@ public class FilterAdapter extends ArrayAdapter<FilterListItem> {
public void populateRemoteListPicker() {
clear();
for (Filter filter : filterProvider.getGoogleTaskFilters()) {
add(filter);
Filter item = new Filter(activity.getString(R.string.dont_sync), null);
item.icon = R.drawable.ic_cloud_off_black_24dp;
add(item);
String title = preferences.getStringValue(GtasksPreferenceService.PREF_USER_NAME);
if (Strings.isNullOrEmpty(title)) {
title = activity.getResources().getString(R.string.gtasks_GPr_header);
}
addSubMenu(title, filterProvider.getGoogleTaskFilters(), true);
notifyDataSetChanged();
}

@ -10,27 +10,44 @@ import android.os.Bundle;
import android.preference.Preference;
import android.support.annotation.NonNull;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.GtasksFilter;
import com.todoroo.astrid.gtasks.GtasksPreferenceService;
import org.tasks.R;
import org.tasks.activities.CalendarSelectionActivity;
import org.tasks.analytics.Tracker;
import org.tasks.analytics.Tracking;
import org.tasks.calendars.AndroidCalendar;
import org.tasks.calendars.CalendarProvider;
import org.tasks.gtasks.RemoteListSelectionHandler;
import org.tasks.gtasks.SyncAdapterHelper;
import org.tasks.injection.ActivityComponent;
import org.tasks.injection.InjectingPreferenceActivity;
import org.tasks.preferences.ActivityPermissionRequestor;
import org.tasks.preferences.DefaultFilterProvider;
import org.tasks.preferences.PermissionRequestor;
import org.tasks.preferences.Preferences;
import javax.inject.Inject;
import static org.tasks.PermissionUtil.verifyPermissions;
import static org.tasks.activities.RemoteListNativePicker.newRemoteListNativePicker;
public class DefaultsPreferences extends InjectingPreferenceActivity implements RemoteListSelectionHandler {
public class DefaultsPreferences extends InjectingPreferenceActivity {
private static final String FRAG_TAG_REMOTE_LIST_SELECTION = "frag_tag_remote_list_selection";
private static final int REQUEST_CALENDAR_SELECTION = 10412;
@Inject Preferences preferences;
@Inject CalendarProvider calendarProvider;
@Inject ActivityPermissionRequestor permissionRequester;
@Inject Tracker tracker;
@Inject GtasksPreferenceService gtasksPreferenceService;
@Inject SyncAdapterHelper syncAdapterHelper;
@Inject DefaultFilterProvider defaultFilterProvider;
private Preference defaultCalendarPref;
@Override
@ -50,6 +67,17 @@ public class DefaultsPreferences extends InjectingPreferenceActivity {
defaultCalendarPref.setSummary(defaultCalendarName == null
? getString(R.string.dont_add_to_calendar)
: defaultCalendarName);
if (syncAdapterHelper.isEnabled()) {
findPreference(R.string.p_default_remote_list).setOnPreferenceClickListener(preference -> {
newRemoteListNativePicker(defaultFilterProvider.getDefaultRemoteList())
.show(getFragmentManager(), FRAG_TAG_REMOTE_LIST_SELECTION);
return false;
});
updateRemoteListSummary();
} else {
remove(R.string.p_default_remote_list);
}
}
private void startCalendarSelectionActivity() {
@ -86,6 +114,26 @@ public class DefaultsPreferences extends InjectingPreferenceActivity {
}
}
@Override
public void selectedList(Filter list) {
tracker.reportEvent(Tracking.Events.DEFAULT_REMOTE_LIST);
if (list == null) {
preferences.setString(R.string.p_default_remote_list, null);
} else if (list instanceof GtasksFilter) {
defaultFilterProvider.setDefaultFilter(list);
} else {
throw new RuntimeException("Unhandled filter type");
}
updateRemoteListSummary();
}
private void updateRemoteListSummary() {
Filter defaultFilter = defaultFilterProvider.getDefaultRemoteList();
findPreference(R.string.p_default_remote_list).setSummary(defaultFilter == null
? getString(R.string.dont_sync)
: defaultFilter.listingTitle);
}
@Override
public void inject(ActivityComponent component) {
component.inject(this);

@ -96,8 +96,7 @@ public abstract class TaskDao {
@android.arch.persistence.room.Query("SELECT tasks.* FROM tasks " +
"LEFT JOIN google_tasks ON tasks._id = google_tasks.task " +
"WHERE tasks.modified > google_tasks.last_sync " +
"OR google_tasks.remote_id = '' " +
"OR google_tasks.remote_id IS NULL")
"OR google_tasks.remote_id = ''")
public abstract List<Task> getTasksToPush();
@android.arch.persistence.room.Query("SELECT * FROM TASKS " +

@ -949,6 +949,10 @@ public class Task implements Parcelable {
return tags == null ? new ArrayList<>() : (ArrayList<String>) tags;
}
public boolean hasTransitory(String key) {
return transitoryData != null && transitoryData.containsKey(key);
}
public <T> T getTransitory(String key) {
if(transitoryData == null) {
return null;

@ -23,7 +23,6 @@ public class GtasksPreferenceService {
private static final String IDENTIFIER = "gtasks"; //$NON-NLS-1$
private static final String PREF_DEFAULT_LIST = IDENTIFIER + "_defaultlist"; //$NON-NLS-1$
public static final String PREF_USER_NAME = IDENTIFIER + "_user"; //$NON-NLS-1$
@Inject
@ -31,14 +30,6 @@ public class GtasksPreferenceService {
this.preferences = preferences;
}
public String getDefaultList() {
return preferences.getStringValue(PREF_DEFAULT_LIST);
}
public void setDefaultList(String defaultList) {
preferences.setString(PREF_DEFAULT_LIST, defaultList);
}
public String getUserName() {
return preferences.getStringValue(PREF_USER_NAME);
}

@ -9,10 +9,12 @@ import android.content.Context;
import android.database.sqlite.SQLiteException;
import android.os.Environment;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableListMultimap;
import com.google.common.collect.ListMultimap;
import com.google.common.collect.Multimaps;
import com.todoroo.astrid.api.GtasksFilter;
import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.tags.TagService;
@ -23,11 +25,14 @@ import org.tasks.analytics.Tracker;
import org.tasks.analytics.Tracking;
import org.tasks.data.Filter;
import org.tasks.data.FilterDao;
import org.tasks.data.GoogleTaskList;
import org.tasks.data.GoogleTaskListDao;
import org.tasks.data.Tag;
import org.tasks.data.TagDao;
import org.tasks.data.TagData;
import org.tasks.data.TagDataDao;
import org.tasks.injection.ForApplication;
import org.tasks.preferences.DefaultFilterProvider;
import org.tasks.preferences.Preferences;
import org.tasks.scheduling.BackgroundScheduler;
@ -43,6 +48,7 @@ public class StartupService {
private static final int V4_8_0 = 380;
private static final int V4_9_5 = 434;
private static final int V5_3_0 = 491;
private static final int V5_3_1 = 501;
private final Database database;
private final Preferences preferences;
@ -53,12 +59,16 @@ public class StartupService {
private final Context context;
private final TagDao tagDao;
private final FilterDao filterDao;
private final DefaultFilterProvider defaultFilterProvider;
private final GoogleTaskListDao googleTaskListDao;
@Inject
public StartupService(Database database, Preferences preferences, Tracker tracker,
TagDataDao tagDataDao, TagService tagService,
LocalBroadcastManager localBroadcastManager,
@ForApplication Context context, TagDao tagDao, FilterDao filterDao) {
@ForApplication Context context, TagDao tagDao,
FilterDao filterDao, DefaultFilterProvider defaultFilterProvider,
GoogleTaskListDao googleTaskListDao) {
this.database = database;
this.preferences = preferences;
this.tracker = tracker;
@ -68,6 +78,8 @@ public class StartupService {
this.context = context;
this.tagDao = tagDao;
this.filterDao = filterDao;
this.defaultFilterProvider = defaultFilterProvider;
this.googleTaskListDao = googleTaskListDao;
}
/** Called when this application is started up */
@ -106,6 +118,9 @@ public class StartupService {
if (from < V5_3_0) {
migrateFilters();
}
if (from < V5_3_1) {
migrateDefaultSyncList();
}
tracker.reportEvent(Tracking.Events.UPGRADE, Integer.toString(from));
}
preferences.setCurrentVersion(to);
@ -149,6 +164,16 @@ public class StartupService {
}
}
private void migrateDefaultSyncList() {
String defaultGoogleTaskList = preferences.getStringValue("gtasks_defaultlist");
if (!Strings.isNullOrEmpty(defaultGoogleTaskList)) {
GoogleTaskList googleTaskList = googleTaskListDao.getByRemoteId(defaultGoogleTaskList);
if (googleTaskList != null) {
defaultFilterProvider.setDefaultRemoteList(new GtasksFilter(googleTaskList));
}
}
}
private String migrate(String input) {
return input
.replaceAll("SELECT metadata\\.task AS task FROM metadata INNER JOIN tasks ON \\(\\(metadata\\.task=tasks\\._id\\)\\) WHERE \\(\\(\\(tasks\\.completed=0\\) AND \\(tasks\\.deleted=0\\) AND \\(tasks\\.hideUntil<\\(strftime\\(\\'%s\\',\\'now\\'\\)\\*1000\\)\\)\\) AND \\(metadata\\.key=\\'tags-tag\\'\\) AND \\(metadata\\.value",

@ -6,6 +6,8 @@ import android.text.TextUtils;
import com.google.common.base.Strings;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.GtasksFilter;
import com.todoroo.astrid.api.PermaSql;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.Task;
@ -23,6 +25,7 @@ import org.tasks.data.Tag;
import org.tasks.data.TagDao;
import org.tasks.data.TagData;
import org.tasks.data.TagDataDao;
import org.tasks.preferences.DefaultFilterProvider;
import org.tasks.preferences.Preferences;
import java.util.ArrayList;
@ -41,6 +44,7 @@ public class TaskCreator {
private final TagDao tagDao;
private final GoogleTaskDao googleTaskDao;
private final Tracker tracker;
private final DefaultFilterProvider defaultFilterProvider;
private final TagDataDao tagDataDao;
private final TaskDao taskDao;
private final TagService tagService;
@ -48,7 +52,7 @@ public class TaskCreator {
@Inject
public TaskCreator(GCalHelper gcalHelper, Preferences preferences, TagDataDao tagDataDao,
TaskDao taskDao, TagService tagService, TagDao tagDao,
GoogleTaskDao googleTaskDao, Tracker tracker) {
GoogleTaskDao googleTaskDao, Tracker tracker, DefaultFilterProvider defaultFilterProvider) {
this.gcalHelper = gcalHelper;
this.preferences = preferences;
this.tagDataDao = tagDataDao;
@ -57,6 +61,7 @@ public class TaskCreator {
this.tagDao = tagDao;
this.googleTaskDao = googleTaskDao;
this.tracker = tracker;
this.defaultFilterProvider = defaultFilterProvider;
}
public Task basicQuickAddTask(String title) {
@ -73,9 +78,13 @@ public class TaskCreator {
createTags(task);
String googleTaskList = task.getTransitory(GoogleTask.KEY);
if (!Strings.isNullOrEmpty(googleTaskList)) {
googleTaskDao.insert(new GoogleTask(task.getId(), googleTaskList));
if (task.hasTransitory(GoogleTask.KEY)) {
googleTaskDao.insert(new GoogleTask(task.getId(), task.getTransitory(GoogleTask.KEY)));
} else {
Filter remoteList = defaultFilterProvider.getDefaultRemoteList();
if (remoteList != null && remoteList instanceof GtasksFilter) {
googleTaskDao.insert(new GoogleTask(task.getId(), ((GtasksFilter) remoteList).getRemoteId()));
}
}
taskDao.save(task, null);

@ -55,12 +55,16 @@ public class RemoteListSupportPicker extends InjectingDialogFragment {
public static AlertDialog createDialog(FilterAdapter filterAdapter, DialogBuilder dialogBuilder,
Filter selected, RemoteListSelectionHandler handler) {
filterAdapter.populateRemoteListPicker();
int selectedIndex = filterAdapter.indexOf(selected);
int selectedIndex = selected == null ? 0 : filterAdapter.indexOf(selected);
return dialogBuilder.newDialog()
.setSingleChoiceItems(filterAdapter, selectedIndex, (dialog, which) -> {
FilterListItem item = filterAdapter.getItem(which);
if (item instanceof GtasksFilter) {
handler.selectedList((GtasksFilter) item);
if (which == 0) {
handler.selectedList(null);
} else {
FilterListItem item = filterAdapter.getItem(which);
if (item instanceof GtasksFilter) {
handler.selectedList((GtasksFilter) item);
}
}
dialog.dismiss();
})

@ -7,7 +7,7 @@ public class Tracking {
public enum Events {
SET_DEFAULT_LIST(R.string.tracking_category_preferences, R.string.p_default_list),
SET_BADGE_LIST(R.string.tracking_category_preferences, R.string.p_badge_list),
GTASK_DEFAULT_LIST(R.string.tracking_category_preferences, R.string.p_gtasks_default_list),
DEFAULT_REMOTE_LIST(R.string.tracking_category_preferences, R.string.p_default_remote_list),
SET_THEME(R.string.tracking_category_preferences, R.string.p_theme),
SET_COLOR(R.string.tracking_category_preferences, R.string.p_theme_color),
SET_ACCENT(R.string.tracking_category_preferences, R.string.p_theme_accent),

@ -74,11 +74,19 @@ public class DefaultFilterProvider {
return getFilterFromPreference(R.string.p_default_list);
}
public Filter getDefaultRemoteList() {
return getFilterFromPreference(preferences.getStringValue(R.string.p_default_remote_list), null);
}
public Filter getFilterFromPreference(int resId) {
return getFilterFromPreference(preferences.getStringValue(resId));
}
public Filter getFilterFromPreference(String preferenceValue) {
return getFilterFromPreference(preferenceValue, BuiltInFilterExposer.getMyTasksFilter(context.getResources()));
}
private Filter getFilterFromPreference(String preferenceValue, Filter def) {
if (!isNullOrEmpty(preferenceValue)) {
try {
Filter filter = loadFilter(preferenceValue);
@ -89,7 +97,7 @@ public class DefaultFilterProvider {
Timber.e(e, e.getMessage());
}
}
return BuiltInFilterExposer.getMyTasksFilter(context.getResources());
return def;
}
private Filter loadFilter(String preferenceValue) {
@ -122,6 +130,10 @@ public class DefaultFilterProvider {
setFilterPreference(filter, R.string.p_dashclock_filter);
}
public void setDefaultRemoteList(Filter filter) {
setFilterPreference(filter, R.string.p_default_remote_list);
}
private void setFilterPreference(Filter filter, int prefId) {
String filterPreferenceValue = getFilterPreferenceValue(filter);
if (!Strings.isNullOrEmpty(filterPreferenceValue)) {

@ -0,0 +1,5 @@
<vector android:autoMirrored="true" android:height="24dp"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M19.35,10.04C18.67,6.59 15.64,4 12,4c-1.48,0 -2.85,0.43 -4.01,1.17l1.46,1.46C10.21,6.23 11.08,6 12,6c3.04,0 5.5,2.46 5.5,5.5v0.5H19c1.66,0 3,1.34 3,3 0,1.13 -0.64,2.11 -1.56,2.62l1.45,1.45C23.16,18.16 24,16.68 24,15c0,-2.64 -2.05,-4.78 -4.65,-4.96zM3,5.27l2.75,2.74C2.56,8.15 0,10.77 0,14c0,3.31 2.69,6 6,6h11.73l2,2L21,20.73 4.27,4 3,5.27zM7.73,10l8,8H6c-2.21,0 -4,-1.79 -4,-4s1.79,-4 4,-4h1.73z"/>
</vector>

@ -6,5 +6,5 @@
android:layout_height="wrap_content"
android:layout_gravity="top"
android:gravity="start"
android:text="@string/default_value"
android:hint="@string/dont_sync"
android:textAlignment="viewStart" />

@ -263,7 +263,6 @@
<string name="p_theme">theme_style</string>
<string name="p_theme_color">theme_color</string>
<string name="p_theme_accent">theme_accent</string>
<string name="p_gtasks_default_list">default_gtasks_list</string>
<string name="p_language">language</string>
<string name="p_layout_direction">layout_direction</string>
<string name="p_led_notification">led_notificatiWCAon</string>
@ -278,6 +277,7 @@
<string name="p_widget_show_header">widget-show-header-</string>
<string name="p_widget_show_settings">widget-show-settings-</string>
<string name="p_dashclock_filter">dashclock_filter</string>
<string name="p_default_remote_list">default_remote_list</string>
<string name="sku_tasker">tasker</string>
<string name="sku_dashclock">dashclock</string>

@ -759,6 +759,7 @@ File %1$s contained %2$s.\n\n
<string name="no_title">(No title)</string>
<string name="back_button_saves_task">Back button saves task</string>
<string name="default_list">Default list</string>
<string name="default_sync">Default sync</string>
<string name="plugin_description">Tasks is an open source project maintained by one developer. Some features are offered as in-app purchases in order to support development.</string>
<string name="themes_purchase_description">Unlock all themes and add some color to Tasks</string>
<string name="tasker_description">Context-aware list notifications. Requires Tasker or Locale</string>
@ -861,6 +862,7 @@ File %1$s contained %2$s.\n\n
<string name="badges_description">Display a task count on Tasks launcher icon. Not all launchers support badges.</string>
<string name="bundle_notifications_summary">Combine multiple notifications into a single notification</string>
<string name="repeat_monthly_same_day_each_month">on the same day each month</string>
<string name="dont_sync">Don\'t sync</string>
<string name="repeat_monthly_every_day_of_nth_week">every %1$s %2$s</string>
<string name="repeat_monthly_on_every_day_of_nth_week">on every %1$s %2$s</string>

@ -17,6 +17,9 @@
android:entryValues="@array/EPr_default_urgency_values"
android:key="@string/p_default_urgency_key"
android:title="@string/EPr_default_urgency_title" />
<Preference
android:key="@string/p_default_remote_list"
android:title="@string/default_sync" />
<com.todoroo.astrid.ui.MultilineListPreference
android:defaultValue="0"
android:entries="@array/EPr_default_hideUntil"

@ -13,11 +13,6 @@
android:key="@string/sync_gtasks"
android:title="@string/enabled" />
<Preference
android:dependency="@string/sync_gtasks"
android:key="@string/p_gtasks_default_list"
android:title="@string/default_list" />
<CheckBoxPreference
android:defaultValue="true"
android:dependency="@string/sync_gtasks"

Loading…
Cancel
Save