diff --git a/astrid/rmilk-src/org/weloveastrid/rmilk/MilkFilterExposer.java b/astrid/rmilk-src/org/weloveastrid/rmilk/MilkFilterExposer.java index 5f50da81a..d13869def 100644 --- a/astrid/rmilk-src/org/weloveastrid/rmilk/MilkFilterExposer.java +++ b/astrid/rmilk-src/org/weloveastrid/rmilk/MilkFilterExposer.java @@ -11,6 +11,7 @@ import android.content.BroadcastReceiver; import android.content.ContentValues; import android.content.Context; import android.content.Intent; +import android.content.res.Resources; import com.timsu.astrid.R; import com.todoroo.andlib.service.Autowired; @@ -20,6 +21,7 @@ import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Join; import com.todoroo.andlib.sql.QueryTemplate; import com.todoroo.astrid.api.AstridApiConstants; +import com.todoroo.astrid.api.AstridFilterExposer; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.FilterCategory; import com.todoroo.astrid.api.FilterListHeader; @@ -36,7 +38,7 @@ import com.todoroo.astrid.data.TaskApiDao.TaskCriteria; * @author Tim Su * */ -public class MilkFilterExposer extends BroadcastReceiver { +public class MilkFilterExposer extends BroadcastReceiver implements AstridFilterExposer { @Autowired private MilkListService milkListService; @@ -66,11 +68,20 @@ public class MilkFilterExposer extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { + Resources r = context.getResources(); ContextManager.setContext(context); + FilterListItem[] list = prepareFilters(r); + Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_FILTERS); + broadcastIntent.putExtra(AstridApiConstants.EXTRAS_ADDON, MilkUtilities.IDENTIFIER); + broadcastIntent.putExtra(AstridApiConstants.EXTRAS_RESPONSE, list); + context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ); + } + + private FilterListItem[] prepareFilters(Resources r) { // if we aren't logged in, don't expose features if(!MilkUtilities.INSTANCE.isLoggedIn()) - return; + return null; DependencyInjectionService.getInstance().inject(this); @@ -78,24 +89,31 @@ public class MilkFilterExposer extends BroadcastReceiver { // If user does not have any tags, don't show this section at all if(lists.length == 0) - return; + return null; Filter[] listFilters = new Filter[lists.length]; for(int i = 0; i < lists.length; i++) - listFilters[i] = filterFromList(context, lists[i]); + listFilters[i] = filterFromList(ContextManager.getContext(), lists[i]); - FilterListHeader rtmHeader = new FilterListHeader(context.getString(R.string.rmilk_FEx_header)); - FilterCategory rtmLists = new FilterCategory(context.getString(R.string.rmilk_FEx_list), + FilterListHeader rtmHeader = new FilterListHeader(ContextManager.getContext().getString(R.string.rmilk_FEx_header)); + FilterCategory rtmLists = new FilterCategory(ContextManager.getContext().getString(R.string.rmilk_FEx_list), listFilters); // transmit filter list FilterListItem[] list = new FilterListItem[2]; list[0] = rtmHeader; list[1] = rtmLists; - Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_FILTERS); - broadcastIntent.putExtra(AstridApiConstants.EXTRAS_ADDON, MilkUtilities.IDENTIFIER); - broadcastIntent.putExtra(AstridApiConstants.EXTRAS_RESPONSE, list); - context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ); + + return list; + } + + @Override + public FilterListItem[] getFilters() { + if (ContextManager.getContext() == null || ContextManager.getContext().getResources() == null) + return null; + + Resources r = ContextManager.getContext().getResources(); + return prepareFilters(r); } } diff --git a/astrid/src/com/todoroo/astrid/activity/AstridWrapperActivity.java b/astrid/src/com/todoroo/astrid/activity/AstridWrapperActivity.java index 4f3b6d5c3..e146428b3 100644 --- a/astrid/src/com/todoroo/astrid/activity/AstridWrapperActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/AstridWrapperActivity.java @@ -37,6 +37,24 @@ public class AstridWrapperActivity extends FragmentActivity */ protected boolean mMultipleFragments = false; + protected FilterListActivity getFilterListFragment() { + FilterListActivity frag = (FilterListActivity) getSupportFragmentManager() + .findFragmentById(R.id.filterlist_fragment); + if (frag == null || !frag.isInLayout()) + return null; + + return frag; + } + + protected TaskListActivity getTaskListFragment() { + TaskListActivity frag = (TaskListActivity) getSupportFragmentManager() + .findFragmentById(R.id.tasklist_fragment); + if (frag == null || !frag.isInLayout()) + return null; + + return frag; + } + /* (non-Javadoc) * @see android.support.v4.app.FragmentActivity#onCreate(android.os.Bundle) */ @@ -45,6 +63,19 @@ public class AstridWrapperActivity extends FragmentActivity super.onCreate(savedInstanceState); } + /* (non-Javadoc) + * @see android.app.Activity#onNewIntent(android.content.Intent) + */ + @Override + protected void onNewIntent(Intent intent) { + super.onNewIntent(intent); + FilterListActivity frag = getFilterListFragment(); + if (frag != null) { + // forwarding for search-requests + frag.onNewIntent(intent); + } + } + /** * Handles items being clicked from the filterlist-fragment. Return true if item is handled. */ diff --git a/astrid/src/com/todoroo/astrid/activity/FilterListWrapperActivity.java b/astrid/src/com/todoroo/astrid/activity/FilterListWrapperActivity.java index 0c494c7d6..d0e7799db 100644 --- a/astrid/src/com/todoroo/astrid/activity/FilterListWrapperActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/FilterListWrapperActivity.java @@ -26,9 +26,8 @@ public class FilterListWrapperActivity extends AstridWrapperActivity { protected void onResume() { super.onResume(); - Fragment frag = (Fragment) getSupportFragmentManager() - .findFragmentById(R.id.tasklist_fragment); - if (frag != null && frag.isInLayout()) { + Fragment frag = getTaskListFragment(); + if (frag != null) { mMultipleFragments = true; } else { mMultipleFragments = false; @@ -37,9 +36,8 @@ public class FilterListWrapperActivity extends AstridWrapperActivity { @Override public void setTitle(CharSequence title) { - Fragment frag = (Fragment) getSupportFragmentManager() - .findFragmentById(R.id.tasklist_fragment); - if (frag != null && frag.isInLayout()) + Fragment frag = getTaskListFragment(); + if (frag != null) ((TextView)frag.getView().findViewById(R.id.listLabel)).setText(title); // update the actionbar-title getSupportActionBar().setTitle(title); diff --git a/astrid/src/com/todoroo/astrid/activity/TaskListWrapperActivity.java b/astrid/src/com/todoroo/astrid/activity/TaskListWrapperActivity.java index 9c31a8b09..2301c8035 100644 --- a/astrid/src/com/todoroo/astrid/activity/TaskListWrapperActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskListWrapperActivity.java @@ -25,9 +25,8 @@ public class TaskListWrapperActivity extends AstridWrapperActivity { protected void onResume() { super.onResume(); - Fragment frag = (Fragment) getSupportFragmentManager() - .findFragmentById(R.id.filterlist_fragment); - if (frag != null && frag.isInLayout()) { + Fragment frag = getFilterListFragment(); + if (frag != null) { mMultipleFragments = true; } else { mMultipleFragments = false; @@ -36,9 +35,8 @@ public class TaskListWrapperActivity extends AstridWrapperActivity { @Override public void setTitle(CharSequence title) { - Fragment frag = (Fragment) getSupportFragmentManager() - .findFragmentById(R.id.tasklist_fragment); - if (frag != null && frag.isInLayout()) + Fragment frag = getTaskListFragment(); + if (frag != null) ((TextView)frag.getView().findViewById(R.id.listLabel)).setText(title); // update the actionbar-title getSupportActionBar().setTitle(title);