1
1
package org .nevack .unitconverter ;
2
2
3
- import android .animation .Animator ;
4
3
import android .app .ProgressDialog ;
5
- import android .content .ClipData ;
6
- import android .content .ClipboardManager ;
7
4
import android .content .Context ;
8
5
import android .content .Intent ;
9
- import android .graphics .Color ;
10
6
import android .os .AsyncTask ;
11
7
import android .os .Bundle ;
12
8
import android .support .annotation .NonNull ;
13
- import android .support .design .widget .FloatingActionButton ;
14
9
import android .support .design .widget .NavigationView ;
15
- import android .support .design .widget .Snackbar ;
16
10
import android .support .v4 .view .GravityCompat ;
17
11
import android .support .v4 .widget .DrawerLayout ;
18
12
import android .support .v7 .app .ActionBar ;
19
13
import android .support .v7 .app .AppCompatActivity ;
20
14
import android .support .v7 .widget .Toolbar ;
21
- import android .text .Editable ;
22
- import android .text .Html ;
23
- import android .text .Spanned ;
24
- import android .text .TextWatcher ;
25
15
import android .view .Menu ;
26
16
import android .view .MenuItem ;
27
17
import android .view .View ;
28
- import android .view .ViewAnimationUtils ;
29
- import android .widget .AdapterView ;
30
- import android .widget .ArrayAdapter ;
31
- import android .widget .EditText ;
32
- import android .widget .Spinner ;
33
- import android .widget .TextView ;
34
18
35
19
import org .nevack .unitconverter .model .EUnitCategory ;
36
- import org .nevack .unitconverter .model .Unit ;
37
20
import org .nevack .unitconverter .model .converter .Converter ;
38
21
39
- public class ConverterActivity extends AppCompatActivity {
22
+ public class ConverterActivity extends AppCompatActivity implements ConverterDisplayView . DisplayCallback {
40
23
41
24
private static final String CATEGORY_ID = "category_id" ;
42
- private static final String COPY_RESULT = "converter_result" ;
43
25
private static final String ID_EXTRA = "CONVERTERID" ;
44
26
45
27
private Toolbar toolbar ;
46
- private FloatingActionButton fab ;
47
28
private NavigationView navigationView ;
48
29
private DrawerLayout drawerLayout ;
49
30
50
- private Spinner sourceSpinner ;
51
- private EditText sourceEditText ;
52
- private TextView sourceTextView ;
53
- private EditText resultEditText ;
54
- private TextView resultTextView ;
55
- private Spinner resultSpinner ;
56
-
57
31
private KeypadView keypadView ;
58
32
59
33
private Converter converter ;
60
34
61
35
private int converterId ;
36
+ private ConverterDisplayView display ;
62
37
63
38
public static Intent getIntent (Context context , int converterId ) {
64
39
Intent intent = new Intent (context , ConverterActivity .class );
@@ -101,75 +76,21 @@ public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
101
76
}
102
77
});
103
78
104
- fab = (FloatingActionButton ) findViewById (R .id .fab );
105
-
106
- sourceSpinner = (Spinner ) findViewById (R .id .sourcespinner );
107
- sourceSpinner .setOnItemSelectedListener (new SpinnerListener ());
108
-
109
- resultSpinner = (Spinner ) findViewById (R .id .resultspinner );
110
- resultSpinner .setOnItemSelectedListener (new SpinnerListener ());
111
-
112
- sourceEditText = (EditText ) findViewById (R .id .sourcevalue );
113
- sourceEditText .addTextChangedListener (new TextWatcher () {
114
- @ Override public void beforeTextChanged (CharSequence s , int start , int count , int after ) {}
115
-
116
- @ Override public void onTextChanged (CharSequence s , int start , int before , int count ) {}
117
-
118
- @ Override
119
- public void afterTextChanged (Editable s ) {
120
- if (sourceEditText .getText ().toString ().equals ("." )) {
121
- sourceEditText .setText ("0." );
122
- sourceEditText .setSelection (sourceEditText .getText ().toString ().length ());
123
- }
124
-
125
- if (sourceEditText .getText ().toString ().equals ("-." )) {
126
- sourceEditText .setText ("-0." );
127
- sourceEditText .setSelection (sourceEditText .getText ().toString ().length ());
128
- }
129
-
130
- if (!sourceEditText .getText ().toString ().equals ("-" )) convert ();
131
- }
132
- });
133
- resultEditText = (EditText ) findViewById (R .id .resultvalue );
134
-
135
- sourceTextView = (TextView ) findViewById (R .id .sourcevaluesymbol );
136
- resultTextView = (TextView ) findViewById (R .id .resultvaluesymbol );
137
-
138
- fab .setOnClickListener (new View .OnClickListener () {
139
- @ Override
140
- public void onClick (View v ) {
141
- String temp = sourceEditText .getText ().toString ();
142
- sourceEditText .setText (resultEditText .getText ().toString ());
143
- resultEditText .setText (temp );
144
- int position = sourceSpinner .getSelectedItemPosition ();
145
- sourceSpinner .setSelection (resultSpinner .getSelectedItemPosition ());
146
- resultSpinner .setSelection (position );
147
- convert ();
148
- }
149
- });
150
-
151
- sourceTextView .setOnClickListener (new View .OnClickListener () {
152
- @ Override public void onClick (View v ) { sourceSpinner .performClick (); }
153
- });
154
-
155
- resultTextView .setOnClickListener (new View .OnClickListener () {
156
- @ Override public void onClick (View v ) { resultSpinner .performClick (); }
157
- });
158
-
79
+ display = (ConverterDisplayView ) findViewById (R .id .display );
159
80
keypadView = (KeypadView ) findViewById (R .id .keypad );
160
- keypadView . setEditText ( sourceEditText );
81
+ display . setupWithKeypad ( keypadView );
161
82
162
83
keypadView .setCopyListener (
163
84
new View .OnClickListener () {
164
85
@ Override
165
86
public void onClick (View v ) {
166
- copyResultToClipboard (false );
87
+ display . copyResultToClipboard (false );
167
88
}
168
89
},
169
90
new View .OnLongClickListener () {
170
91
@ Override
171
92
public boolean onLongClick (View v ) {
172
- copyResultToClipboard (true );
93
+ display . copyResultToClipboard (true );
173
94
return true ;
174
95
}
175
96
}
@@ -178,23 +99,7 @@ public boolean onLongClick(View v) {
178
99
keypadView .setBackspaceLongClickListener (new View .OnLongClickListener () {
179
100
@ Override
180
101
public boolean onLongClick (View v ) {
181
- if (android .os .Build .VERSION .SDK_INT >= android .os .Build .VERSION_CODES .LOLLIPOP ) {
182
- final View myView = findViewById (R .id .reveal_container );
183
-
184
- int cx = myView .getWidth ();
185
- int cy = myView .getHeight () / 2 ;
186
-
187
- float finalRadius = (float ) Math .hypot (cx , cy );
188
-
189
- Animator anim =
190
- ViewAnimationUtils .createCircularReveal (myView , cx , cy , 0 , finalRadius );
191
-
192
- myView .setVisibility (View .VISIBLE );
193
- anim .start ();
194
- }
195
-
196
- sourceEditText .setText ("" );
197
- resultEditText .setText ("" );
102
+ display .erase ();
198
103
return true ;
199
104
}
200
105
});
@@ -206,11 +111,9 @@ private void setConverter() {
206
111
new InitDataAsync ().execute ();
207
112
}
208
113
209
- private void convert () {
210
- if (sourceEditText .getText ().toString ().equals ("" )) resultEditText .setText ("" );
211
- else resultEditText .setText (converter .convert (sourceEditText .getText ().toString (),
212
- sourceSpinner .getSelectedItemPosition (),
213
- resultSpinner .getSelectedItemPosition ()));
114
+ public String convert (String value , int from , int to ) {
115
+ if (!value .isEmpty ()) return converter .convert (value , from , to );
116
+ return "" ;
214
117
}
215
118
216
119
@ Override
@@ -251,32 +154,7 @@ public void finish() {
251
154
overridePendingTransition (R .anim .leave_in_anim , R .anim .leave_out_anim );
252
155
}
253
156
254
- private void copyResultToClipboard (boolean withUnitSymbol ) {
255
- String textToCopy = "" ;
256
- if (!resultEditText .getText ().toString ().equals ("" )) {
257
- textToCopy = resultEditText .getText ().toString ();
258
- }
259
- if (withUnitSymbol )
260
- {
261
- textToCopy += resultTextView .getText ().toString ();
262
- }
263
- ClipboardManager clipboard = (ClipboardManager )
264
- getSystemService (CLIPBOARD_SERVICE );
265
- clipboard .setPrimaryClip (ClipData .newPlainText (COPY_RESULT , textToCopy ));
266
- Snackbar .make (keypadView , R .string .copy_result_toast , Snackbar .LENGTH_SHORT ).show ();
267
- }
268
157
269
- private class SpinnerListener implements Spinner .OnItemSelectedListener {
270
- @ Override
271
- public void onItemSelected (AdapterView <?> parent , View view , int position , long id ) {
272
- ((TextView ) parent .getChildAt (0 )).setTextColor (Color .WHITE );
273
- sourceTextView .setText (Html .fromHtml (converter .getUnitSymbol (sourceSpinner .getSelectedItemPosition ())));
274
- resultTextView .setText (Html .fromHtml (converter .getUnitSymbol (resultSpinner .getSelectedItemPosition ())));
275
- convert ();
276
- }
277
-
278
- @ Override public void onNothingSelected (AdapterView <?> parent ) { convert (); }
279
- }
280
158
281
159
private class InitDataAsync extends AsyncTask <Void , Void , Void > {
282
160
private ProgressDialog mDialog ;
@@ -285,8 +163,7 @@ private class InitDataAsync extends AsyncTask<Void, Void, Void> {
285
163
protected void onPreExecute () {
286
164
super .onPreExecute ();
287
165
288
- sourceEditText .setText ("" );
289
- resultEditText .setText ("" );
166
+ //display.erase();
290
167
291
168
mDialog = new ProgressDialog (ConverterActivity .this );
292
169
mDialog .setMessage (getString (R .string .loading_data ));
@@ -300,17 +177,7 @@ protected void onPostExecute(Void aVoid) {
300
177
301
178
setTitle (converter .getTitle ());
302
179
303
- ArrayAdapter <String > adapter =
304
- new ArrayAdapter <>(ConverterActivity .this , android .R .layout .simple_list_item_1 );
305
- for (Unit unit : converter .getUnits ()) {
306
- adapter .add (unit .getName ());
307
- }
308
-
309
- sourceSpinner .setAdapter (adapter );
310
- resultSpinner .setAdapter (adapter );
311
- Spanned symbol = Html .fromHtml (converter .getUnitSymbol (0 ));
312
- sourceTextView .setText (symbol );
313
- resultTextView .setText (symbol );
180
+ display .setUnits (converter .getUnits ());
314
181
315
182
if (mDialog != null && mDialog .isShowing ()) mDialog .dismiss ();
316
183
}
0 commit comments