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 { enum Ops { None, Addition, Subtraction, Multiplication, Division } EditText mEdit; double mVal1; Ops mOperation = Ops.None; 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(Ops.Addition) ); findViewById(R.id.btnsub).setOnClickListener( new OperationClick(Ops.Subtraction) ); findViewById(R.id.btnmul).setOnClickListener( new OperationClick(Ops.Multiplication) ); findViewById(R.id.btndiv).setOnClickListener( new OperationClick(Ops.Division) ); 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 ) { mClear=false; tempText.clear(); } tempText.append(mNumval); } } class BackClick implements View.OnClickListener { @Override public void onClick(View v) { if (mClear) { mClear = false; 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 { Ops mOp; public OperationClick(Ops 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 == Ops.None) { return; } double val2 = Double.parseDouble( mEdit.getText().toString() ); double res = 0.0; switch (mOperation) { case Addition: res = mVal1 + val2; break; case Subtraction: res = mVal1 - val2; break; case Multiplication: res = mVal1 * val2; break; case Division: res = mVal1 / val2; break; } if ( Double.isInfinite(res) || Double.isNaN(res) ) { mClear = true; } mEdit.setText( Double.toString(res) ); mOperation = Ops.None; mVal1 = res; } } }