diff --git a/app/src/main/java/com/todoroo/astrid/activity/MainActivity.java b/app/src/main/java/com/todoroo/astrid/activity/MainActivity.java index 0a89c59de..26db7fa08 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/MainActivity.java +++ b/app/src/main/java/com/todoroo/astrid/activity/MainActivity.java @@ -29,19 +29,11 @@ import androidx.fragment.app.FragmentManager; import androidx.lifecycle.ViewModelProviders; import butterknife.BindView; import butterknife.ButterKnife; -import com.todoroo.astrid.api.CaldavFilter; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.FilterListItem; -import com.todoroo.astrid.api.GtasksFilter; -import com.todoroo.astrid.api.TagFilter; import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.data.Task; -import com.todoroo.astrid.gtasks.GtasksListService; -import com.todoroo.astrid.gtasks.GtasksSubtaskListFragment; import com.todoroo.astrid.service.TaskCreator; -import com.todoroo.astrid.subtasks.SubtasksHelper; -import com.todoroo.astrid.subtasks.SubtasksListFragment; -import com.todoroo.astrid.subtasks.SubtasksTagListFragment; import com.todoroo.astrid.timers.TimerControlSet; import io.reactivex.Single; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -54,12 +46,6 @@ import org.tasks.R; import org.tasks.activities.TagSettingsActivity; import org.tasks.analytics.Tracker; import org.tasks.analytics.Tracking; -import org.tasks.caldav.CaldavListFragment; -import org.tasks.data.CaldavCalendar; -import org.tasks.data.CaldavDao; -import org.tasks.data.GoogleTaskList; -import org.tasks.data.TagData; -import org.tasks.data.TagDataDao; import org.tasks.dialogs.SortDialog; import org.tasks.fragments.CommentBarFragment; import org.tasks.gtasks.PlayServices; @@ -68,9 +54,6 @@ import org.tasks.injection.InjectingAppCompatActivity; import org.tasks.preferences.DefaultFilterProvider; import org.tasks.preferences.Preferences; import org.tasks.receivers.RepeatConfirmationReceiver; -import org.tasks.sync.SyncAdapters; -import org.tasks.tasklist.GtasksListFragment; -import org.tasks.tasklist.TagListFragment; import org.tasks.themes.Theme; import org.tasks.themes.ThemeCache; import org.tasks.themes.ThemeColor; @@ -102,17 +85,12 @@ public class MainActivity extends InjectingAppCompatActivity private static final String EXTRA_FILTER = "extra_filter"; @Inject Preferences preferences; - @Inject SubtasksHelper subtasksHelper; @Inject RepeatConfirmationReceiver repeatConfirmationReceiver; @Inject DefaultFilterProvider defaultFilterProvider; - @Inject GtasksListService gtasksListService; - @Inject TagDataDao tagDataDao; @Inject Theme theme; @Inject ThemeCache themeCache; - @Inject SyncAdapters syncAdapters; @Inject Tracker tracker; @Inject TaskDao taskDao; - @Inject CaldavDao caldavDao; @Inject LocalBroadcastManager localBroadcastManager; @Inject TaskCreator taskCreator; @Inject PlayServices playServices; @@ -403,35 +381,7 @@ public class MainActivity extends InjectingAppCompatActivity filter = defaultFilterProvider.getDefaultFilter(); } - if (filter instanceof TagFilter) { - TagFilter tagFilter = (TagFilter) filter; - TagData tagData = tagDataDao.getByUuid(tagFilter.getUuid()); - if (tagData != null) { - return preferences.getBoolean(R.string.p_manual_sort, false) - ? SubtasksTagListFragment.newSubtasksTagListFragment(tagFilter, tagData) - : TagListFragment.newTagViewFragment(tagFilter, tagData); - } - } else if (filter instanceof GtasksFilter) { - GtasksFilter gtasksFilter = (GtasksFilter) filter; - GoogleTaskList list = gtasksListService.getList(gtasksFilter.getStoreId()); - if (list != null) { - return preferences.getBoolean(R.string.p_manual_sort, false) - ? GtasksSubtaskListFragment.newGtasksSubtaskListFragment(gtasksFilter, list) - : GtasksListFragment.newGtasksListFragment(gtasksFilter, list); - } - } else if (filter instanceof CaldavFilter) { - CaldavFilter caldavFilter = (CaldavFilter) filter; - CaldavCalendar calendar = caldavDao.getCalendarByUuid(caldavFilter.getUuid()); - if (calendar != null) { - return CaldavListFragment.newCaldavListFragment(caldavFilter, calendar); - } - } else if (filter != null) { - return subtasksHelper.shouldUseSubtasksFragmentForFilter(filter) - ? SubtasksListFragment.newSubtasksListFragment(filter) - : TaskListFragment.newTaskListFragment(filter); - } - - return null; + return TaskListFragment.newTaskListFragment(filter); } @Override diff --git a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java index 605c8f8a9..240b7a5a3 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java +++ b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java @@ -9,6 +9,7 @@ package com.todoroo.astrid.activity; import static android.app.Activity.RESULT_OK; import static androidx.core.content.ContextCompat.getColor; import static com.todoroo.andlib.utility.AndroidUtilities.assertMainThread; +import static org.tasks.caldav.CaldavCalendarSettingsActivity.EXTRA_CALDAV_CALENDAR; import android.app.Activity; import android.content.BroadcastReceiver; @@ -37,13 +38,17 @@ import butterknife.OnClick; import com.google.android.material.snackbar.Snackbar; import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.QueryTemplate; +import com.todoroo.astrid.adapter.GoogleTaskAdapter; import com.todoroo.astrid.adapter.TaskAdapter; +import com.todoroo.astrid.adapter.TaskAdapterProvider; +import com.todoroo.astrid.api.CaldavFilter; import com.todoroo.astrid.api.CustomFilter; import com.todoroo.astrid.api.Filter; +import com.todoroo.astrid.api.GtasksFilter; import com.todoroo.astrid.api.SearchFilter; +import com.todoroo.astrid.api.TagFilter; import com.todoroo.astrid.core.BuiltInFilterExposer; import com.todoroo.astrid.data.Task; -import com.todoroo.astrid.gtasks.GtasksSubtaskListFragment; import com.todoroo.astrid.service.TaskCreator; import com.todoroo.astrid.service.TaskDeleter; import com.todoroo.astrid.service.TaskMover; @@ -60,9 +65,12 @@ import javax.inject.Inject; import org.tasks.LocalBroadcastManager; import org.tasks.R; import org.tasks.activities.FilterSettingsActivity; +import org.tasks.activities.GoogleTaskListSettingsActivity; import org.tasks.activities.RemoteListSupportPicker; +import org.tasks.activities.TagSettingsActivity; import org.tasks.analytics.Tracker; import org.tasks.analytics.Tracking; +import org.tasks.caldav.CaldavCalendarSettingsActivity; import org.tasks.dialogs.DialogBuilder; import org.tasks.dialogs.SortDialog; import org.tasks.injection.ForActivity; @@ -84,19 +92,22 @@ import org.tasks.ui.Toaster; * * @author Tim Su */ -public class TaskListFragment extends InjectingFragment +public final class TaskListFragment extends InjectingFragment implements SwipeRefreshLayout.OnRefreshListener, Toolbar.OnMenuItemClickListener { public static final String TAGS_METADATA_JOIN = "for_tags"; // $NON-NLS-1$ public static final String GTASK_METADATA_JOIN = "for_gtask"; // $NON-NLS-1$ public static final String CALDAV_METADATA_JOIN = "for_caldav"; // $NON-NLS-1$ public static final String FILE_METADATA_JOIN = "for_actions"; // $NON-NLS-1$ - public static final int REQUEST_MOVE_TASKS = 11545; private static final int VOICE_RECOGNITION_REQUEST_CODE = 1234; private static final String EXTRA_FILTER = "extra_filter"; private static final String FRAG_TAG_SORT_DIALOG = "frag_tag_sort_dialog"; - // --- instance variables - private static final int REQUEST_EDIT_FILTER = 11544; + private static final int REQUEST_CALDAV_SETTINGS = 10101; + private static final int REQUEST_GTASK_SETTINGS = 10102; + public static final int REQUEST_MOVE_TASKS = 10103; + private static final int REQUEST_FILTER_SETTINGS = 10104; + private static final int REQUEST_TAG_SETTINGS = 10105; + private static final int SEARCH_DEBOUNCE_TIMEOUT = 300; @Inject protected Tracker tracker; @Inject SyncAdapters syncAdapters; @@ -113,6 +124,7 @@ public class TaskListFragment extends InjectingFragment @Inject TaskMover taskMover; @Inject ActionModeProvider actionModeProvider; @Inject Toaster toaster; + @Inject TaskAdapterProvider taskAdapterProvider; @BindView(R.id.swipe_layout) SwipeRefreshLayout swipeRefreshLayout; @@ -164,7 +176,7 @@ public class TaskListFragment extends InjectingFragment })); } - protected void setSyncOngoing(final boolean ongoing) { + private void setSyncOngoing(final boolean ongoing) { assertMainThread(); swipeRefreshLayout.setRefreshing(ongoing); @@ -209,7 +221,11 @@ public class TaskListFragment extends InjectingFragment filter.setFilterQueryOverride(null); - setTaskAdapter(); + // set up list adapters + taskAdapter = taskAdapterProvider.createTaskAdapter(filter); + recyclerAdapter = + new TaskListRecyclerAdapter(taskAdapter, viewHolderFactory, this, actionModeProvider); + taskAdapter.setHelper(recyclerAdapter.getAsyncPagedListDiffer()); } @Override @@ -231,22 +247,23 @@ public class TaskListFragment extends InjectingFragment toolbar.setTitle(filter.listingTitle); toolbar.setNavigationIcon(R.drawable.ic_outline_menu_24px); toolbar.setNavigationOnClickListener(v -> callbacks.onNavigationIconClicked()); - inflateMenu(toolbar); - setupMenu(toolbar.getMenu()); + setupMenu(toolbar); toolbar.setOnMenuItemClickListener(this); MenuColorizer.colorToolbar(context, toolbar); return parent; } - protected void inflateMenu(Toolbar toolbar) { + private void setupMenu(Toolbar toolbar) { toolbar.inflateMenu(R.menu.menu_task_list_fragment); if (filter instanceof CustomFilter && ((CustomFilter) filter).getId() > 0) { toolbar.inflateMenu(R.menu.menu_custom_filter); } - } - - private void setupMenu(Menu menu) { + int menuRes = filter.getMenu(); + if (menuRes > 0) { + toolbar.inflateMenu(menuRes); + } + Menu menu = toolbar.getMenu(); MenuItem hidden = menu.findItem(R.id.menu_show_hidden); if (preferences.getBoolean(R.string.p_show_hidden_tasks, false)) { hidden.setChecked(true); @@ -348,7 +365,10 @@ public class TaskListFragment extends InjectingFragment startActivityForResult(recognition, TaskListFragment.VOICE_RECOGNITION_REQUEST_CODE); return true; case R.id.menu_sort: - SortDialog.newSortDialog(hasDraggableOption()) + boolean supportsManualSort = filter.supportsSubtasks() + || BuiltInFilterExposer.isInbox(context, filter) + || BuiltInFilterExposer.isTodayFilter(context, filter); + SortDialog.newSortDialog(supportsManualSort) .show(getChildFragmentManager(), FRAG_TAG_SORT_DIALOG); return true; case R.id.menu_show_hidden: @@ -363,11 +383,6 @@ public class TaskListFragment extends InjectingFragment loadTaskListContent(); localBroadcastManager.broadcastRefresh(); return true; - case R.id.menu_filter_settings: - Intent intent = new Intent(getActivity(), FilterSettingsActivity.class); - intent.putExtra(FilterSettingsActivity.TOKEN_FILTER, filter); - startActivityForResult(intent, REQUEST_EDIT_FILTER); - return true; case R.id.menu_clear_completed: dialogBuilder .newMessageDialog(R.string.clear_completed_tasks_confirmation) @@ -375,12 +390,32 @@ public class TaskListFragment extends InjectingFragment .setNegativeButton(android.R.string.cancel, null) .show(); return true; + case R.id.menu_filter_settings: + Intent filterSettings = new Intent(getActivity(), FilterSettingsActivity.class); + filterSettings.putExtra(FilterSettingsActivity.TOKEN_FILTER, filter); + startActivityForResult(filterSettings, REQUEST_FILTER_SETTINGS); + return true; + case R.id.menu_caldav_list_fragment: + Intent caldavSettings = new Intent(getActivity(), CaldavCalendarSettingsActivity.class); + caldavSettings.putExtra(EXTRA_CALDAV_CALENDAR, ((CaldavFilter) filter).getCalendar()); + startActivityForResult(caldavSettings, REQUEST_CALDAV_SETTINGS); + return true; + case R.id.menu_gtasks_list_settings: + Intent gtasksSettings = new Intent(getActivity(), GoogleTaskListSettingsActivity.class); + gtasksSettings.putExtra(GoogleTaskListSettingsActivity.EXTRA_STORE_DATA, ((GtasksFilter) filter).getList()); + startActivityForResult(gtasksSettings, REQUEST_GTASK_SETTINGS); + return true; + case R.id.menu_tag_settings: + Intent tagSettings = new Intent(getActivity(), TagSettingsActivity.class); + tagSettings.putExtra(TagSettingsActivity.EXTRA_TAG_DATA, ((TagFilter) filter).getTagData()); + startActivityForResult(tagSettings, REQUEST_TAG_SETTINGS); + return true; default: return onOptionsItemSelected(item); } } - protected void clearCompleted() { + private void clearCompleted() { tracker.reportEvent(Tracking.Events.CLEAR_COMPLETED); disposables.add( Single.fromCallable(() -> taskDeleter.clearCompleted(filter)) @@ -476,7 +511,7 @@ public class TaskListFragment extends InjectingFragment */ private void refresh() { // TODO: compare indents in diff callback, then animate this - loadTaskListContent(!(this instanceof GtasksSubtaskListFragment)); + loadTaskListContent(!(taskAdapter instanceof GoogleTaskAdapter)); setSyncOngoing(preferences.isSyncOngoing()); } @@ -497,23 +532,6 @@ public class TaskListFragment extends InjectingFragment taskListViewModel.invalidate(); } - protected TaskAdapter createTaskAdapter() { - return new TaskAdapter(); - } - - /** Fill in the Task List with current items */ - private void setTaskAdapter() { - if (filter == null) { - return; - } - - // set up list adapters - taskAdapter = createTaskAdapter(); - recyclerAdapter = - new TaskListRecyclerAdapter(taskAdapter, viewHolderFactory, this, actionModeProvider); - taskAdapter.setHelper(recyclerAdapter.getAsyncPagedListDiffer()); - } - public Filter getFilter() { return filter; } @@ -561,43 +579,95 @@ public class TaskListFragment extends InjectingFragment @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { - if (requestCode == VOICE_RECOGNITION_REQUEST_CODE) { - if (resultCode == RESULT_OK) { - List match = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); - if (match != null && match.size() > 0 && match.get(0).length() > 0) { - String recognizedSpeech = match.get(0); - recognizedSpeech = - recognizedSpeech.substring(0, 1).toUpperCase() - + recognizedSpeech.substring(1).toLowerCase(); - - onTaskListItemClicked(addTask(recognizedSpeech)); + switch (requestCode) { + case VOICE_RECOGNITION_REQUEST_CODE: + if (resultCode == RESULT_OK) { + List match = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); + if (match != null && match.size() > 0 && match.get(0).length() > 0) { + String recognizedSpeech = match.get(0); + recognizedSpeech = + recognizedSpeech.substring(0, 1).toUpperCase() + + recognizedSpeech.substring(1).toLowerCase(); + + onTaskListItemClicked(addTask(recognizedSpeech)); + } } - } - } else if (requestCode == REQUEST_EDIT_FILTER) { - if (resultCode == RESULT_OK) { - String action = data.getAction(); - MainActivity activity = (MainActivity) getActivity(); - if (FilterSettingsActivity.ACTION_FILTER_DELETED.equals(action)) { - activity.onFilterItemClicked(null); - } else if (FilterSettingsActivity.ACTION_FILTER_RENAMED.equals(action)) { - activity - .getIntent() - .putExtra( - MainActivity.OPEN_FILTER, - (Filter) data.getParcelableExtra(FilterSettingsActivity.TOKEN_FILTER)); - activity.recreate(); + break; + case REQUEST_FILTER_SETTINGS: + if (resultCode == RESULT_OK) { + String action = data.getAction(); + MainActivity activity = (MainActivity) getActivity(); + if (FilterSettingsActivity.ACTION_FILTER_DELETED.equals(action)) { + activity.onFilterItemClicked(null); + } else if (FilterSettingsActivity.ACTION_FILTER_RENAMED.equals(action)) { + activity + .getIntent() + .putExtra( + MainActivity.OPEN_FILTER, + (Filter) data.getParcelableExtra(FilterSettingsActivity.TOKEN_FILTER)); + activity.recreate(); + } } - } - } else if (requestCode == REQUEST_MOVE_TASKS) { - if (resultCode == RESULT_OK) { - tracker.reportEvent(Tracking.Events.MULTISELECT_MOVE); - taskMover.move( - taskAdapter.getSelected(), - data.getParcelableExtra(RemoteListSupportPicker.EXTRA_SELECTED_FILTER)); - recyclerAdapter.finishActionMode(); - } - } else { - super.onActivityResult(requestCode, resultCode, data); + break; + case REQUEST_MOVE_TASKS: + if (resultCode == RESULT_OK) { + tracker.reportEvent(Tracking.Events.MULTISELECT_MOVE); + taskMover.move( + taskAdapter.getSelected(), + data.getParcelableExtra(RemoteListSupportPicker.EXTRA_SELECTED_FILTER)); + recyclerAdapter.finishActionMode(); + } + break; + case REQUEST_CALDAV_SETTINGS: + if (resultCode == RESULT_OK) { + MainActivity activity = (MainActivity) getActivity(); + String action = data.getAction(); + if (CaldavCalendarSettingsActivity.ACTION_DELETED.equals(action)) { + activity.onFilterItemClicked(null); + } else if (CaldavCalendarSettingsActivity.ACTION_RELOAD.equals(action)) { + activity + .getIntent() + .putExtra( + MainActivity.OPEN_FILTER, + (Filter) data.getParcelableExtra(MainActivity.OPEN_FILTER)); + activity.recreate(); + } + } + break; + case REQUEST_GTASK_SETTINGS: + if (resultCode == RESULT_OK) { + MainActivity activity = (MainActivity) getActivity(); + String action = data.getAction(); + if (GoogleTaskListSettingsActivity.ACTION_DELETED.equals(action)) { + activity.onFilterItemClicked(null); + } else if (GoogleTaskListSettingsActivity.ACTION_RELOAD.equals(action)) { + activity + .getIntent() + .putExtra( + MainActivity.OPEN_FILTER, + (Filter) data.getParcelableExtra(MainActivity.OPEN_FILTER)); + activity.recreate(); + } + } + break; + case REQUEST_TAG_SETTINGS: + if (resultCode == Activity.RESULT_OK) { + String action = data.getAction(); + MainActivity activity = (MainActivity) getActivity(); + if (TagSettingsActivity.ACTION_DELETED.equals(action)) { + activity.onFilterItemClicked(null); + } else if (TagSettingsActivity.ACTION_RELOAD.equals(action)) { + activity + .getIntent() + .putExtra( + MainActivity.OPEN_FILTER, + (Filter) data.getParcelableExtra(MainActivity.OPEN_FILTER)); + activity.recreate(); + } + } + break; + default: + super.onActivityResult(requestCode, resultCode, data); } } @@ -610,11 +680,6 @@ public class TaskListFragment extends InjectingFragment callbacks.onTaskListItemClicked(task); } - protected boolean hasDraggableOption() { - return BuiltInFilterExposer.isInbox(context, filter) - || BuiltInFilterExposer.isTodayFilter(context, filter); - } - /** * Container Activity must implement this interface and we ensure that it does during the * onAttach() callback diff --git a/app/src/main/java/com/todoroo/astrid/adapter/TaskAdapterProvider.java b/app/src/main/java/com/todoroo/astrid/adapter/TaskAdapterProvider.java new file mode 100644 index 000000000..5cfae25eb --- /dev/null +++ b/app/src/main/java/com/todoroo/astrid/adapter/TaskAdapterProvider.java @@ -0,0 +1,149 @@ +package com.todoroo.astrid.adapter; + +import android.content.Context; +import android.text.TextUtils; +import com.todoroo.astrid.api.CaldavFilter; +import com.todoroo.astrid.api.Filter; +import com.todoroo.astrid.api.GtasksFilter; +import com.todoroo.astrid.api.TagFilter; +import com.todoroo.astrid.core.BuiltInFilterExposer; +import com.todoroo.astrid.dao.TaskDao; +import com.todoroo.astrid.data.Task; +import com.todoroo.astrid.gtasks.GtasksListService; +import com.todoroo.astrid.gtasks.GtasksTaskListUpdater; +import com.todoroo.astrid.gtasks.sync.GtasksSyncService; +import com.todoroo.astrid.subtasks.SubtasksFilterUpdater; +import com.todoroo.astrid.subtasks.SubtasksHelper; +import javax.inject.Inject; +import org.tasks.R; +import org.tasks.data.CaldavCalendar; +import org.tasks.data.CaldavDao; +import org.tasks.data.GoogleTaskDao; +import org.tasks.data.GoogleTaskList; +import org.tasks.data.TagData; +import org.tasks.data.TagDataDao; +import org.tasks.data.TaskListMetadata; +import org.tasks.data.TaskListMetadataDao; +import org.tasks.injection.ForApplication; +import org.tasks.preferences.Preferences; + +public class TaskAdapterProvider { + + private final Context context; + private final Preferences preferences; + private final TagDataDao tagDataDao; + private final TaskListMetadataDao taskListMetadataDao; + private final TaskDao taskDao; + private final GtasksListService gtasksListService; + private final GtasksSyncService gtasksSyncService; + private final GoogleTaskDao googleTaskDao; + private final CaldavDao caldavDao; + private final SubtasksHelper subtasksHelper; + + @Inject + public TaskAdapterProvider( + @ForApplication Context context, + Preferences preferences, + TagDataDao tagDataDao, + TaskListMetadataDao taskListMetadataDao, + TaskDao taskDao, + GtasksListService gtasksListService, + GtasksSyncService gtasksSyncService, + GoogleTaskDao googleTaskDao, + CaldavDao caldavDao, + SubtasksHelper subtasksHelper) { + this.context = context; + this.preferences = preferences; + this.tagDataDao = tagDataDao; + this.taskListMetadataDao = taskListMetadataDao; + this.taskDao = taskDao; + this.gtasksListService = gtasksListService; + this.gtasksSyncService = gtasksSyncService; + this.googleTaskDao = googleTaskDao; + this.caldavDao = caldavDao; + this.subtasksHelper = subtasksHelper; + } + + public TaskAdapter createTaskAdapter(Filter filter) { + if (filter instanceof TagFilter) { + TagFilter tagFilter = (TagFilter) filter; + TagData tagData = tagDataDao.getByUuid(tagFilter.getUuid()); + if (tagData != null) { + return isManualSort() ? createManualTagTaskAdapter(tagFilter) : new TaskAdapter(); + } + } else if (filter instanceof GtasksFilter) { + GtasksFilter gtasksFilter = (GtasksFilter) filter; + GoogleTaskList list = gtasksListService.getList(gtasksFilter.getStoreId()); + if (list != null) { + return isManualSort() + ? createManualGoogleTaskAdapter(gtasksFilter) + : new TaskAdapter(); + } + } else if (filter instanceof CaldavFilter) { + CaldavFilter caldavFilter = (CaldavFilter) filter; + CaldavCalendar calendar = caldavDao.getCalendarByUuid(caldavFilter.getUuid()); + if (calendar != null) { + return new TaskAdapter(); + } + } else { + return subtasksHelper.shouldUseSubtasksFragmentForFilter(filter) + ? createManualFilterTaskAdapter(filter) + : new TaskAdapter(); + } + return new TaskAdapter(); + } + + private boolean isManualSort() { + return preferences.getBoolean(R.string.p_manual_sort, false); + } + + private TaskAdapter createManualTagTaskAdapter(TagFilter filter) { + TagData tagData = filter.getTagData(); + String tdId = tagData.getRemoteId(); + TaskListMetadata list = taskListMetadataDao.fetchByTagOrFilter(tagData.getRemoteId()); + if (list == null && !Task.isUuidEmpty(tdId)) { + list = new TaskListMetadata(); + list.setTagUuid(tdId); + taskListMetadataDao.createNew(list); + } + SubtasksFilterUpdater updater = new SubtasksFilterUpdater(taskListMetadataDao, taskDao); + updater.initialize(list, filter); + return new AstridTaskAdapter(list, filter, updater, taskDao); + } + + private TaskAdapter createManualGoogleTaskAdapter(GtasksFilter filter) { + GtasksTaskListUpdater updater = new GtasksTaskListUpdater(gtasksSyncService, googleTaskDao); + updater.initialize(filter); + return new GoogleTaskAdapter(filter.getList(), updater, taskDao, googleTaskDao); + } + + private TaskAdapter createManualFilterTaskAdapter(Filter filter) { + String filterId = null; + String prefId = null; + if (BuiltInFilterExposer.isInbox(context, filter)) { + filterId = TaskListMetadata.FILTER_ID_ALL; + prefId = SubtasksFilterUpdater.ACTIVE_TASKS_ORDER; + } else if (BuiltInFilterExposer.isTodayFilter(context, filter)) { + filterId = TaskListMetadata.FILTER_ID_TODAY; + prefId = SubtasksFilterUpdater.TODAY_TASKS_ORDER; + } + if (TextUtils.isEmpty(filterId)) { + return null; + } + TaskListMetadata list = taskListMetadataDao.fetchByTagOrFilter(filterId); + if (list == null) { + String defaultOrder = preferences.getStringValue(prefId); + if (TextUtils.isEmpty(defaultOrder)) { + defaultOrder = "[]"; // $NON-NLS-1$ + } + defaultOrder = SubtasksHelper.convertTreeToRemoteIds(taskDao, defaultOrder); + list = new TaskListMetadata(); + list.setFilter(filterId); + list.setTaskIds(defaultOrder); + taskListMetadataDao.createNew(list); + } + SubtasksFilterUpdater updater = new SubtasksFilterUpdater(taskListMetadataDao, taskDao); + updater.initialize(list, filter); + return new AstridTaskAdapter(list, filter, updater, taskDao); + } +} diff --git a/app/src/main/java/com/todoroo/astrid/api/CaldavFilter.java b/app/src/main/java/com/todoroo/astrid/api/CaldavFilter.java index 17f150238..8fd04c3b1 100644 --- a/app/src/main/java/com/todoroo/astrid/api/CaldavFilter.java +++ b/app/src/main/java/com/todoroo/astrid/api/CaldavFilter.java @@ -68,6 +68,10 @@ public class CaldavFilter extends Filter { return calendar.getUuid(); } + public CaldavCalendar getCalendar() { + return calendar; + } + /** {@inheritDoc} */ @Override public void writeToParcel(Parcel dest, int flags) { @@ -83,6 +87,11 @@ public class CaldavFilter extends Filter { @Override public boolean supportsSubtasks() { - return true; + return false; + } + + @Override + public int getMenu() { + return R.menu.menu_caldav_list_fragment; } } diff --git a/app/src/main/java/com/todoroo/astrid/api/Filter.java b/app/src/main/java/com/todoroo/astrid/api/Filter.java index 242f76ad9..e3cf445bf 100644 --- a/app/src/main/java/com/todoroo/astrid/api/Filter.java +++ b/app/src/main/java/com/todoroo/astrid/api/Filter.java @@ -8,6 +8,7 @@ package com.todoroo.astrid.api; import android.os.Parcel; import android.os.Parcelable; +import androidx.annotation.MenuRes; import com.todoroo.andlib.sql.QueryTemplate; import java.util.Collections; import java.util.HashMap; @@ -181,6 +182,10 @@ public class Filter extends FilterListItem { return false; } + public @MenuRes int getMenu() { + return 0; + } + @Override public String toString() { return "Filter{" diff --git a/app/src/main/java/com/todoroo/astrid/api/GtasksFilter.java b/app/src/main/java/com/todoroo/astrid/api/GtasksFilter.java index 0b20fa7eb..9b432a319 100644 --- a/app/src/main/java/com/todoroo/astrid/api/GtasksFilter.java +++ b/app/src/main/java/com/todoroo/astrid/api/GtasksFilter.java @@ -77,6 +77,10 @@ public class GtasksFilter extends Filter { return list.getId(); } + public GoogleTaskList getList() { + return list; + } + @Override public boolean supportsSubtasks() { return true; @@ -98,4 +102,9 @@ public class GtasksFilter extends Filter { public String getRemoteId() { return list.getRemoteId(); } + + @Override + public int getMenu() { + return R.menu.menu_gtasks_list_fragment; + } } diff --git a/app/src/main/java/com/todoroo/astrid/api/TagFilter.java b/app/src/main/java/com/todoroo/astrid/api/TagFilter.java index 28d821807..e5bc29dd1 100644 --- a/app/src/main/java/com/todoroo/astrid/api/TagFilter.java +++ b/app/src/main/java/com/todoroo/astrid/api/TagFilter.java @@ -36,7 +36,7 @@ public class TagFilter extends Filter { }; private static final int TAG = R.drawable.ic_outline_label_24px; - private String uuid; + private TagData tagData; private TagFilter() { super(); @@ -44,7 +44,7 @@ public class TagFilter extends Filter { public TagFilter(TagData tagData) { super(tagData.getName(), queryTemplate(tagData.getRemoteId()), getValuesForNewTask(tagData)); - uuid = tagData.getRemoteId(); + this.tagData = tagData; tint = tagData.getColor(); icon = TAG; } @@ -64,24 +64,33 @@ public class TagFilter extends Filter { } public String getUuid() { - return uuid; + return tagData.getRemoteId(); + } + + public TagData getTagData() { + return tagData; } /** {@inheritDoc} */ @Override public void writeToParcel(Parcel dest, int flags) { super.writeToParcel(dest, flags); - dest.writeString(uuid); + dest.writeParcelable(tagData, 0); } @Override protected void readFromParcel(Parcel source) { super.readFromParcel(source); - uuid = source.readString(); + tagData = source.readParcelable(getClass().getClassLoader()); } @Override public boolean supportsSubtasks() { return true; } + + @Override + public int getMenu() { + return R.menu.menu_tag_view_fragment; + } } diff --git a/app/src/main/java/com/todoroo/astrid/gtasks/GtasksSubtaskListFragment.java b/app/src/main/java/com/todoroo/astrid/gtasks/GtasksSubtaskListFragment.java deleted file mode 100644 index f15a4568f..000000000 --- a/app/src/main/java/com/todoroo/astrid/gtasks/GtasksSubtaskListFragment.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2012 Todoroo Inc - * - * See the file "LICENSE" for the full license governing this code. - */ - -package com.todoroo.astrid.gtasks; - -import com.todoroo.astrid.activity.TaskListFragment; -import com.todoroo.astrid.adapter.GoogleTaskAdapter; -import com.todoroo.astrid.adapter.TaskAdapter; -import com.todoroo.astrid.api.GtasksFilter; -import com.todoroo.astrid.dao.TaskDao; -import javax.inject.Inject; -import org.tasks.data.GoogleTaskDao; -import org.tasks.data.GoogleTaskList; -import org.tasks.injection.FragmentComponent; -import org.tasks.tasklist.GtasksListFragment; - -public class GtasksSubtaskListFragment extends GtasksListFragment { - - @Inject TaskDao taskDao; - @Inject GtasksTaskListUpdater updater; - @Inject GoogleTaskDao googleTaskDao; - - public static TaskListFragment newGtasksSubtaskListFragment( - GtasksFilter filter, GoogleTaskList list) { - GtasksSubtaskListFragment fragment = new GtasksSubtaskListFragment(); - fragment.filter = filter; - fragment.list = list; - return fragment; - } - - @Override - protected TaskAdapter createTaskAdapter() { - updater.initialize(filter); - return new GoogleTaskAdapter(list, updater, taskDao, googleTaskDao); - } - - @Override - public void inject(FragmentComponent component) { - component.inject(this); - } -} diff --git a/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksFilterUpdater.java b/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksFilterUpdater.java index 32e742120..6ad848f64 100644 --- a/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksFilterUpdater.java +++ b/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksFilterUpdater.java @@ -18,8 +18,8 @@ import timber.log.Timber; public class SubtasksFilterUpdater { - static final String ACTIVE_TASKS_ORDER = "active_tasks_order"; // $NON-NLS-1$ - static final String TODAY_TASKS_ORDER = "today_tasks_order"; // $NON-NLS-1$ + public static final String ACTIVE_TASKS_ORDER = "active_tasks_order"; // $NON-NLS-1$ + public static final String TODAY_TASKS_ORDER = "today_tasks_order"; // $NON-NLS-1$ private final TaskListMetadataDao taskListMetadataDao; private final TaskDao taskDao; diff --git a/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksHelper.java b/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksHelper.java index 25d75a33a..d15af7aec 100644 --- a/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksHelper.java +++ b/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksHelper.java @@ -74,7 +74,7 @@ public class SubtasksHelper { } /** Takes a subtasks string containing local ids and remaps it to one containing UUIDs */ - static String convertTreeToRemoteIds(TaskDao taskDao, String localTree) { + public static String convertTreeToRemoteIds(TaskDao taskDao, String localTree) { List localIds = getIdList(localTree); Map idMap = getIdMap(taskDao, localIds); idMap.put(-1L, "-1"); // $NON-NLS-1$ diff --git a/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksListFragment.java b/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksListFragment.java deleted file mode 100644 index c31273590..000000000 --- a/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksListFragment.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (c) 2012 Todoroo Inc - * - * See the file "LICENSE" for the full license governing this code. - */ - -package com.todoroo.astrid.subtasks; - -import android.app.Activity; -import android.content.Context; -import android.text.TextUtils; -import com.todoroo.astrid.activity.TaskListFragment; -import com.todoroo.astrid.adapter.AstridTaskAdapter; -import com.todoroo.astrid.adapter.TaskAdapter; -import com.todoroo.astrid.api.Filter; -import com.todoroo.astrid.core.BuiltInFilterExposer; -import com.todoroo.astrid.dao.TaskDao; -import com.todoroo.astrid.data.Task; -import javax.inject.Inject; -import org.tasks.data.TaskListMetadata; -import org.tasks.data.TaskListMetadataDao; -import org.tasks.injection.ForApplication; -import org.tasks.injection.FragmentComponent; -import org.tasks.preferences.Preferences; - -/** - * Fragment for subtasks - * - * @author Tim Su - */ -public class SubtasksListFragment extends TaskListFragment { - - @Inject Preferences preferences; - @Inject @ForApplication Context context; - @Inject TaskListMetadataDao taskListMetadataDao; - @Inject SubtasksFilterUpdater updater; - @Inject TaskDao taskDao; - - public static TaskListFragment newSubtasksListFragment(Filter filter) { - SubtasksListFragment fragment = new SubtasksListFragment(); - fragment.filter = filter; - return fragment; - } - - @Override - protected TaskAdapter createTaskAdapter() { - TaskListMetadata list = initializeTaskListMetadata(); - updater.initialize(list, filter); - return new AstridTaskAdapter(list, filter, updater, taskDao); - } - - private TaskListMetadata initializeTaskListMetadata() { - String filterId = null; - String prefId = null; - if (BuiltInFilterExposer.isInbox(context, filter)) { - filterId = TaskListMetadata.FILTER_ID_ALL; - prefId = SubtasksFilterUpdater.ACTIVE_TASKS_ORDER; - } else if (BuiltInFilterExposer.isTodayFilter(context, filter)) { - filterId = TaskListMetadata.FILTER_ID_TODAY; - prefId = SubtasksFilterUpdater.TODAY_TASKS_ORDER; - } - if (TextUtils.isEmpty(filterId)) { - return null; - } - TaskListMetadata taskListMetadata = taskListMetadataDao.fetchByTagOrFilter(filterId); - if (taskListMetadata == null) { - String defaultOrder = preferences.getStringValue(prefId); - if (TextUtils.isEmpty(defaultOrder)) { - defaultOrder = "[]"; // $NON-NLS-1$ - } - defaultOrder = SubtasksHelper.convertTreeToRemoteIds(taskDao, defaultOrder); - taskListMetadata = new TaskListMetadata(); - taskListMetadata.setFilter(filterId); - taskListMetadata.setTaskIds(defaultOrder); - taskListMetadataDao.createNew(taskListMetadata); - } - return taskListMetadata; - } - - @Override - public void inject(FragmentComponent component) { - component.inject(this); - } -} diff --git a/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksTagListFragment.java b/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksTagListFragment.java deleted file mode 100644 index 7fd70bf81..000000000 --- a/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksTagListFragment.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2012 Todoroo Inc - * - * See the file "LICENSE" for the full license governing this code. - */ - -package com.todoroo.astrid.subtasks; - -import com.todoroo.astrid.activity.TaskListFragment; -import com.todoroo.astrid.adapter.AstridTaskAdapter; -import com.todoroo.astrid.adapter.TaskAdapter; -import com.todoroo.astrid.api.TagFilter; -import com.todoroo.astrid.dao.TaskDao; -import com.todoroo.astrid.data.Task; -import javax.inject.Inject; -import org.tasks.data.TagData; -import org.tasks.data.TaskListMetadata; -import org.tasks.data.TaskListMetadataDao; -import org.tasks.injection.FragmentComponent; -import org.tasks.tasklist.TagListFragment; - -public class SubtasksTagListFragment extends TagListFragment { - - @Inject TaskListMetadataDao taskListMetadataDao; - @Inject SubtasksFilterUpdater updater; - @Inject TaskDao taskDao; - - public static TaskListFragment newSubtasksTagListFragment(TagFilter filter, TagData tagData) { - SubtasksTagListFragment fragment = new SubtasksTagListFragment(); - fragment.filter = filter; - fragment.tagData = tagData; - return fragment; - } - - @Override - protected TaskAdapter createTaskAdapter() { - TaskListMetadata list = initializeTaskListMetadata(); - updater.initialize(list, filter); - return new AstridTaskAdapter(list, filter, updater, taskDao); - } - - private TaskListMetadata initializeTaskListMetadata() { - String tdId = tagData.getRemoteId(); - TaskListMetadata taskListMetadata = - taskListMetadataDao.fetchByTagOrFilter(tagData.getRemoteId()); - if (taskListMetadata == null && !Task.isUuidEmpty(tdId)) { - taskListMetadata = new TaskListMetadata(); - taskListMetadata.setTagUuid(tdId); - taskListMetadataDao.createNew(taskListMetadata); - } - return taskListMetadata; - } - - @Override - public void inject(FragmentComponent component) { - component.inject(this); - } -} diff --git a/app/src/main/java/org/tasks/caldav/CaldavListFragment.java b/app/src/main/java/org/tasks/caldav/CaldavListFragment.java deleted file mode 100644 index 158431ac7..000000000 --- a/app/src/main/java/org/tasks/caldav/CaldavListFragment.java +++ /dev/null @@ -1,96 +0,0 @@ -package org.tasks.caldav; - -import static android.app.Activity.RESULT_OK; - -import android.content.Intent; -import android.os.Bundle; -import android.view.MenuItem; -import androidx.appcompat.widget.Toolbar; -import com.todoroo.astrid.activity.MainActivity; -import com.todoroo.astrid.activity.TaskListFragment; -import com.todoroo.astrid.api.CaldavFilter; -import com.todoroo.astrid.api.Filter; -import org.tasks.R; -import org.tasks.data.CaldavCalendar; -import org.tasks.injection.FragmentComponent; - -public class CaldavListFragment extends TaskListFragment { - - private static final String EXTRA_CALDAV_CALENDAR = "extra_caldav_calendar"; - private static final int REQUEST_ACCOUNT_SETTINGS = 10101; - private CaldavCalendar calendar; - - public static TaskListFragment newCaldavListFragment( - CaldavFilter filter, CaldavCalendar calendar) { - CaldavListFragment fragment = new CaldavListFragment(); - fragment.filter = filter; - fragment.calendar = calendar; - return fragment; - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - if (savedInstanceState != null) { - this.calendar = savedInstanceState.getParcelable(EXTRA_CALDAV_CALENDAR); - } - } - - @Override - protected void inflateMenu(Toolbar toolbar) { - super.inflateMenu(toolbar); - toolbar.inflateMenu(R.menu.menu_caldav_list_fragment); - } - - @Override - public boolean onMenuItemClick(MenuItem item) { - switch (item.getItemId()) { - case R.id.menu_caldav_list_fragment: - Intent intent = new Intent(getActivity(), CaldavCalendarSettingsActivity.class); - intent.putExtra(EXTRA_CALDAV_CALENDAR, calendar); - startActivityForResult(intent, REQUEST_ACCOUNT_SETTINGS); - return true; - default: - return super.onMenuItemClick(item); - } - } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - if (requestCode == REQUEST_ACCOUNT_SETTINGS) { - if (resultCode == RESULT_OK) { - MainActivity activity = (MainActivity) getActivity(); - String action = data.getAction(); - if (CaldavCalendarSettingsActivity.ACTION_DELETED.equals(action)) { - activity.onFilterItemClicked(null); - } else if (CaldavCalendarSettingsActivity.ACTION_RELOAD.equals(action)) { - activity - .getIntent() - .putExtra( - MainActivity.OPEN_FILTER, - (Filter) data.getParcelableExtra(MainActivity.OPEN_FILTER)); - activity.recreate(); - } - } - } else { - super.onActivityResult(requestCode, resultCode, data); - } - } - - @Override - public void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putParcelable(EXTRA_CALDAV_CALENDAR, calendar); - } - - @Override - protected boolean hasDraggableOption() { - return false; - } - - @Override - public void inject(FragmentComponent component) { - component.inject(this); - } -} diff --git a/app/src/main/java/org/tasks/injection/FragmentComponent.java b/app/src/main/java/org/tasks/injection/FragmentComponent.java index 0292035de..c13ee11f4 100644 --- a/app/src/main/java/org/tasks/injection/FragmentComponent.java +++ b/app/src/main/java/org/tasks/injection/FragmentComponent.java @@ -3,20 +3,14 @@ package org.tasks.injection; import com.todoroo.astrid.activity.TaskEditFragment; import com.todoroo.astrid.activity.TaskListFragment; import com.todoroo.astrid.files.FilesControlSet; -import com.todoroo.astrid.gtasks.GtasksSubtaskListFragment; import com.todoroo.astrid.repeats.RepeatControlSet; -import com.todoroo.astrid.subtasks.SubtasksListFragment; -import com.todoroo.astrid.subtasks.SubtasksTagListFragment; import com.todoroo.astrid.tags.TagsControlSet; import com.todoroo.astrid.timers.TimerControlSet; import com.todoroo.astrid.ui.EditTitleControlSet; import com.todoroo.astrid.ui.HideUntilControlSet; import com.todoroo.astrid.ui.ReminderControlSet; import dagger.Subcomponent; -import org.tasks.caldav.CaldavListFragment; import org.tasks.fragments.CommentBarFragment; -import org.tasks.tasklist.GtasksListFragment; -import org.tasks.tasklist.TagListFragment; import org.tasks.ui.CalendarControlSet; import org.tasks.ui.DeadlineControlSet; import org.tasks.ui.DescriptionControlSet; @@ -58,19 +52,7 @@ public interface FragmentComponent { void inject(TaskListFragment taskListFragment); - void inject(TagListFragment tagListFragment); - - void inject(GtasksSubtaskListFragment gtasksSubtaskListFragment); - - void inject(SubtasksListFragment subtasksListFragment); - - void inject(SubtasksTagListFragment subtasksTagListFragment); - void inject(RemoteListFragment remoteListFragment); - void inject(GtasksListFragment gtasksListFragment); - - void inject(CaldavListFragment caldavListFragment); - void inject(LocationControlSet locationControlSet); } diff --git a/app/src/main/java/org/tasks/tasklist/GtasksListFragment.java b/app/src/main/java/org/tasks/tasklist/GtasksListFragment.java deleted file mode 100644 index bada84f5d..000000000 --- a/app/src/main/java/org/tasks/tasklist/GtasksListFragment.java +++ /dev/null @@ -1,99 +0,0 @@ -package org.tasks.tasklist; - -import static android.app.Activity.RESULT_OK; - -import android.content.Intent; -import android.os.Bundle; -import android.view.MenuItem; -import androidx.appcompat.widget.Toolbar; -import com.todoroo.astrid.activity.MainActivity; -import com.todoroo.astrid.activity.TaskListFragment; -import com.todoroo.astrid.api.Filter; -import com.todoroo.astrid.api.GtasksFilter; -import com.todoroo.astrid.gtasks.sync.GtasksSyncService; -import javax.inject.Inject; -import org.tasks.R; -import org.tasks.activities.GoogleTaskListSettingsActivity; -import org.tasks.data.GoogleTaskList; -import org.tasks.injection.FragmentComponent; - -public class GtasksListFragment extends TaskListFragment { - - private static final String EXTRA_STORE_OBJECT = "extra_store_object"; - private static final int REQUEST_LIST_SETTINGS = 10101; - protected GoogleTaskList list; - @Inject GtasksSyncService gtasksSyncService; - - public static TaskListFragment newGtasksListFragment(GtasksFilter filter, GoogleTaskList list) { - GtasksListFragment fragment = new GtasksListFragment(); - fragment.filter = filter; - fragment.list = list; - return fragment; - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - if (savedInstanceState != null) { - list = savedInstanceState.getParcelable(EXTRA_STORE_OBJECT); - } - } - - @Override - protected void inflateMenu(Toolbar toolbar) { - super.inflateMenu(toolbar); - toolbar.inflateMenu(R.menu.menu_gtasks_list_fragment); - } - - @Override - public boolean onMenuItemClick(MenuItem item) { - switch (item.getItemId()) { - case R.id.menu_gtasks_list_settings: - Intent intent = new Intent(getActivity(), GoogleTaskListSettingsActivity.class); - intent.putExtra(GoogleTaskListSettingsActivity.EXTRA_STORE_DATA, list); - startActivityForResult(intent, REQUEST_LIST_SETTINGS); - return true; - default: - return super.onMenuItemClick(item); - } - } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - if (requestCode == REQUEST_LIST_SETTINGS) { - if (resultCode == RESULT_OK) { - MainActivity activity = (MainActivity) getActivity(); - String action = data.getAction(); - if (GoogleTaskListSettingsActivity.ACTION_DELETED.equals(action)) { - activity.onFilterItemClicked(null); - } else if (GoogleTaskListSettingsActivity.ACTION_RELOAD.equals(action)) { - activity - .getIntent() - .putExtra( - MainActivity.OPEN_FILTER, - (Filter) data.getParcelableExtra(MainActivity.OPEN_FILTER)); - activity.recreate(); - } - } - } else { - super.onActivityResult(requestCode, resultCode, data); - } - } - - @Override - public void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putParcelable(EXTRA_STORE_OBJECT, list); - } - - @Override - protected boolean hasDraggableOption() { - return list != null; - } - - @Override - public void inject(FragmentComponent component) { - component.inject(this); - } -} diff --git a/app/src/main/java/org/tasks/tasklist/TagListFragment.java b/app/src/main/java/org/tasks/tasklist/TagListFragment.java deleted file mode 100644 index 7d28c5ad9..000000000 --- a/app/src/main/java/org/tasks/tasklist/TagListFragment.java +++ /dev/null @@ -1,96 +0,0 @@ -package org.tasks.tasklist; - -import android.app.Activity; -import android.content.Intent; -import android.os.Bundle; -import android.view.MenuItem; -import androidx.appcompat.widget.Toolbar; -import com.todoroo.astrid.activity.MainActivity; -import com.todoroo.astrid.activity.TaskListFragment; -import com.todoroo.astrid.api.Filter; -import com.todoroo.astrid.api.TagFilter; -import org.tasks.R; -import org.tasks.activities.TagSettingsActivity; -import org.tasks.data.TagData; -import org.tasks.injection.FragmentComponent; - -public class TagListFragment extends TaskListFragment { - - private static final int REQUEST_EDIT_TAG = 11543; - private static final String EXTRA_TAG_DATA = "extra_tag_data"; - protected TagData tagData; - - public static TaskListFragment newTagViewFragment(TagFilter filter, TagData tagData) { - TagListFragment fragment = new TagListFragment(); - fragment.filter = filter; - fragment.tagData = tagData; - return fragment; - } - - @Override - public void onCreate(Bundle savedInstanceState) { - if (savedInstanceState != null) { - tagData = savedInstanceState.getParcelable(EXTRA_TAG_DATA); - } - - super.onCreate(savedInstanceState); - } - - @Override - protected void inflateMenu(Toolbar toolbar) { - super.inflateMenu(toolbar); - toolbar.inflateMenu(R.menu.menu_tag_view_fragment); - } - - @Override - public boolean onMenuItemClick(MenuItem item) { - switch (item.getItemId()) { - case R.id.menu_tag_settings: - Intent intent = new Intent(getActivity(), TagSettingsActivity.class); - intent.putExtra(TagSettingsActivity.EXTRA_TAG_DATA, tagData); - startActivityForResult(intent, REQUEST_EDIT_TAG); - return true; - default: - return super.onMenuItemClick(item); - } - } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - if (requestCode == REQUEST_EDIT_TAG) { - if (resultCode == Activity.RESULT_OK) { - String action = data.getAction(); - MainActivity activity = (MainActivity) getActivity(); - if (TagSettingsActivity.ACTION_DELETED.equals(action)) { - activity.onFilterItemClicked(null); - } else if (TagSettingsActivity.ACTION_RELOAD.equals(action)) { - activity - .getIntent() - .putExtra( - MainActivity.OPEN_FILTER, - (Filter) data.getParcelableExtra(MainActivity.OPEN_FILTER)); - activity.recreate(); - } - } - } else { - super.onActivityResult(requestCode, resultCode, data); - } - } - - @Override - public void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - - outState.putParcelable(EXTRA_TAG_DATA, tagData); - } - - @Override - protected boolean hasDraggableOption() { - return tagData != null; - } - - @Override - public void inject(FragmentComponent component) { - component.inject(this); - } -} diff --git a/app/src/main/java/org/tasks/ui/TaskListViewModel.java b/app/src/main/java/org/tasks/ui/TaskListViewModel.java index ef91310a5..37f743a0e 100644 --- a/app/src/main/java/org/tasks/ui/TaskListViewModel.java +++ b/app/src/main/java/org/tasks/ui/TaskListViewModel.java @@ -46,6 +46,7 @@ public class TaskListViewModel extends ViewModel { public LiveData> getTasks(@NotNull Filter filter, Property[] properties) { if (tasks == null || !filter.equals(this.filter) + || !filter.getSqlQuery().equals(this.filter.getSqlQuery()) || !Arrays.equals(this.properties, properties)) { this.filter = filter; this.properties = properties;