@ -3,21 +3,27 @@
* /
* /
package com.todoroo.astrid.core ;
package com.todoroo.astrid.core ;
import android.app.Activity ;
import android.app.PendingIntent ;
import android.app.PendingIntent ;
import android.content.BroadcastReceiver ;
import android.content.BroadcastReceiver ;
import android.content.Context ;
import android.content.Context ;
import android.content.DialogInterface ;
import android.content.Intent ;
import android.content.Intent ;
import android.content.res.Resources ;
import android.content.res.Resources ;
import android.graphics.drawable.BitmapDrawable ;
import android.graphics.drawable.BitmapDrawable ;
import android.os.Bundle ;
import com.timsu.astrid.R ;
import com.timsu.astrid.R ;
import com.todoroo.andlib.data.TodorooCursor ;
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.Order ;
import com.todoroo.andlib.sql.Query ;
import com.todoroo.andlib.sql.Query ;
import com.todoroo.andlib.utility.DialogUtilities ;
import com.todoroo.astrid.activity.FilterListActivity ;
import com.todoroo.astrid.activity.FilterListActivity ;
import com.todoroo.astrid.api.AstridApiConstants ;
import com.todoroo.astrid.api.AstridApiConstants ;
import com.todoroo.astrid.api.Filter ;
import com.todoroo.astrid.api.Filter ;
import com.todoroo.astrid.api.Filter ListHeader ;
import com.todoroo.astrid.api.Filter Category ;
import com.todoroo.astrid.api.FilterListItem ;
import com.todoroo.astrid.api.FilterListItem ;
import com.todoroo.astrid.dao.StoreObjectDao ;
import com.todoroo.astrid.dao.StoreObjectDao ;
import com.todoroo.astrid.model.StoreObject ;
import com.todoroo.astrid.model.StoreObject ;
@ -30,6 +36,9 @@ import com.todoroo.astrid.model.StoreObject;
* /
* /
public final class CustomFilterExposer extends BroadcastReceiver {
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
@Override
public void onReceive ( Context context , Intent intent ) {
public void onReceive ( Context context , Intent intent ) {
Resources r = context . getResources ( ) ;
Resources r = context . getResources ( ) ;
@ -40,16 +49,14 @@ public final class CustomFilterExposer extends BroadcastReceiver {
customFilterIntent ) ;
customFilterIntent ) ;
customFilter . listingIcon = ( ( BitmapDrawable ) r . getDrawable ( R . drawable . gnome_filter ) ) . getBitmap ( ) ;
customFilter . listingIcon = ( ( BitmapDrawable ) r . getDrawable ( R . drawable . gnome_filter ) ) . getBitmap ( ) ;
Filter [ ] custom Filters = buildSavedFilters ( ) ;
Filter [ ] saved Filters = buildSavedFilters ( context ) ;
FilterListItem [ ] list ;
FilterListItem [ ] list ;
if ( custom Filters. length = = 0 ) {
if ( saved Filters. length = = 0 ) {
list = new FilterListItem [ 1 ] ;
list = new FilterListItem [ 1 ] ;
} else {
} else {
list = new FilterListItem [ customFilters . length + 2 ] ;
list = new FilterListItem [ 2 ] ;
list [ 1 ] = new FilterListHeader ( r . getString ( R . string . BFE_Saved ) ) ;
list [ 1 ] = new FilterCategory ( r . getString ( R . string . BFE_Saved ) , savedFilters ) ;
for ( int i = 0 ; i < customFilters . length ; i + + )
list [ i + 2 ] = customFilters [ i ] ;
}
}
list [ 0 ] = customFilter ;
list [ 0 ] = customFilter ;
@ -60,7 +67,7 @@ public final class CustomFilterExposer extends BroadcastReceiver {
context . sendBroadcast ( broadcastIntent , AstridApiConstants . PERMISSION_READ ) ;
context . sendBroadcast ( broadcastIntent , AstridApiConstants . PERMISSION_READ ) ;
}
}
private Filter [ ] buildSavedFilters ( ) {
private Filter [ ] buildSavedFilters ( Context context ) {
StoreObjectDao dao = PluginServices . getStoreObjectDao ( ) ;
StoreObjectDao dao = PluginServices . getStoreObjectDao ( ) ;
TodorooCursor < StoreObject > cursor = dao . query ( Query . select ( StoreObject . PROPERTIES ) . where (
TodorooCursor < StoreObject > cursor = dao . query ( Query . select ( StoreObject . PROPERTIES ) . where (
StoreObject . TYPE . eq ( SavedFilter . TYPE ) ) . orderBy ( Order . asc ( SavedFilter . NAME ) ) ) ;
StoreObject . TYPE . eq ( SavedFilter . TYPE ) ) . orderBy ( Order . asc ( SavedFilter . NAME ) ) ) ;
@ -72,6 +79,12 @@ public final class CustomFilterExposer extends BroadcastReceiver {
cursor . moveToNext ( ) ;
cursor . moveToNext ( ) ;
savedFilter . readFromCursor ( cursor ) ;
savedFilter . readFromCursor ( cursor ) ;
list [ i ] = SavedFilter . load ( savedFilter ) ;
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 ;
return list ;
@ -80,4 +93,49 @@ public final class CustomFilterExposer extends BroadcastReceiver {
}
}
}
}
/ * *
* Simple activity for deleting stuff
*
* @author Tim Su < tim @todoroo.com >
*
* /
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 ( ) ;
}
} ) ;
}
}
}
}