diff --git a/astrid/AndroidManifest.xml b/astrid/AndroidManifest.xml index af76c67fa..e7e8e8d97 100644 --- a/astrid/AndroidManifest.xml +++ b/astrid/AndroidManifest.xml @@ -60,7 +60,6 @@ @@ -88,7 +87,7 @@ @@ -157,12 +156,6 @@ - - - - - - @@ -170,7 +163,16 @@ + + + + + + + + + diff --git a/astrid/plugin-src/com/todoroo/astrid/core/CustomFilterExposer.java b/astrid/plugin-src/com/todoroo/astrid/core/CustomFilterExposer.java index 5bfa0a987..0fceca416 100644 --- a/astrid/plugin-src/com/todoroo/astrid/core/CustomFilterExposer.java +++ b/astrid/plugin-src/com/todoroo/astrid/core/CustomFilterExposer.java @@ -3,21 +3,27 @@ */ package com.todoroo.astrid.core; +import android.app.Activity; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.content.res.Resources; import android.graphics.drawable.BitmapDrawable; +import android.os.Bundle; import com.timsu.astrid.R; import com.todoroo.andlib.data.TodorooCursor; +import com.todoroo.andlib.service.Autowired; +import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.sql.Order; import com.todoroo.andlib.sql.Query; +import com.todoroo.andlib.utility.DialogUtilities; import com.todoroo.astrid.activity.FilterListActivity; import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.Filter; -import com.todoroo.astrid.api.FilterListHeader; +import com.todoroo.astrid.api.FilterCategory; import com.todoroo.astrid.api.FilterListItem; import com.todoroo.astrid.dao.StoreObjectDao; import com.todoroo.astrid.model.StoreObject; @@ -30,6 +36,9 @@ import com.todoroo.astrid.model.StoreObject; */ public final class CustomFilterExposer extends BroadcastReceiver { + private static final String TOKEN_FILTER_ID = "id"; //$NON-NLS-1$ + private static final String TOKEN_FILTER_NAME = "name"; //$NON-NLS-1$ + @Override public void onReceive(Context context, Intent intent) { Resources r = context.getResources(); @@ -40,16 +49,14 @@ public final class CustomFilterExposer extends BroadcastReceiver { customFilterIntent); customFilter.listingIcon = ((BitmapDrawable)r.getDrawable(R.drawable.gnome_filter)).getBitmap(); - Filter[] customFilters = buildSavedFilters(); + Filter[] savedFilters = buildSavedFilters(context); FilterListItem[] list; - if(customFilters.length == 0) { + if(savedFilters.length == 0) { list = new FilterListItem[1]; } else { - list = new FilterListItem[customFilters.length + 2]; - list[1] = new FilterListHeader(r.getString(R.string.BFE_Saved)); - for(int i = 0; i < customFilters.length; i++) - list[i + 2] = customFilters[i]; + list = new FilterListItem[2]; + list[1] = new FilterCategory(r.getString(R.string.BFE_Saved), savedFilters); } list[0] = customFilter; @@ -60,7 +67,7 @@ public final class CustomFilterExposer extends BroadcastReceiver { context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ); } - private Filter[] buildSavedFilters() { + private Filter[] buildSavedFilters(Context context) { StoreObjectDao dao = PluginServices.getStoreObjectDao(); TodorooCursor cursor = dao.query(Query.select(StoreObject.PROPERTIES).where( StoreObject.TYPE.eq(SavedFilter.TYPE)).orderBy(Order.asc(SavedFilter.NAME))); @@ -72,6 +79,12 @@ public final class CustomFilterExposer extends BroadcastReceiver { cursor.moveToNext(); savedFilter.readFromCursor(cursor); list[i] = SavedFilter.load(savedFilter); + + Intent deleteIntent = new Intent(context, DeleteActivity.class); + deleteIntent.putExtra(TOKEN_FILTER_ID, savedFilter.getId()); + deleteIntent.putExtra(TOKEN_FILTER_NAME, list[i].title); + list[i].contextMenuLabels = new String[] { context.getString(R.string.BFE_Saved_delete) }; + list[i].contextMenuIntents = new Intent[] { deleteIntent }; } return list; @@ -80,4 +93,49 @@ public final class CustomFilterExposer extends BroadcastReceiver { } } + /** + * Simple activity for deleting stuff + * + * @author Tim Su + * + */ + public static class DeleteActivity extends Activity { + + @Autowired + DialogUtilities dialogUtilities; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setTheme(android.R.style.Theme_Dialog); + + final long id = getIntent().getLongExtra(TOKEN_FILTER_ID, -1); + if(id == -1) { + finish(); + return; + } + final String name = getIntent().getStringExtra(TOKEN_FILTER_NAME); + + DependencyInjectionService.getInstance().inject(this); + dialogUtilities.okCancelDialog(this, + getString(R.string.DLG_delete_this_item_question, name), + new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + PluginServices.getStoreObjectDao().delete(id); + setResult(RESULT_OK); + finish(); + } + }, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + setResult(RESULT_CANCELED); + finish(); + } + }); + } + } + } diff --git a/astrid/res/drawable/tango_windows.xml b/astrid/res/drawable/tango_filters.xml similarity index 89% rename from astrid/res/drawable/tango_windows.xml rename to astrid/res/drawable/tango_filters.xml index 633427407..6e27a51c2 100644 --- a/astrid/res/drawable/tango_windows.xml +++ b/astrid/res/drawable/tango_filters.xml @@ -17,10 +17,10 @@ + android:state_focused="false" android:drawable="@drawable/tango_filters_normal" /> + android:drawable="@drawable/tango_filters_pressed" /> + android:state_focused="true" android:drawable="@drawable/tango_filters_pressed" /> diff --git a/astrid/res/drawable/tango_filters_normal.png b/astrid/res/drawable/tango_filters_normal.png new file mode 100644 index 000000000..c359063ce Binary files /dev/null and b/astrid/res/drawable/tango_filters_normal.png differ diff --git a/astrid/res/drawable/tango_filters_pressed.png b/astrid/res/drawable/tango_filters_pressed.png new file mode 100644 index 000000000..ae258e941 Binary files /dev/null and b/astrid/res/drawable/tango_filters_pressed.png differ diff --git a/astrid/res/drawable/tango_windows_normal.png b/astrid/res/drawable/tango_windows_normal.png deleted file mode 100644 index 2caa205bd..000000000 Binary files a/astrid/res/drawable/tango_windows_normal.png and /dev/null differ diff --git a/astrid/res/drawable/tango_windows_pressed.png b/astrid/res/drawable/tango_windows_pressed.png deleted file mode 100644 index 6762378af..000000000 Binary files a/astrid/res/drawable/tango_windows_pressed.png and /dev/null differ diff --git a/astrid/res/layout/task_list_activity.xml b/astrid/res/layout/task_list_activity.xml index 2cb5b6f76..d3f6edc47 100644 --- a/astrid/res/layout/task_list_activity.xml +++ b/astrid/res/layout/task_list_activity.xml @@ -20,9 +20,8 @@ android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="1" - android:src="@drawable/tango_windows" + android:src="@drawable/tango_filters" android:scaleType="center" - android:paddingTop="8dip" android:paddingLeft="5dip" android:paddingRight="5dip"/> @@ -32,8 +31,8 @@ android:layout_height="fill_parent" android:layout_weight="100" android:singleLine="true" - android:paddingTop="6dip" android:paddingRight="50dip" + android:ellipsize="middle" style="@style/TextAppearance.TLA_Header"/> diff --git a/astrid/res/layout/task_list_activity_api3.xml b/astrid/res/layout/task_list_activity_api3.xml index ce3d2afaa..f952be010 100644 --- a/astrid/res/layout/task_list_activity_api3.xml +++ b/astrid/res/layout/task_list_activity_api3.xml @@ -15,12 +15,13 @@ android:orientation="horizontal" android:background="@drawable/edit_header"> - + @@ -28,11 +29,12 @@ diff --git a/astrid/res/values/strings-core.xml b/astrid/res/values/strings-core.xml index 7ac606884..7951b1540 100644 --- a/astrid/res/values/strings-core.xml +++ b/astrid/res/values/strings-core.xml @@ -113,6 +113,9 @@ Delete this task? + + + Delete this item: %s? Done diff --git a/astrid/res/values/strings-filters.xml b/astrid/res/values/strings-filters.xml index 05237a8f8..570aa1d5b 100644 --- a/astrid/res/values/strings-filters.xml +++ b/astrid/res/values/strings-filters.xml @@ -17,6 +17,9 @@ Saved Filters + + + Delete Filter diff --git a/astrid/src/com/todoroo/astrid/activity/FilterListActivity.java b/astrid/src/com/todoroo/astrid/activity/FilterListActivity.java index ef0237be6..70440825d 100644 --- a/astrid/src/com/todoroo/astrid/activity/FilterListActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/FilterListActivity.java @@ -399,4 +399,12 @@ public class FilterListActivity extends ExpandableListActivity { .show(); } + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if(resultCode != RESULT_CANCELED) + adapter.getLists(); + + super.onActivityResult(requestCode, resultCode, data); + } + } diff --git a/astrid/src/com/todoroo/astrid/adapter/FilterAdapter.java b/astrid/src/com/todoroo/astrid/adapter/FilterAdapter.java index f0a81a33f..abe291c6e 100644 --- a/astrid/src/com/todoroo/astrid/adapter/FilterAdapter.java +++ b/astrid/src/com/todoroo/astrid/adapter/FilterAdapter.java @@ -271,7 +271,8 @@ public class FilterAdapter extends BaseExpandableListAdapter { * application registered to listen for this broadcast. Each application * can then add lists to this activity */ - protected void getLists() { + public void getLists() { + clear(); Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_REQUEST_FILTERS); activity.sendOrderedBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ); }