From 92f08e00ed483dcd39dea3578f0d8bb4fc4c2472 Mon Sep 17 00:00:00 2001 From: Tanguy Herbron Date: Fri, 3 Aug 2018 03:22:20 +0200 Subject: [PATCH] Update code with new interfaces for a clearer code (I hope so...) - Preview of the RecordTransactionActivity buying UI - MarketCapManager.java and CoinmarketCapAPIManager are now merged --- .../Activities/CurrencySelectionActivity.java | 34 +- .../DetailsActivityFragments/Charts.java | 171 ++++----- .../Transactions.java | 77 ++-- .../moodl/Activities/HomeActivity.java | 5 - .../MarketCapitalization.java | 127 ++++--- .../HomeActivityFragments/Overview.java | 62 +-- .../HomeActivityFragments/Summary.java | 111 ++++-- .../HomeActivityFragments/Watchlist.java | 157 ++++---- .../Activities/RecordTransactionActivity.java | 59 +-- .../BuyFragment.java | 24 +- .../CurrencyInfoUpdateNotifierInterface.java | 13 + .../moodl/DataManagers/BalanceManager.java | 168 +++------ .../DataManagers/CurrencyData/Currency.java | 29 +- .../CurrencyData/CurrencyCardview.java | 78 ++-- .../CurrencyData/CurrencyTickerList.java | 202 ---------- .../ExchangeManager/BinanceManager.java | 36 +- .../ExchangeManager/Exchange.java | 11 + .../ExchangeManager/HitBtcManager.java | 42 ++- .../CoinmarketCapAPIManager.java | 352 ++++++++++++++++++ .../CryptocompareApiManager.java} | 128 ++++++- .../DataManagers/InfoAPIManagers/Pair.java | 18 + .../moodl/DataManagers/MarketCapManager.java | 182 --------- .../herbron/moodl/DataNotifierInterface.java | 16 - .../BalanceUpdateNotifierInterface.java | 12 + .../BinanceUpdateNotifierInterface.java | 10 + .../CoinmarketcapNotifierInterface.java | 16 + .../CryptocompareNotifierInterface.java | 9 + .../HitBTCUpdateNotifierInterface.java | 9 + .../MoodlboxNotifierInterface.java | 9 + .../LayoutManagers/OverviewListAdapter.java | 8 +- .../main/java/com/herbron/moodl/MoodlBox.java | 17 +- app/src/main/res/layout/fragment_buy.xml | 158 +++++++- app/src/main/res/values-fr/strings.xml | 4 +- app/src/main/res/values/strings.xml | 9 +- 34 files changed, 1360 insertions(+), 1003 deletions(-) create mode 100644 app/src/main/java/com/herbron/moodl/CurrencyInfoUpdateNotifierInterface.java delete mode 100644 app/src/main/java/com/herbron/moodl/DataManagers/CurrencyData/CurrencyTickerList.java create mode 100644 app/src/main/java/com/herbron/moodl/DataManagers/InfoAPIManagers/CoinmarketCapAPIManager.java rename app/src/main/java/com/herbron/moodl/DataManagers/{CurrencyData/CurrencyDetailsList.java => InfoAPIManagers/CryptocompareApiManager.java} (55%) create mode 100644 app/src/main/java/com/herbron/moodl/DataManagers/InfoAPIManagers/Pair.java delete mode 100644 app/src/main/java/com/herbron/moodl/DataManagers/MarketCapManager.java delete mode 100644 app/src/main/java/com/herbron/moodl/DataNotifierInterface.java create mode 100644 app/src/main/java/com/herbron/moodl/DataNotifiers/BalanceUpdateNotifierInterface.java create mode 100644 app/src/main/java/com/herbron/moodl/DataNotifiers/BinanceUpdateNotifierInterface.java create mode 100644 app/src/main/java/com/herbron/moodl/DataNotifiers/CoinmarketcapNotifierInterface.java create mode 100644 app/src/main/java/com/herbron/moodl/DataNotifiers/CryptocompareNotifierInterface.java create mode 100644 app/src/main/java/com/herbron/moodl/DataNotifiers/HitBTCUpdateNotifierInterface.java create mode 100644 app/src/main/java/com/herbron/moodl/DataNotifiers/MoodlboxNotifierInterface.java diff --git a/app/src/main/java/com/herbron/moodl/Activities/CurrencySelectionActivity.java b/app/src/main/java/com/herbron/moodl/Activities/CurrencySelectionActivity.java index fe59f75..fc2e623 100644 --- a/app/src/main/java/com/herbron/moodl/Activities/CurrencySelectionActivity.java +++ b/app/src/main/java/com/herbron/moodl/Activities/CurrencySelectionActivity.java @@ -16,9 +16,9 @@ import android.widget.ListView; import android.widget.SearchView; import android.widget.Toast; -import com.herbron.moodl.DataManagers.BalanceManager; +import com.herbron.moodl.DataNotifiers.CryptocompareNotifierInterface; import com.herbron.moodl.DataManagers.CurrencyData.Currency; -import com.herbron.moodl.DataManagers.CurrencyData.CurrencyDetailsList; +import com.herbron.moodl.DataManagers.InfoAPIManagers.CryptocompareApiManager; import com.herbron.moodl.DataManagers.DatabaseManager; import com.herbron.moodl.DataManagers.PreferencesManager; import com.herbron.moodl.LayoutManagers.CoinWatchlistAdapter; @@ -27,12 +27,12 @@ import com.herbron.moodl.R; import java.util.ArrayList; import java.util.List; -public class CurrencySelectionActivity extends AppCompatActivity implements SearchView.OnQueryTextListener{ +public class CurrencySelectionActivity extends AppCompatActivity implements SearchView.OnQueryTextListener, CryptocompareNotifierInterface { private CoinWatchlistAdapter adapter; private ListView listView; private android.widget.Filter filter; - private CurrencyDetailsList currencyDetailsList; + private CryptocompareApiManager cryptocompareApiManager; private boolean isWatchList; @Override @@ -44,7 +44,8 @@ public class CurrencySelectionActivity extends AppCompatActivity implements Sear setContentView(R.layout.activity_add_currency); - currencyDetailsList = CurrencyDetailsList.getInstance(this); + cryptocompareApiManager = CryptocompareApiManager.getInstance(this); + cryptocompareApiManager.addListener(this); setTitle(getString(R.string.select_coin)); @@ -67,8 +68,8 @@ public class CurrencySelectionActivity extends AppCompatActivity implements Sear private void setupAdapter() { - List currencyNames = currencyDetailsList.getCurrenciesName(); - List currencySymbols = currencyDetailsList.getCurrenciesSymbol(); + List currencyNames = cryptocompareApiManager.getCurrenciesName(); + List currencySymbols = cryptocompareApiManager.getCurrenciesSymbol(); ArrayList currencyArrayList = new ArrayList<>(); @@ -178,6 +179,16 @@ public class CurrencySelectionActivity extends AppCompatActivity implements Sear }); } + @Override + public void onDetailsUpdated() { + detailsEvent(); + } + + @Override + public void onExchangesUpdated() { + + } + private class ListLoader extends AsyncTask { @Override @@ -200,14 +211,9 @@ public class CurrencySelectionActivity extends AppCompatActivity implements Sear Looper.prepare(); } - if(!currencyDetailsList.isUpToDate()) + if(!cryptocompareApiManager.isDetailsUpToDate()) { - currencyDetailsList.update(new BalanceManager.IconCallBack() { - @Override - public void onSuccess() { - detailsEvent(); - } - }); + cryptocompareApiManager.updateDetails(); } else { diff --git a/app/src/main/java/com/herbron/moodl/Activities/DetailsActivityFragments/Charts.java b/app/src/main/java/com/herbron/moodl/Activities/DetailsActivityFragments/Charts.java index 70f1c9a..a607dcd 100644 --- a/app/src/main/java/com/herbron/moodl/Activities/DetailsActivityFragments/Charts.java +++ b/app/src/main/java/com/herbron/moodl/Activities/DetailsActivityFragments/Charts.java @@ -33,6 +33,7 @@ import com.github.mikephil.charting.data.LineData; import com.github.mikephil.charting.data.LineDataSet; import com.github.mikephil.charting.highlight.Highlight; import com.github.mikephil.charting.listener.OnChartValueSelectedListener; +import com.herbron.moodl.CurrencyInfoUpdateNotifierInterface; import com.herbron.moodl.DataManagers.CurrencyData.Currency; import com.herbron.moodl.DataManagers.CurrencyData.CurrencyDataChart; import com.herbron.moodl.DataManagers.PreferencesManager; @@ -51,7 +52,7 @@ import static com.herbron.moodl.MoodlBox.numberConformer; * Created by Tiji on 13/05/2018. */ -public class Charts extends Fragment { +public class Charts extends Fragment implements CurrencyInfoUpdateNotifierInterface { private final static int HOUR = 0; private final static int DAY = 1; @@ -72,6 +73,8 @@ public class Charts extends Fragment { private Button lineChartButton; private Button candleStickChartButton; + private Spinner timeIntervalSpinner; + @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) @@ -80,6 +83,8 @@ public class Charts extends Fragment { currency = getActivity().getIntent().getParcelableExtra("currency"); + currency.setListener(this); + lineChart = view.findViewById(R.id.chartPriceView); candleStickChart = view.findViewById(R.id.chartCandleStickView); lineChartButton = view.findViewById(R.id.lineChartButton); @@ -125,17 +130,17 @@ public class Charts extends Fragment { private void initializeSpinners() { - Spinner spinner = view.findViewById(R.id.timeIntervalSinner); + timeIntervalSpinner = view.findViewById(R.id.timeIntervalSinner); ArrayAdapter adapter = ArrayAdapter.createFromResource(getContext(), R.array.time_interval_string_array, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - spinner.setAdapter(adapter); + timeIntervalSpinner.setAdapter(adapter); - spinner.setSelection(2); + timeIntervalSpinner.setSelection(2); - spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + timeIntervalSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView adapterView, View view, int i, long l) { updateCharts(i); @@ -158,121 +163,31 @@ public class Charts extends Fragment { switch (index) { case 0: - currency.updateHistoryMinutes(getContext(), preferencesManager.getDefaultCurrency(), new Currency.CurrencyCallBack() { - @Override - public void onSuccess(Currency currency) { - getActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - updateChartTab(Charts.HOUR, 1); - } - }); - } - }); + currency.updateHistoryMinutes(getContext(), preferencesManager.getDefaultCurrency()); break; case 1: - currency.updateHistoryMinutes(getContext(), preferencesManager.getDefaultCurrency(), new Currency.CurrencyCallBack() { - @Override - public void onSuccess(Currency currency) { - getActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - updateChartTab(Charts.HOUR, 3); - } - }); - } - }); + currency.updateHistoryMinutes(getContext(), preferencesManager.getDefaultCurrency()); break; case 2: - currency.updateHistoryMinutes(getContext(), preferencesManager.getDefaultCurrency(), new Currency.CurrencyCallBack() { - @Override - public void onSuccess(Currency currency) { - getActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - updateChartTab(Charts.DAY, 1); - } - }); - } - }); + currency.updateHistoryMinutes(getContext(), preferencesManager.getDefaultCurrency()); break; case 3: - currency.updateHistoryHours(getContext(), preferencesManager.getDefaultCurrency(), new Currency.CurrencyCallBack() { - @Override - public void onSuccess(Currency currency) { - getActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - updateChartTab(Charts.DAY, 3); - } - }); - } - }); + currency.updateHistoryHours(getContext(), preferencesManager.getDefaultCurrency()); break; case 4: - currency.updateHistoryHours(getContext(), preferencesManager.getDefaultCurrency(), new Currency.CurrencyCallBack() { - @Override - public void onSuccess(Currency currency) { - getActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - updateChartTab(Charts.WEEK, 11); - } - }); - } - }); + currency.updateHistoryHours(getContext(), preferencesManager.getDefaultCurrency()); break; case 5: - currency.updateHistoryHours(getContext(), preferencesManager.getDefaultCurrency(), new Currency.CurrencyCallBack() { - @Override - public void onSuccess(Currency currency) { - getActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - updateChartTab(Charts.MONTH, 1); - } - }); - } - }); + currency.updateHistoryHours(getContext(), preferencesManager.getDefaultCurrency()); break; case 6: - currency.updateHistoryDays(getContext(), preferencesManager.getDefaultCurrency(), new Currency.CurrencyCallBack() { - @Override - public void onSuccess(Currency currency) { - getActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - updateChartTab(Charts.MONTH, 3); - } - }); - } - }); + currency.updateHistoryDays(getContext(), preferencesManager.getDefaultCurrency()); break; case 7: - currency.updateHistoryDays(getContext(), preferencesManager.getDefaultCurrency(), new Currency.CurrencyCallBack() { - @Override - public void onSuccess(Currency currency) { - getActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - updateChartTab(Charts.MONTH, 6); - } - }); - } - }); + currency.updateHistoryDays(getContext(), preferencesManager.getDefaultCurrency()); break; case 8: - currency.updateHistoryDays(getContext(), preferencesManager.getDefaultCurrency(), new Currency.CurrencyCallBack() { - @Override - public void onSuccess(Currency currency) { - getActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - updateChartTab(Charts.YEAR, 1); - } - }); - } - }); + currency.updateHistoryDays(getContext(), preferencesManager.getDefaultCurrency()); break; } } @@ -684,4 +599,52 @@ public class Charts extends Fragment { } } + @Override + public void onTimestampPriveUpdated(String price) { + + } + + @Override + public void onHistoryDataUpdated() { + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + switch (timeIntervalSpinner.getSelectedItemPosition()) + { + case 0: + updateChartTab(Charts.HOUR, 1); + break; + case 1: + updateChartTab(Charts.HOUR, 3); + break; + case 2: + updateChartTab(Charts.DAY, 1); + break; + case 3: + updateChartTab(Charts.DAY, 3); + break; + case 4: + updateChartTab(Charts.WEEK, 11); + break; + case 5: + updateChartTab(Charts.MONTH, 1); + break; + case 6: + updateChartTab(Charts.MONTH, 3); + break; + case 7: + updateChartTab(Charts.MONTH, 6); + break; + case 8: + updateChartTab(Charts.YEAR, 1); + break; + } + } + }); + } + + @Override + public void onPriceUpdated(Currency currency) { + + } } diff --git a/app/src/main/java/com/herbron/moodl/Activities/DetailsActivityFragments/Transactions.java b/app/src/main/java/com/herbron/moodl/Activities/DetailsActivityFragments/Transactions.java index 7798cf2..f1a89ed 100644 --- a/app/src/main/java/com/herbron/moodl/Activities/DetailsActivityFragments/Transactions.java +++ b/app/src/main/java/com/herbron/moodl/Activities/DetailsActivityFragments/Transactions.java @@ -16,6 +16,7 @@ import android.widget.AbsListView; import android.widget.ListView; import android.widget.ProgressBar; +import com.herbron.moodl.DataNotifiers.BinanceUpdateNotifierInterface; import com.herbron.moodl.DataManagers.CurrencyData.Currency; import com.herbron.moodl.DataManagers.CurrencyData.Trade; import com.herbron.moodl.DataManagers.CurrencyData.Transaction; @@ -209,7 +210,7 @@ public class Transactions extends Fragment { } } - private class TradeUpdater extends AsyncTask + private class TradeUpdater extends AsyncTask implements BinanceUpdateNotifierInterface { @Override protected void onPreExecute() @@ -226,41 +227,8 @@ public class Transactions extends Fragment { @Override protected Void doInBackground(Void... params) { - binanceManager.updateTrades(new BinanceManager.BinanceCallBack() { - @Override - public void onSuccess() { - ArrayList trades = binanceManager.getTrades(); - returnedTrades = new ArrayList<>(); - for(int i = trades.size() - 1; i >= 0 ; i--) - { - returnedTrades.add(trades.get(i)); - } - - try { - getActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - ArrayList trades = new ArrayList<>(); - - for(int i = 0; i < 20 && i < returnedTrades.size(); i++) - { - trades.add(returnedTrades.get(i)); - } - - drawTradeList(trades); - } - }); - } catch (NullPointerException e) { - Log.d("moodl", "Transactions do not need to be updated anymore"); - } - } - - @Override - public void onError(String error) { - - } - }, currency.getSymbol()); + binanceManager.updateTrades(currency.getSymbol()); return null; } @@ -270,5 +238,44 @@ public class Transactions extends Fragment { { } + + @Override + public void onBinanceTradesUpdated() { + ArrayList trades = binanceManager.getTrades(); + returnedTrades = new ArrayList<>(); + + for(int i = trades.size() - 1; i >= 0 ; i--) + { + returnedTrades.add(trades.get(i)); + } + + try { + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + ArrayList trades = new ArrayList<>(); + + for(int i = 0; i < 20 && i < returnedTrades.size(); i++) + { + trades.add(returnedTrades.get(i)); + } + + drawTradeList(trades); + } + }); + } catch (NullPointerException e) { + Log.d("moodl", "Transactions do not need to be updated anymore"); + } + } + + @Override + public void onBinanceBalanceUpdateSuccess() { + + } + + @Override + public void onBinanceBalanceUpdateError(int accountId, String error) { + + } } } diff --git a/app/src/main/java/com/herbron/moodl/Activities/HomeActivity.java b/app/src/main/java/com/herbron/moodl/Activities/HomeActivity.java index e484cf0..52caf27 100644 --- a/app/src/main/java/com/herbron/moodl/Activities/HomeActivity.java +++ b/app/src/main/java/com/herbron/moodl/Activities/HomeActivity.java @@ -216,9 +216,4 @@ public class HomeActivity extends AppCompatActivity implements BalanceUpdateInte drawerBalanceTextView.setText(PlaceholderManager.getValueString(numberConformer(value), getApplicationContext())); } } - - public interface IconCallBack - { - void onSuccess(Bitmap bitmap); - } } diff --git a/app/src/main/java/com/herbron/moodl/Activities/HomeActivityFragments/MarketCapitalization.java b/app/src/main/java/com/herbron/moodl/Activities/HomeActivityFragments/MarketCapitalization.java index e166a63..fe255e6 100644 --- a/app/src/main/java/com/herbron/moodl/Activities/HomeActivityFragments/MarketCapitalization.java +++ b/app/src/main/java/com/herbron/moodl/Activities/HomeActivityFragments/MarketCapitalization.java @@ -27,19 +27,19 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.PercentFormatter; import com.github.mikephil.charting.highlight.Highlight; import com.github.mikephil.charting.listener.OnChartValueSelectedListener; -import com.herbron.moodl.Activities.HomeActivity; -import com.herbron.moodl.DataManagers.BalanceManager; +import com.herbron.moodl.DataNotifiers.CoinmarketcapNotifierInterface; +import com.herbron.moodl.DataNotifiers.CryptocompareNotifierInterface; import com.herbron.moodl.DataManagers.CurrencyData.Currency; -import com.herbron.moodl.DataManagers.CurrencyData.CurrencyDetailsList; -import com.herbron.moodl.DataManagers.MarketCapManager; +import com.herbron.moodl.DataManagers.InfoAPIManagers.CoinmarketCapAPIManager; +import com.herbron.moodl.DataManagers.InfoAPIManagers.CryptocompareApiManager; import com.herbron.moodl.DataManagers.PreferencesManager; import com.herbron.moodl.LayoutManagers.CustomPieChart; import com.herbron.moodl.MoodlBox; +import com.herbron.moodl.DataNotifiers.MoodlboxNotifierInterface; import com.herbron.moodl.PlaceholderManager; import com.herbron.moodl.R; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import static com.herbron.moodl.MoodlBox.getColor; @@ -49,15 +49,14 @@ import static java.lang.Math.abs; * Created by Tiji on 13/04/2018. */ -public class MarketCapitalization extends Fragment { +public class MarketCapitalization extends Fragment implements CryptocompareNotifierInterface, CoinmarketcapNotifierInterface { private PreferencesManager preferencesManager; - private MarketCapManager marketCapManager; - private HashMap dominantCurrenciesColors; + private CoinmarketCapAPIManager coinmarketCapAPIManager; private SwipeRefreshLayout refreshLayout; private long lastTimestamp; private String defaultCurrency; - private CurrencyDetailsList currencyDetailsList; + private CryptocompareApiManager cryptocompareApiManager; private boolean isDetailsUpdated; private boolean isTopCurrenciesUpdated; private boolean isMarketpCapUpdated; @@ -71,19 +70,15 @@ public class MarketCapitalization extends Fragment { view = inflater.inflate(R.layout.fragment_marketcap_homeactivity, container, false); preferencesManager = new PreferencesManager(getContext()); - marketCapManager = new MarketCapManager(getContext()); + coinmarketCapAPIManager = CoinmarketCapAPIManager.getInstance(getContext()); + coinmarketCapAPIManager.addListener(this); - currencyDetailsList = CurrencyDetailsList.getInstance(getContext()); + cryptocompareApiManager = CryptocompareApiManager.getInstance(getContext()); + cryptocompareApiManager.addListener(this); - if(!currencyDetailsList.isUpToDate()) + if(!cryptocompareApiManager.isDetailsUpToDate()) { - currencyDetailsList.update(new BalanceManager.IconCallBack() { - @Override - public void onSuccess() { - isDetailsUpdated = true; - countCompletedMarketCapRequest(); - } - }); + cryptocompareApiManager.updateDetails(); } else { @@ -152,7 +147,6 @@ public class MarketCapitalization extends Fragment { { updateMarketCap(false); } - } private void updateMarketCap(boolean mustUpdate) @@ -171,22 +165,9 @@ public class MarketCapitalization extends Fragment { lastTimestamp = System.currentTimeMillis() / 1000; - marketCapManager.updateTopCurrencies(new MarketCapManager.VolleyCallBack() { - @Override - public void onSuccess() - { - isTopCurrenciesUpdated = true; - countCompletedMarketCapRequest(); - } - }, preferencesManager.getDefaultCurrency()); + coinmarketCapAPIManager.updateTopCurrencies(preferencesManager.getDefaultCurrency()); - marketCapManager.updateMarketCap(new MarketCapManager.VolleyCallBack() { - @Override - public void onSuccess() { - isMarketpCapUpdated = true; - countCompletedMarketCapRequest(); - } - }, preferencesManager.getDefaultCurrency()); + coinmarketCapAPIManager.updateMarketCap(preferencesManager.getDefaultCurrency()); } else { @@ -217,14 +198,14 @@ public class MarketCapitalization extends Fragment { private PieDataSet getMarketDominanceDataSet() { List entries = new ArrayList<>(); - List topCurrencies = marketCapManager.getTopCurrencies(); + List topCurrencies = coinmarketCapAPIManager.getTopCurrencies(); ArrayList colors = new ArrayList<>(); float topCurrenciesDominance = 0; for(int i = 0; i < topCurrencies.size(); i++) { - PieEntry pieEntry = new PieEntry(topCurrencies.get(i).getDominance(marketCapManager.getMarketCap()), topCurrencies.get(i).getSymbol(), topCurrencies.get(i).getSymbol()); + PieEntry pieEntry = new PieEntry(topCurrencies.get(i).getDominance(coinmarketCapAPIManager.getMarketCap()), topCurrencies.get(i).getSymbol(), topCurrencies.get(i).getSymbol()); if(pieEntry.getValue() < 3) { @@ -232,7 +213,7 @@ public class MarketCapitalization extends Fragment { } entries.add(pieEntry); - topCurrenciesDominance += topCurrencies.get(i).getDominance(marketCapManager.getMarketCap()); + topCurrenciesDominance += topCurrencies.get(i).getDominance(coinmarketCapAPIManager.getMarketCap()); colors.add(topCurrencies.get(i).getChartColor()); } @@ -260,7 +241,7 @@ public class MarketCapitalization extends Fragment { { iconCounter++; - if(iconCounter >= marketCapManager.getTopCurrencies().size()) + if(iconCounter >= coinmarketCapAPIManager.getTopCurrencies().size()) { refreshDisplayedData(); } @@ -268,24 +249,25 @@ public class MarketCapitalization extends Fragment { private void updateIcons() { - for(int i = 0; i < marketCapManager.getTopCurrencies().size(); i++) + for(int i = 0; i < coinmarketCapAPIManager.getTopCurrencies().size(); i++) { - final Currency localCurrency = marketCapManager.getTopCurrencies().get(i); + final Currency localCurrency = coinmarketCapAPIManager.getTopCurrencies().get(i); final int index = i; - String iconUrl = MoodlBox.getIconUrl(marketCapManager.getTopCurrencies().get(i).getSymbol(), 500, currencyDetailsList); + String iconUrl = MoodlBox.getIconUrl(coinmarketCapAPIManager.getTopCurrencies().get(i).getSymbol(), 500, cryptocompareApiManager); if(iconUrl != null) { - MoodlBox.getBitmapFromURL(iconUrl, localCurrency.getSymbol(), getResources(), getContext(), new HomeActivity.IconCallBack() { + MoodlBox.getBitmapFromURL(iconUrl, localCurrency.getSymbol(), getResources(), getContext(), new MoodlboxNotifierInterface() { @Override - public void onSuccess(Bitmap bitmapIcon) { + public void onBitmapDownloaded(Bitmap bitmapIcon) { Palette.Builder builder = Palette.from(bitmapIcon); - marketCapManager.getTopCurrencies().get(index).setIcon(bitmapIcon); - marketCapManager.getTopCurrencies().get(index).setChartColor(builder.generate().getDominantColor(getColor(R.color.default_color, getContext()))); + coinmarketCapAPIManager.getTopCurrencies().get(index).setIcon(bitmapIcon); + coinmarketCapAPIManager.getTopCurrencies().get(index).setChartColor(builder.generate().getDominantColor(getColor(R.color.default_color, getContext()))); countIcons(); + } }); } @@ -310,11 +292,11 @@ public class MarketCapitalization extends Fragment { pieChart.setTouchEnabled(true); pieChart.setEntryLabelColor(Color.WHITE); - updateDetails(marketCapManager.getMarketCap(), marketCapManager.getDayVolume(), getString(R.string.global), 0); + updateDetails(coinmarketCapAPIManager.getMarketCap(), coinmarketCapAPIManager.getDayVolume(), getString(R.string.global), 0); ((TextView) view.findViewById(R.id.textViewActiveCrypto)) - .setText(marketCapManager.getActive_crypto()); + .setText(coinmarketCapAPIManager.getActive_crypto()); ((TextView) view.findViewById(R.id.textViewActiveMarkets)) - .setText(marketCapManager.getActive_markets()); + .setText(coinmarketCapAPIManager.getActive_markets()); pieChart.setOnTouchListener(new View.OnTouchListener() { @Override @@ -349,7 +331,7 @@ public class MarketCapitalization extends Fragment { if(!e.getData().equals("others")) { - Currency currency = marketCapManager.getCurrencyFromSymbol((String) e.getData()); + Currency currency = coinmarketCapAPIManager.getCurrencyFromSymbol((String) e.getData()); view.findViewById(R.id.currencyIcon).setVisibility(View.VISIBLE); view.findViewById(R.id.layoutPercentageDominance).setVisibility(View.VISIBLE); @@ -362,13 +344,13 @@ public class MarketCapitalization extends Fragment { } else { - double othersMarketCap = marketCapManager.getMarketCap(); - double othersVolume = marketCapManager.getDayVolume(); + double othersMarketCap = coinmarketCapAPIManager.getMarketCap(); + double othersVolume = coinmarketCapAPIManager.getDayVolume(); - for(int i = 0; i < marketCapManager.getTopCurrencies().size(); i++) + for(int i = 0; i < coinmarketCapAPIManager.getTopCurrencies().size(); i++) { - othersMarketCap -= marketCapManager.getTopCurrencies().get(i).getMarketCapitalization(); - othersVolume -= marketCapManager.getTopCurrencies().get(i).getVolume24h(); + othersMarketCap -= coinmarketCapAPIManager.getTopCurrencies().get(i).getMarketCapitalization(); + othersVolume -= coinmarketCapAPIManager.getTopCurrencies().get(i).getVolume24h(); } view.findViewById(R.id.currencyIcon).setVisibility(View.GONE); @@ -390,7 +372,7 @@ public class MarketCapitalization extends Fragment { view.findViewById(R.id.layoutActiveCrypto).setVisibility(View.VISIBLE); view.findViewById(R.id.layoutActiveMarkets).setVisibility(View.VISIBLE); - updateDetails(marketCapManager.getMarketCap(), marketCapManager.getDayVolume(), getString(R.string.global), 0); + updateDetails(coinmarketCapAPIManager.getMarketCap(), coinmarketCapAPIManager.getDayVolume(), getString(R.string.global), 0); pieChart.setDrawCenterText(true); } @@ -419,4 +401,37 @@ public class MarketCapitalization extends Fragment { SpannableString spannableString = new SpannableString(getString(R.string.market_dominance)); return spannableString; } + + @Override + public void onDetailsUpdated() { + isDetailsUpdated = true; + countCompletedMarketCapRequest(); + } + + @Override + public void onExchangesUpdated() { + + } + + @Override + public void onCurrenciesRetrieved(List currencyList) { + + } + + @Override + public void onTopCurrenciesUpdated() { + isTopCurrenciesUpdated = true; + countCompletedMarketCapRequest(); + } + + @Override + public void onMarketCapUpdated() { + isMarketpCapUpdated = true; + countCompletedMarketCapRequest(); + } + + @Override + public void onListingUpdated() { + + } } diff --git a/app/src/main/java/com/herbron/moodl/Activities/HomeActivityFragments/Overview.java b/app/src/main/java/com/herbron/moodl/Activities/HomeActivityFragments/Overview.java index ed7af26..b4ebd8b 100644 --- a/app/src/main/java/com/herbron/moodl/Activities/HomeActivityFragments/Overview.java +++ b/app/src/main/java/com/herbron/moodl/Activities/HomeActivityFragments/Overview.java @@ -1,7 +1,6 @@ package com.herbron.moodl.Activities.HomeActivityFragments; import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.drawable.Drawable; import android.os.AsyncTask; @@ -18,13 +17,14 @@ import android.widget.AbsListView; import android.widget.ImageButton; import android.widget.ListView; -import com.herbron.moodl.Activities.HomeActivity; +import com.herbron.moodl.DataNotifiers.CoinmarketcapNotifierInterface; import com.herbron.moodl.DataManagers.CurrencyData.Currency; -import com.herbron.moodl.DataManagers.CurrencyData.CurrencyDetailsList; -import com.herbron.moodl.DataManagers.CurrencyData.CurrencyTickerList; +import com.herbron.moodl.DataManagers.InfoAPIManagers.CryptocompareApiManager; +import com.herbron.moodl.DataManagers.InfoAPIManagers.CoinmarketCapAPIManager; import com.herbron.moodl.DataManagers.PreferencesManager; import com.herbron.moodl.LayoutManagers.OverviewListAdapter; import com.herbron.moodl.MoodlBox; +import com.herbron.moodl.DataNotifiers.MoodlboxNotifierInterface; import com.herbron.moodl.R; import java.util.List; @@ -35,10 +35,10 @@ import static com.herbron.moodl.MoodlBox.getDrawable; * Created by Administrator on 27/05/2018. */ -public class Overview extends Fragment { +public class Overview extends Fragment implements CoinmarketcapNotifierInterface { - private CurrencyTickerList currencyTickerList; - private CurrencyDetailsList currencyDetailsList; + private CoinmarketCapAPIManager coinmarketCapAPIManager; + private CryptocompareApiManager cryptocompareApiManager; private PreferencesManager preferenceManager; private OverviewListAdapter overviewListAdapter; @@ -54,8 +54,10 @@ public class Overview extends Fragment { { View fragmentView = inflater.inflate(R.layout.fragment_overview_homeactivity, container, false); - currencyTickerList = CurrencyTickerList.getInstance(getContext()); - currencyDetailsList = CurrencyDetailsList.getInstance(getContext()); + coinmarketCapAPIManager = CoinmarketCapAPIManager.getInstance(getContext()); + cryptocompareApiManager = CryptocompareApiManager.getInstance(getContext()); + + coinmarketCapAPIManager.addListener(this); fragmentView.findViewById(R.id.toolbar).bringToFront(); @@ -92,6 +94,7 @@ public class Overview extends Fragment { return fragmentView; } + private void setupDrawerButton(View view) { ImageButton drawerButton = view.findViewById(R.id.drawer_button); @@ -132,11 +135,6 @@ public class Overview extends Fragment { } } - public interface UpdateCallBack - { - void onSuccess(List currencyList); - } - private void loadingIndicatorGenerator() { loadingFooter = LayoutInflater.from(getContext()).inflate(R.layout.listview_loading_indicator, null, false); @@ -144,6 +142,27 @@ public class Overview extends Fragment { listLayout.addFooterView(loadingFooter); } + @Override + public void onCurrenciesRetrieved(List currencyList) { + IconDownloader iconDownloader = new IconDownloader(); + iconDownloader.execute(currencyList); + } + + @Override + public void onTopCurrenciesUpdated() { + + } + + @Override + public void onMarketCapUpdated() { + + } + + @Override + public void onListingUpdated() { + + } + private class CurrencyLoader extends AsyncTask { @Override @@ -155,14 +174,7 @@ public class Overview extends Fragment { @Override protected Void doInBackground(Void... voids) { - currencyTickerList.getCurrenciesFrom(listLayout.getCount(), preferenceManager.getDefaultCurrency(), new UpdateCallBack() { - @Override - public void onSuccess(List currencyList) - { - IconDownloader iconDownloader = new IconDownloader(); - iconDownloader.execute(currencyList); - } - }); + coinmarketCapAPIManager.getCurrenciesFrom(listLayout.getCount(), preferenceManager.getDefaultCurrency()); return null; } } @@ -176,13 +188,13 @@ public class Overview extends Fragment { for(Currency currency : currencies[0]) { - String iconUrl = MoodlBox.getIconUrl(currency.getSymbol(), currencyDetailsList); + String iconUrl = MoodlBox.getIconUrl(currency.getSymbol(), cryptocompareApiManager); if(iconUrl != null) { - MoodlBox.getBitmapFromURL(iconUrl, currency.getSymbol(), getResources(), getContext(), new HomeActivity.IconCallBack() { + MoodlBox.getBitmapFromURL(iconUrl, currency.getSymbol(), getResources(), getContext(), new MoodlboxNotifierInterface() { @Override - public void onSuccess(Bitmap bitmap) { + public void onBitmapDownloaded(Bitmap bitmap) { currency.setIcon(bitmap); updateChartColor(currency); countIcons(currencies[0]); diff --git a/app/src/main/java/com/herbron/moodl/Activities/HomeActivityFragments/Summary.java b/app/src/main/java/com/herbron/moodl/Activities/HomeActivityFragments/Summary.java index 8449084..50bfc6b 100644 --- a/app/src/main/java/com/herbron/moodl/Activities/HomeActivityFragments/Summary.java +++ b/app/src/main/java/com/herbron/moodl/Activities/HomeActivityFragments/Summary.java @@ -9,7 +9,6 @@ import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; -import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.AsyncTask; import android.os.Handler; @@ -33,23 +32,25 @@ import android.widget.Button; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; -import android.widget.ProgressBar; import android.widget.TextView; import com.daasuu.ei.Ease; import com.daasuu.ei.EasingInterpolator; -import com.herbron.moodl.Activities.CurrencySelectionActivity; -import com.herbron.moodl.Activities.HomeActivity; import com.herbron.moodl.Activities.RecordTransactionActivity; import com.herbron.moodl.BalanceUpdateInterface; +import com.herbron.moodl.DataNotifiers.CoinmarketcapNotifierInterface; +import com.herbron.moodl.DataNotifiers.CryptocompareNotifierInterface; +import com.herbron.moodl.CurrencyInfoUpdateNotifierInterface; import com.herbron.moodl.DataManagers.BalanceManager; import com.herbron.moodl.DataManagers.CurrencyData.Currency; import com.herbron.moodl.DataManagers.CurrencyData.CurrencyCardview; -import com.herbron.moodl.DataManagers.CurrencyData.CurrencyTickerList; +import com.herbron.moodl.DataManagers.InfoAPIManagers.CoinmarketCapAPIManager; +import com.herbron.moodl.DataManagers.InfoAPIManagers.CryptocompareApiManager; import com.herbron.moodl.DataManagers.PreferencesManager; import com.herbron.moodl.BalanceSwitchManagerInterface; -import com.herbron.moodl.DataNotifierInterface; +import com.herbron.moodl.DataNotifiers.BalanceUpdateNotifierInterface; import com.herbron.moodl.MoodlBox; +import com.herbron.moodl.DataNotifiers.MoodlboxNotifierInterface; import com.herbron.moodl.PlaceholderManager; import com.herbron.moodl.R; @@ -67,7 +68,7 @@ import static java.lang.Math.abs; * Created by Tiji on 13/04/2018. */ -public class Summary extends Fragment implements BalanceSwitchManagerInterface, DataNotifierInterface { +public class Summary extends Fragment implements BalanceSwitchManagerInterface, BalanceUpdateNotifierInterface, CryptocompareNotifierInterface, CoinmarketcapNotifierInterface { private LinearLayout currencyLayout; private PreferencesManager preferencesManager; @@ -75,7 +76,7 @@ public class Summary extends Fragment implements BalanceSwitchManagerInterface, private SwipeRefreshLayout refreshLayout; private Dialog loadingDialog; private String defaultCurrency; - private CurrencyTickerList currencyTickerList; + private CoinmarketCapAPIManager coinmarketCapAPIManager; private TextView toolbarSubtitle; private CollapsingToolbarLayout toolbarLayout; @@ -93,6 +94,7 @@ public class Summary extends Fragment implements BalanceSwitchManagerInterface, private long lastTimestamp; private BalanceUpdateInterface balanceUpdateInterface; + private CryptocompareApiManager cryptocompareApiManager; @NonNull @Override @@ -102,7 +104,8 @@ public class Summary extends Fragment implements BalanceSwitchManagerInterface, preferencesManager = new PreferencesManager(getActivity()); balanceManager = new BalanceManager(getContext()); - currencyTickerList = CurrencyTickerList.getInstance(getActivity()); + coinmarketCapAPIManager = CoinmarketCapAPIManager.getInstance(getActivity()); + cryptocompareApiManager = CryptocompareApiManager.getInstance(getActivity()); currencyLayout = fragmentView.findViewById(R.id.currencyListLayout); refreshLayout = fragmentView.findViewById(R.id.swiperefreshsummary); @@ -114,6 +117,9 @@ public class Summary extends Fragment implements BalanceSwitchManagerInterface, defaultCurrency = preferencesManager.getDefaultCurrency(); + cryptocompareApiManager.addListener(this); + coinmarketCapAPIManager.addListener(this); + handler = new Handler(); initiateUpdateRunnable(); @@ -544,16 +550,6 @@ public class Summary extends Fragment implements BalanceSwitchManagerInterface, displayBalance(preferencesManager.isBalanceHidden()); } - @Override - public void onTickerListUpdated() { - - } - - @Override - public void onDetailsUpdated() { - - } - @Override public void onBalanceDataUpdated() { final List balance = balanceManager.getTotalBalance(); @@ -562,10 +558,21 @@ public class Summary extends Fragment implements BalanceSwitchManagerInterface, { for(int i = 0; i < balance.size(); i++) { - balance.get(i).updatePrice(getActivity(), defaultCurrency, new Currency.CurrencyCallBack() { + balance.get(i).updatePrice(getActivity(), defaultCurrency, new CurrencyInfoUpdateNotifierInterface() { @Override - public void onSuccess(Currency currency) { + public void onTimestampPriveUpdated(String price) { + + } + + @Override + public void onHistoryDataUpdated() { + + } + + @Override + public void onPriceUpdated(Currency currency) { countCoins(true, false, false); + } }); } @@ -630,6 +637,36 @@ public class Summary extends Fragment implements BalanceSwitchManagerInterface, } } + @Override + public void onDetailsUpdated() { + countCoins(false, true, false); + } + + @Override + public void onExchangesUpdated() { + + } + + @Override + public void onCurrenciesRetrieved(List currencyList) { + + } + + @Override + public void onTopCurrenciesUpdated() { + + } + + @Override + public void onMarketCapUpdated() { + + } + + @Override + public void onListingUpdated() { + countCoins(false, false, true); + } + private class UiHeavyLoadCalculator extends AsyncTask { @@ -687,7 +724,7 @@ public class Summary extends Fragment implements BalanceSwitchManagerInterface, { final Currency localCurrency = balanceManager.getTotalBalance().get(i); - localCurrency.setTickerId(currencyTickerList.getTickerIdForSymbol(localCurrency.getSymbol())); + localCurrency.setTickerId(coinmarketCapAPIManager.getTickerIdForSymbol(localCurrency.getSymbol())); updateChartColor(localCurrency); @@ -771,13 +808,13 @@ public class Summary extends Fragment implements BalanceSwitchManagerInterface, { final Currency localCurrency = balanceManager.getTotalBalance().get(i); - String iconUrl = MoodlBox.getIconUrl(localCurrency.getSymbol(), balanceManager.getCurrencyDetailList()); + String iconUrl = MoodlBox.getIconUrl(localCurrency.getSymbol(), balanceManager.getCryptocompareApiManager()); if(iconUrl != null) { - MoodlBox.getBitmapFromURL(iconUrl, localCurrency.getSymbol(), getResources(), getContext(), new HomeActivity.IconCallBack() { + MoodlBox.getBitmapFromURL(iconUrl, localCurrency.getSymbol(), getResources(), getContext(), new MoodlboxNotifierInterface() { @Override - public void onSuccess(Bitmap bitmapIcon) { + public void onBitmapDownloaded(Bitmap bitmapIcon) { localCurrency.setIcon(bitmapIcon); countIcons(); } @@ -810,27 +847,23 @@ public class Summary extends Fragment implements BalanceSwitchManagerInterface, @Override protected Void doInBackground(Void... params) { - if(!currencyTickerList.isUpToDate()) + if(!coinmarketCapAPIManager.isUpToDate()) { - currencyTickerList.updateListing(new com.herbron.moodl.DataManagers.BalanceManager.IconCallBack() { - @Override - public void onSuccess() { - countCoins(false, false, true); - } - }); + coinmarketCapAPIManager.updateListing(); } else { countCoins(false, false, true); } - balanceManager.updateDetails(new com.herbron.moodl.DataManagers.BalanceManager.IconCallBack() { - @Override - public void onSuccess() - { - countCoins(false, true, false); - } - }); + if(!cryptocompareApiManager.isDetailsUpToDate()) + { + cryptocompareApiManager.updateDetails(); + } + else + { + countCoins(false, true, false); + } balanceManager.updateTotalBalance(); diff --git a/app/src/main/java/com/herbron/moodl/Activities/HomeActivityFragments/Watchlist.java b/app/src/main/java/com/herbron/moodl/Activities/HomeActivityFragments/Watchlist.java index d9d9ffd..9f62745 100644 --- a/app/src/main/java/com/herbron/moodl/Activities/HomeActivityFragments/Watchlist.java +++ b/app/src/main/java/com/herbron/moodl/Activities/HomeActivityFragments/Watchlist.java @@ -13,7 +13,6 @@ import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.graphics.Palette; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -21,22 +20,26 @@ import android.widget.Button; import android.widget.ImageButton; import com.herbron.moodl.Activities.CurrencySelectionActivity; -import com.herbron.moodl.Activities.HomeActivity; -import com.herbron.moodl.DataManagers.BalanceManager; +import com.herbron.moodl.DataNotifiers.CoinmarketcapNotifierInterface; +import com.herbron.moodl.DataNotifiers.CryptocompareNotifierInterface; +import com.herbron.moodl.CurrencyInfoUpdateNotifierInterface; import com.herbron.moodl.DataManagers.CurrencyData.Currency; import com.herbron.moodl.DataManagers.CurrencyData.CurrencyCardview; -import com.herbron.moodl.DataManagers.CurrencyData.CurrencyDetailsList; -import com.herbron.moodl.DataManagers.CurrencyData.CurrencyTickerList; +import com.herbron.moodl.DataManagers.InfoAPIManagers.CryptocompareApiManager; +import com.herbron.moodl.DataManagers.InfoAPIManagers.CoinmarketCapAPIManager; import com.herbron.moodl.DataManagers.DatabaseManager; import com.herbron.moodl.DataManagers.PreferencesManager; import com.herbron.moodl.DataManagers.WatchlistManager; import com.herbron.moodl.MoodlBox; +import com.herbron.moodl.DataNotifiers.MoodlboxNotifierInterface; import com.herbron.moodl.R; import com.jmedeisis.draglinearlayout.DragLinearLayout; import org.json.JSONException; import org.json.JSONObject; +import java.util.List; + import static com.herbron.moodl.MoodlBox.collapseW; import static com.herbron.moodl.MoodlBox.expandW; import static com.herbron.moodl.MoodlBox.getColor; @@ -45,18 +48,18 @@ import static com.herbron.moodl.MoodlBox.getColor; * Created by Tiji on 13/04/2018. */ -public class Watchlist extends Fragment { +public class Watchlist extends Fragment implements CryptocompareNotifierInterface { private WatchlistManager watchlistManager; private View view; private int watchlistCounter; - private CurrencyDetailsList currencyDetailsList; + private CryptocompareApiManager cryptocompareApiManager; private SwipeRefreshLayout refreshLayout; private DragLinearLayout dragLinearLayout; private long lastTimestamp; private PreferencesManager preferencesManager; private String defaultCurrency; - private CurrencyTickerList currencyTickerList; + private CoinmarketCapAPIManager coinmarketCapAPIManager; private boolean tickerUpdated; private boolean detailsUpdated; private boolean editModeEnabled; @@ -70,14 +73,15 @@ public class Watchlist extends Fragment { refreshLayout = view.findViewById(R.id.swiperefreshwatchlist); dragLinearLayout = view.findViewById(R.id.linearLayoutWatchlist); - currencyDetailsList = CurrencyDetailsList.getInstance(getContext()); + cryptocompareApiManager = CryptocompareApiManager.getInstance(getContext()); preferencesManager = new PreferencesManager(getContext()); databaseManager = new DatabaseManager(getContext()); lastTimestamp = 0; defaultCurrency = preferencesManager.getDefaultCurrency(); - currencyTickerList = CurrencyTickerList.getInstance(getActivity()); + coinmarketCapAPIManager = CoinmarketCapAPIManager.getInstance(getActivity()); tickerUpdated = false; + cryptocompareApiManager.addListener(this); updateTickerList(); dragLinearLayout.setOnViewSwapListener(new DragLinearLayout.OnViewSwapListener() { @@ -115,30 +119,54 @@ public class Watchlist extends Fragment { private void updateTickerList() { - AsyncTask updater = new AsyncTask() { - @Override - protected Void doInBackground(Void... voids) { - if(!currencyTickerList.isUpToDate()) - { - currencyTickerList.updateListing(new BalanceManager.IconCallBack() { - @Override - public void onSuccess() { - tickerUpdated = true; - checkUpdatedData(); - } - }); - } - else - { - tickerUpdated = true; - checkUpdatedData(); - } + ListingUpdater listingUpdater = new ListingUpdater(); + listingUpdater.execute(); + } - return null; + private class ListingUpdater extends AsyncTask implements CoinmarketcapNotifierInterface { + + @Override + protected Void doInBackground(Void... voids) { + + coinmarketCapAPIManager.addListener(this); + + if(!coinmarketCapAPIManager.isUpToDate()) + { + coinmarketCapAPIManager.updateListing(); } - }; + else + { + tickerUpdated = true; + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + checkUpdatedData(); + } + }); + } + return null; + } - updater.execute(); + @Override + public void onCurrenciesRetrieved(List currencyList) { + + } + + @Override + public void onTopCurrenciesUpdated() { + + } + + @Override + public void onMarketCapUpdated() { + + } + + @Override + public void onListingUpdated() { + tickerUpdated = true; + checkUpdatedData(); + } } private void disableEdition() @@ -281,15 +309,9 @@ public class Watchlist extends Fragment { protected Void doInBackground(Void... voids) { watchlistManager.updateWatchlist(); - if(!currencyDetailsList.isUpToDate()) + if(!cryptocompareApiManager.isDetailsUpToDate()) { - currencyDetailsList.update(new BalanceManager.IconCallBack() { - @Override - public void onSuccess() { - detailsUpdated = true; - checkUpdatedData(); - } - }); + cryptocompareApiManager.updateDetails(); } else { @@ -358,24 +380,6 @@ public class Watchlist extends Fragment { } } - private String getIconUrl(String symbol) - { - String url; - - try { - JSONObject jsonObject = new JSONObject(currencyDetailsList.getCoinInfosHashmap().get(symbol)); - url = "https://www.cryptocompare.com" + jsonObject.getString("ImageUrl") + "?width=50"; - } catch (NullPointerException e) { - Log.d(getContext().getResources().getString(R.string.debug), symbol + " has no icon URL"); - url = null; - } catch (JSONException e) { - Log.d(getContext().getResources().getString(R.string.debug), "Url parsing error for " + symbol); - url = null; - } - - return url; - } - private void updateChartColor(Currency currency) { if(currency.getIcon() != null) @@ -395,7 +399,7 @@ public class Watchlist extends Fragment { int id = 0; try { - JSONObject jsonObject = new JSONObject(currencyDetailsList.getCoinInfosHashmap().get(symbol)); + JSONObject jsonObject = new JSONObject(cryptocompareApiManager.getCoinInfosHashmap().get(symbol)); id = jsonObject.getInt("Id"); } catch (JSONException e) { e.printStackTrace(); @@ -404,6 +408,17 @@ public class Watchlist extends Fragment { return id; } + @Override + public void onDetailsUpdated() { + detailsUpdated = true; + checkUpdatedData(); + } + + @Override + public void onExchangesUpdated() { + + } + private class WatchlistUpdater extends AsyncTask { @Override @@ -416,22 +431,32 @@ public class Watchlist extends Fragment { protected Void doInBackground(Void... voids) { for(final Currency currency : watchlistManager.getWatchlist()) { - currency.setTickerId(currencyTickerList.getTickerIdForSymbol(currency.getSymbol())); + currency.setTickerId(coinmarketCapAPIManager.getTickerIdForSymbol(currency.getSymbol())); currency.setId(getCurrencyId(currency.getSymbol())); - currency.updatePrice(getActivity(), preferencesManager.getDefaultCurrency(), new Currency.CurrencyCallBack() { + currency.updatePrice(getActivity(), preferencesManager.getDefaultCurrency(), new CurrencyInfoUpdateNotifierInterface() { @Override - public void onSuccess(final Currency sucessCurrency) { + public void onTimestampPriveUpdated(String price) { - String iconUrl = MoodlBox.getIconUrl(sucessCurrency.getSymbol(), currencyDetailsList); + } + + @Override + public void onHistoryDataUpdated() { + + } + + @Override + public void onPriceUpdated(Currency successCurrency) { + String iconUrl = MoodlBox.getIconUrl(currency.getSymbol(), cryptocompareApiManager); if(iconUrl != null) { - MoodlBox.getBitmapFromURL(iconUrl, sucessCurrency.getSymbol(), getResources(), getContext(), new HomeActivity.IconCallBack() { + MoodlBox.getBitmapFromURL(iconUrl, currency.getSymbol(), getResources(), getContext(), new MoodlboxNotifierInterface() { @Override - public void onSuccess(Bitmap bitmapIcon) { - sucessCurrency.setIcon(bitmapIcon); + public void onBitmapDownloaded(Bitmap bitmapIcon) { + currency.setIcon(bitmapIcon); updateChartColor(currency); countWatchlist(); + } }); } @@ -440,7 +465,7 @@ public class Watchlist extends Fragment { Bitmap icon = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher_moodl); icon = Bitmap.createScaledBitmap(icon, 50, 50, false); - sucessCurrency.setIcon(icon); + currency.setIcon(icon); updateChartColor(currency); countWatchlist(); } diff --git a/app/src/main/java/com/herbron/moodl/Activities/RecordTransactionActivity.java b/app/src/main/java/com/herbron/moodl/Activities/RecordTransactionActivity.java index bd47fd0..3839ff7 100644 --- a/app/src/main/java/com/herbron/moodl/Activities/RecordTransactionActivity.java +++ b/app/src/main/java/com/herbron/moodl/Activities/RecordTransactionActivity.java @@ -3,59 +3,47 @@ package com.herbron.moodl.Activities; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; import android.os.AsyncTask; import android.os.Bundle; import android.support.design.widget.TabLayout; import android.support.design.widget.TextInputLayout; -import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; -import android.support.v7.graphics.Palette; import android.support.v7.widget.SearchView; import android.support.v7.widget.Toolbar; import android.text.Editable; import android.text.TextWatcher; -import android.util.Log; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView; -import android.widget.ArrayAdapter; import android.widget.AutoCompleteTextView; import android.widget.Button; import android.widget.DatePicker; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ImageView; -import android.widget.TabWidget; import android.widget.TextView; import android.widget.TimePicker; +import com.herbron.moodl.CurrencyInfoUpdateNotifierInterface; import com.herbron.moodl.DataManagers.CurrencyData.Currency; -import com.herbron.moodl.DataManagers.CurrencyData.CurrencyDetailsList; -import com.herbron.moodl.DataManagers.CurrencyData.Transaction; +import com.herbron.moodl.DataManagers.InfoAPIManagers.CryptocompareApiManager; import com.herbron.moodl.DataManagers.DatabaseManager; import com.herbron.moodl.DataManagers.PreferencesManager; import com.herbron.moodl.LayoutManagers.CoinSummaryListAdapter; import com.herbron.moodl.LayoutManagers.CustomTabLayout; import com.herbron.moodl.LayoutManagers.RecordTransactionPageAdapter; import com.herbron.moodl.MoodlBox; +import com.herbron.moodl.DataNotifiers.MoodlboxNotifierInterface; import com.herbron.moodl.PlaceholderManager; import com.herbron.moodl.R; -import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Locale; -import static com.herbron.moodl.MoodlBox.getColor; - -public class RecordTransactionActivity extends AppCompatActivity { +public class RecordTransactionActivity extends AppCompatActivity implements CurrencyInfoUpdateNotifierInterface { private String coin; private String symbol; @@ -78,7 +66,7 @@ public class RecordTransactionActivity extends AppCompatActivity { private Toolbar toolbar; private ImageView currencyIconImageView; - private CurrencyDetailsList currencyDetailsList; + private CryptocompareApiManager cryptocompareApiManager; private SearchView mainSearchView; @@ -231,13 +219,15 @@ public class RecordTransactionActivity extends AppCompatActivity { } }); + + cryptocompareApiManager.updateExchangeList(); } private void setupAutoCompleteTextView() { - currencyDetailsList = CurrencyDetailsList.getInstance(this); + cryptocompareApiManager = CryptocompareApiManager.getInstance(this); - CoinSummaryListAdapter adapter = new CoinSummaryListAdapter(this, R.layout.custom_summary_coin_row, new ArrayList<>(currencyDetailsList.getCurrenciesDenomination())); + CoinSummaryListAdapter adapter = new CoinSummaryListAdapter(this, R.layout.custom_summary_coin_row, new ArrayList<>(cryptocompareApiManager.getCurrenciesDenomination())); AutoCompleteTextView coin_autoCompleteTextView = findViewById(R.id.coin_autoCompleteTextView); coin_autoCompleteTextView.setThreshold(0); @@ -282,6 +272,8 @@ public class RecordTransactionActivity extends AppCompatActivity { toolbar.requestFocus(); hideSoftKeyboard(RecordTransactionActivity.this); + currency.setListener(RecordTransactionActivity.this); + RecordTransactionActivity.this.currency = currency; IconDownloaderTask iconDownloaderTask = new IconDownloaderTask(); @@ -290,23 +282,39 @@ public class RecordTransactionActivity extends AppCompatActivity { }); } + @Override + public void onTimestampPriveUpdated(String price) { + purchasedPriceEditText.setText(price); + } + + @Override + public void onHistoryDataUpdated() { + + } + + @Override + public void onPriceUpdated(Currency currency) { + + } + private class IconDownloaderTask extends AsyncTask { @Override protected Void doInBackground(Void... voids) { - String iconUrl = MoodlBox.getIconUrl(currency.getSymbol(), 500, currencyDetailsList); + String iconUrl = MoodlBox.getIconUrl(currency.getSymbol(), 500, cryptocompareApiManager); if(iconUrl != null) { - MoodlBox.getBitmapFromURL(iconUrl, currency.getSymbol(), getResources(), getBaseContext(), new HomeActivity.IconCallBack() { + MoodlBox.getBitmapFromURL(iconUrl, currency.getSymbol(), getResources(), getBaseContext(), new MoodlboxNotifierInterface() { @Override - public void onSuccess(Bitmap bitmapIcon) { + public void onBitmapDownloaded(Bitmap bitmapIcon) { runOnUiThread(new Runnable() { @Override public void run() { currencyIconImageView.setImageBitmap(bitmapIcon); } }); + } }); } @@ -469,12 +477,7 @@ public class RecordTransactionActivity extends AppCompatActivity { calendar.set(Calendar.MINUTE, minute); purchaseDate.setText(sdf.format(calendar.getTime())); - currency.getTimestampPrice(RecordTransactionActivity.this, preferenceManager.getDefaultCurrency(), new Currency.PriceCallBack() { - @Override - public void onSuccess(String price) { - purchasedPriceEditText.setText(price); - } - }, calendar.getTimeInMillis() / 1000); + currency.getTimestampPrice(RecordTransactionActivity.this, preferenceManager.getDefaultCurrency(),calendar.getTimeInMillis() / 1000); } }, calendar.get(Calendar.HOUR_OF_DAY), diff --git a/app/src/main/java/com/herbron/moodl/Activities/RecordTransactionFragments/BuyFragment.java b/app/src/main/java/com/herbron/moodl/Activities/RecordTransactionFragments/BuyFragment.java index 7ea78b1..2e4f6d1 100644 --- a/app/src/main/java/com/herbron/moodl/Activities/RecordTransactionFragments/BuyFragment.java +++ b/app/src/main/java/com/herbron/moodl/Activities/RecordTransactionFragments/BuyFragment.java @@ -4,18 +4,40 @@ import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import com.herbron.moodl.DataNotifiers.CryptocompareNotifierInterface; +import com.herbron.moodl.DataManagers.InfoAPIManagers.CryptocompareApiManager; import com.herbron.moodl.R; -public class BuyFragment extends Fragment { +public class BuyFragment extends Fragment implements CryptocompareNotifierInterface { + + private CryptocompareApiManager cryptocompareApiManager; @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_buy, container, false); + + cryptocompareApiManager = CryptocompareApiManager.getInstance(getContext()); + + cryptocompareApiManager.addListener(this); + + cryptocompareApiManager.updateExchangeList(); + return view; } + + @Override + public void onDetailsUpdated() { + + } + + @Override + public void onExchangesUpdated() { + Log.d("moodl", "Received ! " + cryptocompareApiManager.getExchangeList().get(0).getName()); + } } diff --git a/app/src/main/java/com/herbron/moodl/CurrencyInfoUpdateNotifierInterface.java b/app/src/main/java/com/herbron/moodl/CurrencyInfoUpdateNotifierInterface.java new file mode 100644 index 0000000..b8731cb --- /dev/null +++ b/app/src/main/java/com/herbron/moodl/CurrencyInfoUpdateNotifierInterface.java @@ -0,0 +1,13 @@ +package com.herbron.moodl; + +import com.herbron.moodl.DataManagers.CurrencyData.Currency; + +public interface CurrencyInfoUpdateNotifierInterface { + + void onTimestampPriveUpdated(String price); + + void onHistoryDataUpdated(); + + void onPriceUpdated(Currency currency); + +} diff --git a/app/src/main/java/com/herbron/moodl/DataManagers/BalanceManager.java b/app/src/main/java/com/herbron/moodl/DataManagers/BalanceManager.java index e851449..b52b7e8 100644 --- a/app/src/main/java/com/herbron/moodl/DataManagers/BalanceManager.java +++ b/app/src/main/java/com/herbron/moodl/DataManagers/BalanceManager.java @@ -1,41 +1,31 @@ package com.herbron.moodl.DataManagers; -import android.util.Log; - -import com.android.volley.RequestQueue; -import com.android.volley.toolbox.Volley; import com.herbron.moodl.Activities.HomeActivity; +import com.herbron.moodl.DataNotifiers.BinanceUpdateNotifierInterface; import com.herbron.moodl.DataManagers.CurrencyData.Currency; -import com.herbron.moodl.DataManagers.CurrencyData.CurrencyDetailsList; +import com.herbron.moodl.DataManagers.InfoAPIManagers.CryptocompareApiManager; import com.herbron.moodl.DataManagers.ExchangeManager.BinanceManager; import com.herbron.moodl.DataManagers.ExchangeManager.HitBtcManager; -import com.herbron.moodl.DataNotifierInterface; -import com.herbron.moodl.R; +import com.herbron.moodl.DataNotifiers.BalanceUpdateNotifierInterface; +import com.herbron.moodl.DataNotifiers.HitBTCUpdateNotifierInterface; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; -import java.util.Iterator; -import java.util.LinkedHashMap; import java.util.List; /** * Created by Tiji on 25/12/2017. */ -public class BalanceManager { +public class BalanceManager implements BinanceUpdateNotifierInterface, HitBTCUpdateNotifierInterface { - private RequestQueue requestQueue; - private List binanceBalance; - private List hitBalance; private List manualBalances; private List totalBalance; private android.content.Context context; - private LinkedHashMap coinInfosHashmap; - private PreferencesManager preferenceManager; private DatabaseManager databaseManager; - private CurrencyDetailsList currencyDetailsList; + private CryptocompareApiManager cryptocompareApiManager; private int balanceCounter; @@ -43,30 +33,26 @@ public class BalanceManager { private List hitBtcManagers; private List binanceManagers; - private DataNotifierInterface dataNotifierInterface; + private BalanceUpdateNotifierInterface balanceUpdateNotifierInterface; public BalanceManager(android.content.Context context) { this.context = context; - preferenceManager = new PreferencesManager(context); - requestQueue = Volley.newRequestQueue(context); - binanceBalance = new ArrayList(); - hitBalance = new ArrayList(); manualBalances = new ArrayList(); databaseManager = new DatabaseManager(context); hitBtcManagers = new ArrayList<>(); binanceManagers = new ArrayList<>(); - currencyDetailsList = CurrencyDetailsList.getInstance(context); + cryptocompareApiManager = CryptocompareApiManager.getInstance(context); balanceCounter = 0; - setListener((DataNotifierInterface) ((HomeActivity) context).getHoldingsFragment()); + setListener((BalanceUpdateNotifierInterface) ((HomeActivity) context).getHoldingsFragment()); } - public void setListener(DataNotifierInterface dataNotifierInterface) + public void setListener(BalanceUpdateNotifierInterface balanceUpdateNotifierInterface) { - this.dataNotifierInterface = dataNotifierInterface; + this.balanceUpdateNotifierInterface = balanceUpdateNotifierInterface; } public void updateExchangeKeys() @@ -102,18 +88,8 @@ public class BalanceManager { for(int i = 0; i < binanceManagers.size(); i++) { final BinanceManager binanceManager = binanceManagers.get(i); - binanceManager.updateBalance(new BinanceManager.BinanceCallBack() { - @Override - public void onSuccess() { - countBalances(); - } - - @Override - public void onError(String error) { - databaseManager.disableExchangeAccount(binanceManager.getId()); - dataNotifierInterface.onBalanceError(error); - } - }); + binanceManager.addListener(this); + binanceManager.updateBalance(); } } @@ -124,18 +100,8 @@ public class BalanceManager { for(int i = 0; i < hitBtcManagers.size(); i++) { final HitBtcManager hitBtcManager = hitBtcManagers.get(i); - hitBtcManagers.get(i).updateGlobalBalance(new HitBtcManager.HitBtcCallBack() { - @Override - public void onSuccess() { - countBalances(); - } - - @Override - public void onError(String error) { - databaseManager.disableExchangeAccount(hitBtcManager.getId()); - dataNotifierInterface.onBalanceError(error); - } - }); + hitBtcManager.addListener(this); + hitBtcManager.updateGlobalBalance(); } } @@ -173,7 +139,7 @@ public class BalanceManager { mergeBalanceTotal(manualBalances); - dataNotifierInterface.onBalanceDataUpdated(); + balanceUpdateNotifierInterface.onBalanceDataUpdated(); } private void mergeBalanceTotal(List balance) @@ -202,13 +168,31 @@ public class BalanceManager { } } - public interface VolleyCallBack { - void onSuccess(); - void onError(String error); + @Override + public void onBinanceTradesUpdated() { + } - public interface IconCallBack { - void onSuccess(); + @Override + public void onBinanceBalanceUpdateSuccess() { + countBalances(); + } + + @Override + public void onBinanceBalanceUpdateError(int accountId, String error) { + databaseManager.disableExchangeAccount(accountId); + balanceUpdateNotifierInterface.onBalanceError(error); + } + + @Override + public void onHitBTCBalanceUpdateSuccess() { + countBalances(); + } + + @Override + public void onHitBTCBalanceUpdateError(int accountId, String error) { + databaseManager.disableExchangeAccount(accountId); + balanceUpdateNotifierInterface.onBalanceError(error); } public void sortCoins() @@ -227,47 +211,9 @@ public class BalanceManager { } } - public void updateDetails(final IconCallBack callBack) + public CryptocompareApiManager getCryptocompareApiManager() { - if(!currencyDetailsList.isUpToDate()) - { - currencyDetailsList.update(callBack); - } - else - { - callBack.onSuccess(); - } - } - - public String getIconUrl(String symbol) - { - String url; - - try { - switch (symbol) - { - case "IOTA": - url = "https://www.cryptocompare.com/media/1383540/iota_logo.png?width=50"; - break; - default: - JSONObject jsonObject = new JSONObject(currencyDetailsList.getCoinInfosHashmap().get(symbol)); - url = "https://www.cryptocompare.com" + jsonObject.getString("ImageUrl") + "?width=50"; - break; - } - } catch (NullPointerException e) { - Log.d(context.getResources().getString(R.string.debug), symbol + " has no icon URL"); - url = null; - } catch (JSONException e) { - Log.d(context.getResources().getString(R.string.debug), "Url parsing error for " + symbol); - url = null; - } - - return url; - } - - public CurrencyDetailsList getCurrencyDetailList() - { - return currencyDetailsList; + return cryptocompareApiManager; } public String getCurrencyName(String symbol) @@ -275,7 +221,7 @@ public class BalanceManager { String currencyName = null; try { - JSONObject jsonObject = new JSONObject(currencyDetailsList.getCoinInfosHashmap().get(symbol)); + JSONObject jsonObject = new JSONObject(cryptocompareApiManager.getCoinInfosHashmap().get(symbol)); currencyName = jsonObject.getString("CoinName"); } catch (JSONException e) { e.printStackTrace(); @@ -291,7 +237,7 @@ public class BalanceManager { int id = 0; try { - JSONObject jsonObject = new JSONObject(currencyDetailsList.getCoinInfosHashmap().get(symbol)); + JSONObject jsonObject = new JSONObject(cryptocompareApiManager.getCoinInfosHashmap().get(symbol)); id = jsonObject.getInt("Id"); } catch (JSONException e) { e.printStackTrace(); @@ -301,32 +247,4 @@ public class BalanceManager { return id; } - - private void sortDetails() - { - LinkedHashMap sortedHashmap = new LinkedHashMap<>(); - List listInfos = new ArrayList<>(coinInfosHashmap.values()); - List listSymbols = new ArrayList<>(coinInfosHashmap.keySet()); - - for(int i = 0; i < coinInfosHashmap.keySet().size(); i++) - { - - try { - JSONObject jsonObject = new JSONObject(listInfos.get(i)); - int index = jsonObject.getInt("SortOrder"); - - listInfos.add(index, listInfos.get(i)); - listSymbols.add(index, listSymbols.get(i)); - } catch (JSONException e) { - e.printStackTrace(); - } - } - - for(int i = 0; i < listInfos.size(); i++) - { - sortedHashmap.put(listSymbols.get(i), listInfos.get(i)); - } - - coinInfosHashmap = sortedHashmap; - } } diff --git a/app/src/main/java/com/herbron/moodl/DataManagers/CurrencyData/Currency.java b/app/src/main/java/com/herbron/moodl/DataManagers/CurrencyData/Currency.java index b1c9d9c..5371bd9 100644 --- a/app/src/main/java/com/herbron/moodl/DataManagers/CurrencyData/Currency.java +++ b/app/src/main/java/com/herbron/moodl/DataManagers/CurrencyData/Currency.java @@ -6,6 +6,8 @@ import android.os.Parcel; import android.os.Parcelable; import android.util.Log; +import com.herbron.moodl.CurrencyInfoUpdateNotifierInterface; + import org.json.JSONException; import org.json.JSONObject; @@ -48,6 +50,8 @@ public class Currency implements Parcelable { private List socialMediaLinks; //private String proofType + private CurrencyInfoUpdateNotifierInterface currencyInfoUpdateNotifierInterface; + public Currency() {} public Currency(String symbol, double balance) @@ -76,9 +80,14 @@ public class Currency implements Parcelable { this.tickerId = tickerId; } + public void setListener(CurrencyInfoUpdateNotifierInterface currencyInfoUpdateNotifierInterface) + { + this.currencyInfoUpdateNotifierInterface = currencyInfoUpdateNotifierInterface; + } + //public Currency(int id, String symbol, String name, String algorithm, String proofType, ) - public void getTimestampPrice(android.content.Context context, String toSymbol, final PriceCallBack callBack, long timestamp) + public void getTimestampPrice(android.content.Context context, String toSymbol, long timestamp) { dataRetriver = new CurrencyDataRetriever(context); @@ -88,12 +97,12 @@ public class Currency implements Parcelable { @Override public void onSuccess(String price) { - callBack.onSuccess(price); + currencyInfoUpdateNotifierInterface.onTimestampPriveUpdated(price); } }, timestamp); } - public void updatePrice(android.content.Context context, String toSymbol, final CurrencyCallBack callBack) + public void updatePrice(android.content.Context context, String toSymbol, final CurrencyInfoUpdateNotifierInterface callBack) { dataRetriver = new CurrencyDataRetriever(context); @@ -107,12 +116,12 @@ public class Currency implements Parcelable { setDayFluctuationPercentage(currencyInfo.getDayFluctuationPercentage()); } - callBack.onSuccess(Currency.this); + callBack.onPriceUpdated(currencyInfo); } }); } - public void updateHistoryMinutes(android.content.Context context, String toSymbol, final CurrencyCallBack callBack) + public void updateHistoryMinutes(android.content.Context context, String toSymbol) { dataRetriver = new CurrencyDataRetriever(context); @@ -121,7 +130,7 @@ public class Currency implements Parcelable { public void onSuccess(List dataChart) { setHistoryMinutes(dataChart); - callBack.onSuccess(Currency.this); + currencyInfoUpdateNotifierInterface.onHistoryDataUpdated(); } @Override @@ -178,7 +187,7 @@ public class Currency implements Parcelable { }); } - public void updateHistoryHours(android.content.Context context, String toSymbol, final CurrencyCallBack callBack) + public void updateHistoryHours(android.content.Context context, String toSymbol) { dataRetriver = new CurrencyDataRetriever(context); dataRetriver.updateHistory(symbol, toSymbol, new CurrencyDataRetriever.DataChartCallBack() { @@ -186,7 +195,7 @@ public class Currency implements Parcelable { public void onSuccess(List dataChart) { setHistoryHours(dataChart); - callBack.onSuccess(Currency.this); + currencyInfoUpdateNotifierInterface.onHistoryDataUpdated(); } @Override @@ -194,7 +203,7 @@ public class Currency implements Parcelable { }, CurrencyDataRetriever.HOURS); } - public void updateHistoryDays(android.content.Context context, String toSymbol, final CurrencyCallBack callBack) + public void updateHistoryDays(android.content.Context context, String toSymbol) { dataRetriver = new CurrencyDataRetriever(context); dataRetriver.updateHistory(symbol, toSymbol, new CurrencyDataRetriever.DataChartCallBack() { @@ -202,7 +211,7 @@ public class Currency implements Parcelable { public void onSuccess(List dataChart) { setHistoryDays(dataChart); - callBack.onSuccess(Currency.this); + currencyInfoUpdateNotifierInterface.onHistoryDataUpdated(); } @Override diff --git a/app/src/main/java/com/herbron/moodl/DataManagers/CurrencyData/CurrencyCardview.java b/app/src/main/java/com/herbron/moodl/DataManagers/CurrencyData/CurrencyCardview.java index eacbd41..4dbb78f 100644 --- a/app/src/main/java/com/herbron/moodl/DataManagers/CurrencyData/CurrencyCardview.java +++ b/app/src/main/java/com/herbron/moodl/DataManagers/CurrencyData/CurrencyCardview.java @@ -25,6 +25,7 @@ import com.github.mikephil.charting.data.Entry; import com.github.mikephil.charting.data.LineData; import com.github.mikephil.charting.data.LineDataSet; import com.herbron.moodl.Activities.CurrencyDetailsActivity; +import com.herbron.moodl.CurrencyInfoUpdateNotifierInterface; import com.herbron.moodl.DataManagers.DatabaseManager; import com.herbron.moodl.DataManagers.PreferencesManager; import com.herbron.moodl.MoodlBox; @@ -43,7 +44,7 @@ import static com.herbron.moodl.MoodlBox.numberConformer; * Created by Tiji on 12/05/2018. */ -public class CurrencyCardview extends CardView { +public class CurrencyCardview extends CardView implements CurrencyInfoUpdateNotifierInterface { private Currency currency; @@ -55,6 +56,8 @@ public class CurrencyCardview extends CardView { { super (context); + currency.setListener(this); + this.currency = currency; LayoutInflater.from(context).inflate(R.layout.cardview_watchlist, this, true); @@ -76,23 +79,7 @@ public class CurrencyCardview extends CardView { expandH(view.findViewById(R.id.collapsableLayout)); if (currency.getHistoryMinutes() == null) { - currency.updateHistoryMinutes(context, preferencesManager.getDefaultCurrency(), new Currency.CurrencyCallBack() { - @Override - public void onSuccess(Currency currency) { - if(currency.getHistoryMinutes() != null) - { - setupLineChart(currency); - view.findViewById(R.id.progressBarLinechartWatchlist).setVisibility(View.GONE); - view.findViewById(R.id.linearLayoutSubLayout).setVisibility(View.VISIBLE); - } - else - { - view.findViewById(R.id.progressBarLinechartWatchlist).setVisibility(View.GONE); - view.findViewById(R.id.linearLayoutSubLayout).setVisibility(View.VISIBLE); - view.findViewById(R.id.linearLayoutSubLayout).findViewById(R.id.detailsArrow).setVisibility(View.GONE); - } - } - }); + currency.updateHistoryMinutes(context, preferencesManager.getDefaultCurrency()); } else { @@ -142,6 +129,8 @@ public class CurrencyCardview extends CardView { { super(context); + currency.setListener(this); + this.currency = currency; LayoutInflater.from(context).inflate(R.layout.cardview_currency, this, true); @@ -163,23 +152,7 @@ public class CurrencyCardview extends CardView { expandH(view.findViewById(R.id.collapsableLayout)); if (currency.getHistoryMinutes() == null) { - currency.updateHistoryMinutes(context, preferencesManager.getDefaultCurrency(), new Currency.CurrencyCallBack() { - @Override - public void onSuccess(Currency currency) { - if(currency.getHistoryMinutes() != null) - { - setupLineChart(currency); - view.findViewById(R.id.progressBarLinechartSummary).setVisibility(View.GONE); - view.findViewById(R.id.linearLayoutSubLayout).setVisibility(View.VISIBLE); - } - else - { - view.findViewById(R.id.progressBarLinechartSummary).setVisibility(View.GONE); - view.findViewById(R.id.linearLayoutSubLayout).setVisibility(View.VISIBLE); - view.findViewById(R.id.linearLayoutSubLayout).findViewById(R.id.detailsArrow).setVisibility(View.GONE); - } - } - }); + currency.updateHistoryMinutes(context, preferencesManager.getDefaultCurrency()); } else { @@ -386,4 +359,39 @@ public class CurrencyCardview extends CardView { return transColor ; } + + @Override + public void onTimestampPriveUpdated(String price) { + + } + + @Override + public void onHistoryDataUpdated() { + setupLineChart(currency); + + View progressWatchlistView = findViewById(R.id.progressBarLinechartWatchlist); + View progressSummaryView = findViewById(R.id.progressBarLinechartSummary); + + if(progressWatchlistView != null) + { + progressWatchlistView.setVisibility(View.GONE); + } + + if(progressSummaryView != null) + { + progressSummaryView.setVisibility(View.GONE); + } + + findViewById(R.id.linearLayoutSubLayout).setVisibility(View.VISIBLE); + + if(currency.getHistoryMinutes() == null) + { + findViewById(R.id.linearLayoutSubLayout).findViewById(R.id.detailsArrow).setVisibility(View.GONE); + } + } + + @Override + public void onPriceUpdated(Currency currency) { + + } } diff --git a/app/src/main/java/com/herbron/moodl/DataManagers/CurrencyData/CurrencyTickerList.java b/app/src/main/java/com/herbron/moodl/DataManagers/CurrencyData/CurrencyTickerList.java deleted file mode 100644 index 8769dfd..0000000 --- a/app/src/main/java/com/herbron/moodl/DataManagers/CurrencyData/CurrencyTickerList.java +++ /dev/null @@ -1,202 +0,0 @@ -package com.herbron.moodl.DataManagers.CurrencyData; - -import android.content.Context; - -import com.android.volley.Request; -import com.android.volley.RequestQueue; -import com.android.volley.Response; -import com.android.volley.VolleyError; -import com.android.volley.toolbox.StringRequest; -import com.android.volley.toolbox.Volley; -import com.herbron.moodl.Activities.HomeActivityFragments.Overview; -import com.herbron.moodl.DataManagers.BalanceManager; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -/** - * Created by Guitoune on 22/04/2018. - */ - -public class CurrencyTickerList { - - final private static String LISTINGURL = "https://api.coinmarketcap.com/v2/listings/"; - final private static String TICKERLISTURL1 = "https://api.coinmarketcap.com/v2/ticker/?start="; - private RequestQueue requestQueue; - private List currencyTickerList; - private static CurrencyTickerList INSTANCE; - private boolean upToDate; - - private CurrencyTickerList(Context context) - { - requestQueue = Volley.newRequestQueue(context); - } - - public static synchronized CurrencyTickerList getInstance(Context context) - { - if(INSTANCE == null) - { - INSTANCE = new CurrencyTickerList(context); - } - - return INSTANCE; - } - - public boolean isUpToDate() - { - if(currencyTickerList == null) - { - upToDate = false; - } - - return upToDate; - } - - public void getCurrenciesFrom(int indexFrom, final String toSymbol, Overview.UpdateCallBack callBack) - { - String requetsString = TICKERLISTURL1 + indexFrom + "&limit=50&convert=" + toSymbol; - - StringRequest strRequest = new StringRequest(Request.Method.GET, requetsString, - new Response.Listener() { - @Override - public void onResponse(String response) { - if (response.length() > 0) - { - processTickersResult(response, toSymbol, callBack); - } - } - }, - new Response.ErrorListener() { - @Override - public void onErrorResponse(VolleyError error) { - - } - }); - - requestQueue.add(strRequest); - } - - public void updateListing(final BalanceManager.IconCallBack callBack) - { - currencyTickerList = new ArrayList<>(); - StringRequest strRequest = new StringRequest(Request.Method.GET, LISTINGURL, - new Response.Listener() { - @Override - public void onResponse(String response) { - if (response.length() > 0) { - processTickerListResult(response, callBack); - } - upToDate = true; - } - }, - new Response.ErrorListener() { - @Override - public void onErrorResponse(VolleyError error) { - upToDate = true; - } - }); - - requestQueue.add(strRequest); - } - - public int getTickerIdForSymbol(String symbol) - { - int tickerId = 0; - int i = 0; - - while(!currencyTickerList.get(i).getSymbol().equals(symbol) && currencyTickerList.size() > i+1) - { - i++; - } - - if(currencyTickerList.get(i).getSymbol().equals(symbol)) - { - tickerId = currencyTickerList.get(i).getTickerId(); - } - - return tickerId; - } - - private void processTickersResult(String response, String toSymbol, Overview.UpdateCallBack callBack) - { - List currencyList = new ArrayList<>(); - - try { - JSONObject masterJsonObject = new JSONObject(response); - - if(masterJsonObject.keys().hasNext()) - { - JSONObject currencyJsonObject = masterJsonObject.getJSONObject(masterJsonObject.keys().next()); - Iterator keys = currencyJsonObject.keys(); - - while(keys.hasNext()) - { - String key = keys.next().toString(); - JSONObject subCurrencyJsonObject = currencyJsonObject.getJSONObject(key); - Currency newCurrency = new Currency(subCurrencyJsonObject.getString("name"), subCurrencyJsonObject.getString("symbol"), subCurrencyJsonObject.getInt("id")); - newCurrency.setRank(subCurrencyJsonObject.getInt("rank")); - JSONObject quoteJsonObject = subCurrencyJsonObject.getJSONObject("quotes"); - JSONObject symJsonObject = quoteJsonObject.getJSONObject(toSymbol); - newCurrency.setValue(symJsonObject.getDouble("price")); - newCurrency.setDayFluctuationPercentage((float) symJsonObject.getDouble("percent_change_24h")); - newCurrency.setDayFluctuation(newCurrency.getDayFluctuationPercentage() * newCurrency.getValue() / 100); - - currencyList.add(newCurrency); - } - } - } catch (JSONException e) { - e.printStackTrace(); - } - - callBack.onSuccess(currencyList); - } - - public void processTickerListResult(String response, BalanceManager.IconCallBack callBack) - { - try { - JSONObject dataJsonObject = new JSONObject(response); - JSONArray dataJsonArray = dataJsonObject.getJSONArray("data"); - - for(int i = 0; i < dataJsonArray.length(); i++) - { - JSONObject currencyJsonObject = dataJsonArray.getJSONObject(i); - currencyTickerList.add(new Currency(currencyJsonObject.getString("name"), currencyJsonObject.getString("symbol"), currencyJsonObject.getInt("id"))); - } - } catch (JSONException e) { - e.printStackTrace(); - } - /*response = response.substring(16, response.length() - 2); - String[] strTable = response.split(Pattern.quote("},")); - - for(int i = 0; i < strTable.length; i++) - { - strTable[i] += "}"; - Log.d("moodl", "TICKER " + i + " " + strTable[i]); - try { - JSONObject jsonObject = new JSONObject(strTable[i]); - Log.d("moodl", "TICKER JSON " + i + " " + jsonObject); - switch (jsonObject.getString("symbol")) - { - case "MIOTA": - coinTickersHashmap.put("IOT", strTable[i]); - break; - case "NANO": - coinTickersHashmap.put("XRB", strTable[i]); - break; - default: - coinTickersHashmap.put(jsonObject.getString("symbol"), strTable[i]); - break; - } - } catch (JSONException e) { - e.printStackTrace(); - } - }*/ - - callBack.onSuccess(); - } -} diff --git a/app/src/main/java/com/herbron/moodl/DataManagers/ExchangeManager/BinanceManager.java b/app/src/main/java/com/herbron/moodl/DataManagers/ExchangeManager/BinanceManager.java index 152d21f..5ecd3a6 100644 --- a/app/src/main/java/com/herbron/moodl/DataManagers/ExchangeManager/BinanceManager.java +++ b/app/src/main/java/com/herbron/moodl/DataManagers/ExchangeManager/BinanceManager.java @@ -1,13 +1,12 @@ package com.herbron.moodl.DataManagers.ExchangeManager; -import android.util.Log; - import com.binance.api.client.BinanceApiClientFactory; import com.binance.api.client.BinanceApiRestClient; import com.binance.api.client.domain.account.Account; import com.binance.api.client.domain.account.AssetBalance; import com.binance.api.client.domain.account.Trade; import com.binance.api.client.exception.BinanceApiException; +import com.herbron.moodl.DataNotifiers.BinanceUpdateNotifierInterface; import com.herbron.moodl.DataManagers.CurrencyData.Currency; import java.util.ArrayList; @@ -23,6 +22,8 @@ public class BinanceManager extends Exchange { private ArrayList trades; private static List pairSymbolList; + private List binanceUpdateNotifierInterfaceList; + public BinanceManager(Exchange exchange) { super(exchange.id, exchange.name, exchange.type, exchange.description, exchange.publicKey, exchange.privateKey, exchange.isEnabled); @@ -30,6 +31,16 @@ public class BinanceManager extends Exchange { createPairSymbolList(); } + public void addListener(BinanceUpdateNotifierInterface binanceUpdateNotifierInterface) + { + if(binanceUpdateNotifierInterfaceList == null) + { + binanceUpdateNotifierInterfaceList = new ArrayList<>(); + } + + binanceUpdateNotifierInterfaceList.add(binanceUpdateNotifierInterface); + } + private void createPairSymbolList() { pairSymbolList = new ArrayList<>(); @@ -40,7 +51,7 @@ public class BinanceManager extends Exchange { pairSymbolList.add("USDT"); } - public void updateBalance(BinanceCallBack callBack) + public void updateBalance() { BinanceApiClientFactory factory = BinanceApiClientFactory.newInstance(publicKey, privateKey); @@ -57,20 +68,26 @@ public class BinanceManager extends Exchange { if(Double.parseDouble(assets.get(i).getFree()) > 0 || Double.parseDouble(assets.get(i).getLocked()) > 0) { //balance.add(new Currency(assets.get(i).getAsset(), Double.parseDouble(assets.get(i).getFree()) + Double.parseDouble(assets.get(i).getLocked()))); - if(!assets.get(i).getAsset().equals("VEN")) + if(!assets.get(i).getAsset().equals("VET")) { balance.add(new Currency(assets.get(i).getAsset(), Double.parseDouble(assets.get(i).getFree()) + Double.parseDouble(assets.get(i).getLocked()))); } } } - callBack.onSuccess(); + for(BinanceUpdateNotifierInterface binanceUpdateNotifierInterface : binanceUpdateNotifierInterfaceList) + { + binanceUpdateNotifierInterface.onBinanceBalanceUpdateSuccess(); + } } catch (BinanceApiException e) { - callBack.onError(e.getMessage()); + for(BinanceUpdateNotifierInterface binanceUpdateNotifierInterface : binanceUpdateNotifierInterfaceList) + { + binanceUpdateNotifierInterface.onBinanceBalanceUpdateError(id, e.getMessage()); + } } } - public void updateTrades(BinanceCallBack callBack, String symbol) + public void updateTrades(String symbol) { trades = new ArrayList<>(); @@ -82,7 +99,10 @@ public class BinanceManager extends Exchange { } } - callBack.onSuccess(); + for(BinanceUpdateNotifierInterface binanceUpdateNotifierInterface : binanceUpdateNotifierInterfaceList) + { + binanceUpdateNotifierInterface.onBinanceTradesUpdated(); + } } public void updateTrades(BinanceCallBack callBack, String symbol, long fromId) diff --git a/app/src/main/java/com/herbron/moodl/DataManagers/ExchangeManager/Exchange.java b/app/src/main/java/com/herbron/moodl/DataManagers/ExchangeManager/Exchange.java index 338c244..66d3d00 100644 --- a/app/src/main/java/com/herbron/moodl/DataManagers/ExchangeManager/Exchange.java +++ b/app/src/main/java/com/herbron/moodl/DataManagers/ExchangeManager/Exchange.java @@ -1,5 +1,9 @@ package com.herbron.moodl.DataManagers.ExchangeManager; +import com.herbron.moodl.DataManagers.InfoAPIManagers.Pair; + +import java.util.List; + public class Exchange { protected int id; @@ -9,6 +13,7 @@ public class Exchange { protected String publicKey; protected String privateKey; protected boolean isEnabled; + private List pairs; public Exchange(int id, String name, int type, String description, String publicKey, String privateKey, boolean isEnabled) { @@ -21,6 +26,12 @@ public class Exchange { this.isEnabled = isEnabled; } + public Exchange(String name, List pairs) + { + this.name = name; + this.pairs = pairs; + } + public boolean isEnabled() { return isEnabled; diff --git a/app/src/main/java/com/herbron/moodl/DataManagers/ExchangeManager/HitBtcManager.java b/app/src/main/java/com/herbron/moodl/DataManagers/ExchangeManager/HitBtcManager.java index 9f89cd1..35ffe02 100644 --- a/app/src/main/java/com/herbron/moodl/DataManagers/ExchangeManager/HitBtcManager.java +++ b/app/src/main/java/com/herbron/moodl/DataManagers/ExchangeManager/HitBtcManager.java @@ -11,6 +11,7 @@ import com.android.volley.VolleyError; import com.android.volley.toolbox.JsonArrayRequest; import com.android.volley.toolbox.Volley; import com.herbron.moodl.DataManagers.CurrencyData.Currency; +import com.herbron.moodl.DataNotifiers.HitBTCUpdateNotifierInterface; import com.herbron.moodl.R; import org.json.JSONArray; @@ -39,6 +40,8 @@ public class HitBtcManager extends Exchange { private List balance; private android.content.Context context; + private List hitBTCUpdateNotifierInterfaceList; + public HitBtcManager(android.content.Context context, Exchange exchange) { super(exchange.id, exchange.name, exchange.type, exchange.description, exchange.publicKey, exchange.privateKey, exchange.isEnabled); @@ -47,6 +50,16 @@ public class HitBtcManager extends Exchange { requestQueue = Volley.newRequestQueue(context); } + public void addListener(HitBTCUpdateNotifierInterface hitBTCUpdateNotifierInterface) + { + if(hitBTCUpdateNotifierInterfaceList == null) + { + hitBTCUpdateNotifierInterfaceList = new ArrayList<>(); + } + + hitBTCUpdateNotifierInterfaceList.add(hitBTCUpdateNotifierInterface); + } + private void createPairSymbolList() { pairSymbolList = new ArrayList<>(); @@ -57,11 +70,6 @@ public class HitBtcManager extends Exchange { pairSymbolList.add("USDT"); } - public void updateTrades(final HitBtcCallBack callBack, String symbol, String pairSymbol) - { - - } - private void mergeBalanceSymbols() { List mergedBalance = new ArrayList<>(); @@ -88,7 +96,7 @@ public class HitBtcManager extends Exchange { balance = mergedBalance; } - public void updateGlobalBalance(final HitBtcCallBack masterCallBack) + public void updateGlobalBalance() { isTradingBalanceUpdated = false; isBalanceUpdated = false; @@ -103,13 +111,20 @@ public class HitBtcManager extends Exchange { if(isTradingBalanceUpdated) { mergeBalanceSymbols(); - masterCallBack.onSuccess(); + + for(HitBTCUpdateNotifierInterface hitBTCUpdateNotifierInterface : hitBTCUpdateNotifierInterfaceList) + { + hitBTCUpdateNotifierInterface.onHitBTCBalanceUpdateSuccess(); + } } } @Override public void onError(String error) { - masterCallBack.onError(error); + for(HitBTCUpdateNotifierInterface hitBTCUpdateNotifierInterface : hitBTCUpdateNotifierInterfaceList) + { + hitBTCUpdateNotifierInterface.onHitBTCBalanceUpdateError(id, error); + } } }); @@ -121,13 +136,20 @@ public class HitBtcManager extends Exchange { if(isBalanceUpdated) { mergeBalanceSymbols(); - masterCallBack.onSuccess(); + + for(HitBTCUpdateNotifierInterface hitBTCUpdateNotifierInterface : hitBTCUpdateNotifierInterfaceList) + { + hitBTCUpdateNotifierInterface.onHitBTCBalanceUpdateSuccess(); + } } } @Override public void onError(String error) { - masterCallBack.onError(error); + for(HitBTCUpdateNotifierInterface hitBTCUpdateNotifierInterface : hitBTCUpdateNotifierInterfaceList) + { + hitBTCUpdateNotifierInterface.onHitBTCBalanceUpdateError(id, error); + } } }); } diff --git a/app/src/main/java/com/herbron/moodl/DataManagers/InfoAPIManagers/CoinmarketCapAPIManager.java b/app/src/main/java/com/herbron/moodl/DataManagers/InfoAPIManagers/CoinmarketCapAPIManager.java new file mode 100644 index 0000000..ea1bc67 --- /dev/null +++ b/app/src/main/java/com/herbron/moodl/DataManagers/InfoAPIManagers/CoinmarketCapAPIManager.java @@ -0,0 +1,352 @@ +package com.herbron.moodl.DataManagers.InfoAPIManagers; + +import android.content.Context; + +import com.android.volley.Request; +import com.android.volley.RequestQueue; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.StringRequest; +import com.android.volley.toolbox.Volley; +import com.herbron.moodl.DataNotifiers.CoinmarketcapNotifierInterface; +import com.herbron.moodl.DataManagers.CurrencyData.Currency; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +/** + * Created by Guitoune on 22/04/2018. + */ + +public class CoinmarketCapAPIManager { + + final private static String LISTINGURL = "https://api.coinmarketcap.com/v2/listings/"; + final private static String TICKERLISTURL1 = "https://api.coinmarketcap.com/v2/ticker/?start="; + + + private static final String topCurrenciesUrl = "https://api.coinmarketcap.com/v2/ticker/?limit=9&convert="; + private static final String marketCapUrl = "https://api.coinmarketcap.com/v2/global/?convert="; + + private RequestQueue requestQueue; + private List currencyTickerList; + private static CoinmarketCapAPIManager INSTANCE; + private boolean upToDate; + + private List topCurrencies; + private long marketCap; + private long dayVolume; + private String active_crypto; + private String active_markets; + + private List coinmarketcapNotifierInterfaceList; + + private CoinmarketCapAPIManager(Context context) + { + requestQueue = Volley.newRequestQueue(context); + } + + public static synchronized CoinmarketCapAPIManager getInstance(Context context) + { + if(INSTANCE == null) + { + INSTANCE = new CoinmarketCapAPIManager(context); + } + + return INSTANCE; + } + + public void addListener(CoinmarketcapNotifierInterface coinmarketcapNotifierInterface) + { + if(coinmarketcapNotifierInterfaceList == null) + { + coinmarketcapNotifierInterfaceList = new ArrayList<>(); + } + + coinmarketcapNotifierInterfaceList.add(coinmarketcapNotifierInterface); + } + + public boolean isUpToDate() + { + if(currencyTickerList == null) + { + upToDate = false; + } + + return upToDate; + } + + public void getCurrenciesFrom(int indexFrom, final String toSymbol) + { + String requetsString = TICKERLISTURL1 + indexFrom + "&limit=50&convert=" + toSymbol; + + StringRequest strRequest = new StringRequest(Request.Method.GET, requetsString, + new Response.Listener() { + @Override + public void onResponse(String response) { + if (response.length() > 0) + { + processTickersResult(response, toSymbol); + } + } + }, + new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + + } + }); + + requestQueue.add(strRequest); + } + + public void updateListing() + { + currencyTickerList = new ArrayList<>(); + StringRequest strRequest = new StringRequest(Request.Method.GET, LISTINGURL, + new Response.Listener() { + @Override + public void onResponse(String response) { + if (response.length() > 0) { + processTickerListResult(response); + } + upToDate = true; + } + }, + new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + upToDate = true; + } + }); + + requestQueue.add(strRequest); + } + + public int getTickerIdForSymbol(String symbol) + { + int tickerId = 0; + int i = 0; + + while(!currencyTickerList.get(i).getSymbol().equals(symbol) && currencyTickerList.size() > i+1) + { + i++; + } + + if(currencyTickerList.get(i).getSymbol().equals(symbol)) + { + tickerId = currencyTickerList.get(i).getTickerId(); + } + + return tickerId; + } + + private void processTickersResult(String response, String toSymbol) + { + List currencyList = new ArrayList<>(); + + try { + JSONObject masterJsonObject = new JSONObject(response); + + if(masterJsonObject.keys().hasNext()) + { + JSONObject currencyJsonObject = masterJsonObject.getJSONObject(masterJsonObject.keys().next()); + Iterator keys = currencyJsonObject.keys(); + + while(keys.hasNext()) + { + String key = keys.next().toString(); + JSONObject subCurrencyJsonObject = currencyJsonObject.getJSONObject(key); + Currency newCurrency = new Currency(subCurrencyJsonObject.getString("name"), subCurrencyJsonObject.getString("symbol"), subCurrencyJsonObject.getInt("id")); + newCurrency.setRank(subCurrencyJsonObject.getInt("rank")); + JSONObject quoteJsonObject = subCurrencyJsonObject.getJSONObject("quotes"); + JSONObject symJsonObject = quoteJsonObject.getJSONObject(toSymbol); + newCurrency.setValue(symJsonObject.getDouble("price")); + newCurrency.setDayFluctuationPercentage((float) symJsonObject.getDouble("percent_change_24h")); + newCurrency.setDayFluctuation(newCurrency.getDayFluctuationPercentage() * newCurrency.getValue() / 100); + + currencyList.add(newCurrency); + } + } + } catch (JSONException e) { + e.printStackTrace(); + } + + for(CoinmarketcapNotifierInterface coinmarketcapNotifierInterface : coinmarketcapNotifierInterfaceList) + { + coinmarketcapNotifierInterface.onCurrenciesRetrieved(currencyList); + } + } + + private void processTickerListResult(String response) + { + try { + JSONObject dataJsonObject = new JSONObject(response); + JSONArray dataJsonArray = dataJsonObject.getJSONArray("data"); + + for(int i = 0; i < dataJsonArray.length(); i++) + { + JSONObject currencyJsonObject = dataJsonArray.getJSONObject(i); + currencyTickerList.add(new Currency(currencyJsonObject.getString("name"), currencyJsonObject.getString("symbol"), currencyJsonObject.getInt("id"))); + } + } catch (JSONException e) { + e.printStackTrace(); + } + + for(CoinmarketcapNotifierInterface coinmarketcapNotifierInterface : coinmarketcapNotifierInterfaceList) + { + coinmarketcapNotifierInterface.onListingUpdated(); + } + } + + public void updateTopCurrencies(final String toSymbol) + { + String requestString = topCurrenciesUrl + toSymbol; + + topCurrencies = new ArrayList<>(); + + StringRequest strRequest = new StringRequest(Request.Method.GET, requestString, + new Response.Listener() { + @Override + public void onResponse(String response) { + if (response.length() > 0) { + processTopCurrencies(response, toSymbol); + } + + for(CoinmarketcapNotifierInterface coinmarketcapNotifierInterface : coinmarketcapNotifierInterfaceList) + { + coinmarketcapNotifierInterface.onTopCurrenciesUpdated(); + } + } + }, + new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + + } + }); + + requestQueue.add(strRequest); + } + + public void updateMarketCap(final String toSymbol) + { + String requestString = marketCapUrl + toSymbol; + + StringRequest strRequest = new StringRequest(Request.Method.GET, requestString, + new Response.Listener() { + @Override + public void onResponse(String response) { + if (response.length() > 0) { + processMarketCapData(response, toSymbol); + } + + + for(CoinmarketcapNotifierInterface coinmarketcapNotifierInterface : coinmarketcapNotifierInterfaceList) + { + coinmarketcapNotifierInterface.onMarketCapUpdated(); + } + } + }, + new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + + } + }); + + requestQueue.add(strRequest); + } + + private void processMarketCapData(String response, String toSymbol) + { + try { + JSONObject jsonObject = new JSONObject(response); + JSONObject dataJsonObject = jsonObject.getJSONObject("data"); + JSONObject quotesJsonObject = dataJsonObject.getJSONObject("quotes"); + JSONObject valuesJsonObject = quotesJsonObject.getJSONObject(toSymbol); + + active_crypto = dataJsonObject.getString("active_cryptocurrencies"); + active_markets = dataJsonObject.getString("active_markets"); + marketCap = valuesJsonObject.getLong("total_market_cap"); + dayVolume = valuesJsonObject.getLong("total_volume_24h"); + } catch (JSONException e) { + e.printStackTrace(); + } + } + + public String getActive_crypto() + { + return active_crypto; + } + + public String getActive_markets() + { + return active_markets; + } + + public List getTopCurrencies() + { + return topCurrencies; + } + + public long getDayVolume() + { + return dayVolume; + } + + private void processTopCurrencies(String response, String toSymbol) + { + try { + JSONObject masterJsonObject = new JSONObject(response); + + if(masterJsonObject.keys().hasNext()) + { + JSONObject currencyJsonObject = masterJsonObject.getJSONObject(masterJsonObject.keys().next()); + Iterator keys = currencyJsonObject.keys(); + + while(keys.hasNext()) + { + String key = keys.next().toString(); + JSONObject subCurrencyJsonObject = currencyJsonObject.getJSONObject(key); + Currency newCurrency = new Currency(subCurrencyJsonObject.getString("name"), subCurrencyJsonObject.getString("symbol"), subCurrencyJsonObject.getInt("id")); + JSONObject quoteJsonObject = subCurrencyJsonObject.getJSONObject("quotes"); + JSONObject symJsonObject = quoteJsonObject.getJSONObject(toSymbol); + newCurrency.setMarketCapitalization(symJsonObject.getDouble("market_cap")); + newCurrency.setVolume24h(symJsonObject.getDouble("volume_24h")); + + topCurrencies.add(newCurrency); + } + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + + public Currency getCurrencyFromSymbol(String symbol) + { + Currency returnedCurrency = null; + int index = 0; + + do { + if(symbol.equals(topCurrencies.get(index).getSymbol())) + { + returnedCurrency = topCurrencies.get(index); + } + + index++; + } while(index < topCurrencies.size() && returnedCurrency == null); + + + return returnedCurrency; + } + + public long getMarketCap() + { + return marketCap; + } +} diff --git a/app/src/main/java/com/herbron/moodl/DataManagers/CurrencyData/CurrencyDetailsList.java b/app/src/main/java/com/herbron/moodl/DataManagers/InfoAPIManagers/CryptocompareApiManager.java similarity index 55% rename from app/src/main/java/com/herbron/moodl/DataManagers/CurrencyData/CurrencyDetailsList.java rename to app/src/main/java/com/herbron/moodl/DataManagers/InfoAPIManagers/CryptocompareApiManager.java index 2b0e016..ae41608 100644 --- a/app/src/main/java/com/herbron/moodl/DataManagers/CurrencyData/CurrencyDetailsList.java +++ b/app/src/main/java/com/herbron/moodl/DataManagers/InfoAPIManagers/CryptocompareApiManager.java @@ -1,4 +1,4 @@ -package com.herbron.moodl.DataManagers.CurrencyData; +package com.herbron.moodl.DataManagers.InfoAPIManagers; import android.content.Context; import android.os.StrictMode; @@ -10,12 +10,16 @@ import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.StringRequest; import com.android.volley.toolbox.Volley; -import com.herbron.moodl.DataManagers.BalanceManager; +import com.herbron.moodl.DataNotifiers.CryptocompareNotifierInterface; +import com.herbron.moodl.DataManagers.CurrencyData.Currency; +import com.herbron.moodl.DataManagers.ExchangeManager.Exchange; +import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; +import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.regex.Pattern; @@ -24,30 +28,64 @@ import java.util.regex.Pattern; * Created by Tiji on 11/04/2018. */ -public class CurrencyDetailsList { +public class CryptocompareApiManager { final private static String DETAILURL = "https://min-api.cryptocompare.com/data/all/coinlist"; + final private static String EXCHANGEURL = "https://min-api.cryptocompare.com/data/all/exchanges"; private RequestQueue requestQueue; private LinkedHashMap coinInfosHashmap; - private static CurrencyDetailsList INSTANCE; - private boolean upToDate; + private List exchangeList; + private static CryptocompareApiManager INSTANCE; + private boolean exchangesUpToDate; + private boolean detailsUpToDate; - private CurrencyDetailsList(Context context) + private List cryptocompareNotifierInterfaceList; + + private CryptocompareApiManager(Context context) { requestQueue = Volley.newRequestQueue(context); } - public static synchronized CurrencyDetailsList getInstance(Context context) + public static synchronized CryptocompareApiManager getInstance(Context context) { if(INSTANCE == null) { - INSTANCE = new CurrencyDetailsList(context); + INSTANCE = new CryptocompareApiManager(context); } return INSTANCE; } - public void update(final BalanceManager.IconCallBack callBack) + public void addListener(CryptocompareNotifierInterface cryptocompareNotifierInterface) + { + if(cryptocompareNotifierInterfaceList == null) + { + cryptocompareNotifierInterfaceList = new ArrayList<>(); + } + + cryptocompareNotifierInterfaceList.add(cryptocompareNotifierInterface); + } + + public void updateExchangeList() + { + StringRequest stringRequest = new StringRequest(Request.Method.GET, EXCHANGEURL, + new Response.Listener() { + @Override + public void onResponse(String response) { + processExchangeResult(response); + } + }, + new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + + } + }); + + requestQueue.add(stringRequest); + } + + public void updateDetails() { StringRequest strRequest = new StringRequest(Request.Method.GET, DETAILURL, new Response.Listener() { @@ -55,7 +93,7 @@ public class CurrencyDetailsList { public void onResponse(String response) { if (response.length() > 0) { - processDetailResult(response, callBack); + processDetailResult(response); } } }, @@ -69,17 +107,72 @@ public class CurrencyDetailsList { requestQueue.add(strRequest); } - public boolean isUpToDate() + public boolean isExchangesUpToDate() + { + if(exchangeList == null) + { + exchangesUpToDate = false; + } + + return exchangesUpToDate; + } + + public boolean isDetailsUpToDate() { if(coinInfosHashmap == null) { - upToDate = false; + detailsUpToDate = false; } - return upToDate; + return detailsUpToDate; } - private void processDetailResult(String response, final BalanceManager.IconCallBack callBack) + private void processExchangeResult(String response) + { + exchangeList = new ArrayList<>(); + + try { + JSONObject mainJsonObject = new JSONObject(response); + Iterator exchangeIterator = mainJsonObject.keys(); + + while(exchangeIterator.hasNext()) + { + String exchangeKey = exchangeIterator.next(); + JSONObject exchangeJsonObject = mainJsonObject.getJSONObject(exchangeKey); + Iterator pairIterator = exchangeJsonObject.keys(); + + while(pairIterator.hasNext()) + { + String pairKey = pairIterator.next(); + JSONArray pairJsonArray = exchangeJsonObject.getJSONArray(pairKey); + + List pairList = new ArrayList<>(); + + for(int i = 0; i < pairJsonArray.length(); i++) + { + pairList.add(new Pair(pairKey, pairJsonArray.get(i).toString())); + } + + exchangeList.add(new Exchange(exchangeKey, pairList)); + } + } + + for(CryptocompareNotifierInterface cryptocompareNotifierInterface : cryptocompareNotifierInterfaceList) + { + cryptocompareNotifierInterface.onExchangesUpdated(); + } + + } catch (JSONException e) { + Log.d("moodl", "Error while processing exchange result"); + } + } + + public List getExchangeList() + { + return exchangeList; + } + + private void processDetailResult(String response) { response = response.substring(response.indexOf("\"Data\"") + 7, response.lastIndexOf("},\"BaseImageUrl\"")); String[] tab = response.split(Pattern.quote("},")); @@ -113,9 +206,12 @@ public class CurrencyDetailsList { sortDetails(); - upToDate = true; + detailsUpToDate = true; - callBack.onSuccess(); + for(CryptocompareNotifierInterface cryptocompareNotifierInterface : cryptocompareNotifierInterfaceList) + { + cryptocompareNotifierInterface.onDetailsUpdated(); + } } private void sortDetails() diff --git a/app/src/main/java/com/herbron/moodl/DataManagers/InfoAPIManagers/Pair.java b/app/src/main/java/com/herbron/moodl/DataManagers/InfoAPIManagers/Pair.java new file mode 100644 index 0000000..e9d6163 --- /dev/null +++ b/app/src/main/java/com/herbron/moodl/DataManagers/InfoAPIManagers/Pair.java @@ -0,0 +1,18 @@ +package com.herbron.moodl.DataManagers.InfoAPIManagers; + +public class Pair { + + private String from; + private String to; + + public Pair(String from, String to) + { + this.from = from; + this.to = to; + } + + public boolean contains(String symbol) + { + return symbol.equals(from) || symbol.equals(to); + } +} diff --git a/app/src/main/java/com/herbron/moodl/DataManagers/MarketCapManager.java b/app/src/main/java/com/herbron/moodl/DataManagers/MarketCapManager.java deleted file mode 100644 index 9562b04..0000000 --- a/app/src/main/java/com/herbron/moodl/DataManagers/MarketCapManager.java +++ /dev/null @@ -1,182 +0,0 @@ -package com.herbron.moodl.DataManagers; - -import com.android.volley.Request; -import com.android.volley.RequestQueue; -import com.android.volley.Response; -import com.android.volley.VolleyError; -import com.android.volley.toolbox.StringRequest; -import com.android.volley.toolbox.Volley; -import com.herbron.moodl.DataManagers.CurrencyData.Currency; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -/** - * Created by Guitoune on 02/03/2018. - */ - -public class MarketCapManager { - - private static final String topCurrenciesUrl = "https://api.coinmarketcap.com/v2/ticker/?limit=9&convert="; - private static final String marketCapUrl = "https://api.coinmarketcap.com/v2/global/?convert="; - private RequestQueue requestQueue; - private List topCurrencies; - private long marketCap; - private long dayVolume; - private String active_crypto; - private String active_markets; - - public MarketCapManager(android.content.Context context) - { - requestQueue = Volley.newRequestQueue(context); - } - - public void updateTopCurrencies(final VolleyCallBack callBack, final String toSymbol) - { - String requestString = topCurrenciesUrl + toSymbol; - - topCurrencies = new ArrayList<>(); - - StringRequest strRequest = new StringRequest(Request.Method.GET, requestString, - new Response.Listener() { - @Override - public void onResponse(String response) { - if (response.length() > 0) { - processTopCurrencies(response, toSymbol); - } - - callBack.onSuccess(); - } - }, - new Response.ErrorListener() { - @Override - public void onErrorResponse(VolleyError error) { - - } - }); - - requestQueue.add(strRequest); - } - - public void updateMarketCap(final VolleyCallBack callBack, final String toSymbol) - { - String requestString = marketCapUrl + toSymbol; - - StringRequest strRequest = new StringRequest(Request.Method.GET, requestString, - new Response.Listener() { - @Override - public void onResponse(String response) { - if (response.length() > 0) { - processMarketCapData(response, toSymbol); - } - - callBack.onSuccess(); - } - }, - new Response.ErrorListener() { - @Override - public void onErrorResponse(VolleyError error) { - - } - }); - - requestQueue.add(strRequest); - } - - private void processMarketCapData(String response, String toSymbol) - { - try { - JSONObject jsonObject = new JSONObject(response); - JSONObject dataJsonObject = jsonObject.getJSONObject("data"); - JSONObject quotesJsonObject = dataJsonObject.getJSONObject("quotes"); - JSONObject valuesJsonObject = quotesJsonObject.getJSONObject(toSymbol); - - active_crypto = dataJsonObject.getString("active_cryptocurrencies"); - active_markets = dataJsonObject.getString("active_markets"); - marketCap = valuesJsonObject.getLong("total_market_cap"); - dayVolume = valuesJsonObject.getLong("total_volume_24h"); - } catch (JSONException e) { - e.printStackTrace(); - } - } - - public String getActive_crypto() - { - return active_crypto; - } - - public String getActive_markets() - { - return active_markets; - } - - public List getTopCurrencies() - { - return topCurrencies; - } - - public long getDayVolume() - { - return dayVolume; - } - - private void processTopCurrencies(String response, String toSymbol) - { - try { - JSONObject masterJsonObject = new JSONObject(response); - - if(masterJsonObject.keys().hasNext()) - { - JSONObject currencyJsonObject = masterJsonObject.getJSONObject(masterJsonObject.keys().next()); - Iterator keys = currencyJsonObject.keys(); - - while(keys.hasNext()) - { - String key = keys.next().toString(); - JSONObject subCurrencyJsonObject = currencyJsonObject.getJSONObject(key); - Currency newCurrency = new Currency(subCurrencyJsonObject.getString("name"), subCurrencyJsonObject.getString("symbol"), subCurrencyJsonObject.getInt("id")); - JSONObject quoteJsonObject = subCurrencyJsonObject.getJSONObject("quotes"); - JSONObject symJsonObject = quoteJsonObject.getJSONObject(toSymbol); - newCurrency.setMarketCapitalization(symJsonObject.getDouble("market_cap")); - newCurrency.setVolume24h(symJsonObject.getDouble("volume_24h")); - - topCurrencies.add(newCurrency); - } - } - } catch (JSONException e) { - e.printStackTrace(); - } - } - - public Currency getCurrencyFromSymbol(String symbol) - { - Currency returnedCurrency = null; - int index = 0; - - do { - if(symbol.equals(topCurrencies.get(index).getSymbol())) - { - returnedCurrency = topCurrencies.get(index); - } - - index++; - } while(index < topCurrencies.size() && returnedCurrency == null); - - - return returnedCurrency; - } - - public long getMarketCap() - { - return marketCap; - } - - public interface VolleyCallBack - { - void onSuccess(); - } -} diff --git a/app/src/main/java/com/herbron/moodl/DataNotifierInterface.java b/app/src/main/java/com/herbron/moodl/DataNotifierInterface.java deleted file mode 100644 index 409c1e6..0000000 --- a/app/src/main/java/com/herbron/moodl/DataNotifierInterface.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.herbron.moodl; - -/** - * Created by Administrator on 17/06/2018. - */ - -public interface DataNotifierInterface { - - void onTickerListUpdated(); - - void onDetailsUpdated(); - - void onBalanceDataUpdated(); - - void onBalanceError(String error); -} diff --git a/app/src/main/java/com/herbron/moodl/DataNotifiers/BalanceUpdateNotifierInterface.java b/app/src/main/java/com/herbron/moodl/DataNotifiers/BalanceUpdateNotifierInterface.java new file mode 100644 index 0000000..f7b8810 --- /dev/null +++ b/app/src/main/java/com/herbron/moodl/DataNotifiers/BalanceUpdateNotifierInterface.java @@ -0,0 +1,12 @@ +package com.herbron.moodl.DataNotifiers; + +/** + * Created by Administrator on 17/06/2018. + */ + +public interface BalanceUpdateNotifierInterface { + + void onBalanceDataUpdated(); + + void onBalanceError(String error); +} diff --git a/app/src/main/java/com/herbron/moodl/DataNotifiers/BinanceUpdateNotifierInterface.java b/app/src/main/java/com/herbron/moodl/DataNotifiers/BinanceUpdateNotifierInterface.java new file mode 100644 index 0000000..25920af --- /dev/null +++ b/app/src/main/java/com/herbron/moodl/DataNotifiers/BinanceUpdateNotifierInterface.java @@ -0,0 +1,10 @@ +package com.herbron.moodl.DataNotifiers; + +public interface BinanceUpdateNotifierInterface { + + void onBinanceTradesUpdated(); + + void onBinanceBalanceUpdateSuccess(); + + void onBinanceBalanceUpdateError(int accountId, String error); +} diff --git a/app/src/main/java/com/herbron/moodl/DataNotifiers/CoinmarketcapNotifierInterface.java b/app/src/main/java/com/herbron/moodl/DataNotifiers/CoinmarketcapNotifierInterface.java new file mode 100644 index 0000000..2226467 --- /dev/null +++ b/app/src/main/java/com/herbron/moodl/DataNotifiers/CoinmarketcapNotifierInterface.java @@ -0,0 +1,16 @@ +package com.herbron.moodl.DataNotifiers; + +import com.herbron.moodl.DataManagers.CurrencyData.Currency; + +import java.util.List; + +public interface CoinmarketcapNotifierInterface { + + void onCurrenciesRetrieved(List currencyList); + + void onTopCurrenciesUpdated(); + + void onMarketCapUpdated(); + + void onListingUpdated(); +} diff --git a/app/src/main/java/com/herbron/moodl/DataNotifiers/CryptocompareNotifierInterface.java b/app/src/main/java/com/herbron/moodl/DataNotifiers/CryptocompareNotifierInterface.java new file mode 100644 index 0000000..822187d --- /dev/null +++ b/app/src/main/java/com/herbron/moodl/DataNotifiers/CryptocompareNotifierInterface.java @@ -0,0 +1,9 @@ +package com.herbron.moodl.DataNotifiers; + +public interface CryptocompareNotifierInterface { + + void onDetailsUpdated(); + + void onExchangesUpdated(); + +} diff --git a/app/src/main/java/com/herbron/moodl/DataNotifiers/HitBTCUpdateNotifierInterface.java b/app/src/main/java/com/herbron/moodl/DataNotifiers/HitBTCUpdateNotifierInterface.java new file mode 100644 index 0000000..fd6087d --- /dev/null +++ b/app/src/main/java/com/herbron/moodl/DataNotifiers/HitBTCUpdateNotifierInterface.java @@ -0,0 +1,9 @@ +package com.herbron.moodl.DataNotifiers; + +public interface HitBTCUpdateNotifierInterface { + + void onHitBTCBalanceUpdateSuccess(); + + void onHitBTCBalanceUpdateError(int accountId, String error); + +} diff --git a/app/src/main/java/com/herbron/moodl/DataNotifiers/MoodlboxNotifierInterface.java b/app/src/main/java/com/herbron/moodl/DataNotifiers/MoodlboxNotifierInterface.java new file mode 100644 index 0000000..5630fe9 --- /dev/null +++ b/app/src/main/java/com/herbron/moodl/DataNotifiers/MoodlboxNotifierInterface.java @@ -0,0 +1,9 @@ +package com.herbron.moodl.DataNotifiers; + +import android.graphics.Bitmap; + +public interface MoodlboxNotifierInterface { + + void onBitmapDownloaded(Bitmap bitmap); + +} diff --git a/app/src/main/java/com/herbron/moodl/LayoutManagers/OverviewListAdapter.java b/app/src/main/java/com/herbron/moodl/LayoutManagers/OverviewListAdapter.java index b42e709..e542a2a 100644 --- a/app/src/main/java/com/herbron/moodl/LayoutManagers/OverviewListAdapter.java +++ b/app/src/main/java/com/herbron/moodl/LayoutManagers/OverviewListAdapter.java @@ -11,7 +11,7 @@ import android.widget.LinearLayout; import com.herbron.moodl.DataManagers.CurrencyData.Currency; import com.herbron.moodl.DataManagers.CurrencyData.CurrencyCardview; -import com.herbron.moodl.DataManagers.CurrencyData.CurrencyDetailsList; +import com.herbron.moodl.DataManagers.InfoAPIManagers.CryptocompareApiManager; import java.util.List; @@ -22,14 +22,14 @@ import java.util.List; public class OverviewListAdapter extends ArrayAdapter { private Activity activity; - private CurrencyDetailsList currencyDetailsList; + private CryptocompareApiManager cryptocompareApiManager; public OverviewListAdapter(Context context, List currencies, Activity activity) { super(context, android.R.layout.simple_expandable_list_item_1, currencies); this.activity = activity; - currencyDetailsList = CurrencyDetailsList.getInstance(getContext()); + cryptocompareApiManager = CryptocompareApiManager.getInstance(getContext()); } @NonNull @@ -38,7 +38,7 @@ public class OverviewListAdapter extends ArrayAdapter { { Currency currency = getItem(position); - currencyDetailsList.getCurrencyDetailsFromSymbol(currency.getSymbol()); + cryptocompareApiManager.getCurrencyDetailsFromSymbol(currency.getSymbol()); CurrencyCardview currencyCardview = new CurrencyCardview(getContext(), currency, activity); LinearLayout linearLayout = new LinearLayout(getContext()); diff --git a/app/src/main/java/com/herbron/moodl/MoodlBox.java b/app/src/main/java/com/herbron/moodl/MoodlBox.java index bc1cb2f..ea6f231 100644 --- a/app/src/main/java/com/herbron/moodl/MoodlBox.java +++ b/app/src/main/java/com/herbron/moodl/MoodlBox.java @@ -4,7 +4,6 @@ import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; -import android.graphics.Color; import android.graphics.drawable.Drawable; import android.os.Build; import android.support.v7.widget.CardView; @@ -13,8 +12,8 @@ import android.view.View; import android.view.animation.Animation; import android.view.animation.Transformation; -import com.herbron.moodl.Activities.HomeActivity; -import com.herbron.moodl.DataManagers.CurrencyData.CurrencyDetailsList; +import com.herbron.moodl.DataManagers.InfoAPIManagers.CryptocompareApiManager; +import com.herbron.moodl.DataNotifiers.MoodlboxNotifierInterface; import org.json.JSONException; import org.json.JSONObject; @@ -207,7 +206,7 @@ public class MoodlBox { } } - public static void getBitmapFromURL(String src, String symbol, Resources resources, Context context, HomeActivity.IconCallBack callBack) + public static void getBitmapFromURL(String src, String symbol, Resources resources, Context context, MoodlboxNotifierInterface callBack) { String size = src.substring(src.lastIndexOf("=") + 1, src.length()); String filepath = context.getCacheDir() + "/" + symbol + "x" + size + ".png"; @@ -240,7 +239,7 @@ public class MoodlBox { } } - callBack.onSuccess(result); + callBack.onBitmapDownloaded(result); } public static int getColor(int id, Context context) @@ -275,9 +274,9 @@ public class MoodlBox { return drawable; } - public static String getIconUrl(String symbol, CurrencyDetailsList currencyDetailsList) + public static String getIconUrl(String symbol, CryptocompareApiManager cryptocompareApiManager) { - return getIconUrl(symbol, 50, currencyDetailsList); + return getIconUrl(symbol, 50, cryptocompareApiManager); } public static float convertDpToPx(float dp, Resources resources) @@ -285,12 +284,12 @@ public class MoodlBox { return dp * resources.getDisplayMetrics().density; } - public static String getIconUrl(String symbol, int size, CurrencyDetailsList currencyDetailsList) + public static String getIconUrl(String symbol, int size, CryptocompareApiManager cryptocompareApiManager) { String url; try { - JSONObject jsonObject = new JSONObject(currencyDetailsList.getCoinInfosHashmap().get(symbol)); + JSONObject jsonObject = new JSONObject(cryptocompareApiManager.getCoinInfosHashmap().get(symbol)); url = "https://www.cryptocompare.com" + jsonObject.getString("ImageUrl") + "?width=" + size; } catch (JSONException | NullPointerException e) { url = null; diff --git a/app/src/main/res/layout/fragment_buy.xml b/app/src/main/res/layout/fragment_buy.xml index 1ff29e1..b138fb1 100644 --- a/app/src/main/res/layout/fragment_buy.xml +++ b/app/src/main/res/layout/fragment_buy.xml @@ -1,15 +1,157 @@ - - + android:layout_margin="@dimen/margin" + android:orientation="vertical"> - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 51f5703..09c6215 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -16,8 +16,8 @@ Clé public Clé privée Montant - Prix d\'achat - Date d\'achat + Prix d\'achat + Date d\'achat Frais Historique Informations diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4a6581c..b5199d0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -127,8 +127,8 @@ Amount - Purchased price - Purchased date + Purchase price + Purchase date Fees CurrencyDetailsActivity History charts @@ -261,6 +261,9 @@ Choose a coin - Hello blank fragment + Exchange + Pair + Total value + Notes