diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewFragment.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewFragment.java index ba8777a23..c50f01d50 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewFragment.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewFragment.java @@ -96,8 +96,6 @@ public class TagViewFragment extends TaskListFragment { private Filter originalFilter; - //private ImageAdapter galleryAdapter; - // --- UI initialization @Override @@ -142,7 +140,7 @@ public class TagViewFragment extends TaskListFragment { */ @Override protected View getListBody(ViewGroup root) { - ViewGroup parent = (ViewGroup) getActivity().getLayoutInflater().inflate(R.layout.task_list_body_tag, root, false); + ViewGroup parent = (ViewGroup) getActivity().getLayoutInflater().inflate(getTaskListBodyLayout(), root, false); taskListView = super.getListBody(parent); parent.addView(taskListView); @@ -150,6 +148,10 @@ public class TagViewFragment extends TaskListFragment { return parent; } + protected int getTaskListBodyLayout() { + return R.layout.task_list_body_tag; + } + private void showListSettingsPopover() { if (!AstridPreferences.canShowPopover()) return; @@ -295,7 +297,7 @@ public class TagViewFragment extends TaskListFragment { Preferences.setLong(LAST_FETCH_KEY + tagData.getId(), DateUtilities.now()); } - private void setUpMembersGallery() { + protected void setUpMembersGallery() { LinearLayout membersView = (LinearLayout)getView().findViewById(R.id.shared_with); membersView.setOnClickListener(settingsListener); try { diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/TagFilterExposer.java b/astrid/plugin-src/com/todoroo/astrid/tags/TagFilterExposer.java index bccc43efb..f3d9d4dd9 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/TagFilterExposer.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/TagFilterExposer.java @@ -63,6 +63,8 @@ public class TagFilterExposer extends BroadcastReceiver implements AstridFilterE @Autowired TagDataService tagDataService; @Autowired GtasksPreferenceService gtasksPreferenceService; + protected boolean addUntaggedFilter = true; + /** Create filter from new tag object */ @SuppressWarnings("nls") public static FilterWithCustomIntent filterFromTag(Context context, Tag tag, Criterion criterion) { @@ -165,7 +167,8 @@ public class TagFilterExposer extends BroadcastReceiver implements AstridFilterE } private FilterCategory filterFromTags(Tag[] tags, int name) { - Filter[] filters = new Filter[tags.length + 1]; + int length = addUntaggedFilter ? tags.length + 1 : tags.length; + Filter[] filters = new Filter[length]; Context context = ContextManager.getContext(); Resources r = context.getResources(); @@ -174,18 +177,22 @@ public class TagFilterExposer extends BroadcastReceiver implements AstridFilterE int themeFlags = isTablet ? ThemeService.FLAG_FORCE_LIGHT : 0; // --- untagged - int untaggedLabel = gtasksPreferenceService.isLoggedIn() ? - R.string.tag_FEx_untagged_w_astrid : R.string.tag_FEx_untagged; - Filter untagged = new Filter(r.getString(untaggedLabel), - r.getString(R.string.tag_FEx_untagged), - TagService.untaggedTemplate(), - null); - untagged.listingIcon = ((BitmapDrawable)r.getDrawable( - ThemeService.getDrawable(R.drawable.gl_lists, themeFlags))).getBitmap(); - filters[0] = untagged; - - for(int i = 0; i < tags.length; i++) - filters[i+1] = constructFilter(context, tags[i]); + if (addUntaggedFilter) { + int untaggedLabel = gtasksPreferenceService.isLoggedIn() ? + R.string.tag_FEx_untagged_w_astrid : R.string.tag_FEx_untagged; + Filter untagged = new Filter(r.getString(untaggedLabel), + r.getString(R.string.tag_FEx_untagged), + TagService.untaggedTemplate(), + null); + untagged.listingIcon = ((BitmapDrawable)r.getDrawable( + ThemeService.getDrawable(R.drawable.gl_lists, themeFlags))).getBitmap(); + filters[0] = untagged; + } + + for(int i = 0; i < tags.length; i++) { + int index = addUntaggedFilter ? i + 1 : i; + filters[index] = constructFilter(context, tags[i]); + } FilterCategory filter = new FilterCategory(context.getString(name), filters); return filter; } diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedListActivity.java b/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedListActivity.java index 8d1c353fd..f8b9dea97 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedListActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedListActivity.java @@ -1,28 +1,39 @@ package com.todoroo.astrid.tags.reusable; import android.content.Intent; -import android.os.Bundle; -import com.timsu.astrid.R; -import com.todoroo.astrid.activity.AstridActivity; +import com.todoroo.andlib.utility.AndroidUtilities; +import com.todoroo.astrid.activity.FilterListFragment; import com.todoroo.astrid.activity.TaskListActivity; import com.todoroo.astrid.activity.TaskListFragment; -import com.todoroo.astrid.api.FilterListItem; +import com.todoroo.astrid.ui.MainMenuPopover; -public class FeaturedListActivity extends AstridActivity { +public class FeaturedListActivity extends TaskListActivity { @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.featured_list_activity); + protected Class getFilterListClass() { + return FeaturedListFragment.class; } + + private static final int[] FORBIDDEN_MENU_ITEMS = { + TaskListFragment.MENU_NEW_FILTER_ID, + TaskListFragment.MENU_ADDONS_ID, + MainMenuPopover.MAIN_MENU_ITEM_FRIENDS + }; + @Override - public boolean onFilterItemClicked(FilterListItem item) { - Intent taskList = new Intent(this, TaskListActivity.class); - taskList.putExtra(TaskListFragment.TOKEN_FILTER, item); - startActivity(taskList); - return true; + public boolean shouldAddMenuItem(int itemId) { + return AndroidUtilities.indexOf(FORBIDDEN_MENU_ITEMS, itemId) < 0; } + @Override + public void mainMenuItemSelected(int item, Intent customIntent) { + if (item == MainMenuPopover.MAIN_MENU_ITEM_LISTS) { + finish(); + return; + } + + super.mainMenuItemSelected(item, customIntent); + } } diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedListFilterExposer.java b/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedListFilterExposer.java index f6b171c5a..56b78992d 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedListFilterExposer.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedListFilterExposer.java @@ -27,6 +27,7 @@ public class FeaturedListFilterExposer extends TagFilterExposer { @Override public void onReceive(Context context, Intent intent) { + addUntaggedFilter = false; FilterListItem[] listAsArray = prepareFilters(context); Intent broadcastIntent = new Intent(FeaturedListFilterAdapter.BROADCAST_SEND_FEATURED_LISTS); diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedTaskListFragment.java b/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedTaskListFragment.java index de3d09b89..955ec118e 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedTaskListFragment.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedTaskListFragment.java @@ -1,12 +1,15 @@ package com.todoroo.astrid.tags.reusable; +import android.view.View; +import android.view.View.OnClickListener; + import com.timsu.astrid.R; import com.todoroo.andlib.data.TodorooCursor; -import com.todoroo.astrid.activity.TaskListFragment; +import com.todoroo.astrid.actfm.TagViewFragment; import com.todoroo.astrid.adapter.TaskAdapter; import com.todoroo.astrid.data.Task; -public class FeaturedTaskListFragment extends TaskListFragment { +public class FeaturedTaskListFragment extends TagViewFragment { @Override protected TaskAdapter createTaskAdapter(TodorooCursor cursor) { @@ -14,4 +17,31 @@ public class FeaturedTaskListFragment extends TaskListFragment { cursor, sqlQueryTemplate, false, null); } + @Override + protected void setupQuickAddBar() { + super.setupQuickAddBar(); + quickAddBar.setVisibility(View.GONE); + } + + @Override + public void onTaskListItemClicked(long taskId) { + // Do nothing + } + + @Override + protected int getTaskListBodyLayout() { + return R.layout.task_list_body_featured_list; + } + + @Override + protected void setUpMembersGallery() { + View clone = getView().findViewById(R.id.clone_list); + clone.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + System.err.println("Cloning list"); + } + }); + } + } diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/reusable/ReusableTaskAdapter.java b/astrid/plugin-src/com/todoroo/astrid/tags/reusable/ReusableTaskAdapter.java index c9fd5bf83..a314e3e6a 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/reusable/ReusableTaskAdapter.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/reusable/ReusableTaskAdapter.java @@ -2,10 +2,20 @@ package com.todoroo.astrid.tags.reusable; import java.util.concurrent.atomic.AtomicReference; +import android.content.Context; import android.database.Cursor; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; +import com.timsu.astrid.R; +import com.todoroo.andlib.data.TodorooCursor; +import com.todoroo.andlib.utility.Preferences; import com.todoroo.astrid.activity.TaskListFragment; import com.todoroo.astrid.adapter.TaskAdapter; +import com.todoroo.astrid.data.Task; public class ReusableTaskAdapter extends TaskAdapter { @@ -15,4 +25,56 @@ public class ReusableTaskAdapter extends TaskAdapter { super(fragment, resource, c, query, autoRequery, onCompletedTaskListener); } + @Override + public View newView(Context context, Cursor cursor, ViewGroup parent) { + ViewGroup view = (ViewGroup)inflater.inflate(resource, parent, false); + + ReusableTaskViewHolder viewHolder = new ReusableTaskViewHolder(); + viewHolder.task = new Task(); + viewHolder.clone = (ImageView) view.findViewById(R.id.clone_task); + viewHolder.title = (TextView) view.findViewById(R.id.title); + + boolean showFullTaskTitle = Preferences.getBoolean(R.string.p_fullTaskTitle, false); + if (showFullTaskTitle) { + viewHolder.title.setMaxLines(Integer.MAX_VALUE); + } + + view.setTag(viewHolder); + for(int i = 0; i < view.getChildCount(); i++) + view.getChildAt(i).setTag(viewHolder); + + viewHolder.clone.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + // Clone task + System.err.println("Cloning task"); + } + }); + + return view; + } + + @Override + public void bindView(View view, Context context, Cursor c) { + TodorooCursor cursor = (TodorooCursor)c; + ReusableTaskViewHolder viewHolder = (ReusableTaskViewHolder) view.getTag(); + + Task task = viewHolder.task; + task.clear(); + task.readFromCursor(cursor); + + viewHolder.title.setText(task.getValue(Task.TITLE)); + if (Preferences.getBoolean(R.string.p_allowCompressedTaskRows, false)) { + view.setMinimumHeight(0); + } else { + view.setMinimumHeight(minRowHeight); + } + } + + public static class ReusableTaskViewHolder { + public Task task; + public ImageView clone; + public TextView title; + } + } diff --git a/astrid/res/layout/task_list_body_featured_list.xml b/astrid/res/layout/task_list_body_featured_list.xml new file mode 100644 index 000000000..1c3093292 --- /dev/null +++ b/astrid/res/layout/task_list_body_featured_list.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + diff --git a/astrid/res/values/strings-actfm.xml b/astrid/res/values/strings-actfm.xml index 2ace9f4e0..d9dbb2fe1 100644 --- a/astrid/res/values/strings-actfm.xml +++ b/astrid/res/values/strings-actfm.xml @@ -270,6 +270,10 @@ Please log in: + + + Copy this list + Status - Logged in as %s diff --git a/astrid/src/com/todoroo/astrid/adapter/TaskAdapter.java b/astrid/src/com/todoroo/astrid/adapter/TaskAdapter.java index 9bbd5f059..a27983c51 100644 --- a/astrid/src/com/todoroo/astrid/adapter/TaskAdapter.java +++ b/astrid/src/com/todoroo/astrid/adapter/TaskAdapter.java @@ -163,8 +163,8 @@ public class TaskAdapter extends CursorAdapter implements Filterable { protected final HashMap completedItems = new HashMap(0); protected OnCompletedTaskListener onCompletedTaskListener = null; public boolean isFling = false; - private final int resource; - private final LayoutInflater inflater; + protected final int resource; + protected final LayoutInflater inflater; private DetailLoaderThread detailLoader; private ActionsLoaderThread actionsLoader; private int fontSize; @@ -174,7 +174,7 @@ public class TaskAdapter extends CursorAdapter implements Filterable { private final AtomicReference query; - private final int minRowHeight; + protected final int minRowHeight; // measure utilities protected final Paint paint; @@ -1008,7 +1008,6 @@ public class TaskAdapter extends CursorAdapter implements Filterable { public void notifyDataSetChanged() { super.notifyDataSetChanged(); fontSize = Preferences.getIntegerFromString(R.string.p_fontSize, 18); - } protected final View.OnClickListener completeBoxListener = new View.OnClickListener() {