package org.openintents.shopping.ui;
import android.content.ContentProviderOperation;
import android.content.Context;
import android.content.OperationApplicationException;
import android.database.Cursor;
import android.net.Uri;
import android.os.RemoteException;
import android.view.View;
import java.util.ArrayList;
import org.openintents.shopping.R;
import org.openintents.shopping.library.provider.ShoppingContract;
import org.openintents.shopping.library.provider.ShoppingContract.Contains;
import org.openintents.shopping.ui.widget.ShoppingItemsView;
public class SnackbarUndoMultipleItemStatusOperation extends SnackbarUndoOperation {
/**
*
*/
public static final int UNMARK_ALL = 0;
public static final int MARK_ALL = 1;
public static final int CLEAN_LIST = 2;
private long[] old_status = {ShoppingContract.Status.BOUGHT,
ShoppingContract.Status.WANT_TO_BUY, ShoppingContract.Status.BOUGHT};
private int[] resIds = {R.plurals.undoable_unmark_all, R.plurals.undoable_mark_all,
R.plurals.undoable_clean_list};
private final ShoppingItemsView mShoppingItemsView;
private Context mContext;
private ArrayList<String> mItemList;
public SnackbarUndoMultipleItemStatusOperation(ShoppingItemsView shoppingItemsView, Context context,
int type, long listId, boolean batch) {
super(1, type, batch);
mShoppingItemsView = shoppingItemsView;
mContext = context;
// remember all contains ids for listId where status = old_status
String selection = "list_id = ? AND " + ShoppingContract.Contains.STATUS
+ " == " + old_status[mType];
Cursor c = context.getContentResolver().query(
Contains.CONTENT_URI, new String[]{Contains._ID},
selection, new String[]{String.valueOf(listId)}, null);
int numItems = c.getCount();
mItemList = new ArrayList<String>();
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
mItemList.add(c.getString(0));
}
}
@Override
public String getDescription(Context context) {
int count = mItemList.size();
return String.format(context.getResources().getQuantityString(resIds[mType], count), count);
}
@Override
public String getSingularDescription(Context context) {
return getDescription(context);
}
@Override
public void onClick(View view) {
// here is where we get to try batch provider operation
ArrayList<ContentProviderOperation> ops =
new ArrayList<ContentProviderOperation>();
for (int i = 0; i < mItemList.size(); i++) {
String containsId = mItemList.get(i);
Uri uri = Uri.withAppendedPath(Contains.CONTENT_URI, containsId);
ops.add(ContentProviderOperation.newUpdate(uri).
withValue(ShoppingContract.Contains.STATUS, old_status[mType]).build());
}
try {
mContext.getContentResolver().applyBatch(ShoppingContract.AUTHORITY, ops);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (OperationApplicationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
}
mShoppingItemsView.requery();
mShoppingItemsView.invalidate();
}
}