From 0767328c5cefa15bf0d06dcd807117dd541cf8c4 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Wed, 11 Jan 2012 14:02:49 -0800 Subject: [PATCH] Can now swap custom task list fragments for filters with custom intents --- .../astrid/api/FilterWithCustomIntent.java | 5 ++- .../todoroo/astrid/actfm/TagViewActivity.java | 4 +- .../astrid/gtasks/GtasksFilterExposer.java | 2 + .../todoroo/astrid/tags/TagFilterExposer.java | 5 ++- .../task_list_wrapper_activity.xml | 7 ---- .../res/layout/task_list_wrapper_activity.xml | 6 --- .../activity/AstridWrapperActivity.java | 40 ++++++++++++++----- .../astrid/activity/TaskListActivity.java | 3 +- .../activity/TaskListWrapperActivity.java | 4 ++ 9 files changed, 45 insertions(+), 31 deletions(-) diff --git a/api/src/com/todoroo/astrid/api/FilterWithCustomIntent.java b/api/src/com/todoroo/astrid/api/FilterWithCustomIntent.java index f5e8f23c4..b8c99ef03 100644 --- a/api/src/com/todoroo/astrid/api/FilterWithCustomIntent.java +++ b/api/src/com/todoroo/astrid/api/FilterWithCustomIntent.java @@ -17,6 +17,7 @@ public class FilterWithCustomIntent extends Filter { * Custom activity name */ public ComponentName customTaskList = null; + public ComponentName customWrapperActivity = null; /** * Bundle with extras set. Can be null @@ -40,7 +41,7 @@ public class FilterWithCustomIntent extends Filter { public Intent getCustomIntent() { Intent intent = new Intent(); intent.putExtra("filter", this); //$NON-NLS-1$ - intent.setComponent(customTaskList); + intent.setComponent(customWrapperActivity); if(customExtras != null) intent.putExtras(customExtras); @@ -68,6 +69,7 @@ public class FilterWithCustomIntent extends Filter { public void writeToParcel(Parcel dest, int flags) { super.writeToParcel(dest, flags); dest.writeParcelable(customTaskList, 0); + dest.writeParcelable(customWrapperActivity, 0); dest.writeParcelable(customExtras, 0); } @@ -75,6 +77,7 @@ public class FilterWithCustomIntent extends Filter { public void readFromParcel(Parcel source) { super.readFromParcel(source); customTaskList = source.readParcelable(ComponentName.class.getClassLoader()); + customWrapperActivity = source.readParcelable(ComponentName.class.getClassLoader()); customExtras = source.readParcelable(Bundle.class.getClassLoader()); } diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewActivity.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewActivity.java index e88420dd5..e89293813 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewActivity.java @@ -95,8 +95,8 @@ public class TagViewActivity extends TaskListActivity { // --- UI initialization @Override - public void onCreate(final Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + public void onActivityCreated(final Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); getListView().setOnKeyListener(null); diff --git a/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksFilterExposer.java b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksFilterExposer.java index c5352bbb6..ca0f9ba1c 100644 --- a/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksFilterExposer.java +++ b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksFilterExposer.java @@ -23,6 +23,7 @@ import com.todoroo.andlib.sql.Join; import com.todoroo.andlib.sql.Order; import com.todoroo.andlib.sql.QueryTemplate; import com.todoroo.astrid.activity.TaskListActivity; +import com.todoroo.astrid.activity.TaskListWrapperActivity; import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.AstridFilterExposer; import com.todoroo.astrid.api.Filter; @@ -71,6 +72,7 @@ public class GtasksFilterExposer extends BroadcastReceiver implements AstridFilt values); filter.listingIcon = ((BitmapDrawable)context.getResources().getDrawable(R.drawable.gtasks_icon)).getBitmap(); filter.customTaskList = new ComponentName(ContextManager.getContext(), GtasksListActivity.class); + filter.customWrapperActivity = new ComponentName(ContextManager.getContext(), TaskListWrapperActivity.class); Bundle extras = new Bundle(); extras.putBoolean(TaskListActivity.TOKEN_OVERRIDE_ANIM, true); filter.customExtras = extras; diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/TagFilterExposer.java b/astrid/plugin-src/com/todoroo/astrid/tags/TagFilterExposer.java index 9e9e4285e..15dca44f1 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/TagFilterExposer.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/TagFilterExposer.java @@ -28,8 +28,8 @@ import com.todoroo.andlib.sql.QueryTemplate; import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DialogUtilities; import com.todoroo.astrid.actfm.TagViewActivity; -import com.todoroo.astrid.actfm.TagViewWrapperActivity; import com.todoroo.astrid.activity.TaskListActivity; +import com.todoroo.astrid.activity.TaskListWrapperActivity; import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.AstridFilterExposer; import com.todoroo.astrid.api.Filter; @@ -85,7 +85,8 @@ public class TagFilterExposer extends BroadcastReceiver implements AstridFilterE newTagIntent(context, RenameTagActivity.class, tag), newTagIntent(context, DeleteTagActivity.class, tag) }; - filter.customTaskList = new ComponentName(ContextManager.getContext(), TagViewWrapperActivity.class); + filter.customTaskList = new ComponentName(ContextManager.getContext(), TagViewActivity.class); + filter.customWrapperActivity = new ComponentName(ContextManager.getContext(), TaskListWrapperActivity.class); if(tag.image != null) filter.imageUrl = tag.image; if(tag.updateText != null) diff --git a/astrid/res/layout-large-land/task_list_wrapper_activity.xml b/astrid/res/layout-large-land/task_list_wrapper_activity.xml index 0c0ec9a08..90929cfa0 100644 --- a/astrid/res/layout-large-land/task_list_wrapper_activity.xml +++ b/astrid/res/layout-large-land/task_list_wrapper_activity.xml @@ -26,12 +26,5 @@ android:layout_height="match_parent" android:layout_weight="33" android:id="@+id/tasklist_fragment_container"> - - - \ No newline at end of file diff --git a/astrid/res/layout/task_list_wrapper_activity.xml b/astrid/res/layout/task_list_wrapper_activity.xml index aa4d013a1..53a9fed76 100644 --- a/astrid/res/layout/task_list_wrapper_activity.xml +++ b/astrid/res/layout/task_list_wrapper_activity.xml @@ -4,10 +4,4 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/tasklist_fragment_container"> - - \ No newline at end of file diff --git a/astrid/src/com/todoroo/astrid/activity/AstridWrapperActivity.java b/astrid/src/com/todoroo/astrid/activity/AstridWrapperActivity.java index 59909e277..ce5aaa474 100644 --- a/astrid/src/com/todoroo/astrid/activity/AstridWrapperActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/AstridWrapperActivity.java @@ -4,6 +4,8 @@ import android.app.PendingIntent.CanceledException; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentTransaction; import com.timsu.astrid.R; import com.todoroo.andlib.utility.AndroidUtilities; @@ -40,8 +42,6 @@ public class AstridWrapperActivity extends FragmentActivity protected FilterListActivity getFilterListFragment() { FilterListActivity frag = (FilterListActivity) getSupportFragmentManager() .findFragmentById(R.id.filterlist_fragment); - if (frag == null || !frag.isInLayout()) - return null; return frag; } @@ -49,8 +49,6 @@ public class AstridWrapperActivity extends FragmentActivity protected TaskListActivity getTaskListFragment() { TaskListActivity frag = (TaskListActivity) getSupportFragmentManager() .findFragmentByTag(TaskListActivity.TAG_TASKLIST_FRAGMENT); - if (frag == null || !frag.isInLayout()) - return null; return frag; } @@ -108,20 +106,19 @@ public class AstridWrapperActivity extends FragmentActivity return false; } else { // If showing both fragments, directly update the tasklist-fragment - TaskListActivity tasklist = (TaskListActivity) getSupportFragmentManager() - .findFragmentByTag(TaskListActivity.TAG_TASKLIST_FRAGMENT); + Intent intent = getIntent(); if(item instanceof Filter) { Filter filter = (Filter)item; if(filter instanceof FilterWithCustomIntent) { - FilterWithCustomIntent customFilter = ((FilterWithCustomIntent)filter); - tasklist.onNewIntent(customFilter.getCustomIntent()); + intent = ((FilterWithCustomIntent)filter).getCustomIntent(); } else { - Intent intent = new Intent(this, TaskListWrapperActivity.class); intent.putExtra(TaskListActivity.TOKEN_FILTER, filter); - - tasklist.onNewIntent(intent); } + + setIntent(intent); + + setupTasklistFragmentWithFilter(filter); // no animation for dualpane-layout AndroidUtilities.callOverridePendingTransition(this, 0, 0); StatisticsService.reportEvent(StatisticsConstants.FILTER_LIST); @@ -137,6 +134,27 @@ public class AstridWrapperActivity extends FragmentActivity } } + protected void setupTasklistFragmentWithFilter(Filter filter) { + Class component = TaskListActivity.class; + if (filter instanceof FilterWithCustomIntent) { + try { + component = Class.forName(((FilterWithCustomIntent) filter).customTaskList.getClassName()); + } catch (Exception e) { + // Invalid + } + } + FragmentManager manager = getSupportFragmentManager(); + FragmentTransaction transaction = manager.beginTransaction(); + + try { + TaskListActivity newFragment = (TaskListActivity) component.newInstance(); + transaction.replace(R.id.tasklist_fragment_container, newFragment, TaskListActivity.TAG_TASKLIST_FRAGMENT); + transaction.commit(); + } catch (Exception e) { + e.printStackTrace(); //Uh ohs + } + } + @Override public void onTaskListItemClicked(int category, int position) { } diff --git a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java index 77cba4a41..81167d733 100644 --- a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java @@ -691,7 +691,6 @@ public class TaskListActivity extends ListFragment implements OnScrollListener, } catch (IllegalArgumentException e) { // might not have fully initialized } - getActivity().getIntent().putExtra(TOKEN_FILTER, filter); // Remember current filter for when activity is restarted (i.e. after orientation change) backgroundTimer.cancel(); } @@ -930,7 +929,7 @@ public class TaskListActivity extends ListFragment implements OnScrollListener, getListView().setOnScrollListener(this); registerForContextMenu(getListView()); - loadTaskListContent(false); + loadTaskListContent(true); } /** diff --git a/astrid/src/com/todoroo/astrid/activity/TaskListWrapperActivity.java b/astrid/src/com/todoroo/astrid/activity/TaskListWrapperActivity.java index f4534c501..0130e54d4 100644 --- a/astrid/src/com/todoroo/astrid/activity/TaskListWrapperActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskListWrapperActivity.java @@ -6,6 +6,7 @@ import android.widget.TextView; import com.timsu.astrid.R; import com.todoroo.andlib.utility.AndroidUtilities; +import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.service.ThemeService; public class TaskListWrapperActivity extends AstridWrapperActivity { @@ -17,6 +18,9 @@ public class TaskListWrapperActivity extends AstridWrapperActivity { ThemeService.applyTheme(this); super.onCreate(savedInstanceState); setContentView(R.layout.task_list_wrapper_activity); + + Filter savedFilter = getIntent().getParcelableExtra(TaskListActivity.TOKEN_FILTER); + setupTasklistFragmentWithFilter(savedFilter); } /* (non-Javadoc)