Skip to content

Commit 890ff6b

Browse files
authored
Merge pull request #2 from rMozg/develop
tests + some fixes
2 parents 60d03d1 + 2c2f435 commit 890ff6b

File tree

12 files changed

+467
-33
lines changed

12 files changed

+467
-33
lines changed

app/src/main/java/ru/mozgovoy/oleg/exchangerate/model/MyApplication.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
import ru.mozgovoy.oleg.exchangerate.model.exchange.ConverterEngine;
66
import ru.mozgovoy.oleg.exchangerate.model.exchange.IConverterEngine;
7+
import ru.mozgovoy.oleg.exchangerate.model.math.IMathEngine;
8+
import ru.mozgovoy.oleg.exchangerate.model.math.MathEngine;
79
import ru.mozgovoy.oleg.exchangerate.model.network.INetworkHelper;
810
import ru.mozgovoy.oleg.exchangerate.model.network.NetworkHelper;
911
import ru.mozgovoy.oleg.exchangerate.model.storage.IStorage;
@@ -15,6 +17,7 @@ public class MyApplication extends Application {
1517
private IStorage storage;
1618
private IConverterEngine converterEngine;
1719
private INetworkHelper networkHelper;
20+
private IMathEngine mathEngine;
1821

1922
public static MyApplication getInstance() {
2023
return myApplication;
@@ -27,6 +30,7 @@ public void onCreate() {
2730
storage = new SharedPreferenceEngine(getApplicationContext());
2831
converterEngine = new ConverterEngine();
2932
networkHelper = new NetworkHelper();
33+
mathEngine = new MathEngine();
3034
}
3135

3236
public IStorage getStorage() {
@@ -40,4 +44,8 @@ public IConverterEngine getConverterEngine() {
4044
public INetworkHelper getNetworkHelper() {
4145
return networkHelper;
4246
}
47+
48+
public IMathEngine getMathEngine() {
49+
return mathEngine;
50+
}
4351
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package ru.mozgovoy.oleg.exchangerate.model.math;
2+
3+
import android.support.annotation.NonNull;
4+
5+
import java.math.BigDecimal;
6+
7+
import ru.mozgovoy.oleg.exchangerate.model.core.CurrencyRate;
8+
9+
10+
public interface IMathEngine {
11+
@NonNull
12+
BigDecimal convertCurrency(@NonNull BigDecimal value, @NonNull CurrencyRate currencyRateFrom, @NonNull CurrencyRate currencyRateTo);
13+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package ru.mozgovoy.oleg.exchangerate.model.math;
2+
3+
import android.support.annotation.NonNull;
4+
5+
import java.math.BigDecimal;
6+
7+
import ru.mozgovoy.oleg.exchangerate.model.core.CurrencyRate;
8+
9+
public class MathEngine implements IMathEngine {
10+
11+
private static final int MATH_SCALE = 10;
12+
13+
@Override
14+
@NonNull
15+
public BigDecimal convertCurrency(@NonNull BigDecimal value, @NonNull CurrencyRate currencyRateFrom, @NonNull CurrencyRate currencyRateTo) {
16+
return value
17+
.multiply(currencyRateFrom.getValue())
18+
.multiply(new BigDecimal(currencyRateTo.getNominal()))
19+
.divide(new BigDecimal(currencyRateFrom.getNominal())
20+
.multiply(currencyRateTo.getValue()),
21+
MATH_SCALE,
22+
BigDecimal.ROUND_HALF_UP);
23+
}
24+
}

app/src/main/java/ru/mozgovoy/oleg/exchangerate/model/network/INetworkHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@
44

55
public interface INetworkHelper {
66
@Nullable
7-
String downloadFileToString(String address);
7+
String downloadFileToString(String address, boolean utf);
88
}

app/src/main/java/ru/mozgovoy/oleg/exchangerate/model/network/NetworkHelper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public class NetworkHelper implements INetworkHelper {
1111

1212
@Override
1313
@Nullable
14-
public String downloadFileToString(String address) {
14+
public String downloadFileToString(String address, boolean utf) {
1515
String xmlString = null;
1616
HttpURLConnection urlConnection = null;
1717
try {
@@ -20,7 +20,7 @@ public String downloadFileToString(String address) {
2020
urlConnection.setRequestMethod("GET");
2121
if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
2222
StringBuilder xmlResponse = new StringBuilder();
23-
BufferedReader input = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "CP1251"), 8192);
23+
BufferedReader input = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), utf ? "UTF8" : "CP1251"), 8192);
2424
String strLine = null;
2525
while ((strLine = input.readLine()) != null) {
2626
xmlResponse.append(strLine);

app/src/main/java/ru/mozgovoy/oleg/exchangerate/service/DownloadService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ protected void onHandleIntent(Intent intent) {
4646
}
4747

4848
private void startDownloadInService(INetworkHelper networkHelper, ResultReceiver resultReceiver) {
49-
String curXml = networkHelper.downloadFileToString(CURRENCY_RATE_ADDRESS);
49+
String curXml = networkHelper.downloadFileToString(CURRENCY_RATE_ADDRESS, false);
5050
Bundle result = new Bundle();
5151
result.putString(RatePresenter.DownloadResultReceiver.RESULT_OK_PARAM_XML_TEXT, curXml);
5252
resultReceiver.send(RatePresenter.DownloadResultReceiver.RESULT_OK, result);

app/src/main/java/ru/mozgovoy/oleg/exchangerate/ui/presenter/RatePresenter.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,26 +17,27 @@
1717
import ru.mozgovoy.oleg.exchangerate.model.core.Currency;
1818
import ru.mozgovoy.oleg.exchangerate.model.core.CurrencyRate;
1919
import ru.mozgovoy.oleg.exchangerate.model.exchange.IConverterEngine;
20+
import ru.mozgovoy.oleg.exchangerate.model.math.IMathEngine;
2021
import ru.mozgovoy.oleg.exchangerate.model.storage.IStorage;
2122
import ru.mozgovoy.oleg.exchangerate.service.DownloadService;
2223
import ru.mozgovoy.oleg.exchangerate.ui.view.IRateView;
2324

2425
public class RatePresenter implements IRatePresenter {
2526

26-
private static final int MATH_SCALE = 6;
27-
2827
private final CurrencyRate alwaysInListCurrencyRate;
2928
private final IRateView rateView;
3029
private final IStorage storage;
3130
private final IConverterEngine converterEngine;
31+
private final IMathEngine mathEngine;
3232
private final Map<Currency, CurrencyRate> currencyRates = new ConcurrentHashMap<>();
3333

3434

3535
public RatePresenter(
3636
@NonNull Resources resources,
3737
@NonNull IRateView rateView,
3838
@NonNull IStorage storage,
39-
@NonNull IConverterEngine converterEngine
39+
@NonNull IConverterEngine converterEngine,
40+
@NonNull IMathEngine mathEngine
4041
) {
4142
alwaysInListCurrencyRate = new CurrencyRate(
4243
new Currency(
@@ -47,6 +48,7 @@ public RatePresenter(
4748
this.rateView = rateView;
4849
this.storage = storage;
4950
this.converterEngine = converterEngine;
51+
this.mathEngine = mathEngine;
5052
refreshCurrencyRatesMap(storage.getCurrencyRates());
5153
rateView.setCurrency(new ArrayList<Currency>(currencyRates.keySet()));
5254
}
@@ -85,13 +87,8 @@ public void startRecalculate(@NonNull BigDecimal value, @NonNull Currency curren
8587
rateView.showError(IRateView.ErrorType.CALCULATE);
8688
return;
8789
}
88-
BigDecimal res = value
89-
.multiply(currencyRateFrom.getValue())
90-
.multiply(new BigDecimal(currencyRateTo.getNominal()))
91-
.divide(new BigDecimal(currencyRateFrom.getNominal())
92-
.multiply(currencyRateTo.getValue()),
93-
MATH_SCALE,
94-
BigDecimal.ROUND_HALF_UP);
90+
91+
BigDecimal res = mathEngine.convertCurrency(value, currencyRateFrom, currencyRateTo);
9592
rateView.showRecalculatedValue(res);
9693
}
9794

app/src/main/java/ru/mozgovoy/oleg/exchangerate/ui/view/RateActivity.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,8 @@ protected void onCreate(Bundle savedInstanceState) {
6565
getResources(),
6666
this,
6767
MyApplication.getInstance().getStorage(),
68-
MyApplication.getInstance().getConverterEngine()
68+
MyApplication.getInstance().getConverterEngine(),
69+
MyApplication.getInstance().getMathEngine()
6970
);
7071
ratePresenter.startDownloadNewRates(getApplicationContext());
7172

@@ -167,7 +168,7 @@ public void setCurrency(List<Currency> currencies) {
167168

168169
@Override
169170
public void showRecalculatedValue(BigDecimal value) {
170-
textTo.setText(value.setScale(MAX_SCALE, BigDecimal.ROUND_HALF_UP).toPlainString());
171+
textTo.setText(value.setScale(MAX_SCALE, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString());
171172
}
172173

173174
@Override

app/src/test/java/ru/mozgovoy/oleg/exchangerate/ExampleUnitTest.java

Lines changed: 0 additions & 17 deletions
This file was deleted.

0 commit comments

Comments
 (0)