From 75836832356d62e7e992b730b7507b910cd0bcd8 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Tue, 21 Aug 2012 11:40:20 -0700 Subject: [PATCH 1/7] Polish featured lists dropdown, started introducing hooks for showing/hiding comments in different filter modes --- .../astrid/people/PeopleFilterMode.java | 5 +++++ .../reusable/FeaturedListFilterAdapter.java | 21 +++++++++++++++++++ .../tags/reusable/FeaturedListFilterMode.java | 5 ++++- .../astrid/activity/DefaultFilterMode.java | 5 +++++ .../astrid/activity/FilterModeSpec.java | 1 + .../todoroo/astrid/adapter/FilterAdapter.java | 2 +- 6 files changed, 37 insertions(+), 2 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/people/PeopleFilterMode.java b/astrid/plugin-src/com/todoroo/astrid/people/PeopleFilterMode.java index 8828eacfa..47668e7a4 100644 --- a/astrid/plugin-src/com/todoroo/astrid/people/PeopleFilterMode.java +++ b/astrid/plugin-src/com/todoroo/astrid/people/PeopleFilterMode.java @@ -56,4 +56,9 @@ public class PeopleFilterMode implements FilterModeSpec { TaskListFragment.MENU_ADDONS_ID, MainMenuPopover.MAIN_MENU_ITEM_FRIENDS }; + + @Override + public boolean showComments() { + return true; + } } diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedListFilterAdapter.java b/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedListFilterAdapter.java index 9b45cc937..5cc493388 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedListFilterAdapter.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedListFilterAdapter.java @@ -3,6 +3,8 @@ package com.todoroo.astrid.tags.reusable; import android.app.Activity; import android.content.Intent; import android.content.IntentFilter; +import android.view.View; +import android.view.ViewGroup; import android.widget.ListView; import com.todoroo.astrid.adapter.FilterAdapter; @@ -34,4 +36,23 @@ public class FeaturedListFilterAdapter extends FilterAdapter { public void unregisterRecevier() { activity.unregisterReceiver(filterReceiver); } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + View v = super.getView(position, convertView, parent); + + ViewHolder viewHolder = (ViewHolder) v.getTag(); + viewHolder.size.setVisibility(View.GONE); + viewHolder.name.setSingleLine(false); + viewHolder.name.setLines(2); + viewHolder.name.setMaxLines(2); + + int right = (int) (metrics.density * 10); + int top = (int) (metrics.density * 2); + viewHolder.name.setPadding(0, top, right, 0); + viewHolder.name.setTextSize(14); + viewHolder.name.setLineSpacing(0.0f, 1.2f); + + return v; + } } diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedListFilterMode.java b/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedListFilterMode.java index 17b88d631..bfa5ad148 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedListFilterMode.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedListFilterMode.java @@ -48,6 +48,9 @@ public class FeaturedListFilterMode implements FilterModeSpec { // } - + @Override + public boolean showComments() { + return false; + } } diff --git a/astrid/src/com/todoroo/astrid/activity/DefaultFilterMode.java b/astrid/src/com/todoroo/astrid/activity/DefaultFilterMode.java index 6f01049ec..05d9b3812 100644 --- a/astrid/src/com/todoroo/astrid/activity/DefaultFilterMode.java +++ b/astrid/src/com/todoroo/astrid/activity/DefaultFilterMode.java @@ -39,4 +39,9 @@ public class DefaultFilterMode implements FilterModeSpec { // } + @Override + public boolean showComments() { + return true; + } + } diff --git a/astrid/src/com/todoroo/astrid/activity/FilterModeSpec.java b/astrid/src/com/todoroo/astrid/activity/FilterModeSpec.java index 396c5fd8a..1b90dbd7b 100644 --- a/astrid/src/com/todoroo/astrid/activity/FilterModeSpec.java +++ b/astrid/src/com/todoroo/astrid/activity/FilterModeSpec.java @@ -13,5 +13,6 @@ public interface FilterModeSpec { public Filter getDefaultFilter(Context context); public int getMainMenuIconAttr(); public void onFilterItemClickedCallback(FilterListItem item); + public boolean showComments(); } diff --git a/astrid/src/com/todoroo/astrid/adapter/FilterAdapter.java b/astrid/src/com/todoroo/astrid/adapter/FilterAdapter.java index 8fda3e699..86cff545a 100644 --- a/astrid/src/com/todoroo/astrid/adapter/FilterAdapter.java +++ b/astrid/src/com/todoroo/astrid/adapter/FilterAdapter.java @@ -80,7 +80,7 @@ public class FilterAdapter extends ArrayAdapter { protected ListView listView; /** display metrics for scaling icons */ - private final DisplayMetrics metrics = new DisplayMetrics(); + protected final DisplayMetrics metrics = new DisplayMetrics(); /** receiver for new filters */ protected final FilterReceiver filterReceiver = new FilterReceiver(); From 9fc1efe45aa03a7650bbd9db69a12e0d0e27e8f8 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Tue, 21 Aug 2012 11:46:46 -0700 Subject: [PATCH 2/7] Show/hide comments based on filter mode spec --- .../astrid/activity/TaskListActivity.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java index ea5c8a5cd..21d429041 100644 --- a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java @@ -46,6 +46,7 @@ import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.FilterListItem; import com.todoroo.astrid.core.CustomFilterExposer; +import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.helper.AsyncImageView; import com.todoroo.astrid.people.PeopleFilterMode; @@ -377,6 +378,21 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener return result; } + @Override + public void setupActivityFragment(TagData tagData) { + super.setupActivityFragment(tagData); + + int visibility = (filterModeSpec.showComments() ? View.VISIBLE : View.GONE); + + if (fragmentLayout != LAYOUT_TRIPLE) { + commentsButton.setVisibility(visibility); + } else { + View container = findViewById(R.id.taskedit_fragment_container); + if (container != null) + container.setVisibility(visibility); + } + } + private void setListsDropdownSelected(boolean selected) { int oldTextColor = lists.getTextColors().getDefaultColor(); int textStyle = (selected ? R.style.TextAppearance_ActionBar_ListsHeader_Selected : From 8adb80cee39cde61f1318d21de279fb78d79b6ef Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Tue, 21 Aug 2012 13:21:09 -0700 Subject: [PATCH 3/7] Fixed a bug with saving filterMode between rotations --- .../com/todoroo/astrid/activity/TaskListActivity.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java index 21d429041..b8ab8eb5e 100644 --- a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java @@ -77,6 +77,7 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener public static final String OPEN_TASK = "openTask"; //$NON-NLS-1$ private static final String FILTER_MODE = "filterMode"; //$NON-NLS-1$ + private static final int FILTER_MODE_NORMAL = 0; private static final int FILTER_MODE_PEOPLE = 1; private static final int FILTER_MODE_FEATURED = 2; @@ -261,6 +262,14 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener } } + @Override + protected Bundle configureIntentAndExtrasWithFilter(Intent intent, + Filter filter) { + Bundle extras = super.configureIntentAndExtrasWithFilter(intent, filter); + getIntent().putExtra(FILTER_MODE, filterMode); + return extras; + } + /** * * @param actionBar From 3e192138037eda02c9659856fb4e4e73235b574c Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Tue, 21 Aug 2012 13:41:28 -0700 Subject: [PATCH 4/7] Don't show sync option when task edit is open --- .../com/todoroo/astrid/actfm/TagUpdatesFragment.java | 10 +++++++++- .../com/todoroo/astrid/activity/TaskListFragment.java | 10 +++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TagUpdatesFragment.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TagUpdatesFragment.java index 698507dc6..2d264ab86 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/TagUpdatesFragment.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/TagUpdatesFragment.java @@ -289,7 +289,15 @@ public class TagUpdatesFragment extends ListFragment { return; MenuItem item; - if(actFmPreferenceService.isLoggedIn()) { + boolean showCommentsRefresh = actFmPreferenceService.isLoggedIn(); + if (showCommentsRefresh) { + Activity activity = getActivity(); + if (activity instanceof TaskListActivity) { + TaskListActivity tla = (TaskListActivity) activity; + showCommentsRefresh = tla.getTaskEditFragment() == null; + } + } + if(showCommentsRefresh) { item = menu.add(Menu.NONE, MENU_REFRESH_ID, Menu.NONE, R.string.ENA_refresh_comments); item.setIcon(R.drawable.icn_menu_refresh_dark); diff --git a/astrid/src/com/todoroo/astrid/activity/TaskListFragment.java b/astrid/src/com/todoroo/astrid/activity/TaskListFragment.java index 2beb54c56..cf5d2a15a 100644 --- a/astrid/src/com/todoroo/astrid/activity/TaskListFragment.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskListFragment.java @@ -428,8 +428,11 @@ public class TaskListFragment extends ListFragment implements OnScrollListener, return; boolean isTablet = AstridPreferences.useTabletLayout(activity); - if (activity instanceof TaskListActivity) - ((TaskListActivity) activity).getMainMenuPopover().clear(); + TaskListActivity tla = null; + if (activity instanceof TaskListActivity) { + tla = (TaskListActivity) activity; + tla.getMainMenuPopover().clear(); + } // --- sort if (allowResorting()) { @@ -438,7 +441,8 @@ public class TaskListFragment extends ListFragment implements OnScrollListener, } // --- sync - addSyncRefreshMenuItem(menu, isTablet ? ThemeService.FLAG_INVERT : 0); + if (tla == null || tla.getTaskEditFragment() == null) + addSyncRefreshMenuItem(menu, isTablet ? ThemeService.FLAG_INVERT : 0); // --- new filter addMenuItem(menu, R.string.FLA_new_filter, From 4083d8ea8b40517dc92fe61740c90169da66f3d5 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Tue, 21 Aug 2012 15:22:31 -0700 Subject: [PATCH 5/7] Finished polishing the featured list view --- .../todoroo/astrid/actfm/TagViewFragment.java | 43 ++++-- .../reusable/FeaturedTaskListFragment.java | 145 ++++++++++++------ .../res/drawable-hdpi/ic_menu_list_copy.png | Bin 0 -> 695 bytes .../res/drawable-xhdpi/ic_menu_list_copy.png | Bin 0 -> 901 bytes astrid/res/drawable/ic_menu_list_copy.png | Bin 0 -> 606 bytes .../layout/task_list_body_featured_list.xml | 52 +++---- astrid/res/values/strings-actfm.xml | 2 +- 7 files changed, 144 insertions(+), 98 deletions(-) create mode 100644 astrid/res/drawable-hdpi/ic_menu_list_copy.png create mode 100644 astrid/res/drawable-xhdpi/ic_menu_list_copy.png create mode 100644 astrid/res/drawable/ic_menu_list_copy.png diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewFragment.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewFragment.java index f8d4d6376..7e0212130 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewFragment.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewFragment.java @@ -123,7 +123,8 @@ public class TagViewFragment extends TaskListFragment { ((EditText) getView().findViewById(R.id.quickAddText)).setOnTouchListener(onTouch); View membersEdit = getView().findViewById(R.id.members_edit); - membersEdit.setOnClickListener(settingsListener); + if (membersEdit != null) + membersEdit.setOnClickListener(settingsListener); originalFilter = filter; } @@ -165,8 +166,9 @@ public class TagViewFragment extends TaskListFragment { if (!Preferences.getBoolean(R.string.p_showed_list_settings_help, false)) { Preferences.setBoolean(R.string.p_showed_list_settings_help, true); View tabView = getView().findViewById(R.id.members_edit); - HelpInfoPopover.showPopover(getActivity(), tabView, - R.string.help_popover_list_settings, null); + if (tabView != null) + HelpInfoPopover.showPopover(getActivity(), tabView, + R.string.help_popover_list_settings, null); } } @@ -214,10 +216,10 @@ public class TagViewFragment extends TaskListFragment { } postLoadTagData(); - setUpMembersGallery(); - super.initializeData(); + setUpMembersGallery(); + if (extras.getBoolean(TOKEN_START_ACTIVITY, false)) { extras.remove(TOKEN_START_ACTIVITY); activity.showComments(); @@ -334,12 +336,15 @@ public class TagViewFragment extends TaskListFragment { } catch (JSONException e) { e.printStackTrace(); } - getView().findViewById(R.id.filter_assigned).setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - resetAssignedFilter(); - } - }); + + View filterAssigned = getView().findViewById(R.id.filter_assigned); + if (filterAssigned != null) + filterAssigned.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + resetAssignedFilter(); + } + }); } @SuppressWarnings("nls") @@ -395,11 +400,13 @@ public class TagViewFragment extends TaskListFragment { Criterion assigned = Criterion.and(TaskCriteria.activeAndVisible(), assignedCriterion); filter = TagFilterExposer.filterFromTag(getActivity(), new Tag(tagData), assigned); TextView filterByAssigned = (TextView) getView().findViewById(R.id.filter_assigned); - filterByAssigned.setVisibility(View.VISIBLE); - if (id == Task.USER_ID_UNASSIGNED) - filterByAssigned.setText(getString(R.string.actfm_TVA_filter_by_unassigned)); - else - filterByAssigned.setText(getString(R.string.actfm_TVA_filtered_by_assign, displayName)); + if (filterByAssigned != null) { + filterByAssigned.setVisibility(View.VISIBLE); + if (id == Task.USER_ID_UNASSIGNED) + filterByAssigned.setText(getString(R.string.actfm_TVA_filter_by_unassigned)); + else + filterByAssigned.setText(getString(R.string.actfm_TVA_filtered_by_assign, displayName)); + } setUpTaskList(); } } @@ -416,7 +423,9 @@ public class TagViewFragment extends TaskListFragment { private void resetAssignedFilter() { currentId = Task.USER_ID_IGNORE; filter = originalFilter; - getView().findViewById(R.id.filter_assigned).setVisibility(View.GONE); + View filterAssigned = getView().findViewById(R.id.filter_assigned); + if (filterAssigned != null) + filterAssigned.setVisibility(View.GONE); setUpTaskList(); } 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 58968b738..d7966bfda 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedTaskListFragment.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedTaskListFragment.java @@ -2,8 +2,15 @@ package com.todoroo.astrid.tags.reusable; import android.app.Activity; import android.app.ProgressDialog; +import android.content.Intent; +import android.content.res.Resources; +import android.support.v4.view.Menu; +import android.support.v4.view.MenuItem; +import android.text.TextUtils; +import android.view.ContextMenu; +import android.view.ContextMenu.ContextMenuInfo; +import android.view.MenuInflater; import android.view.View; -import android.view.View.OnClickListener; import android.widget.TextView; import android.widget.Toast; @@ -16,6 +23,7 @@ import com.todoroo.astrid.actfm.TagViewFragment; import com.todoroo.astrid.adapter.TaskAdapter; import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.Task; +import com.todoroo.astrid.helper.AsyncImageView; import com.todoroo.astrid.service.TagDataService; import com.todoroo.astrid.utility.Flags; @@ -23,6 +31,8 @@ public class FeaturedTaskListFragment extends TagViewFragment { @Autowired private TagDataService tagDataService; + private static final int MENU_CLONE_LIST = R.string.actfm_feat_list_clone; + @Override protected TaskAdapter createTaskAdapter(TodorooCursor cursor) { return new ReusableTaskAdapter(this, R.layout.reusable_task_adapter_row, @@ -46,61 +56,104 @@ public class FeaturedTaskListFragment extends TagViewFragment { return R.layout.task_list_body_featured_list; } + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + super.onCreateOptionsMenu(menu, inflater); + + MenuItem item = menu.add(Menu.NONE, MENU_CLONE_LIST, 0, R.string.actfm_feat_list_clone); + item.setIcon(R.drawable.ic_menu_list_copy); + item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); + } + + @Override + public boolean handleOptionsMenuItemSelected(int id, Intent intent) { + if (id == MENU_CLONE_LIST) { + cloneList(); + return true; + } + return super.handleOptionsMenuItemSelected(id, intent); + } + + @Override + public void onCreateContextMenu(ContextMenu menu, View v, + ContextMenuInfo menuInfo) { + // Do nothing + } + @Override protected void setUpMembersGallery() { - // Repurposed this method to set up listener for clone list button - View clone = getView().findViewById(R.id.clone_list); - clone.setOnClickListener(new OnClickListener() { + // Repurposed this method to set up the description view + AsyncImageView imageView = (AsyncImageView) getView().findViewById(R.id.url_image); + String imageUrl = tagData.getValue(TagData.PICTURE); + if (!TextUtils.isEmpty(imageUrl)) { + imageView.setVisibility(View.VISIBLE); + imageView.setDefaultImageResource(R.drawable.default_list_0); + imageView.setUrl(imageUrl); + } else { + imageView.setVisibility(View.GONE); + } + + final String description = tagData.getValue(TagData.TAG_DESCRIPTION); + final Resources r = getActivity().getResources(); + TextView desc = (TextView) getView().findViewById(R.id.feat_list_desc); + desc.setText(description); + desc.setLines(4); + desc.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - // Clone list - if (taskAdapter == null || taskAdapter.getCount() == 0) { - Toast.makeText(getActivity(), R.string.actfm_feat_list_clone_empty, Toast.LENGTH_LONG).show(); - return; - } - final String localName = tagData.getValue(TagData.NAME) + " " + getString(R.string.actfm_feat_list_suffix); //$NON-NLS-1$ - long remoteId = 0; - TodorooCursor existing = tagDataService.query(Query.select(TagData.REMOTE_ID) - .where(TagData.NAME.eqCaseInsensitive(localName))); + DialogUtilities.okDialog(getActivity(), r.getString(R.string.DLG_information_title), + 0, description, null); + } + }); + } + + private void cloneList() { + // Clone list + if (taskAdapter == null || taskAdapter.getCount() == 0) { + Toast.makeText(getActivity(), R.string.actfm_feat_list_clone_empty, Toast.LENGTH_LONG).show(); + return; + } + final String localName = tagData.getValue(TagData.NAME) + " " + getString(R.string.actfm_feat_list_suffix); //$NON-NLS-1$ + long remoteId = 0; + TodorooCursor existing = tagDataService.query(Query.select(TagData.REMOTE_ID) + .where(TagData.NAME.eqCaseInsensitive(localName))); + try { + if (existing.getCount() > 0) { + existing.moveToFirst(); + TagData match = new TagData(existing); + remoteId = match.getValue(TagData.REMOTE_ID); + } + + } finally { + existing.close(); + } + + final ProgressDialog pd = DialogUtilities.progressDialog(getActivity(), getString(R.string.actfm_feat_list_cloning)); + + final long finalRemoteId = remoteId; + new Thread(new Runnable() { + @Override + public void run() { + TodorooCursor tasks = taskService.fetchFiltered(taskAdapter.getQuery(), null, Task.PROPERTIES); try { - if (existing.getCount() > 0) { - existing.moveToFirst(); - TagData match = new TagData(existing); - remoteId = match.getValue(TagData.REMOTE_ID); + Task t = new Task(); + for (tasks.moveToFirst(); !tasks.isAfterLast(); tasks.moveToNext()) { + t.readFromCursor(tasks); + taskService.cloneReusableTask(t, + localName, finalRemoteId); + } + Activity activity = getActivity(); + if (activity != null) { + DialogUtilities.dismissDialog(activity, pd); + DialogUtilities.okDialog(activity, getString(R.string.actfm_feat_list_clone_success), null); } + Flags.set(Flags.REFRESH); } finally { - existing.close(); + tasks.close(); } - - final ProgressDialog pd = DialogUtilities.progressDialog(getActivity(), getString(R.string.actfm_feat_list_cloning)); - - final long finalRemoteId = remoteId; - new Thread(new Runnable() { - @Override - public void run() { - TodorooCursor tasks = taskService.fetchFiltered(taskAdapter.getQuery(), null, Task.PROPERTIES); - try { - Task t = new Task(); - for (tasks.moveToFirst(); !tasks.isAfterLast(); tasks.moveToNext()) { - t.readFromCursor(tasks); - taskService.cloneReusableTask(t, - localName, finalRemoteId); - } - Activity activity = getActivity(); - if (activity != null) { - DialogUtilities.dismissDialog(activity, pd); - DialogUtilities.okDialog(activity, getString(R.string.actfm_feat_list_clone_success), null); - } - - Flags.set(Flags.REFRESH); - } finally { - tasks.close(); - } - } - }).start(); } - }); + }).start(); } @Override diff --git a/astrid/res/drawable-hdpi/ic_menu_list_copy.png b/astrid/res/drawable-hdpi/ic_menu_list_copy.png new file mode 100644 index 0000000000000000000000000000000000000000..9b6faaee4ff61d736943bbdcc655fd761e7fec0d GIT binary patch literal 695 zcmV;o0!aOdP)RGKIq0q!25W1O?k58bqzEYy}lj5?Bavf+%btb{1M#X{n?%B0ex0ch}(h zA2|b;VRoFy*$226K6d8b**pK7bI-XCl}@Kag2c~0>r=@K@IcKXmlx4 zW2wi^%0aiVkzPABhJAGSPgvlMw7{GeuP#0Z^)z;UzV8KS1DjF;r$DQAPZ5<2V3406 z{urG~h1_J2rv&zaW6nu~r1r`N*p4^oxY=JJ)ho>(n4Wb2{ zfjdio)eav{;;z9Jcp2D&4(_@HL!89xH0b`L!)!wxra(f(f)4K51wX(BsM6}U!6z^d znjA!`Y`ge^7q6X``rn`u)LK2^cjfLkNK6YPZ01_U<1?ctyhM6l@}L)MdKM_1=R^et z8B2b1VOY{NF089KZ~nF9Q}HoaY1c7-K$zPzy)VU><&{*Lp;^P=eaRm9Z{v2lI0iGc z|3F(E+TQW(q8nrxH1hSHgg}~_dbK;!@L8*mNDCYW4VtxYnL+RiytVnyKKQ_qdI$#i!zi^JNekS{P=AUD?L!d6 z`J}-tC%l*b!}qbgt*9aH06(MJf|V>b!WJx;CI1?awGfZD@A*DFvMURGD72W3#X|9n dI%s(iU;r8Kr20L7Em;5n002ovPDHLkV1k^9HJAVZ literal 0 HcmV?d00001 diff --git a/astrid/res/drawable-xhdpi/ic_menu_list_copy.png b/astrid/res/drawable-xhdpi/ic_menu_list_copy.png new file mode 100644 index 0000000000000000000000000000000000000000..9b9f0cdd045c38865a4ad41769d3cc5c36371bdc GIT binary patch literal 901 zcmV;01A6?4P)RCwC#Tfd9cKop*YwNUUp@E3xd z{s9VmYb{t>35!=Ks3>-xg4k$dAt=}h3L>JFm5qxh3W|zg@12}tqu}`i;Z{NMXW_Aa zkGwz(o1IB^CNq=Gz{gzJ$!xxv_r7`WWiROUdSaAXC`PP}9N~t_piZYF8!`(tZ4d~8 zKqTC9bGzMMC}W44wstI~K?{{KY1++^@?jk(O6bC>d!^F8o#PE%?p3yRTlZlyZ4>6L zdrnotv%IRAh?{I&UZmz6dLdK^H(m3^qS{f%(lucN;$lkRN+q1fr)X?EzHH*wO}gyB zrS@T$Gaau8n=;+J3+a76oOdC^qF-vmM6Kk*@t3-m7OHMQWmH;q1H4q}VdnBur7_nN zmk56bjsPuSIafoHpzmA{>;@i`ZTbz(^L+tM05=A05U>c`0_K62z%nlb5BSy(bYyND zfo{JF2F6hT7MK9OF=@Xdtyo0hTffk~$MqQcH3NK^#=YY)E$;{?1Zjz{Ly593**X@z zkEQGM&_}{1<8&tpn>7F0q^oY)q00|y!n8xvK4?gQzFHxyLdK8)%~>I=n~Vl)Sml*y zr58}P0O`+hJ#LclD_|$EHj(RY%{j-5RIa=N*acjZSkM_7kI(QQ%nt^P_vGMf6Ld)xddP$U^6=F2Y%n4Vm6` z5!I&RU0Td>c9L~m1ZIGhz;WO}>Xx4(Dhv|FhYea(kEKb)anFH$VnDq)RsXsRoJ){D z%`g`A>5jCh3`Y<41nl)bAI3`4&fSwJ_Z(Y7WeNafo|oD0((RLo-cEGACfr9f zh}c06L*qu#*~yHB@QZMUXizXe#YF!A7sTNAPHqt{kgicjFUt-AHxr6%EsqZB|4gfR b`zOEv_9ikVP#N*600000NkvXXu0mjf??9=O literal 0 HcmV?d00001 diff --git a/astrid/res/drawable/ic_menu_list_copy.png b/astrid/res/drawable/ic_menu_list_copy.png new file mode 100644 index 0000000000000000000000000000000000000000..409377cdf923488903284dec9fee20050518f5f5 GIT binary patch literal 606 zcmV-k0-^nhP)#6+Bqx7?%PK2sqr_sz_pR?}n&!tlGpo6H z>eK8zP4D-8pZ9s6_gPifbtMYZl!z=c;kcbMlgXH0>%lQ-0VN+}t9nn<5}?qHC}KUjn`f{O$lXOuS`^X8i~ok=Ou7LJ$msE>qZh!J0@o_(ZRC3a;3x zJb~>Xdu&W-2vi9{p4UdxHwiEg#u(Zp{jo5$`W`%j9xw@}8E&h+fGJL5jxACyOaV!= zyEM*k4*R%>ke*P)uoZ9t+QA4rmV!)g7I#Uiyu~LHX^F|EasQ3B_3p1qreXV_n`Lvg s>EOWo{tX!W7k?wjTio0FGpm?<|$ku>b%707*qoM6N<$f`2#+#sB~S literal 0 HcmV?d00001 diff --git a/astrid/res/layout/task_list_body_featured_list.xml b/astrid/res/layout/task_list_body_featured_list.xml index 1c3093292..f0ed64af1 100644 --- a/astrid/res/layout/task_list_body_featured_list.xml +++ b/astrid/res/layout/task_list_body_featured_list.xml @@ -6,50 +6,34 @@ android:layout_height="wrap_content" android:layout_weight="100"> - - + android:background="?attr/asMembersHeaderBackground" + android:padding="15dip" + android:gravity="center_vertical"> + + - + android:singleLine="false" + android:lines="4" + android:ellipsize="end"/> + - - - - diff --git a/astrid/res/values/strings-actfm.xml b/astrid/res/values/strings-actfm.xml index 953e27224..5cc1d6f90 100644 --- a/astrid/res/values/strings-actfm.xml +++ b/astrid/res/values/strings-actfm.xml @@ -273,7 +273,7 @@ - Copy this list + Copy list (Copy) From 2834564e0e0845bc249200a4d6ade98f26b5bfbd Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Tue, 21 Aug 2012 17:01:12 -0700 Subject: [PATCH 6/7] Handle last autosync times better, offer astrid.com sync on backups page --- .../astrid/actfm/ActFmLoginActivity.java | 2 +- .../astrid/backup/BackupPreferences.java | 26 +++++++++++++++++++ astrid/res/values/strings-backup.xml | 5 ++++ astrid/res/xml/preferences_backup.xml | 6 +++++ .../astrid/helper/SyncActionHelper.java | 5 ++-- .../todoroo/astrid/service/SyncV2Service.java | 8 +++++- 6 files changed, 48 insertions(+), 4 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmLoginActivity.java b/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmLoginActivity.java index e51fcb1a2..da4618e73 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmLoginActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmLoginActivity.java @@ -524,7 +524,7 @@ public class ActFmLoginActivity extends FragmentActivity implements AuthListener Preferences.setString(ActFmPreferenceService.PREF_PICTURE, result.optString("picture")); - actFmPreferenceService.reloadThisUser(); + ActFmPreferenceService.reloadThisUser(); setResult(RESULT_OK); finish(); diff --git a/astrid/plugin-src/com/todoroo/astrid/backup/BackupPreferences.java b/astrid/plugin-src/com/todoroo/astrid/backup/BackupPreferences.java index 606d18c19..966ada565 100644 --- a/astrid/plugin-src/com/todoroo/astrid/backup/BackupPreferences.java +++ b/astrid/plugin-src/com/todoroo/astrid/backup/BackupPreferences.java @@ -17,10 +17,14 @@ import android.view.View; import android.view.ViewGroup.OnHierarchyChangeListener; import com.timsu.astrid.R; +import com.todoroo.andlib.service.Autowired; +import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DialogUtilities; import com.todoroo.andlib.utility.Preferences; import com.todoroo.andlib.utility.TodorooPreferenceActivity; +import com.todoroo.astrid.actfm.ActFmLoginActivity; +import com.todoroo.astrid.actfm.sync.ActFmPreferenceService; /** * Displays synchronization preferences and an action panel so users can @@ -37,6 +41,9 @@ public class BackupPreferences extends TodorooPreferenceActivity { private int statusColor = Color.BLACK; + @Autowired + private ActFmPreferenceService actFmPreferenceService; + @Override public int getPreferenceResource() { return R.xml.preferences_backup; @@ -45,6 +52,7 @@ public class BackupPreferences extends TodorooPreferenceActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + DependencyInjectionService.getInstance().inject(this); getListView().setOnHierarchyChangeListener(new OnHierarchyChangeListener() { @Override @@ -68,6 +76,14 @@ public class BackupPreferences extends TodorooPreferenceActivity { return false; } }); + + findPreference(getString(R.string.backup_BAc_cloud)).setOnPreferenceClickListener(new OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + initiateCloudBackup(); + return false; + } + }); } @Override @@ -133,4 +149,14 @@ public class BackupPreferences extends TodorooPreferenceActivity { } + private void initiateCloudBackup() { + if (actFmPreferenceService.isLoggedIn()) { + DialogUtilities.okDialog(this, getString(R.string.DLG_information_title), 0, + getString(R.string.backup_BPr_cloud_already_logged_in), null); + } else { + Intent intent = new Intent(this, ActFmLoginActivity.class); + startActivity(intent); + } + } + } diff --git a/astrid/res/values/strings-backup.xml b/astrid/res/values/strings-backup.xml index 3ff0f6bd9..c27f88db5 100644 --- a/astrid/res/values/strings-backup.xml +++ b/astrid/res/values/strings-backup.xml @@ -39,6 +39,8 @@ How do I restore backups? You need to add the Astrid Power Pack to manage and restore your backups. As a favor, Astrid also automatically backs up your tasks, just in case. + + You already have cloud backup on Astrid.com! @@ -53,6 +55,9 @@ Export Tasks + + + Click for free cloud backup on Astrid.com diff --git a/astrid/res/xml/preferences_backup.xml b/astrid/res/xml/preferences_backup.xml index f7ca38bc3..4cd8433c9 100644 --- a/astrid/res/xml/preferences_backup.xml +++ b/astrid/res/xml/preferences_backup.xml @@ -33,5 +33,11 @@ android:title="@string/backup_BAc_label" android:textSize="24sp" android:gravity="center"/> + + \ No newline at end of file diff --git a/astrid/src/com/todoroo/astrid/helper/SyncActionHelper.java b/astrid/src/com/todoroo/astrid/helper/SyncActionHelper.java index 90b16e077..313ebe261 100644 --- a/astrid/src/com/todoroo/astrid/helper/SyncActionHelper.java +++ b/astrid/src/com/todoroo/astrid/helper/SyncActionHelper.java @@ -150,8 +150,9 @@ public class SyncActionHelper { // --- sync logic protected void performSyncServiceV2Sync(boolean manual) { - syncService.synchronizeActiveTasks(manual, syncResultCallback); - Preferences.setLong(PREF_LAST_AUTO_SYNC, DateUtilities.now()); + boolean syncOccurred = syncService.synchronizeActiveTasks(manual, syncResultCallback); + if (syncOccurred) + Preferences.setLong(PREF_LAST_AUTO_SYNC, DateUtilities.now()); } /** diff --git a/astrid/src/com/todoroo/astrid/service/SyncV2Service.java b/astrid/src/com/todoroo/astrid/service/SyncV2Service.java index 064ed956c..ba137ed48 100644 --- a/astrid/src/com/todoroo/astrid/service/SyncV2Service.java +++ b/astrid/src/com/todoroo/astrid/service/SyncV2Service.java @@ -59,10 +59,14 @@ public class SyncV2Service { * * @param manual if manual sync * @param callback result callback + * @return true if any servide was logged in and initiated a sync */ - public void synchronizeActiveTasks(final boolean manual, final SyncResultCallback callback) { + public boolean synchronizeActiveTasks(final boolean manual, final SyncResultCallback callback) { final List active = activeProviders(); + if (active.size() == 0) + return false; + if (active.size() > 1) { SyncResultCallback newCallback = new SyncResultCallback() { private int next = 1; @@ -94,6 +98,8 @@ public class SyncV2Service { } else if (active.size() == 1) { active.get(0).synchronizeActiveTasks(manual, callback); } + + return true; } /** From 3baf494445abb566ba208630a8a77d1cac3b643a Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Tue, 21 Aug 2012 17:58:48 -0700 Subject: [PATCH 7/7] Switch to local list after cloning featured list, fixed bug with managing list fragment --- .../astrid/people/PeopleFilterMode.java | 2 +- .../reusable/FeaturedTaskListFragment.java | 24 +++++++++++++++++-- .../astrid/activity/AstridActivity.java | 6 ++++- .../astrid/activity/TaskListActivity.java | 10 ++++---- 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/people/PeopleFilterMode.java b/astrid/plugin-src/com/todoroo/astrid/people/PeopleFilterMode.java index 47668e7a4..5adb54cd1 100644 --- a/astrid/plugin-src/com/todoroo/astrid/people/PeopleFilterMode.java +++ b/astrid/plugin-src/com/todoroo/astrid/people/PeopleFilterMode.java @@ -59,6 +59,6 @@ public class PeopleFilterMode implements FilterModeSpec { @Override public boolean showComments() { - return true; + return false; } } 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 d7966bfda..df09acb0f 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedTaskListFragment.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedTaskListFragment.java @@ -20,11 +20,16 @@ import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.utility.DialogUtilities; import com.todoroo.astrid.actfm.TagViewFragment; +import com.todoroo.astrid.activity.TaskListActivity; import com.todoroo.astrid.adapter.TaskAdapter; +import com.todoroo.astrid.api.Filter; +import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.helper.AsyncImageView; import com.todoroo.astrid.service.TagDataService; +import com.todoroo.astrid.tags.TagFilterExposer; +import com.todoroo.astrid.tags.TagService.Tag; import com.todoroo.astrid.utility.Flags; public class FeaturedTaskListFragment extends TagViewFragment { @@ -134,7 +139,7 @@ public class FeaturedTaskListFragment extends TagViewFragment { new Thread(new Runnable() { @Override public void run() { - TodorooCursor tasks = taskService.fetchFiltered(taskAdapter.getQuery(), null, Task.PROPERTIES); + final TodorooCursor tasks = taskService.fetchFiltered(taskAdapter.getQuery(), null, Task.PROPERTIES); try { Task t = new Task(); for (tasks.moveToFirst(); !tasks.isAfterLast(); tasks.moveToNext()) { @@ -142,13 +147,28 @@ public class FeaturedTaskListFragment extends TagViewFragment { taskService.cloneReusableTask(t, localName, finalRemoteId); } - Activity activity = getActivity(); + final Activity activity = getActivity(); if (activity != null) { DialogUtilities.dismissDialog(activity, pd); DialogUtilities.okDialog(activity, getString(R.string.actfm_feat_list_clone_success), null); } Flags.set(Flags.REFRESH); + if (activity instanceof TaskListActivity) { + activity.runOnUiThread(new Runnable() { + @Override + public void run() { + TaskListActivity tla = (TaskListActivity) activity; + tla.setFilterMode(TaskListActivity.FILTER_MODE_NORMAL); + + Filter clonedFilter; + Tag tag = new Tag(localName, tasks.getCount(), finalRemoteId); + clonedFilter = TagFilterExposer.filterFromTag(activity, tag, TaskCriteria.activeAndVisible()); + + tla.onFilterItemClicked(clonedFilter); + } + }); + } } finally { tasks.close(); } diff --git a/astrid/src/com/todoroo/astrid/activity/AstridActivity.java b/astrid/src/com/todoroo/astrid/activity/AstridActivity.java index 8d68c20c5..816f1a540 100644 --- a/astrid/src/com/todoroo/astrid/activity/AstridActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/AstridActivity.java @@ -303,6 +303,7 @@ public class AstridActivity extends FragmentActivity final FragmentManager fm = getSupportFragmentManager(); Fragment fragment = fm.findFragmentByTag(tag); if(fragment == null || replace) { + Fragment oldFragment = fragment; try { fragment = cls.newInstance(); } catch (InstantiationException e) { @@ -312,8 +313,11 @@ public class AstridActivity extends FragmentActivity } FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); - if (container == 0) + if (container == 0) { + if (oldFragment != null && replace) + ft.remove(oldFragment); ft.add(fragment, tag); + } else ft.replace(container, fragment, tag); ft.commit(); diff --git a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java index b8ab8eb5e..06b9b3b29 100644 --- a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java @@ -78,9 +78,9 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener private static final String FILTER_MODE = "filterMode"; //$NON-NLS-1$ - private static final int FILTER_MODE_NORMAL = 0; - private static final int FILTER_MODE_PEOPLE = 1; - private static final int FILTER_MODE_FEATURED = 2; + public static final int FILTER_MODE_NORMAL = 0; + public static final int FILTER_MODE_PEOPLE = 1; + public static final int FILTER_MODE_FEATURED = 2; @Autowired private ABTestEventReportingService abTestEventReportingService; @@ -703,9 +703,10 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener tlf.handleOptionsMenuItemSelected(item, customIntent); } - private void setFilterMode(int mode) { + public void setFilterMode(int mode) { filterMode = mode; updateFilterModeSpec(mode); + getIntent().putExtra(FILTER_MODE, mode); refreshMainMenu(); if (fragmentLayout == LAYOUT_SINGLE) { @@ -728,7 +729,6 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener onFilterItemClicked(getDefaultFilter()); if (fragmentLayout == LAYOUT_SINGLE) listsNav.performClick(); - getIntent().putExtra(FILTER_MODE, mode); } public void refreshMainMenu() {