Can now swap custom task list fragments for filters with custom intents

pull/14/head
Sam Bosley 13 years ago
parent 837b491b19
commit 0767328c5c

@ -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());
}

@ -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);

@ -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;

@ -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)

@ -26,12 +26,5 @@
android:layout_height="match_parent"
android:layout_weight="33"
android:id="@+id/tasklist_fragment_container">
<fragment
android:name="com.todoroo.astrid.activity.TaskListActivity"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:tag="tasklist_fragment">
<!-- Preview: layout=@layout/task_list_activity -->
</fragment>
</FrameLayout>
</LinearLayout>

@ -4,10 +4,4 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/tasklist_fragment_container">
<fragment
android:name="com.todoroo.astrid.activity.TaskListActivity"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:tag="tasklist_fragment">
</fragment>
</FrameLayout>

@ -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) {
}

@ -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);
}
/**

@ -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)

Loading…
Cancel
Save