Skip to content

Commit feeb32e

Browse files
committed
Moved all converter functionality outside activity to Display view
Added beautiful animation :D
1 parent a8abb92 commit feeb32e

File tree

6 files changed

+391
-367
lines changed

6 files changed

+391
-367
lines changed

app/src/main/java/org/nevack/unitconverter/ConverterActivity.java

Lines changed: 12 additions & 145 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,39 @@
11
package org.nevack.unitconverter;
22

3-
import android.animation.Animator;
43
import android.app.ProgressDialog;
5-
import android.content.ClipData;
6-
import android.content.ClipboardManager;
74
import android.content.Context;
85
import android.content.Intent;
9-
import android.graphics.Color;
106
import android.os.AsyncTask;
117
import android.os.Bundle;
128
import android.support.annotation.NonNull;
13-
import android.support.design.widget.FloatingActionButton;
149
import android.support.design.widget.NavigationView;
15-
import android.support.design.widget.Snackbar;
1610
import android.support.v4.view.GravityCompat;
1711
import android.support.v4.widget.DrawerLayout;
1812
import android.support.v7.app.ActionBar;
1913
import android.support.v7.app.AppCompatActivity;
2014
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;
2515
import android.view.Menu;
2616
import android.view.MenuItem;
2717
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;
3418

3519
import org.nevack.unitconverter.model.EUnitCategory;
36-
import org.nevack.unitconverter.model.Unit;
3720
import org.nevack.unitconverter.model.converter.Converter;
3821

39-
public class ConverterActivity extends AppCompatActivity {
22+
public class ConverterActivity extends AppCompatActivity implements ConverterDisplayView.DisplayCallback {
4023

4124
private static final String CATEGORY_ID = "category_id";
42-
private static final String COPY_RESULT = "converter_result";
4325
private static final String ID_EXTRA = "CONVERTERID";
4426

4527
private Toolbar toolbar;
46-
private FloatingActionButton fab;
4728
private NavigationView navigationView;
4829
private DrawerLayout drawerLayout;
4930

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-
5731
private KeypadView keypadView;
5832

5933
private Converter converter;
6034

6135
private int converterId;
36+
private ConverterDisplayView display;
6237

6338
public static Intent getIntent(Context context, int converterId) {
6439
Intent intent = new Intent(context, ConverterActivity.class);
@@ -101,75 +76,21 @@ public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
10176
}
10277
});
10378

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);
15980
keypadView = (KeypadView) findViewById(R.id.keypad);
160-
keypadView.setEditText(sourceEditText);
81+
display.setupWithKeypad(keypadView);
16182

16283
keypadView.setCopyListener(
16384
new View.OnClickListener() {
16485
@Override
16586
public void onClick(View v) {
166-
copyResultToClipboard(false);
87+
display.copyResultToClipboard(false);
16788
}
16889
},
16990
new View.OnLongClickListener() {
17091
@Override
17192
public boolean onLongClick(View v) {
172-
copyResultToClipboard(true);
93+
display.copyResultToClipboard(true);
17394
return true;
17495
}
17596
}
@@ -178,23 +99,7 @@ public boolean onLongClick(View v) {
17899
keypadView.setBackspaceLongClickListener(new View.OnLongClickListener() {
179100
@Override
180101
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();
198103
return true;
199104
}
200105
});
@@ -206,11 +111,9 @@ private void setConverter() {
206111
new InitDataAsync().execute();
207112
}
208113

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 "";
214117
}
215118

216119
@Override
@@ -251,32 +154,7 @@ public void finish() {
251154
overridePendingTransition(R.anim.leave_in_anim, R.anim.leave_out_anim);
252155
}
253156

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-
}
268157

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-
}
280158

281159
private class InitDataAsync extends AsyncTask<Void, Void, Void> {
282160
private ProgressDialog mDialog;
@@ -285,8 +163,7 @@ private class InitDataAsync extends AsyncTask<Void, Void, Void> {
285163
protected void onPreExecute() {
286164
super.onPreExecute();
287165

288-
sourceEditText.setText("");
289-
resultEditText.setText("");
166+
//display.erase();
290167

291168
mDialog = new ProgressDialog(ConverterActivity.this);
292169
mDialog.setMessage(getString(R.string.loading_data));
@@ -300,17 +177,7 @@ protected void onPostExecute(Void aVoid) {
300177

301178
setTitle(converter.getTitle());
302179

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());
314181

315182
if (mDialog != null && mDialog.isShowing()) mDialog.dismiss();
316183
}

0 commit comments

Comments
 (0)