diff --git a/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksListAdder.java b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksListAdder.java
new file mode 100644
index 000000000..802e49ee2
--- /dev/null
+++ b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksListAdder.java
@@ -0,0 +1,65 @@
+package com.todoroo.astrid.gtasks;
+
+import java.io.IOException;
+
+import android.app.Activity;
+import android.content.DialogInterface;
+import android.text.TextUtils;
+import android.widget.EditText;
+import android.widget.FrameLayout;
+
+import com.timsu.astrid.R;
+import com.todoroo.andlib.service.Autowired;
+import com.todoroo.andlib.service.DependencyInjectionService;
+import com.todoroo.andlib.utility.DialogUtilities;
+import com.todoroo.astrid.api.FilterWithCustomIntent;
+import com.todoroo.astrid.data.StoreObject;
+import com.todoroo.astrid.gtasks.api.GtasksService;
+import com.todoroo.astrid.gtasks.auth.GtasksTokenValidator;
+
+public class GtasksListAdder {
+
+ @Autowired GtasksPreferenceService gtasksPreferenceService;
+ @Autowired GtasksListService gtasksListService;
+
+ public void showNewListDialog(final Activity activity) {
+ DependencyInjectionService.getInstance().inject(this);
+
+ FrameLayout frame = new FrameLayout(activity);
+ final EditText editText = new EditText(activity);
+ frame.addView(editText);
+ frame.setPadding(10, 0, 10, 0);
+
+ DialogUtilities.viewDialog(activity,
+ activity.getString(R.string.gtasks_FEx_create_list_dialog),
+ frame, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ if (gtasksPreferenceService.isLoggedIn() && ! gtasksPreferenceService.isOngoing()) {
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ String token = gtasksPreferenceService.getToken();
+ token = GtasksTokenValidator.validateAuthToken(token);
+ GtasksService service = new GtasksService(token);
+ try {
+ String title = editText.getText().toString();
+ if (TextUtils.isEmpty(title)) //Don't create a list without a title
+ return;
+ StoreObject newList = gtasksListService.addNewList(service.createGtaskList(title));
+ if (newList != null) {
+ FilterWithCustomIntent listFilter = (FilterWithCustomIntent) GtasksFilterExposer.filterFromList(activity, newList);
+ listFilter.start(activity);
+ }
+
+ } catch (IOException e) {
+ DialogUtilities.okDialog(activity, activity.getString(R.string.gtasks_FEx_create_list_error), null);
+ }
+ }
+ }).start();
+ }
+ }
+ }, null);
+ }
+
+}
diff --git a/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksListService.java b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksListService.java
index eece3143a..7b982bc12 100644
--- a/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksListService.java
+++ b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksListService.java
@@ -111,6 +111,30 @@ public class GtasksListService {
clearListCache();
}
+ public StoreObject addNewList(com.google.api.services.tasks.v1.model.TaskList newList) {
+ readLists();
+
+ if (lists != null) {
+ for (StoreObject list : lists) {
+ if (list.getValue(GtasksList.REMOTE_ID).equals(newList.id)) //Sanity check--make sure it's actually a new list
+ return null;
+ }
+ }
+ StoreObject local = new StoreObject();
+
+ local.setValue(StoreObject.TYPE, GtasksList.TYPE);
+ local.setValue(GtasksList.REMOTE_ID, newList.id);
+ local.setValue(GtasksList.NAME, newList.title);
+
+ int order = lists == null ? 0 : lists.length;
+ local.setValue(GtasksList.ORDER, order);
+
+ storeObjectDao.persist(local);
+
+ clearListCache();
+ return local;
+ }
+
private void clearListCache() {
lists = null;
}
diff --git a/astrid/res/values/strings-gtasks.xml b/astrid/res/values/strings-gtasks.xml
index 7c1779527..809d36663 100644
--- a/astrid/res/values/strings-gtasks.xml
+++ b/astrid/res/values/strings-gtasks.xml
@@ -13,6 +13,12 @@
Google Tasks: %s
+
+ New List Name:
+
+
+ Error creating new list
+
Welcome to Google Tasks!
diff --git a/astrid/src/com/todoroo/astrid/adapter/FilterAdapter.java b/astrid/src/com/todoroo/astrid/adapter/FilterAdapter.java
index a615487fc..e497fcd4d 100644
--- a/astrid/src/com/todoroo/astrid/adapter/FilterAdapter.java
+++ b/astrid/src/com/todoroo/astrid/adapter/FilterAdapter.java
@@ -36,6 +36,7 @@ import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterCategory;
import com.todoroo.astrid.api.FilterListHeader;
import com.todoroo.astrid.api.FilterListItem;
+import com.todoroo.astrid.gtasks.GtasksListAdder;
import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.tags.TagsPlugin;
@@ -433,11 +434,12 @@ public class FilterAdapter extends BaseExpandableListAdapter {
viewHolder.selected.setVisibility(View.GONE);
updateForActFm(viewHolder);
+ updateForGtasks(viewHolder);
}
- private void updateForActFm(ViewHolder viewHolder) {
+ private void setupCustomHeader(ViewHolder viewHolder, String forTitle, View.OnClickListener buttonListener) {
if(viewHolder.item instanceof FilterListHeader &&
- viewHolder.item.listingTitle.equals(activity.getString(R.string.tag_FEx_header))) {
+ viewHolder.item.listingTitle.equals(forTitle)) {
Button add = new Button(activity);
add.setText(R.string.tag_FEx_add_new);
add.setBackgroundResource(android.R.drawable.btn_default_small);
@@ -446,13 +448,30 @@ public class FilterAdapter extends BaseExpandableListAdapter {
add.setHeight((int)(35 * metrics.density));
((ViewGroup)viewHolder.view).addView(add);
- add.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- new TagsPlugin().showNewTagDialog(activity);
- }
- });
+ add.setOnClickListener(buttonListener);
}
}
+ private void updateForActFm(ViewHolder viewHolder) {
+ setupCustomHeader(viewHolder,
+ activity.getString(R.string.tag_FEx_header),
+ new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ new TagsPlugin().showNewTagDialog(activity);
+ }
+ });
+ }
+
+ private void updateForGtasks(ViewHolder viewHolder) {
+ setupCustomHeader(viewHolder,
+ activity.getString(R.string.gtasks_FEx_header),
+ new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ new GtasksListAdder().showNewListDialog(activity);
+ }
+ });
+ }
+
}