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); + } + }); + } + }