package ru.orangesoftware.financisto2.activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ListAdapter;
import android.widget.Spinner;
import android.widget.Toast;
import java.util.Arrays;
import ru.orangesoftware.financisto2.R;
import ru.orangesoftware.financisto2.adapter.BlotterListAdapter;
import ru.orangesoftware.financisto2.adapter.BlotterListAdapter_;
import ru.orangesoftware.financisto2.db.DatabaseAdapter;
import ru.orangesoftware.financisto2.filter.WhereFilter;
import ru.orangesoftware.financisto2.utils.EnumUtils;
import ru.orangesoftware.financisto2.utils.LocalizableEnum;
public class MassOpActivity extends BlotterActivity {
public MassOpActivity() {
super(R.layout.blotter_mass_op);
}
@Override
protected void internalOnCreate(Bundle savedInstanceState) {
bFilter = (ImageButton)findViewById(R.id.bFilter);
bFilter.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
Intent intent = new Intent(MassOpActivity.this, BlotterFilterActivity.class);
blotterFilter.toIntent(intent);
startActivityForResult(intent, FILTER_REQUEST);
}
});
ImageButton bCheckAll = (ImageButton)findViewById(R.id.bCheckAll);
bCheckAll.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
((BlotterListAdapter)getListAdapter()).checkAll();
}
});
ImageButton bUncheckAll = (ImageButton)findViewById(R.id.bUncheckAll);
bUncheckAll.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
((BlotterListAdapter)getListAdapter()).uncheckAll();
}
});
final MassOp[] operations = MassOp.values();
final Spinner spOperation = (Spinner)findViewById(R.id.spOperation);
Button proceed = (Button)findViewById(R.id.proceed);
proceed.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
MassOp op = operations[spOperation.getSelectedItemPosition()];
applyMassOp(op);
}
});
Intent intent = getIntent();
if (intent != null) {
blotterFilter = WhereFilter.fromIntent(intent);
applyFilter();
}
spOperation.setPrompt(getString(R.string.mass_operations));
spOperation.setAdapter(EnumUtils.createSpinnerAdapter(this, operations));
prepareTransactionActionGrid();
}
protected void applyMassOp(final MassOp op) {
int count = ((BlotterListAdapter)getListAdapter()).getCheckedCount();
if (count > 0) {
new AlertDialog.Builder(this)
.setMessage(getString(R.string.apply_mass_op, getString(op.getTitleId()), count))
.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface arg0, int arg1) {
BlotterListAdapter adapter = ((BlotterListAdapter)getListAdapter());
long[] ids = adapter.getAllCheckedIds();
Log.d("Financisto", "Will apply "+op+" on "+Arrays.toString(ids));
op.apply(db, ids);
adapter.uncheckAll();
adapter.changeCursor(createCursor());
}
})
.setNegativeButton(R.string.no, null)
.show();
} else {
Toast.makeText(this, R.string.apply_mass_op_zero_count, Toast.LENGTH_SHORT).show();
}
}
@Override
protected void applyFilter() {
updateFilterImage();
}
@Override
protected void calculateTotals() {
// do nothing
}
@Override
protected ListAdapter createAdapter(Cursor cursor) {
BlotterListAdapter_ adapter = BlotterListAdapter_.getInstance_(this);
adapter.initWithCursor(cursor);
adapter.initWithItemLayout(R.layout.blotter_mass_op_list_item);
return adapter;
}
private enum MassOp implements LocalizableEnum{
CLEAR(R.string.mass_operations_clear_all){
@Override
public void apply(DatabaseAdapter db, long[] ids) {
db.clearSelectedTransactions(ids);
}
},
RECONCILE(R.string.mass_operations_reconcile){
@Override
public void apply(DatabaseAdapter db, long[] ids) {
db.reconcileSelectedTransactions(ids);
}
},
DELETE(R.string.mass_operations_delete){
@Override
public void apply(DatabaseAdapter db, long[] ids) {
db.deleteSelectedTransactions(ids);
db.rebuildRunningBalances();
}
};
private final int titleId;
MassOp(int titleId) {
this.titleId = titleId;
}
public abstract void apply(DatabaseAdapter db, long[] ids);
@Override
public int getTitleId() {
return titleId;
}
}
}