From d75649702aa3273a67c18c762d9801fe7ee15074 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Wed, 27 Jun 2012 11:03:39 -0700 Subject: [PATCH] Toggle filter list fragments on phones and tablets without launching new activity. Bugs exist in the action bar display --- .../astrid/people/PeopleViewActivity.java | 2 +- .../tags/reusable/FeaturedListActivity.java | 4 +- .../astrid/activity/TaskListActivity.java | 49 ++++++++++++------- .../todoroo/astrid/ui/MainMenuPopover.java | 13 ++++- 4 files changed, 43 insertions(+), 25 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/people/PeopleViewActivity.java b/astrid/plugin-src/com/todoroo/astrid/people/PeopleViewActivity.java index ed5f7e057..53a4b3ad3 100644 --- a/astrid/plugin-src/com/todoroo/astrid/people/PeopleViewActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/people/PeopleViewActivity.java @@ -57,7 +57,7 @@ public class PeopleViewActivity extends TaskListActivity { return result; } - private static final int[] FORBIDDEN_MENU_ITEMS = { + public static final int[] FORBIDDEN_MENU_ITEMS = { TaskListFragment.MENU_NEW_FILTER_ID, TaskListFragment.MENU_ADDONS_ID, MainMenuPopover.MAIN_MENU_ITEM_FRIENDS 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 2b0708c99..6205c8b0d 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedListActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedListActivity.java @@ -16,11 +16,9 @@ public class FeaturedListActivity extends TaskListActivity { } - private static final int[] FORBIDDEN_MENU_ITEMS = { + public static final int[] FORBIDDEN_MENU_ITEMS = { TaskListFragment.MENU_NEW_FILTER_ID, TaskListFragment.MENU_ADDONS_ID, - TaskListFragment.MENU_SORT_ID, - MainMenuPopover.MAIN_MENU_ITEM_FRIENDS, MainMenuPopover.MAIN_MENU_ITEM_FEATURED_LISTS, }; diff --git a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java index a128a7ffd..817e65489 100644 --- a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java @@ -83,6 +83,7 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener private ImageView mainMenu; private Button commentsButton; private int filterMode; + private int[] forbiddenMenuItems = {}; private TaskListFragmentPager tlfPager; private TaskListFragmentPagerAdapter tlfPagerAdapter; @@ -281,7 +282,7 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener listsNav.setOnClickListener(popupMenuClickListener); createListsPopover(); setupPopoverWithFilterList((FilterListFragment) setupFragment(FilterListFragment.TAG_FILTERLIST_FRAGMENT, 0, - getFilterListClass(), true, false)); + getFilterFragmentClass(filterMode), true, false)); } } @@ -629,7 +630,7 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener @Override public boolean shouldAddMenuItem(int itemId) { - return true; + return AndroidUtilities.indexOf(forbiddenMenuItems, itemId) < 0; } @Override @@ -637,7 +638,7 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener TaskListFragment tlf = getTaskListFragment(); switch (item) { case MainMenuPopover.MAIN_MENU_ITEM_LISTS: - if (fragmentLayout == LAYOUT_SINGLE || filterMode == FILTER_MODE_NORMAL) + if (filterMode == FILTER_MODE_NORMAL) listsNav.performClick(); else setFilterMode(FILTER_MODE_NORMAL); @@ -646,20 +647,10 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener onSearchRequested(); return; case MainMenuPopover.MAIN_MENU_ITEM_FEATURED_LISTS: - if (fragmentLayout != LAYOUT_SINGLE) { - setFilterMode(FILTER_MODE_FEATURED); - } else { - Intent featured = new Intent(this, FeaturedListActivity.class); - startActivity(featured); - } + setFilterMode(FILTER_MODE_FEATURED); return; case MainMenuPopover.MAIN_MENU_ITEM_FRIENDS: - if (fragmentLayout != LAYOUT_SINGLE) { - setFilterMode(FILTER_MODE_PEOPLE); - } else { - Intent peopleIntent = new Intent(this, PeopleViewActivity.class); - startActivity(peopleIntent); - } + setFilterMode(FILTER_MODE_PEOPLE); return; case MainMenuPopover.MAIN_MENU_ITEM_SUGGESTIONS: // Doesn't exist yet @@ -686,14 +677,34 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener private void setFilterMode(int mode) { filterMode = mode; - setupFragment(FilterListFragment.TAG_FILTERLIST_FRAGMENT, R.id.filterlist_fragment_container, - getFilterFragmentClass(mode), false, true); refreshMainMenuForFilterMode(mode); + if (fragmentLayout == LAYOUT_SINGLE) { + createListsPopover(); + setupPopoverWithFilterList((FilterListFragment) setupFragment(FilterListFragment.TAG_FILTERLIST_FRAGMENT, 0, + getFilterFragmentClass(filterMode), true, true)); + listsNav.performClick(); + } else { + setupFragment(FilterListFragment.TAG_FILTERLIST_FRAGMENT, R.id.filterlist_fragment_container, + getFilterFragmentClass(mode), false, true); + } getIntent().putExtra(FILTER_MODE, mode); } - private void refreshMainMenuForFilterMode(int filterMode) { - // TODO: IMPLEMENT ME! + private void refreshMainMenuForFilterMode(int mode) { + switch (mode) { + case FILTER_MODE_PEOPLE: + forbiddenMenuItems = PeopleViewActivity.FORBIDDEN_MENU_ITEMS; + break; + case FILTER_MODE_FEATURED: + forbiddenMenuItems = FeaturedListActivity.FORBIDDEN_MENU_ITEMS; + break; + case FILTER_MODE_NORMAL: + default: + forbiddenMenuItems = new int[0]; + break; + } + + mainMenuPopover.refreshFixedItems(); } public MainMenuPopover getMainMenuPopover() { diff --git a/astrid/src/com/todoroo/astrid/ui/MainMenuPopover.java b/astrid/src/com/todoroo/astrid/ui/MainMenuPopover.java index ffb6cfc06..566619310 100644 --- a/astrid/src/com/todoroo/astrid/ui/MainMenuPopover.java +++ b/astrid/src/com/todoroo/astrid/ui/MainMenuPopover.java @@ -41,6 +41,7 @@ public class MainMenuPopover extends FragmentPopover implements InterceptTouchLi private final LinearLayout bottomFixed; private final int rowLayout; private boolean suppressNextKeyEvent = false; + private final boolean isTablet; public void setMenuListener(MainMenuListener listener) { this.mListener = listener; @@ -71,9 +72,11 @@ public class MainMenuPopover extends FragmentPopover implements InterceptTouchLi topFixed = (LinearLayout) getContentView().findViewById(R.id.topFixedItems); bottomFixed = (LinearLayout) getContentView().findViewById(R.id.bottomFixedItems); + this.isTablet = isTablet; + mListener = listener; - addFixedItems(isTablet); + addFixedItems(); } public boolean didInterceptTouch(KeyEvent event) { @@ -97,7 +100,7 @@ public class MainMenuPopover extends FragmentPopover implements InterceptTouchLi super.setBackgroundDrawable(null); } - private void addFixedItems(boolean isTablet) { + private void addFixedItems() { int themeFlags = isTablet ? ThemeService.FLAG_FORCE_DARK : 0; addMenuItem(R.string.TLA_menu_lists, ThemeService.getDrawable(R.drawable.icn_menu_lists, themeFlags), @@ -120,6 +123,12 @@ public class MainMenuPopover extends FragmentPopover implements InterceptTouchLi MAIN_MENU_ITEM_SETTINGS, null, bottomFixed); // Settings item } + public void refreshFixedItems() { + topFixed.removeAllViews(); + bottomFixed.removeAllViews(); + addFixedItems(); + } + public void setFixedItemVisibility(int index, int visibility, boolean top) { LinearLayout container = top ? topFixed : bottomFixed; if (index < 0 || index >= container.getChildCount())