Obliczenia brydżowe (Android)
Jacek Kowalski
2015-01-17 2d8187935c8a6d1fca8d9dbd916b7143c3e41c9c
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;
2d8187 7 import android.widget.CompoundButton;
b20e6d 8 import android.widget.EditText;
JK 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
2d8187 52     @Override
JK 53     public void onBackPressed() {
54         // Reset
55         BidSlider.setProgress(0);
56         MinorSuitsToggle.setChecked(true);
57         ContractToggle.setChecked(true);
58         NNToggle.setChecked(true);
59         PCInput.setText("");
60         TricksInput.setText("");
61     }
62
b20e6d 63     private void InitializeApp() {
JK 64         bridgeCompute = new BridgeCompute();
65
66         BidSlider = (SeekBar) findViewById(R.id.BidSlider);
67         BidText = (TextView) findViewById(R.id.BidText);
68
7a519e 69         MinorSuitsToggle = (ToggleButton) findViewById(R.id.MinorSuitsToggle);
JK 70         MajorSuitsToggle = (ToggleButton) findViewById(R.id.MajorSuitsToggle);
71         NoTrumpToggle = (ToggleButton) findViewById(R.id.NoTrumpToggle);
b20e6d 72
7a519e 73         ContractToggle = (ToggleButton) findViewById(R.id.ContractToggle);
JK 74         DoubleToggle = (ToggleButton) findViewById(R.id.DoubleToggle);
75         RedoubleToggle = (ToggleButton) findViewById(R.id.RedoubleToggle);
b20e6d 76
7a519e 77         NNToggle = (ToggleButton) findViewById(R.id.NNToggle);
JK 78         NVToggle = (ToggleButton) findViewById(R.id.NVToggle);
79         VNToggle = (ToggleButton) findViewById(R.id.VNToggle);
80         VVToggle = (ToggleButton) findViewById(R.id.VVToggle);
b20e6d 81
JK 82         PCInput = (EditText) findViewById(R.id.PCInput);
83         TricksInput = (EditText) findViewById(R.id.TricksInput);
84
7a519e 85         resultText = (TextView) findViewById(R.id.ResultsText);
b20e6d 86
2d8187 87         CompoundButton.OnCheckedChangeListener changeListener;
JK 88
b20e6d 89         BidSlider.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
JK 90             @Override
91             public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
92                 BidText.setText(Integer.toString(seekBar.getProgress()));
93                 updateResults();
94             }
95
96             @Override
97             public void onStartTrackingTouch(SeekBar seekBar) {
98             }
99
100             @Override
101             public void onStopTrackingTouch(SeekBar seekBar) {
102             }
103         });
104
2d8187 105         changeListener = new CompoundButton.OnCheckedChangeListener() {
b20e6d 106             @Override
2d8187 107             public void onCheckedChanged(CompoundButton button, boolean isChecked) {
JK 108                 if (!isChecked) {
109                     if (!MinorSuitsToggle.isChecked() && !MajorSuitsToggle.isChecked()
110                             && !NoTrumpToggle.isChecked()) {
111                         MinorSuitsToggle.setChecked(true);
112                     }
113                     return;
114                 }
b20e6d 115
2d8187 116                 if (!button.equals(MinorSuitsToggle))
7a519e 117                     MinorSuitsToggle.setChecked(false);
2d8187 118                 if (!button.equals(MajorSuitsToggle))
7a519e 119                     MajorSuitsToggle.setChecked(false);
2d8187 120                 if (!button.equals(NoTrumpToggle))
7a519e 121                     NoTrumpToggle.setChecked(false);
b20e6d 122
JK 123                 updateResults();
124             }
125         };
126
2d8187 127         MinorSuitsToggle.setOnCheckedChangeListener(changeListener);
JK 128         MajorSuitsToggle.setOnCheckedChangeListener(changeListener);
129         NoTrumpToggle.setOnCheckedChangeListener(changeListener);
b20e6d 130
2d8187 131         changeListener = new CompoundButton.OnCheckedChangeListener() {
b20e6d 132             @Override
2d8187 133             public void onCheckedChanged(CompoundButton button, boolean isChecked) {
JK 134                 if (!isChecked) {
135                     if (!ContractToggle.isChecked() && !DoubleToggle.isChecked()
136                             && !RedoubleToggle.isChecked()) {
137                         ContractToggle.setChecked(true);
138                     }
139                     return;
140                 }
b20e6d 141
2d8187 142                 if (!button.equals(ContractToggle))
7a519e 143                     ContractToggle.setChecked(false);
2d8187 144                 if (!button.equals(DoubleToggle))
7a519e 145                     DoubleToggle.setChecked(false);
2d8187 146                 if (!button.equals(RedoubleToggle))
7a519e 147                     RedoubleToggle.setChecked(false);
b20e6d 148
JK 149                 updateResults();
150             }
151         };
152
2d8187 153         ContractToggle.setOnCheckedChangeListener(changeListener);
JK 154         DoubleToggle.setOnCheckedChangeListener(changeListener);
155         RedoubleToggle.setOnCheckedChangeListener(changeListener);
b20e6d 156
2d8187 157         changeListener = new CompoundButton.OnCheckedChangeListener() {
JK 158             @Override
159             public void onCheckedChanged(CompoundButton button, boolean isChecked) {
160                 if (!isChecked) {
161                     if (!VVToggle.isChecked() && !VNToggle.isChecked()
162                             && !NVToggle.isChecked() && !NNToggle.isChecked()) {
163                         NNToggle.setChecked(true);
164                     }
165                     return;
166                 }
b20e6d 167
2d8187 168                 if (!button.equals(NNToggle))
7a519e 169                     NNToggle.setChecked(false);
2d8187 170                 if (!button.equals(NVToggle))
JK 171                     NVToggle.setChecked(false);
172                 if (!button.equals(VNToggle))
173                     VNToggle.setChecked(false);
174                 if (!button.equals(VVToggle))
175                     VVToggle.setChecked(false);
b20e6d 176
JK 177                 updateResults();
178             }
179         };
180
2d8187 181         VVToggle.setOnCheckedChangeListener(changeListener);
JK 182         VNToggle.setOnCheckedChangeListener(changeListener);
183         NVToggle.setOnCheckedChangeListener(changeListener);
184         NNToggle.setOnCheckedChangeListener(changeListener);
b20e6d 185
80f235 186         TextWatcher textWatcher = new TextWatcher() {
JK 187             @Override
188             public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
189             }
b20e6d 190
80f235 191             @Override
JK 192             public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
193             }
b20e6d 194
80f235 195             @Override
JK 196             public void afterTextChanged(Editable editable) {
197                 updateResults();
198             }
199         };
b20e6d 200
80f235 201         PCInput.addTextChangedListener(textWatcher);
JK 202         TricksInput.addTextChangedListener(textWatcher);
b20e6d 203     }
JK 204
205     public void updateResults() {
206         int bid = BidSlider.getProgress();
207
208         int color = 0;
7a519e 209         if (MajorSuitsToggle.isChecked())
b20e6d 210             color = 1;
7a519e 211         if (NoTrumpToggle.isChecked())
b20e6d 212             color = 2;
JK 213
214         int dbl = 0;
7a519e 215         if (DoubleToggle.isChecked())
b20e6d 216             dbl = 1;
7a519e 217         if (RedoubleToggle.isChecked())
b20e6d 218             dbl = 2;
JK 219
7a519e 220         int vulnerability = 0;
JK 221         if (NVToggle.isChecked())
222             vulnerability = 1;
223         if (VNToggle.isChecked())
224             vulnerability = 2;
225         if (VVToggle.isChecked())
226             vulnerability = 3;
b20e6d 227
JK 228         int PC = -1;
229         try {
230             PC = Integer.parseInt(PCInput.getText().toString());
7a519e 231         } catch (NumberFormatException ignored) {
b20e6d 232         }
JK 233
234         int tricks = -1;
235         try {
236             tricks = Integer.parseInt(TricksInput.getText().toString());
7a519e 237         } catch (NumberFormatException ignored) {
b20e6d 238         }
JK 239
240         if (bid < 0 || bid > 7) {
241             resultText.setText(getString(R.string.invalid_bid));
242             return;
243         }
244
245         if (color != 0 && color != 1 && color != 2) {
246             resultText.setText(getString(R.string.invalid_color));
247             return;
248         }
249
250         if (dbl < 0 || dbl > 2) {
251             resultText.setText(getString(R.string.invalid_dbl));
252             return;
253         }
254
7a519e 255         if (vulnerability < 0 || vulnerability > 3) {
b20e6d 256             resultText.setText(getString(R.string.invalid_baba));
JK 257             return;
258         }
259
260         if (PC < 0 || PC > 40) {
261             resultText.setText(getString(R.string.invalid_pc));
262             return;
263         }
264
265         if (tricks < 0 || tricks > 13) {
266             resultText.setText(getString(R.string.invalid_tricks));
267             return;
268         }
269
270         if (bid == 0 && PC < 20) {
271             resultText.setText(getString(R.string.invalid_pass));
272             return;
273         }
274
7a519e 275         BridgeResult result = bridgeCompute.compute(bid, color, dbl, vulnerability, PC, tricks);
b20e6d 276         resultText.setText(
JK 277                 (result.pointsFor == BridgeResult.PointsFor.Us ? getString(R.string.result_for_us) : getString(R.string.result_for_them)) +
278                         "\n" + getString(R.string.result_pts_wo_pc) + " " + result.pointsBefore +
279                         "\n" + getString(R.string.result_pts) + " " + result.points +
280                         "\n" + getString(R.string.result_imps) + " " + result.IMPs +
281                         "\n" + getString(R.string.result_percent) + " " + result.percent);
282     }
283 }