diff --git a/src/amazon/java/org/tasks/ui/GoogleTaskListFragment.java b/src/amazon/java/org/tasks/ui/GoogleTaskListFragment.java new file mode 100644 index 000000000..541d81845 --- /dev/null +++ b/src/amazon/java/org/tasks/ui/GoogleTaskListFragment.java @@ -0,0 +1,45 @@ +package org.tasks.ui; + +import com.todoroo.astrid.data.Task; +import com.todoroo.astrid.gtasks.GtasksList; + +import org.tasks.R; +import org.tasks.injection.FragmentComponent; + +public class GoogleTaskListFragment extends TaskEditControlFragment { + public static final int TAG = R.string.TEA_ctrl_google_task_list; + + @Override + protected int getLayout() { + return 0; + } + + @Override + protected int getIcon() { + return 0; + } + + @Override + public int controlId() { + return 0; + } + + @Override + public void initialize(boolean isNewTask, Task task) { + + } + + @Override + public void apply(Task task) { + + } + + @Override + protected void inject(FragmentComponent component) { + + } + + public void setList(GtasksList list) { + + } +} diff --git a/src/generic/java/org/tasks/ui/GoogleTaskListFragment.java b/src/generic/java/org/tasks/ui/GoogleTaskListFragment.java new file mode 100644 index 000000000..541d81845 --- /dev/null +++ b/src/generic/java/org/tasks/ui/GoogleTaskListFragment.java @@ -0,0 +1,45 @@ +package org.tasks.ui; + +import com.todoroo.astrid.data.Task; +import com.todoroo.astrid.gtasks.GtasksList; + +import org.tasks.R; +import org.tasks.injection.FragmentComponent; + +public class GoogleTaskListFragment extends TaskEditControlFragment { + public static final int TAG = R.string.TEA_ctrl_google_task_list; + + @Override + protected int getLayout() { + return 0; + } + + @Override + protected int getIcon() { + return 0; + } + + @Override + public int controlId() { + return 0; + } + + @Override + public void initialize(boolean isNewTask, Task task) { + + } + + @Override + public void apply(Task task) { + + } + + @Override + protected void inject(FragmentComponent component) { + + } + + public void setList(GtasksList list) { + + } +} diff --git a/src/googleplay/java/com/todoroo/astrid/gtasks/GtasksPreferences.java b/src/googleplay/java/com/todoroo/astrid/gtasks/GtasksPreferences.java index fce71ad2a..64d78cac9 100644 --- a/src/googleplay/java/com/todoroo/astrid/gtasks/GtasksPreferences.java +++ b/src/googleplay/java/com/todoroo/astrid/gtasks/GtasksPreferences.java @@ -18,6 +18,7 @@ import com.todoroo.astrid.gtasks.auth.GtasksLoginActivity; import org.tasks.R; import org.tasks.activities.ClearGtaskDataActivity; import org.tasks.activities.GoogleTaskListSelectionDialog; +import org.tasks.gtasks.GoogleTaskListSelectionHandler; import org.tasks.injection.ActivityComponent; import org.tasks.injection.InjectingPreferenceActivity; import org.tasks.preferences.ActivityPermissionRequestor; @@ -26,7 +27,7 @@ import org.tasks.scheduling.BackgroundScheduler; import javax.inject.Inject; -public class GtasksPreferences extends InjectingPreferenceActivity implements GoogleTaskListSelectionDialog.GoogleTaskListSelectionHandler { +public class GtasksPreferences extends InjectingPreferenceActivity implements GoogleTaskListSelectionHandler { private static final String FRAG_TAG_GOOGLE_TASK_LIST_SELECTION = "frag_tag_google_task_list_selection"; diff --git a/src/googleplay/java/org/tasks/activities/GoogleTaskListSelectionDialog.java b/src/googleplay/java/org/tasks/activities/GoogleTaskListSelectionDialog.java index 4d5c61521..88e956bf2 100644 --- a/src/googleplay/java/org/tasks/activities/GoogleTaskListSelectionDialog.java +++ b/src/googleplay/java/org/tasks/activities/GoogleTaskListSelectionDialog.java @@ -10,6 +10,7 @@ import com.todoroo.astrid.gtasks.GtasksList; import com.todoroo.astrid.gtasks.GtasksListService; import org.tasks.dialogs.DialogBuilder; +import org.tasks.gtasks.GoogleTaskListSelectionHandler; import org.tasks.injection.DialogFragmentComponent; import org.tasks.injection.InjectingDialogFragment; @@ -21,10 +22,6 @@ import static com.google.common.collect.Lists.transform; public class GoogleTaskListSelectionDialog extends InjectingDialogFragment { - public interface GoogleTaskListSelectionHandler { - void selectedList(GtasksList list); - } - @Inject DialogBuilder dialogBuilder; @Inject GtasksListService gtasksListService; diff --git a/src/googleplay/java/org/tasks/ui/GoogleTaskListFragment.java b/src/googleplay/java/org/tasks/ui/GoogleTaskListFragment.java new file mode 100644 index 000000000..4e9b78bbb --- /dev/null +++ b/src/googleplay/java/org/tasks/ui/GoogleTaskListFragment.java @@ -0,0 +1,143 @@ +package org.tasks.ui; + +import android.app.FragmentManager; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.todoroo.astrid.dao.MetadataDao; +import com.todoroo.astrid.data.Metadata; +import com.todoroo.astrid.data.StoreObject; +import com.todoroo.astrid.data.Task; +import com.todoroo.astrid.gtasks.GtasksList; +import com.todoroo.astrid.gtasks.GtasksListService; +import com.todoroo.astrid.gtasks.GtasksMetadata; +import com.todoroo.astrid.gtasks.GtasksMetadataService; +import com.todoroo.astrid.gtasks.GtasksPreferenceService; + +import org.tasks.R; +import org.tasks.activities.GoogleTaskListSelectionDialog; +import org.tasks.injection.FragmentComponent; + +import javax.inject.Inject; + +import butterknife.BindView; +import butterknife.OnClick; + +public class GoogleTaskListFragment extends TaskEditControlFragment { + + private static final String FRAG_TAG_GOOGLE_TASK_LIST_SELECTION = "frag_tag_google_task_list_selection"; + private static final String EXTRA_IS_NEW_TASK = "extra_is_new_task"; + private static final String EXTRA_TASK_ID = "extra_task_id"; + private static final String EXTRA_LIST = "extra_list"; + + public static final int TAG = R.string.TEA_ctrl_google_task_list; + + @BindView(R.id.google_task_list) TextView textView; + + @Inject GtasksPreferenceService gtasksPreferenceService; + @Inject GtasksListService gtasksListService; + @Inject GtasksMetadataService gtasksMetadataService; + @Inject MetadataDao metadataDao; + + private long taskId; + private GtasksList list; + private boolean isNewTask; + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View view = super.onCreateView(inflater, container, savedInstanceState); + if (savedInstanceState != null) { + isNewTask = savedInstanceState.getBoolean(EXTRA_IS_NEW_TASK); + taskId = savedInstanceState.getLong(EXTRA_TASK_ID); + list = new GtasksList((StoreObject) savedInstanceState.getParcelable(EXTRA_LIST)); + } + Metadata metadata = gtasksMetadataService.getTaskMetadata(taskId); + if (metadata != null) { + list = gtasksListService.getList(metadata.getValue(GtasksMetadata.LIST_ID)); + } + if (list == null) { + list = gtasksListService.getList(gtasksPreferenceService.getDefaultList()); + } + + refreshView(); + return view; + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + + outState.putBoolean(EXTRA_IS_NEW_TASK, isNewTask); + outState.putLong(EXTRA_TASK_ID, taskId); + outState.putParcelable(EXTRA_LIST, list.getStoreObject()); + } + + @Override + protected int getLayout() { + return R.layout.control_set_google_task_list; + } + + @Override + protected int getIcon() { + return R.drawable.ic_cloud_queue_24dp; + } + + @Override + public int controlId() { + return TAG; + } + + @OnClick(R.id.google_task_list) + void clickGoogleTaskList(View view) { + if (!isNewTask) { + return; + } + + FragmentManager fragmentManager = getFragmentManager(); + GoogleTaskListSelectionDialog dialog = (GoogleTaskListSelectionDialog) fragmentManager.findFragmentByTag(FRAG_TAG_GOOGLE_TASK_LIST_SELECTION); + if (dialog == null) { + dialog = new GoogleTaskListSelectionDialog(); + dialog.show(fragmentManager, FRAG_TAG_GOOGLE_TASK_LIST_SELECTION); + } + } + + @Override + public void initialize(boolean isNewTask, Task task) { + this.isNewTask = isNewTask; + taskId = task.getId(); + } + + @Override + public void apply(Task task) { + if (!isNewTask) { + return; + } + Metadata taskMetadata = gtasksMetadataService.getTaskMetadata(task.getId()); + if (taskMetadata == null) { + taskMetadata = GtasksMetadata.createEmptyMetadataWithoutList(task.getId()); + } + taskMetadata.setValue(GtasksMetadata.LIST_ID, list.getRemoteId()); + metadataDao.persist(taskMetadata); + } + + @Override + protected void inject(FragmentComponent component) { + component.inject(this); + } + + public void setList(GtasksList list) { + this.list = list; + refreshView(); + } + + private void refreshView() { + if (list != null) { + textView.setText(list.getName()); + } + } +} diff --git a/src/main/java/com/todoroo/astrid/activity/BeastModePreferences.java b/src/main/java/com/todoroo/astrid/activity/BeastModePreferences.java index e32af03da..b30fc02ae 100644 --- a/src/main/java/com/todoroo/astrid/activity/BeastModePreferences.java +++ b/src/main/java/com/todoroo/astrid/activity/BeastModePreferences.java @@ -23,10 +23,10 @@ import android.widget.TextView; import com.commonsware.cwac.tlv.TouchListView; import com.commonsware.cwac.tlv.TouchListView.DropListener; +import com.google.common.base.Strings; import org.tasks.R; import org.tasks.injection.ActivityComponent; -import org.tasks.injection.InjectingAppCompatActivity; import org.tasks.injection.ThemedInjectingAppCompatActivity; import org.tasks.preferences.Preferences; @@ -48,7 +48,7 @@ public class BeastModePreferences extends ThemedInjectingAppCompatActivity { private ArrayList items; - public static final String BEAST_MODE_ORDER_PREF = "beast_mode_order_v2"; //$NON-NLS-1$ + public static final String BEAST_MODE_ORDER_PREF = "beast_mode_order_v3"; //$NON-NLS-1$ public static final String BEAST_MODE_PREF_ITEM_SEPARATOR = ";"; //$NON-NLS-1$ @@ -158,7 +158,7 @@ public class BeastModePreferences extends ThemedInjectingAppCompatActivity { } String oldValue = preferences.getStringValue(BEAST_MODE_ORDER_PREF); String newValue = newSetting.toString(); - if (!oldValue.equals(newValue)) { + if (Strings.isNullOrEmpty(oldValue) || !oldValue.equals(newValue)) { preferences.setString(BEAST_MODE_ORDER_PREF, newSetting.toString()); setResult(RESULT_OK); } diff --git a/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java b/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java index 993467fb4..7c22e99b0 100755 --- a/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java +++ b/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java @@ -26,6 +26,7 @@ import com.todoroo.astrid.dao.UserActivityDao; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.UserActivity; import com.todoroo.astrid.files.FilesControlSet; +import com.todoroo.astrid.gtasks.GtasksList; import com.todoroo.astrid.notes.CommentsController; import com.todoroo.astrid.service.TaskDeleter; import com.todoroo.astrid.service.TaskService; @@ -43,6 +44,7 @@ import org.tasks.injection.FragmentComponent; import org.tasks.injection.InjectingFragment; import org.tasks.notifications.NotificationManager; import org.tasks.preferences.Preferences; +import org.tasks.ui.GoogleTaskListFragment; import org.tasks.ui.MenuColorizer; import org.tasks.ui.TaskEditControlFragment; @@ -232,6 +234,10 @@ public final class TaskEditFragment extends InjectingFragment implements Toolbar return getFragment(EditTitleControlSet.TAG); } + private GoogleTaskListFragment getGoogleTaskListFragment() { + return getFragment(GoogleTaskListFragment.TAG); + } + private FilesControlSet getFilesControlSet() { return getFragment(FilesControlSet.TAG); } @@ -324,6 +330,10 @@ public final class TaskEditFragment extends InjectingFragment implements Toolbar getEditTitleControlSet().repeatChanged(repeat); } + public void onGoogleTaskListChanged(GtasksList list) { + getGoogleTaskListFragment().setList(list); + } + public void addComment(String message, String actionCode, String picture) { UserActivity userActivity = new UserActivity(); userActivity.setMessage(message); diff --git a/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java b/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java index 05fade935..5ddfce33d 100644 --- a/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java +++ b/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java @@ -45,6 +45,7 @@ import org.tasks.R; import org.tasks.dialogs.SortDialog; import org.tasks.fragments.CommentBarFragment; import org.tasks.fragments.TaskEditControlSetFragmentManager; +import org.tasks.gtasks.GoogleTaskListSelectionHandler; import org.tasks.injection.ActivityComponent; import org.tasks.injection.InjectingAppCompatActivity; import org.tasks.intents.TaskIntents; @@ -74,7 +75,8 @@ public class TaskListActivity extends InjectingAppCompatActivity implements RepeatControlSet.RepeatChangedListener, TaskEditFragment.TaskEditFragmentCallbackHandler, CommentBarFragment.CommentBarFragmentCallback, - SortDialog.SortDialogCallback { + SortDialog.SortDialogCallback, + GoogleTaskListSelectionHandler { @Inject Preferences preferences; @Inject StartupService startupService; @@ -489,4 +491,9 @@ public class TaskListActivity extends InjectingAppCompatActivity implements public Filter getCurrentFilter() { return getTaskListFragment().filter; } + + @Override + public void selectedList(GtasksList list) { + getTaskEditFragment().onGoogleTaskListChanged(list); + } } diff --git a/src/main/java/org/tasks/fragments/TaskEditControlSetFragmentManager.java b/src/main/java/org/tasks/fragments/TaskEditControlSetFragmentManager.java index 7c4fbd462..4dd075222 100644 --- a/src/main/java/org/tasks/fragments/TaskEditControlSetFragmentManager.java +++ b/src/main/java/org/tasks/fragments/TaskEditControlSetFragmentManager.java @@ -2,11 +2,11 @@ package org.tasks.fragments; import android.app.Activity; import android.app.FragmentManager; -import android.view.ContextMenu; import com.todoroo.astrid.activity.BeastModePreferences; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.files.FilesControlSet; +import com.todoroo.astrid.gtasks.GtasksPreferenceService; import com.todoroo.astrid.repeats.RepeatControlSet; import com.todoroo.astrid.tags.TagsControlSet; import com.todoroo.astrid.timers.TimerControlSet; @@ -20,6 +20,7 @@ import org.tasks.preferences.Preferences; import org.tasks.ui.CalendarControlSet; import org.tasks.ui.DeadlineControlSet; import org.tasks.ui.DescriptionControlSet; +import org.tasks.ui.GoogleTaskListFragment; import org.tasks.ui.PriorityControlSet; import org.tasks.ui.TaskEditControlFragment; @@ -49,6 +50,7 @@ public class TaskEditControlSetFragmentManager { R.id.row_8, R.id.row_9, R.id.row_10, + R.id.row_11 }; private static final int[] TASK_EDIT_CONTROL_SET_FRAGMENTS = new int[] { @@ -63,7 +65,8 @@ public class TaskEditControlSetFragmentManager { FilesControlSet.TAG, TagsControlSet.TAG, RepeatControlSet.TAG, - CommentBarFragment.TAG + CommentBarFragment.TAG, + GoogleTaskListFragment.TAG }; static { @@ -76,9 +79,11 @@ public class TaskEditControlSetFragmentManager { private final List displayOrder; private final FragmentManager fragmentManager; private int numRows; + private GtasksPreferenceService gtasksPreferenceService; @Inject - public TaskEditControlSetFragmentManager(Activity activity, Preferences preferences) { + public TaskEditControlSetFragmentManager(Activity activity, Preferences preferences, GtasksPreferenceService gtasksPreferenceService) { + this.gtasksPreferenceService = gtasksPreferenceService; displayOrder = BeastModePreferences.constructOrderedControlList(preferences, activity); displayOrder.add(0, activity.getString(EditTitleControlSet.TAG)); displayOrder.add(1, activity.getString(CommentBarFragment.TAG)); @@ -106,6 +111,9 @@ public class TaskEditControlSetFragmentManager { } TaskEditControlFragment fragment = createFragment(resId); + if (fragment == null) { + continue; + } fragment.initialize(isNewTask, task); taskEditControlFragments.add(fragment); } @@ -157,6 +165,10 @@ public class TaskEditControlSetFragmentManager { return new RepeatControlSet(); case CommentBarFragment.TAG: return new CommentBarFragment(); + case GoogleTaskListFragment.TAG: + return gtasksPreferenceService.isLoggedIn() + ? new GoogleTaskListFragment() + : null; default: throw new RuntimeException("Unsupported fragment"); } diff --git a/src/main/java/org/tasks/gtasks/GoogleTaskListSelectionHandler.java b/src/main/java/org/tasks/gtasks/GoogleTaskListSelectionHandler.java new file mode 100644 index 000000000..1e26bd2d0 --- /dev/null +++ b/src/main/java/org/tasks/gtasks/GoogleTaskListSelectionHandler.java @@ -0,0 +1,7 @@ +package org.tasks.gtasks; + +import com.todoroo.astrid.gtasks.GtasksList; + +public interface GoogleTaskListSelectionHandler { + void selectedList(GtasksList list); +} diff --git a/src/main/java/org/tasks/injection/FragmentComponent.java b/src/main/java/org/tasks/injection/FragmentComponent.java index 13bb276d9..d0a706626 100644 --- a/src/main/java/org/tasks/injection/FragmentComponent.java +++ b/src/main/java/org/tasks/injection/FragmentComponent.java @@ -18,6 +18,7 @@ import org.tasks.fragments.CommentBarFragment; import org.tasks.ui.CalendarControlSet; import org.tasks.ui.DeadlineControlSet; import org.tasks.ui.DescriptionControlSet; +import org.tasks.ui.GoogleTaskListFragment; import org.tasks.ui.NavigationDrawerFragment; import org.tasks.ui.PriorityControlSet; @@ -66,4 +67,6 @@ public interface FragmentComponent { void inject(SubtasksListFragment subtasksListFragment); void inject(SubtasksTagListFragment subtasksTagListFragment); + + void inject(GoogleTaskListFragment googleTaskListFragment); } diff --git a/src/main/res/layout/control_set_google_task_list.xml b/src/main/res/layout/control_set_google_task_list.xml new file mode 100644 index 000000000..e6c55321e --- /dev/null +++ b/src/main/res/layout/control_set_google_task_list.xml @@ -0,0 +1,29 @@ + + + + + + + + + + diff --git a/src/main/res/values/keys.xml b/src/main/res/values/keys.xml index a34aa8c48..8af5567cf 100644 --- a/src/main/res/values/keys.xml +++ b/src/main/res/values/keys.xml @@ -205,6 +205,7 @@ @string/TEA_control_repeat @string/TEA_control_importance @string/tags + @string/TEA_control_google_task_list @string/TEA_control_reminders @string/TEA_control_files @string/TEA_control_notes @@ -227,6 +228,7 @@ TEA_ctrl_timer_pref TEA_ctrl_comments TEA_ctrl_gcal + TEA_ctrl_gtask sync_gtasks p_rmd_notif_actions_enabled geolocation_radius @@ -244,6 +246,7 @@ @string/TEA_ctrl_repeat_pref @string/TEA_ctrl_importance_pref @string/TEA_ctrl_lists_pref + @string/TEA_ctrl_google_task_list @string/TEA_ctrl_reminders_pref @string/TEA_ctrl_files_pref @string/TEA_ctrl_notes_pref diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 6040a4cd3..c9897b5c7 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -212,6 +212,7 @@ File %1$s contained %2$s.\n\n Description Files + Google Task List Reminders @@ -885,6 +886,7 @@ File %1$s contained %2$s.\n\n Grey Blue Grey Black + Default