package interdroid.swan.ui;
import interdroid.swan.R;
import interdroid.swan.swansong.BinaryLogicOperator;
import interdroid.swan.swansong.Expression;
import interdroid.swan.swansong.ExpressionFactory;
import interdroid.swan.swansong.ExpressionParseException;
import interdroid.swan.swansong.LogicExpression;
import interdroid.swan.swansong.TriStateExpression;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.RadioGroup;
import android.widget.Toast;
public class MergeExpressionDialog extends Activity {
public static final int LEFT = 1;
public static final int RIGHT = 2;
public static final int OPERATOR = 3;
boolean leftActive = false;
boolean rightActive = false;
int leftIndex;
int rightIndex;
ArrayList<String> expressions;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setResult(RESULT_CANCELED);
setContentView(R.layout.expression_builder_merge_dialog);
expressions = getIntent().getStringArrayListExtra("Expressions");
findViewById(R.id.left).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivityForResult(
getIntent().setClass(getApplicationContext(),
SelectExpressionDialog.class), LEFT);
}
});
findViewById(R.id.right).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivityForResult(
getIntent().setClass(getApplicationContext(),
SelectExpressionDialog.class), RIGHT);
}
});
findViewById(R.id.ok).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
Expression left = ExpressionFactory
.parse(((Button) findViewById(R.id.left)).getText()
.toString());
Expression right = ExpressionFactory
.parse(((Button) findViewById(R.id.right))
.getText().toString());
BinaryLogicOperator logicOperator = ((RadioGroup) findViewById(R.id.operator))
.getCheckedRadioButtonId() == R.id.and ? BinaryLogicOperator.AND
: BinaryLogicOperator.OR;
Expression newExpression = new LogicExpression(
Expression.LOCATION_INFER,
(TriStateExpression) left, logicOperator,
(TriStateExpression) right);
expressions.add(newExpression.toParseString());
if (!((CheckBox) findViewById(R.id.keep_originals))
.isChecked()) {
expressions.remove(Math.max(rightIndex, leftIndex));
expressions.remove(Math.min(rightIndex, leftIndex));
}
Intent result = new Intent();
result.putStringArrayListExtra("Expressions", expressions);
setResult(RESULT_OK, result);
finish();
} catch (ExpressionParseException e) {
// TODO: improve this
Toast.makeText(getApplicationContext(), "Failed!",
Toast.LENGTH_LONG).show();
}
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case LEFT:
leftIndex = data.getIntExtra("Position", -1);
((Button) findViewById(R.id.left)).setText(expressions
.get(leftIndex));
leftActive = true;
break;
case RIGHT:
rightIndex = data.getIntExtra("Position", -1);
((Button) findViewById(R.id.right)).setText(expressions
.get(rightIndex));
rightActive = true;
break;
default:
break;
}
findViewById(R.id.ok).setEnabled(leftActive && rightActive);
}
}
}