Obliczenia brydżowe (Android)
Jacek Kowalski
2015-01-17 80f235c3ac05e57fe1f878c37cb141374e643e50
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
80f235 154         TextWatcher textWatcher = new TextWatcher() {
JK 155             @Override
156             public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
157             }
b20e6d 158
80f235 159             @Override
JK 160             public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
161             }
b20e6d 162
80f235 163             @Override
JK 164             public void afterTextChanged(Editable editable) {
165                 updateResults();
166             }
167         };
b20e6d 168
80f235 169         PCInput.addTextChangedListener(textWatcher);
JK 170         TricksInput.addTextChangedListener(textWatcher);
b20e6d 171     }
JK 172
173     public void updateResults() {
174         int bid = BidSlider.getProgress();
175
176         int color = 0;
7a519e 177         if (MajorSuitsToggle.isChecked())
b20e6d 178             color = 1;
7a519e 179         if (NoTrumpToggle.isChecked())
b20e6d 180             color = 2;
JK 181
182         int dbl = 0;
7a519e 183         if (DoubleToggle.isChecked())
b20e6d 184             dbl = 1;
7a519e 185         if (RedoubleToggle.isChecked())
b20e6d 186             dbl = 2;
JK 187
7a519e 188         int vulnerability = 0;
JK 189         if (NVToggle.isChecked())
190             vulnerability = 1;
191         if (VNToggle.isChecked())
192             vulnerability = 2;
193         if (VVToggle.isChecked())
194             vulnerability = 3;
b20e6d 195
JK 196         int PC = -1;
197         try {
198             PC = Integer.parseInt(PCInput.getText().toString());
7a519e 199         } catch (NumberFormatException ignored) {
b20e6d 200         }
JK 201
202         int tricks = -1;
203         try {
204             tricks = Integer.parseInt(TricksInput.getText().toString());
7a519e 205         } catch (NumberFormatException ignored) {
b20e6d 206         }
JK 207
208         if (bid < 0 || bid > 7) {
209             resultText.setText(getString(R.string.invalid_bid));
210             return;
211         }
212
213         if (color != 0 && color != 1 && color != 2) {
214             resultText.setText(getString(R.string.invalid_color));
215             return;
216         }
217
218         if (dbl < 0 || dbl > 2) {
219             resultText.setText(getString(R.string.invalid_dbl));
220             return;
221         }
222
7a519e 223         if (vulnerability < 0 || vulnerability > 3) {
b20e6d 224             resultText.setText(getString(R.string.invalid_baba));
JK 225             return;
226         }
227
228         if (PC < 0 || PC > 40) {
229             resultText.setText(getString(R.string.invalid_pc));
230             return;
231         }
232
233         if (tricks < 0 || tricks > 13) {
234             resultText.setText(getString(R.string.invalid_tricks));
235             return;
236         }
237
238         if (bid == 0 && PC < 20) {
239             resultText.setText(getString(R.string.invalid_pass));
240             return;
241         }
242
7a519e 243         BridgeResult result = bridgeCompute.compute(bid, color, dbl, vulnerability, PC, tricks);
b20e6d 244         resultText.setText(
JK 245                 (result.pointsFor == BridgeResult.PointsFor.Us ? getString(R.string.result_for_us) : getString(R.string.result_for_them)) +
246                         "\n" + getString(R.string.result_pts_wo_pc) + " " + result.pointsBefore +
247                         "\n" + getString(R.string.result_pts) + " " + result.points +
248                         "\n" + getString(R.string.result_imps) + " " + result.IMPs +
249                         "\n" + getString(R.string.result_percent) + " " + result.percent);
250     }
251 }