/[projects]/android/Calculator/src/dk/thoerup/calculator/CalculatorActivity.java
ViewVC logotype

Contents of /android/Calculator/src/dk/thoerup/calculator/CalculatorActivity.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 938 - (show annotations) (download)
Mon Jun 28 09:49:12 2010 UTC (13 years, 10 months ago) by torben
File size: 5059 byte(s)
Add clear-all, square and square-root
1 package dk.thoerup.calculator;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.text.Editable;
6 import android.view.View;
7 import android.widget.EditText;
8
9 public class CalculatorActivity extends Activity {
10 enum Ops {
11 None,
12 Addition,
13 Subtraction,
14 Multiplication,
15 Division,
16 Sqr,
17 Sqrt
18 }
19
20
21 EditText mEdit;
22
23
24 double mVal1;
25 Ops mOperation = Ops.None;
26 boolean mClear = false;
27
28 @Override
29 public void onCreate(Bundle savedInstanceState) {
30 super.onCreate(savedInstanceState);
31 setContentView(R.layout.main);
32
33 findViewById(R.id.btn0).setOnClickListener( new NumericClick('0') );
34 findViewById(R.id.btn1).setOnClickListener( new NumericClick('1') );
35 findViewById(R.id.btn2).setOnClickListener( new NumericClick('2') );
36 findViewById(R.id.btn3).setOnClickListener( new NumericClick('3') );
37 findViewById(R.id.btn4).setOnClickListener( new NumericClick('4') );
38 findViewById(R.id.btn5).setOnClickListener( new NumericClick('5') );
39 findViewById(R.id.btn6).setOnClickListener( new NumericClick('6') );
40 findViewById(R.id.btn7).setOnClickListener( new NumericClick('7') );
41 findViewById(R.id.btn8).setOnClickListener( new NumericClick('8') );
42 findViewById(R.id.btn9).setOnClickListener( new NumericClick('9') );
43
44 findViewById(R.id.btnback).setOnClickListener( new BackClick() );
45 findViewById(R.id.btnclear).setOnClickListener( new ClearClick() );
46 findViewById(R.id.btnpoint).setOnClickListener( new PointClick() );
47
48 findViewById(R.id.btnadd).setOnClickListener( new OperationClick(Ops.Addition) );
49 findViewById(R.id.btnsub).setOnClickListener( new OperationClick(Ops.Subtraction) );
50 findViewById(R.id.btnmul).setOnClickListener( new OperationClick(Ops.Multiplication) );
51 findViewById(R.id.btndiv).setOnClickListener( new OperationClick(Ops.Division) );
52
53 findViewById(R.id.btnsqr).setOnClickListener( new SingleOperationClick(Ops.Sqr) );
54 findViewById(R.id.btnsqrt).setOnClickListener( new SingleOperationClick(Ops.Sqrt) );
55
56 findViewById(R.id.btnsum).setOnClickListener( new SumClick() );
57
58 mEdit = (EditText) findViewById(R.id.edit);
59 mEdit.setCursorVisible(false);
60
61
62 }
63
64 void setResult(double res) {
65 if ( Double.isInfinite(res) || Double.isNaN(res) ) {
66 mClear = true;
67 }
68
69
70 mEdit.setText( Double.toString(res) );
71 mOperation = Ops.None;
72 mVal1 = res;
73 }
74
75
76 class NumericClick implements View.OnClickListener {
77 char mNumval;
78
79 public NumericClick(char numval) {
80 mNumval = numval;
81 }
82
83 @Override
84 public void onClick(View v) {
85 Editable tempText = mEdit.getText();
86
87 if (tempText.toString().equals("0") || mClear==true ) {
88 mClear=false;
89 tempText.clear();
90 }
91 tempText.append(mNumval);
92 }
93
94 }
95
96 class BackClick implements View.OnClickListener {
97
98 @Override
99 public void onClick(View v) {
100 if (mClear) {
101 mClear = false;
102 mEdit.setText("0");
103 return;
104 }
105
106 Editable tempText = mEdit.getText();
107 if (tempText.length() > 0) {
108 CharSequence cs = tempText.subSequence(0, tempText.length() -1);
109 mEdit.setText(cs);
110 }
111 }
112 }
113
114 class ClearClick implements View.OnClickListener {
115
116 @Override
117 public void onClick(View v) {
118 mClear = false;
119 mEdit.setText("0");
120 mOperation = Ops.None;
121 mVal1 = 0;
122 }
123 }
124
125 class PointClick implements View.OnClickListener {
126
127 @Override
128 public void onClick(View v) {
129
130 Editable tempText = mEdit.getText();
131 if (tempText.toString().indexOf('.') == -1) {
132 tempText.append('.');
133 }
134 }
135 }
136
137 class OperationClick implements View.OnClickListener {
138 Ops mOp;
139 public OperationClick(Ops op) {
140 mOp = op;
141 }
142
143 @Override
144 public void onClick(View v) {
145 mVal1 = Double.parseDouble( mEdit.getText().toString() );
146 mEdit.setText("0");
147
148 mOperation = mOp;
149
150 }
151 }
152
153 class SingleOperationClick implements View.OnClickListener {
154 Ops mOp;
155 public SingleOperationClick(Ops op) {
156 mOp = op;
157 }
158
159 @Override
160 public void onClick(View v) {
161 mVal1 = Double.parseDouble( mEdit.getText().toString() );
162
163 double res = 0.0;
164 switch (mOp) {
165 case Sqr:
166 res = mVal1 * mVal1;
167 break;
168 case Sqrt:
169 res = Math.sqrt(mVal1);
170 break;
171 }
172 setResult(res);
173 }
174 }
175
176 class SumClick implements View.OnClickListener {
177 @Override
178 public void onClick(View v) {
179 if (mOperation == Ops.None) {
180 return;
181 }
182
183 double val2 = Double.parseDouble( mEdit.getText().toString() );
184
185 double res = 0.0;
186 switch (mOperation) {
187 case Addition:
188 res = mVal1 + val2;
189 break;
190 case Subtraction:
191 res = mVal1 - val2;
192 break;
193 case Multiplication:
194 res = mVal1 * val2;
195 break;
196 case Division:
197 res = mVal1 / val2;
198 break;
199 }
200
201 setResult(res);
202 }
203 }
204 }

  ViewVC Help
Powered by ViewVC 1.1.20