package dk.thoerup.calculator; import android.app.Activity; import android.os.Bundle; import android.text.Editable; import android.view.View; import android.widget.EditText; public class CalculatorActivity extends Activity { /** Called when the activity is first created. */ EditText mEdit; double mVal1; char mOperation = ' '; boolean mClear = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); findViewById(R.id.btn0).setOnClickListener( new NumericClick('0') ); findViewById(R.id.btn1).setOnClickListener( new NumericClick('1') ); findViewById(R.id.btn2).setOnClickListener( new NumericClick('2') ); findViewById(R.id.btn3).setOnClickListener( new NumericClick('3') ); findViewById(R.id.btn4).setOnClickListener( new NumericClick('4') ); findViewById(R.id.btn5).setOnClickListener( new NumericClick('5') ); findViewById(R.id.btn6).setOnClickListener( new NumericClick('6') ); findViewById(R.id.btn7).setOnClickListener( new NumericClick('7') ); findViewById(R.id.btn8).setOnClickListener( new NumericClick('8') ); findViewById(R.id.btn9).setOnClickListener( new NumericClick('9') ); findViewById(R.id.btnback).setOnClickListener( new BackClick() ); findViewById(R.id.btnpoint).setOnClickListener( new PointClick() ); findViewById(R.id.btnadd).setOnClickListener( new OperationClick('+') ); findViewById(R.id.btnsub).setOnClickListener( new OperationClick('-') ); findViewById(R.id.btnmul).setOnClickListener( new OperationClick('*') ); findViewById(R.id.btndiv).setOnClickListener( new OperationClick('/') ); findViewById(R.id.btnsum).setOnClickListener( new SumClick() ); mEdit = (EditText) findViewById(R.id.edit); mEdit.setCursorVisible(false); } class NumericClick implements View.OnClickListener { char mNumval; public NumericClick(char numval) { mNumval = numval; } @Override public void onClick(View v) { Editable tempText = mEdit.getText(); if (tempText.toString().equals("0") || mClear==true ) { tempText.clear(); } tempText.append(mNumval); } } class BackClick implements View.OnClickListener { @Override public void onClick(View v) { if (mClear) { mEdit.setText("0"); return; } Editable tempText = mEdit.getText(); if (tempText.length() > 0) { CharSequence cs = tempText.subSequence(0, tempText.length() -1); mEdit.setText(cs); } } } class PointClick implements View.OnClickListener { @Override public void onClick(View v) { Editable tempText = mEdit.getText(); if (tempText.toString().indexOf('.') == -1) { tempText.append('.'); } } } class OperationClick implements View.OnClickListener { char mOp; public OperationClick(char op) { mOp = op; } @Override public void onClick(View v) { mVal1 = Double.parseDouble( mEdit.getText().toString() ); mEdit.setText("0"); mOperation = mOp; } } class SumClick implements View.OnClickListener { @Override public void onClick(View v) { if (mOperation == ' ') { return; } double val2 = Double.parseDouble( mEdit.getText().toString() ); Double res = 0.0; switch (mOperation) { case '+': res = mVal1 + val2; break; case '-': res = mVal1 - val2; break; case '*': res = mVal1 * val2; break; case '/': res = mVal1 / val2; break; } if ( res.isInfinite() || res.isNaN() ) { mClear = true; } mEdit.setText( res.toString() ); mOperation = ' '; mVal1 = res; } } }