Obliczenia brydżowe (Android)
Jacek Kowalski
2015-01-17 7a519ea493c2c38d602dcd3045da81d4d4c0ce2c
commit | author | age
7a519e 1 package net.jacekk.bridge.android;
b20e6d 2
JK 3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.text.Editable;
6 import android.text.TextWatcher;
7 import android.view.View;
8 import android.widget.EditText;
9 import android.widget.SeekBar;
10 import android.widget.TextView;
11 import android.widget.ToggleButton;
7a519e 12
JK 13 import net.jacekk.bridge.R;
14 import net.jacekk.bridge.BridgeCompute;
15 import net.jacekk.bridge.BridgeResult;
b20e6d 16
JK 17 public class MainActivity extends Activity {
18     private SeekBar BidSlider;
19     private TextView BidText;
20
7a519e 21     private ToggleButton MinorSuitsToggle;
JK 22     private ToggleButton MajorSuitsToggle;
23     private ToggleButton NoTrumpToggle;
b20e6d 24
7a519e 25     private ToggleButton ContractToggle;
JK 26     private ToggleButton DoubleToggle;
27     private ToggleButton RedoubleToggle;
b20e6d 28
7a519e 29     private ToggleButton NNToggle;
JK 30     private ToggleButton NVToggle;
31     private ToggleButton VNToggle;
32     private ToggleButton VVToggle;
b20e6d 33
JK 34     private EditText PCInput;
35     private EditText TricksInput;
36
37     private TextView resultText;
38
39     public BridgeCompute bridgeCompute;
40
41     /**
42      * Called when the activity is first created.
43      */
44     @Override
45     public void onCreate(Bundle savedInstanceState) {
46         super.onCreate(savedInstanceState);
47         setContentView(R.layout.main);
48
49         InitializeApp();
50     }
51
52     private void InitializeApp() {
53         bridgeCompute = new BridgeCompute();
54
55         BidSlider = (SeekBar) findViewById(R.id.BidSlider);
56         BidText = (TextView) findViewById(R.id.BidText);
57
7a519e 58         MinorSuitsToggle = (ToggleButton) findViewById(R.id.MinorSuitsToggle);
JK 59         MajorSuitsToggle = (ToggleButton) findViewById(R.id.MajorSuitsToggle);
60         NoTrumpToggle = (ToggleButton) findViewById(R.id.NoTrumpToggle);
b20e6d 61
7a519e 62         ContractToggle = (ToggleButton) findViewById(R.id.ContractToggle);
JK 63         DoubleToggle = (ToggleButton) findViewById(R.id.DoubleToggle);
64         RedoubleToggle = (ToggleButton) findViewById(R.id.RedoubleToggle);
b20e6d 65
7a519e 66         NNToggle = (ToggleButton) findViewById(R.id.NNToggle);
JK 67         NVToggle = (ToggleButton) findViewById(R.id.NVToggle);
68         VNToggle = (ToggleButton) findViewById(R.id.VNToggle);
69         VVToggle = (ToggleButton) findViewById(R.id.VVToggle);
b20e6d 70
JK 71         PCInput = (EditText) findViewById(R.id.PCInput);
72         TricksInput = (EditText) findViewById(R.id.TricksInput);
73
7a519e 74         resultText = (TextView) findViewById(R.id.ResultsText);
b20e6d 75
JK 76         BidSlider.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
77             @Override
78             public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
79                 BidText.setText(Integer.toString(seekBar.getProgress()));
80                 updateResults();
81             }
82
83             @Override
84             public void onStartTrackingTouch(SeekBar seekBar) {
85             }
86
87             @Override
88             public void onStopTrackingTouch(SeekBar seekBar) {
89             }
90         });
91
92         ToggleButton.OnClickListener colorClickListener = new ToggleButton.OnClickListener() {
93             @Override
94             public void onClick(View view) {
95                 ToggleButton toggle = (ToggleButton) view;
96
7a519e 97                 if (!toggle.equals(MinorSuitsToggle))
JK 98                     MinorSuitsToggle.setChecked(false);
99                 if (!toggle.equals(MajorSuitsToggle))
100                     MajorSuitsToggle.setChecked(false);
101                 if (!toggle.equals(NoTrumpToggle))
102                     NoTrumpToggle.setChecked(false);
b20e6d 103
JK 104                 updateResults();
105             }
106         };
107
7a519e 108         MinorSuitsToggle.setOnClickListener(colorClickListener);
JK 109         MajorSuitsToggle.setOnClickListener(colorClickListener);
110         NoTrumpToggle.setOnClickListener(colorClickListener);
b20e6d 111
JK 112         ToggleButton.OnClickListener bidClickListener = new ToggleButton.OnClickListener() {
113             @Override
114             public void onClick(View view) {
115                 ToggleButton toggle = (ToggleButton) view;
116
7a519e 117                 if (!toggle.equals(ContractToggle))
JK 118                     ContractToggle.setChecked(false);
119                 if (!toggle.equals(DoubleToggle))
120                     DoubleToggle.setChecked(false);
121                 if (!toggle.equals(RedoubleToggle))
122                     RedoubleToggle.setChecked(false);
b20e6d 123
JK 124                 updateResults();
125             }
126         };
127
7a519e 128         ContractToggle.setOnClickListener(bidClickListener);
JK 129         DoubleToggle.setOnClickListener(bidClickListener);
130         RedoubleToggle.setOnClickListener(bidClickListener);
b20e6d 131
JK 132         ToggleButton.OnClickListener baClickListener = new ToggleButton.OnClickListener() {
133             public void onClick(View view) {
134                 ToggleButton toggle = (ToggleButton) view;
135
7a519e 136                 if (!toggle.equals(VVToggle))
JK 137                     VVToggle.setChecked(false);
138                 if (!toggle.equals(VNToggle))
139                     VNToggle.setChecked(false);
140                 if (!toggle.equals(NVToggle))
141                     NVToggle.setChecked(false);
142                 if (!toggle.equals(NNToggle))
143                     NNToggle.setChecked(false);
b20e6d 144
JK 145                 updateResults();
146             }
147         };
148
7a519e 149         VVToggle.setOnClickListener(baClickListener);
JK 150         VNToggle.setOnClickListener(baClickListener);
151         NVToggle.setOnClickListener(baClickListener);
152         NNToggle.setOnClickListener(baClickListener);
b20e6d 153
JK 154         PCInput.addTextChangedListener(
155                 new TextWatcher() {
156                     @Override
157                     public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
158                     }
159
160                     @Override
161                     public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
162                     }
163
164                     @Override
165                     public void afterTextChanged(Editable editable) {
166                         updateResults();
167                     }
168                 }
169         );
170
171         TricksInput.addTextChangedListener(
172                 new TextWatcher() {
173                     @Override
174                     public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
175                     }
176
177                     @Override
178                     public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
179                     }
180
181                     @Override
182                     public void afterTextChanged(Editable editable) {
183                         updateResults();
184                     }
185                 }
186         );
187     }
188
189     public void updateResults() {
190         int bid = BidSlider.getProgress();
191
192         int color = 0;
7a519e 193         if (MajorSuitsToggle.isChecked())
b20e6d 194             color = 1;
7a519e 195         if (NoTrumpToggle.isChecked())
b20e6d 196             color = 2;
JK 197
198         int dbl = 0;
7a519e 199         if (DoubleToggle.isChecked())
b20e6d 200             dbl = 1;
7a519e 201         if (RedoubleToggle.isChecked())
b20e6d 202             dbl = 2;
JK 203
7a519e 204         int vulnerability = 0;
JK 205         if (NVToggle.isChecked())
206             vulnerability = 1;
207         if (VNToggle.isChecked())
208             vulnerability = 2;
209         if (VVToggle.isChecked())
210             vulnerability = 3;
b20e6d 211
JK 212         int PC = -1;
213         try {
214             PC = Integer.parseInt(PCInput.getText().toString());
7a519e 215         } catch (NumberFormatException ignored) {
b20e6d 216         }
JK 217
218         int tricks = -1;
219         try {
220             tricks = Integer.parseInt(TricksInput.getText().toString());
7a519e 221         } catch (NumberFormatException ignored) {
b20e6d 222         }
JK 223
224         if (bid < 0 || bid > 7) {
225             resultText.setText(getString(R.string.invalid_bid));
226             return;
227         }
228
229         if (color != 0 && color != 1 && color != 2) {
230             resultText.setText(getString(R.string.invalid_color));
231             return;
232         }
233
234         if (dbl < 0 || dbl > 2) {
235             resultText.setText(getString(R.string.invalid_dbl));
236             return;
237         }
238
7a519e 239         if (vulnerability < 0 || vulnerability > 3) {
b20e6d 240             resultText.setText(getString(R.string.invalid_baba));
JK 241             return;
242         }
243
244         if (PC < 0 || PC > 40) {
245             resultText.setText(getString(R.string.invalid_pc));
246             return;
247         }
248
249         if (tricks < 0 || tricks > 13) {
250             resultText.setText(getString(R.string.invalid_tricks));
251             return;
252         }
253
254         if (bid == 0 && PC < 20) {
255             resultText.setText(getString(R.string.invalid_pass));
256             return;
257         }
258
7a519e 259         BridgeResult result = bridgeCompute.compute(bid, color, dbl, vulnerability, PC, tricks);
b20e6d 260         resultText.setText(
JK 261                 (result.pointsFor == BridgeResult.PointsFor.Us ? getString(R.string.result_for_us) : getString(R.string.result_for_them)) +
262                         "\n" + getString(R.string.result_pts_wo_pc) + " " + result.pointsBefore +
263                         "\n" + getString(R.string.result_pts) + " " + result.points +
264                         "\n" + getString(R.string.result_imps) + " " + result.IMPs +
265                         "\n" + getString(R.string.result_percent) + " " + result.percent);
266     }
267 }