Add google task list chooser

pull/413/head
Alex Baker 10 years ago
parent dc989f0277
commit f11c01507f

@ -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) {
}
}

@ -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) {
}
}

@ -18,6 +18,7 @@ import com.todoroo.astrid.gtasks.auth.GtasksLoginActivity;
import org.tasks.R; import org.tasks.R;
import org.tasks.activities.ClearGtaskDataActivity; import org.tasks.activities.ClearGtaskDataActivity;
import org.tasks.activities.GoogleTaskListSelectionDialog; import org.tasks.activities.GoogleTaskListSelectionDialog;
import org.tasks.gtasks.GoogleTaskListSelectionHandler;
import org.tasks.injection.ActivityComponent; import org.tasks.injection.ActivityComponent;
import org.tasks.injection.InjectingPreferenceActivity; import org.tasks.injection.InjectingPreferenceActivity;
import org.tasks.preferences.ActivityPermissionRequestor; import org.tasks.preferences.ActivityPermissionRequestor;
@ -26,7 +27,7 @@ import org.tasks.scheduling.BackgroundScheduler;
import javax.inject.Inject; 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"; private static final String FRAG_TAG_GOOGLE_TASK_LIST_SELECTION = "frag_tag_google_task_list_selection";

@ -10,6 +10,7 @@ import com.todoroo.astrid.gtasks.GtasksList;
import com.todoroo.astrid.gtasks.GtasksListService; import com.todoroo.astrid.gtasks.GtasksListService;
import org.tasks.dialogs.DialogBuilder; import org.tasks.dialogs.DialogBuilder;
import org.tasks.gtasks.GoogleTaskListSelectionHandler;
import org.tasks.injection.DialogFragmentComponent; import org.tasks.injection.DialogFragmentComponent;
import org.tasks.injection.InjectingDialogFragment; import org.tasks.injection.InjectingDialogFragment;
@ -21,10 +22,6 @@ import static com.google.common.collect.Lists.transform;
public class GoogleTaskListSelectionDialog extends InjectingDialogFragment { public class GoogleTaskListSelectionDialog extends InjectingDialogFragment {
public interface GoogleTaskListSelectionHandler {
void selectedList(GtasksList list);
}
@Inject DialogBuilder dialogBuilder; @Inject DialogBuilder dialogBuilder;
@Inject GtasksListService gtasksListService; @Inject GtasksListService gtasksListService;

@ -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());
}
}
}

@ -23,10 +23,10 @@ import android.widget.TextView;
import com.commonsware.cwac.tlv.TouchListView; import com.commonsware.cwac.tlv.TouchListView;
import com.commonsware.cwac.tlv.TouchListView.DropListener; import com.commonsware.cwac.tlv.TouchListView.DropListener;
import com.google.common.base.Strings;
import org.tasks.R; import org.tasks.R;
import org.tasks.injection.ActivityComponent; import org.tasks.injection.ActivityComponent;
import org.tasks.injection.InjectingAppCompatActivity;
import org.tasks.injection.ThemedInjectingAppCompatActivity; import org.tasks.injection.ThemedInjectingAppCompatActivity;
import org.tasks.preferences.Preferences; import org.tasks.preferences.Preferences;
@ -48,7 +48,7 @@ public class BeastModePreferences extends ThemedInjectingAppCompatActivity {
private ArrayList<String> items; private ArrayList<String> 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$ 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 oldValue = preferences.getStringValue(BEAST_MODE_ORDER_PREF);
String newValue = newSetting.toString(); String newValue = newSetting.toString();
if (!oldValue.equals(newValue)) { if (Strings.isNullOrEmpty(oldValue) || !oldValue.equals(newValue)) {
preferences.setString(BEAST_MODE_ORDER_PREF, newSetting.toString()); preferences.setString(BEAST_MODE_ORDER_PREF, newSetting.toString());
setResult(RESULT_OK); setResult(RESULT_OK);
} }

@ -26,6 +26,7 @@ import com.todoroo.astrid.dao.UserActivityDao;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.UserActivity; import com.todoroo.astrid.data.UserActivity;
import com.todoroo.astrid.files.FilesControlSet; import com.todoroo.astrid.files.FilesControlSet;
import com.todoroo.astrid.gtasks.GtasksList;
import com.todoroo.astrid.notes.CommentsController; import com.todoroo.astrid.notes.CommentsController;
import com.todoroo.astrid.service.TaskDeleter; import com.todoroo.astrid.service.TaskDeleter;
import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.service.TaskService;
@ -43,6 +44,7 @@ import org.tasks.injection.FragmentComponent;
import org.tasks.injection.InjectingFragment; import org.tasks.injection.InjectingFragment;
import org.tasks.notifications.NotificationManager; import org.tasks.notifications.NotificationManager;
import org.tasks.preferences.Preferences; import org.tasks.preferences.Preferences;
import org.tasks.ui.GoogleTaskListFragment;
import org.tasks.ui.MenuColorizer; import org.tasks.ui.MenuColorizer;
import org.tasks.ui.TaskEditControlFragment; import org.tasks.ui.TaskEditControlFragment;
@ -232,6 +234,10 @@ public final class TaskEditFragment extends InjectingFragment implements Toolbar
return getFragment(EditTitleControlSet.TAG); return getFragment(EditTitleControlSet.TAG);
} }
private GoogleTaskListFragment getGoogleTaskListFragment() {
return getFragment(GoogleTaskListFragment.TAG);
}
private FilesControlSet getFilesControlSet() { private FilesControlSet getFilesControlSet() {
return getFragment(FilesControlSet.TAG); return getFragment(FilesControlSet.TAG);
} }
@ -324,6 +330,10 @@ public final class TaskEditFragment extends InjectingFragment implements Toolbar
getEditTitleControlSet().repeatChanged(repeat); getEditTitleControlSet().repeatChanged(repeat);
} }
public void onGoogleTaskListChanged(GtasksList list) {
getGoogleTaskListFragment().setList(list);
}
public void addComment(String message, String actionCode, String picture) { public void addComment(String message, String actionCode, String picture) {
UserActivity userActivity = new UserActivity(); UserActivity userActivity = new UserActivity();
userActivity.setMessage(message); userActivity.setMessage(message);

@ -45,6 +45,7 @@ import org.tasks.R;
import org.tasks.dialogs.SortDialog; import org.tasks.dialogs.SortDialog;
import org.tasks.fragments.CommentBarFragment; import org.tasks.fragments.CommentBarFragment;
import org.tasks.fragments.TaskEditControlSetFragmentManager; import org.tasks.fragments.TaskEditControlSetFragmentManager;
import org.tasks.gtasks.GoogleTaskListSelectionHandler;
import org.tasks.injection.ActivityComponent; import org.tasks.injection.ActivityComponent;
import org.tasks.injection.InjectingAppCompatActivity; import org.tasks.injection.InjectingAppCompatActivity;
import org.tasks.intents.TaskIntents; import org.tasks.intents.TaskIntents;
@ -74,7 +75,8 @@ public class TaskListActivity extends InjectingAppCompatActivity implements
RepeatControlSet.RepeatChangedListener, RepeatControlSet.RepeatChangedListener,
TaskEditFragment.TaskEditFragmentCallbackHandler, TaskEditFragment.TaskEditFragmentCallbackHandler,
CommentBarFragment.CommentBarFragmentCallback, CommentBarFragment.CommentBarFragmentCallback,
SortDialog.SortDialogCallback { SortDialog.SortDialogCallback,
GoogleTaskListSelectionHandler {
@Inject Preferences preferences; @Inject Preferences preferences;
@Inject StartupService startupService; @Inject StartupService startupService;
@ -489,4 +491,9 @@ public class TaskListActivity extends InjectingAppCompatActivity implements
public Filter getCurrentFilter() { public Filter getCurrentFilter() {
return getTaskListFragment().filter; return getTaskListFragment().filter;
} }
@Override
public void selectedList(GtasksList list) {
getTaskEditFragment().onGoogleTaskListChanged(list);
}
} }

@ -2,11 +2,11 @@ package org.tasks.fragments;
import android.app.Activity; import android.app.Activity;
import android.app.FragmentManager; import android.app.FragmentManager;
import android.view.ContextMenu;
import com.todoroo.astrid.activity.BeastModePreferences; import com.todoroo.astrid.activity.BeastModePreferences;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.files.FilesControlSet; import com.todoroo.astrid.files.FilesControlSet;
import com.todoroo.astrid.gtasks.GtasksPreferenceService;
import com.todoroo.astrid.repeats.RepeatControlSet; import com.todoroo.astrid.repeats.RepeatControlSet;
import com.todoroo.astrid.tags.TagsControlSet; import com.todoroo.astrid.tags.TagsControlSet;
import com.todoroo.astrid.timers.TimerControlSet; import com.todoroo.astrid.timers.TimerControlSet;
@ -20,6 +20,7 @@ import org.tasks.preferences.Preferences;
import org.tasks.ui.CalendarControlSet; import org.tasks.ui.CalendarControlSet;
import org.tasks.ui.DeadlineControlSet; import org.tasks.ui.DeadlineControlSet;
import org.tasks.ui.DescriptionControlSet; import org.tasks.ui.DescriptionControlSet;
import org.tasks.ui.GoogleTaskListFragment;
import org.tasks.ui.PriorityControlSet; import org.tasks.ui.PriorityControlSet;
import org.tasks.ui.TaskEditControlFragment; import org.tasks.ui.TaskEditControlFragment;
@ -49,6 +50,7 @@ public class TaskEditControlSetFragmentManager {
R.id.row_8, R.id.row_8,
R.id.row_9, R.id.row_9,
R.id.row_10, R.id.row_10,
R.id.row_11
}; };
private static final int[] TASK_EDIT_CONTROL_SET_FRAGMENTS = new int[] { private static final int[] TASK_EDIT_CONTROL_SET_FRAGMENTS = new int[] {
@ -63,7 +65,8 @@ public class TaskEditControlSetFragmentManager {
FilesControlSet.TAG, FilesControlSet.TAG,
TagsControlSet.TAG, TagsControlSet.TAG,
RepeatControlSet.TAG, RepeatControlSet.TAG,
CommentBarFragment.TAG CommentBarFragment.TAG,
GoogleTaskListFragment.TAG
}; };
static { static {
@ -76,9 +79,11 @@ public class TaskEditControlSetFragmentManager {
private final List<String> displayOrder; private final List<String> displayOrder;
private final FragmentManager fragmentManager; private final FragmentManager fragmentManager;
private int numRows; private int numRows;
private GtasksPreferenceService gtasksPreferenceService;
@Inject @Inject
public TaskEditControlSetFragmentManager(Activity activity, Preferences preferences) { public TaskEditControlSetFragmentManager(Activity activity, Preferences preferences, GtasksPreferenceService gtasksPreferenceService) {
this.gtasksPreferenceService = gtasksPreferenceService;
displayOrder = BeastModePreferences.constructOrderedControlList(preferences, activity); displayOrder = BeastModePreferences.constructOrderedControlList(preferences, activity);
displayOrder.add(0, activity.getString(EditTitleControlSet.TAG)); displayOrder.add(0, activity.getString(EditTitleControlSet.TAG));
displayOrder.add(1, activity.getString(CommentBarFragment.TAG)); displayOrder.add(1, activity.getString(CommentBarFragment.TAG));
@ -106,6 +111,9 @@ public class TaskEditControlSetFragmentManager {
} }
TaskEditControlFragment fragment = createFragment(resId); TaskEditControlFragment fragment = createFragment(resId);
if (fragment == null) {
continue;
}
fragment.initialize(isNewTask, task); fragment.initialize(isNewTask, task);
taskEditControlFragments.add(fragment); taskEditControlFragments.add(fragment);
} }
@ -157,6 +165,10 @@ public class TaskEditControlSetFragmentManager {
return new RepeatControlSet(); return new RepeatControlSet();
case CommentBarFragment.TAG: case CommentBarFragment.TAG:
return new CommentBarFragment(); return new CommentBarFragment();
case GoogleTaskListFragment.TAG:
return gtasksPreferenceService.isLoggedIn()
? new GoogleTaskListFragment()
: null;
default: default:
throw new RuntimeException("Unsupported fragment"); throw new RuntimeException("Unsupported fragment");
} }

@ -0,0 +1,7 @@
package org.tasks.gtasks;
import com.todoroo.astrid.gtasks.GtasksList;
public interface GoogleTaskListSelectionHandler {
void selectedList(GtasksList list);
}

@ -18,6 +18,7 @@ import org.tasks.fragments.CommentBarFragment;
import org.tasks.ui.CalendarControlSet; import org.tasks.ui.CalendarControlSet;
import org.tasks.ui.DeadlineControlSet; import org.tasks.ui.DeadlineControlSet;
import org.tasks.ui.DescriptionControlSet; import org.tasks.ui.DescriptionControlSet;
import org.tasks.ui.GoogleTaskListFragment;
import org.tasks.ui.NavigationDrawerFragment; import org.tasks.ui.NavigationDrawerFragment;
import org.tasks.ui.PriorityControlSet; import org.tasks.ui.PriorityControlSet;
@ -66,4 +67,6 @@ public interface FragmentComponent {
void inject(SubtasksListFragment subtasksListFragment); void inject(SubtasksListFragment subtasksListFragment);
void inject(SubtasksTagListFragment subtasksTagListFragment); void inject(SubtasksTagListFragment subtasksTagListFragment);
void inject(GoogleTaskListFragment googleTaskListFragment);
} }

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?><!--
** Copyright (c) 2012 Todoroo Inc
**
** See the file "LICENSE" for the full license governing this code.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_weight="100">
<TextView
android:id="@+id/google_task_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:text="@string/default_value"
android:gravity="start"
android:textColor="?attr/asTextColor"
android:textSize="@dimen/task_edit_text_size" />
</LinearLayout>
</LinearLayout>

@ -205,6 +205,7 @@
<item>@string/TEA_control_repeat</item> <item>@string/TEA_control_repeat</item>
<item>@string/TEA_control_importance</item> <item>@string/TEA_control_importance</item>
<item>@string/tags</item> <item>@string/tags</item>
<item>@string/TEA_control_google_task_list</item>
<item>@string/TEA_control_reminders</item> <item>@string/TEA_control_reminders</item>
<item>@string/TEA_control_files</item> <item>@string/TEA_control_files</item>
<item>@string/TEA_control_notes</item> <item>@string/TEA_control_notes</item>
@ -227,6 +228,7 @@
<string name="TEA_ctrl_timer_pref">TEA_ctrl_timer_pref</string> <string name="TEA_ctrl_timer_pref">TEA_ctrl_timer_pref</string>
<string name="TEA_ctrl_comments">TEA_ctrl_comments</string> <string name="TEA_ctrl_comments">TEA_ctrl_comments</string>
<string name="TEA_ctrl_gcal">TEA_ctrl_gcal</string> <string name="TEA_ctrl_gcal">TEA_ctrl_gcal</string>
<string name="TEA_ctrl_google_task_list">TEA_ctrl_gtask</string>
<string name="sync_gtasks">sync_gtasks</string> <string name="sync_gtasks">sync_gtasks</string>
<string name="p_rmd_notif_actions_enabled">p_rmd_notif_actions_enabled</string> <string name="p_rmd_notif_actions_enabled">p_rmd_notif_actions_enabled</string>
<string name="p_geofence_radius">geolocation_radius</string> <string name="p_geofence_radius">geolocation_radius</string>
@ -244,6 +246,7 @@
<item>@string/TEA_ctrl_repeat_pref</item> <item>@string/TEA_ctrl_repeat_pref</item>
<item>@string/TEA_ctrl_importance_pref</item> <item>@string/TEA_ctrl_importance_pref</item>
<item>@string/TEA_ctrl_lists_pref</item> <item>@string/TEA_ctrl_lists_pref</item>
<item>@string/TEA_ctrl_google_task_list</item>
<item>@string/TEA_ctrl_reminders_pref</item> <item>@string/TEA_ctrl_reminders_pref</item>
<item>@string/TEA_ctrl_files_pref</item> <item>@string/TEA_ctrl_files_pref</item>
<item>@string/TEA_ctrl_notes_pref</item> <item>@string/TEA_ctrl_notes_pref</item>

@ -212,6 +212,7 @@ File %1$s contained %2$s.\n\n
<string name="TEA_control_notes">Description</string> <string name="TEA_control_notes">Description</string>
<string name="TEA_control_files">Files</string> <string name="TEA_control_files">Files</string>
<string name="TEA_control_google_task_list">Google Task List</string>
<!-- slide 16e / slide 35g--> <!-- slide 16e / slide 35g-->
<string name="TEA_control_reminders">Reminders</string> <string name="TEA_control_reminders">Reminders</string>
@ -885,6 +886,7 @@ File %1$s contained %2$s.\n\n
<string name="theme_grey">Grey</string> <string name="theme_grey">Grey</string>
<string name="theme_blue_grey">Blue Grey</string> <string name="theme_blue_grey">Blue Grey</string>
<string name="theme_black">Black</string> <string name="theme_black">Black</string>
<string name="default_value">Default</string>
<string-array name="sync_SPr_interval_entries"> <string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals --> <!-- sync_SPr_interval_entries: Synchronization Intervals -->

Loading…
Cancel
Save