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