From 267cdefc9bd7f646f3f20d825abd07b3f75c817b Mon Sep 17 00:00:00 2001 From: Tanguy Herbron Date: Tue, 6 Feb 2018 15:59:01 +0100 Subject: [PATCH] Update detail activity Details for 1h, 3h, 1d, 3d, 1w, 1M, 3M, 6M & 1Y --- .../Activities/CurrencyDetailsActivity.java | 482 +++++++++++++----- .../coinfolio/Activities/HomeActivity.java | 273 +++++----- .../DataManagers/CurrencyData/Currency.java | 93 ++-- .../CurrencyData/CurrencyDataRetriever.java | 134 +++++ .../CurrencyData/CurrencyDataRetriver.java | 181 ------- .../LayoutManagers/HomeLayoutGenerator.java | 10 +- .../res/layout/activity_currency_details.xml | 96 ++++ app/src/main/res/layout/tooltip_layout.xml | 12 +- app/src/main/res/values/strings.xml | 11 + 9 files changed, 785 insertions(+), 507 deletions(-) create mode 100644 app/src/main/java/com/nauk/coinfolio/DataManagers/CurrencyData/CurrencyDataRetriever.java delete mode 100644 app/src/main/java/com/nauk/coinfolio/DataManagers/CurrencyData/CurrencyDataRetriver.java diff --git a/app/src/main/java/com/nauk/coinfolio/Activities/CurrencyDetailsActivity.java b/app/src/main/java/com/nauk/coinfolio/Activities/CurrencyDetailsActivity.java index f6cb615..dca9c6a 100644 --- a/app/src/main/java/com/nauk/coinfolio/Activities/CurrencyDetailsActivity.java +++ b/app/src/main/java/com/nauk/coinfolio/Activities/CurrencyDetailsActivity.java @@ -1,9 +1,8 @@ package com.nauk.coinfolio.Activities; -import android.content.ContentValues; import android.content.Intent; import android.graphics.Color; -import android.graphics.Rect; +import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.design.widget.BottomNavigationView; @@ -13,22 +12,16 @@ import android.view.Gravity; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; -import android.view.ViewGroup; -import android.view.animation.BounceInterpolator; -import android.widget.ArrayAdapter; +import android.widget.Button; import android.widget.LinearLayout; -import android.widget.ListView; -import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.ViewFlipper; import com.daimajia.swipe.SwipeLayout; import com.db.chart.animation.Animation; import com.db.chart.model.LineSet; -import com.db.chart.model.Point; import com.db.chart.renderer.AxisRenderer; import com.db.chart.tooltip.Tooltip; -import com.db.chart.util.Tools; import com.db.chart.view.LineChartView; import com.nauk.coinfolio.DataManagers.CurrencyData.Currency; import com.nauk.coinfolio.DataManagers.CurrencyData.CurrencyDataChart; @@ -36,11 +29,8 @@ import com.nauk.coinfolio.DataManagers.CurrencyData.Transaction; import com.nauk.coinfolio.DataManagers.DatabaseManager; import com.nauk.coinfolio.R; -import org.w3c.dom.Text; - +import java.util.ArrayList; import java.util.Calendar; -import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Locale; @@ -58,6 +48,11 @@ public class CurrencyDetailsActivity extends AppCompatActivity { private Tooltip tip; private int indexMax; private int indexMin; + private final static int HOUR = 0; + private final static int DAY = 1; + private final static int WEEK = 2; + private final static int MONTH = 3; + private final static int YEAR = 4; private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener = new BottomNavigationView.OnNavigationItemSelectedListener() { @@ -108,19 +103,21 @@ public class CurrencyDetailsActivity extends AppCompatActivity { drawTransactionList(); - if(currency.getDayPriceHistory().size() > 0) + initializeButtons(); + + if(currency.getHistoryMinutes().size() > 0) { - drawChart(); + drawChart(DAY, 1); } else { TextView errorTextView = new TextView(this); - errorTextView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 500)); + errorTextView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 750)); errorTextView.setText("Not enough data"); errorTextView.setTag("chart_layout"); errorTextView.setGravity(Gravity.CENTER); - chartLayout.addView(errorTextView); + chartLayout.addView(errorTextView, 0); } setTitle(currency.getName()); @@ -131,70 +128,366 @@ public class CurrencyDetailsActivity extends AppCompatActivity { hasBeenModified = false; } - private void drawChart() + private void initializeButtons() { - final LineChartView chartView = new LineChartView(this); - LineSet lineSet = new LineSet(); - double valMin; - double valMax; - int counter = 0; - Calendar calendar = Calendar.getInstance(Locale.FRANCE); - String hour; - String minute; + LinearLayout buttonLayout = findViewById(R.id.layoutChartButtons); - final List dataChartList = currency.getDayPriceHistory(); - - indexMin = 0; - indexMax = 0; - valMin = dataChartList.get(0).getOpen(); - valMax = dataChartList.get(0).getOpen(); - - for(int i = 1; i < dataChartList.size(); i++) + for(int i = 0; i < buttonLayout.getChildCount(); i++) { - if(valMax < dataChartList.get(i).getOpen()) - { - valMax = dataChartList.get(i).getOpen(); - indexMax = i; - } + final Button button = (Button) buttonLayout.getChildAt(i); + button.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + buttonEvent(v); + } + }); + } + } - if(valMin > dataChartList.get(i).getOpen()) + private void buttonEvent(View v) + { + v.setEnabled(false); + + LinearLayout buttonLayout = (LinearLayout) v.getParent(); + + for(int i = 0; i < buttonLayout.getChildCount(); i++) + { + Button button = (Button) buttonLayout.getChildAt(i); + + if(button != v) { - valMin = dataChartList.get(i).getOpen(); - indexMin = i; + button.setEnabled(true); } } - if(valMax == valMin) + chartEvent((Button) v); + } + + private void chartEvent(Button button) + { + findViewById(R.id.chartView).setVisibility(View.GONE); + findViewById(R.id.progressLayoutChart).setVisibility(View.VISIBLE); + + String interval = button.getText().toString().substring(button.getText().toString().length()-2); + + switch (interval) { - valMin = 0; - valMax *= 2; + case "1h": + drawChart(HOUR, 1); + break; + case "3h": + drawChart(HOUR, 3); + break; + case "1d": + drawChart(DAY, 1); + break; + case "3d": + currency.updateHistoryHours(this, new Currency.CurrencyCallBack() { + @Override + public void onSuccess(Currency currency) { + runOnUiThread(new Runnable() { + @Override + public void run() { + drawChart(CurrencyDetailsActivity.DAY, 3); + } + }); + } + }); + break; + case "1w": + currency.updateHistoryHours(this, new Currency.CurrencyCallBack() { + @Override + public void onSuccess(Currency currency) { + runOnUiThread(new Runnable() { + @Override + public void run() { + drawChart(CurrencyDetailsActivity.WEEK, 1); + } + }); + } + }); + break; + case "1M": + currency.updateHistoryDays(this, new Currency.CurrencyCallBack() { + @Override + public void onSuccess(Currency currency) { + runOnUiThread(new Runnable() { + @Override + public void run() { + drawChart(CurrencyDetailsActivity.MONTH, 1); + } + }); + } + }); + break; + case "3M": + currency.updateHistoryDays(this, new Currency.CurrencyCallBack() { + @Override + public void onSuccess(Currency currency) { + runOnUiThread(new Runnable() { + @Override + public void run() { + drawChart(CurrencyDetailsActivity.MONTH, 3); + } + }); + } + }); + break; + case "6M": + currency.updateHistoryDays(this, new Currency.CurrencyCallBack() { + @Override + public void onSuccess(Currency currency) { + runOnUiThread(new Runnable() { + @Override + public void run() { + drawChart(CurrencyDetailsActivity.MONTH, 6); + } + }); + } + }); + break; + case "1y": + currency.updateHistoryDays(this, new Currency.CurrencyCallBack() { + @Override + public void onSuccess(Currency currency) { + runOnUiThread(new Runnable() { + @Override + public void run() { + drawChart(CurrencyDetailsActivity.YEAR, 1); + } + }); + } + }); + break; } + } + + private void drawChart(int timeUnit, int amount) + { + final LineChartView chartView = findViewById(R.id.chartView); + LineSet lineSet = generateChartSet(timeUnit, amount); + + float valMin = lineSet.getMin().getValue(); + float valMax = lineSet.getMax().getValue(); + + int indexMinValue; + int indexMaxValue; + + for(int i = 0; i < lineSet.size(); i++) + { + if(lineSet.getEntry(i).getValue() == valMin) + { + indexMinValue = i; + } + + if(lineSet.getEntry(i).getValue() == valMax) + { + indexMaxValue = i; + } + } + + chartView.reset(); chartView.setAxisBorderValues((float) valMin, (float) valMax); chartView.setYLabels(AxisRenderer.LabelPosition.NONE); chartView.setYAxis(false); chartView.setXAxis(false); - for(int i = 0; i < dataChartList.size(); i+=10) + chartView.addData(lineSet); + chartView.setFadingEdgeLength(15); + chartView.setLongClickable(true); + + findViewById(R.id.chartView).setVisibility(View.VISIBLE); + findViewById(R.id.progressLayoutChart).setVisibility(View.GONE); + + //chartView.show(new Animation().fromAlpha(0).withEndAction(launchAction)); + chartView.show(new Animation().fromAlpha(0)); + } + + private LineSet generateChartSet(int timeUnit, int amount) + { + List dataChartList = new ArrayList<>(); + LineSet lineSet = new LineSet(); + int counter = 0; + Calendar calendar = Calendar.getInstance(Locale.FRANCE); + String hour; + String minute; + String dayName = ""; + String dayNumber; + String monthName = ""; + String monthNumber; + int offset = 10; + int pointFormat = HOUR; + + switch (timeUnit) { - if(counter == 30) + case HOUR: + dataChartList = currency.getHistoryMinutes().subList(currency.getHistoryMinutes().size()-(60*amount), currency.getHistoryMinutes().size()); + offset = 10 * amount; + pointFormat = HOUR; + break; + case DAY: + if(amount == 1) + { + dataChartList = currency.getHistoryMinutes(); + offset = 10 * 24; + pointFormat = HOUR; + } + else + { + dataChartList = currency.getHistoryHours().subList(currency.getHistoryHours().size()-(24*amount), currency.getHistoryHours().size()); + offset = 24; + pointFormat = DAY; + } + break; + case WEEK: + dataChartList = currency.getHistoryHours().subList(currency.getHistoryHours().size()-168, currency.getHistoryHours().size()); + offset = 28; + pointFormat = DAY; + break; + case MONTH: + switch (amount) + { + case 1: + dataChartList = currency.getHistoryHours(); + offset = 124; + pointFormat = MONTH; + break; + case 3: + dataChartList = currency.getHistoryDays().subList(currency.getHistoryDays().size()-93, currency.getHistoryDays().size()); + offset = 15; + pointFormat = MONTH; + break; + case 6: + dataChartList = currency.getHistoryDays().subList(currency.getHistoryDays().size()-186, currency.getHistoryDays().size()); + offset = 31; + pointFormat = MONTH; + break; + } + break; + case YEAR: + dataChartList = currency.getHistoryDays(); + offset = 30; + pointFormat = YEAR; + break; + } + + for(int i = 0; i < dataChartList.size(); i++) + { + if(counter == offset) { calendar.setTimeInMillis(dataChartList.get(i).getTimestamp()*1000); - hour = String.valueOf(calendar.get(Calendar.HOUR_OF_DAY)); - minute = String.valueOf(calendar.get(Calendar.MINUTE)); - - if(hour.length() < 2) + switch (pointFormat) { - hour = "0" + hour; - } + case HOUR: + hour = String.valueOf(calendar.get(Calendar.HOUR_OF_DAY)); + minute = String.valueOf(calendar.get(Calendar.MINUTE)); - if(minute.length() < 2) - { - minute = "0" + minute; - } + if(hour.length() < 2) + { + hour = "0" + hour; + } - lineSet.addPoint(hour + ":" + minute, (float) dataChartList.get(i).getOpen()); + if(minute.length() < 2) + { + minute = "0" + minute; + } + + lineSet.addPoint(hour + ":" + minute, (float) dataChartList.get(i).getOpen()); + break; + case DAY: + int dayIndex = calendar.get(Calendar.DAY_OF_WEEK)+1; + + switch (dayIndex) + { + case Calendar.MONDAY: + dayName = "Mon"; + break; + case Calendar.TUESDAY: + dayName = "Tue"; + break; + case Calendar.WEDNESDAY: + dayName = "Wed"; + break; + case Calendar.THURSDAY: + dayName = "Thu"; + break; + case Calendar.FRIDAY: + dayName = "Fri"; + break; + case Calendar.SATURDAY: + dayName = "Sat"; + break; + case Calendar.SUNDAY: + dayName = "Sun"; + break; + } + + lineSet.addPoint(dayName, (float) dataChartList.get(i).getOpen()); + break; + case MONTH: + dayNumber = String.valueOf(calendar.get(Calendar.DAY_OF_MONTH)+1); + monthNumber = String.valueOf(calendar.get(Calendar.MONTH)+1); + + if(dayNumber.length() < 2) + { + dayNumber = '0' + dayNumber; + } + + if(monthNumber.length() < 2) + { + monthNumber = '0' + monthNumber; + } + + lineSet.addPoint(dayNumber + "/" + monthNumber, (float) dataChartList.get(i).getOpen()); + break; + case YEAR: + int mb = calendar.get(Calendar.MONTH); + + switch (mb) + { + case Calendar.JANUARY: + monthName = "Jan"; + break; + case Calendar.FEBRUARY: + monthName = "Feb"; + break; + case Calendar.MARCH: + monthName = "Mar"; + break; + case Calendar.APRIL: + monthName = "Apr"; + break; + case Calendar.MAY: + monthName = "May"; + break; + case Calendar.JUNE: + monthName = "Jun"; + break; + case Calendar.JULY: + monthName = "Jul"; + break; + case Calendar.AUGUST: + monthName = "Aug"; + break; + case Calendar.SEPTEMBER: + monthName = "Sep"; + break; + case Calendar.OCTOBER: + monthName = "Oct"; + break; + case Calendar.NOVEMBER: + monthName = "Nov"; + break; + case Calendar.DECEMBER: + monthName = "Dec"; + break; + } + + lineSet.addPoint(monthName, (float) dataChartList.get(i).getOpen()); + break; + } counter = 0; } else @@ -205,52 +498,11 @@ public class CurrencyDetailsActivity extends AppCompatActivity { } lineSet.setSmooth(true); - lineSet.setThickness(4); + lineSet.setThickness(3); lineSet.setFill(getColorWitchAlpha(currency.getChartColor(), 0.5f)); lineSet.setColor(currency.getChartColor()); - final LinearLayout.LayoutParams chartParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 500); - chartParams.setMargins(0, 15, 0, 15); - - chartView.setLayoutParams(chartParams); - - tip = new Tooltip(this, R.layout.tooltip_layout, R.id.value); - - RelativeLayout.LayoutParams tipParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); - - tip.setLayoutParams(tipParams); - tip.setVerticalAlignment(Tooltip.Alignment.BOTTOM_TOP); - tip.setDimensions((int) Tools.fromDpToPx(75), (int) Tools.fromDpToPx(25)); - tip.setClickable(false); - /*tip.setVerticalAlignment(Tooltip.Alignment.CENTER); - tip.setHorizontalAlignment(Tooltip.Alignment.CENTER); - tip.setDimensions((int) Tools.fromDpToPx(4), (int) Tools.fromDpToPx(4)); - tip.setClickable(false);*/ - - final Tooltip tip2 = tip; - - chartView.addData(lineSet); - chartView.setFadingEdgeLength(15); - chartView.setLongClickable(true); - - //tip.prepare(chartView.getEntriesArea(0).get(0), (float) dataChartList.get(0).getOpen()); - - chartView.setTooltips(tip); - chartView.setTooltips(tip2); - - Runnable launchAction = new Runnable() { - @Override - public void run() { - tip.prepare(chartView.getEntriesArea(0).get((int) indexMin/10), (float) dataChartList.get(indexMin).getOpen()); - tip2.prepare(chartView.getEntriesArea(0).get((int) indexMax/10), (float) dataChartList.get(indexMax).getOpen()); - chartView.showTooltip(tip, true); - //chartView.showTooltip(tip2, true); - } - }; - - chartView.show(new Animation().fromAlpha(0).withEndAction(launchAction)); - - chartLayout.addView(chartView); + return lineSet; } private int getColorWitchAlpha(int color, float ratio) @@ -337,34 +589,6 @@ public class CurrencyDetailsActivity extends AppCompatActivity { transactionLayout.addView(view); } - //final ArrayAdapter> transactionAdapter = new ArrayAdapter>(CurrencyDetailsActivity.this, android.R.layout.simple_list_item_1, transactionList); - - /*Iterator transactionsIterator = transactionList.keySet().iterator(); - - transactionList.se - - while(transactionsIterator.hasNext()) - { - final TextView txtView = new TextView(this); - Integer key = (Integer) transactionsIterator.next(); - - txtView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); - txtView.setTag(key); - txtView.setText("Amount : " + transactionList.get(key)); - - txtView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - TextView thisTxtView = (TextView) view; - databaseManager.deleteTransactionFromId(Integer.parseInt(thisTxtView.getTag().toString())); - Log.d(CurrencyDetailsActivity.this.getResources().getString(R.string.debug), "Id : " + thisTxtView.getTag()); - drawTransactionList(); - } - }); - - transactionLayout.addView(txtView); - }*/ - } } diff --git a/app/src/main/java/com/nauk/coinfolio/Activities/HomeActivity.java b/app/src/main/java/com/nauk/coinfolio/Activities/HomeActivity.java index 441c0f4..f06a213 100644 --- a/app/src/main/java/com/nauk/coinfolio/Activities/HomeActivity.java +++ b/app/src/main/java/com/nauk/coinfolio/Activities/HomeActivity.java @@ -4,7 +4,6 @@ import android.app.Dialog; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; -import android.graphics.drawable.Icon; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; @@ -16,7 +15,6 @@ import android.support.v7.app.AppCompatActivity; import android.support.v7.graphics.Palette; import android.support.v7.widget.CardView; import android.support.v7.widget.Toolbar; -import android.util.Log; import android.view.Gravity; import android.view.View; import android.view.Menu; @@ -24,17 +22,13 @@ import android.view.MenuItem; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; -import android.widget.ArrayAdapter; import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.TextView; -import com.daimajia.swipe.SwipeLayout; -import com.db.chart.view.LineChartView; import com.nauk.coinfolio.DataManagers.BalanceManager; import com.nauk.coinfolio.DataManagers.CurrencyData.Currency; -import com.nauk.coinfolio.DataManagers.DatabaseManager; import com.nauk.coinfolio.LayoutManagers.HomeLayoutGenerator; import com.nauk.coinfolio.DataManagers.PreferencesManager; import com.nauk.coinfolio.R; @@ -50,28 +44,28 @@ import java.util.List; //Auto refresh with predefined intervals //Adding manually currencies (date, purchased price) //Multiple portfolio (exchanges & custom) -//Add currency details (market cap, 1h, 3h, 3d, 1w, 1m, 3m, 1y) +//Add currency details (market cap, 1h, 3h, 1d, 3d, 1w, 1m, 3m, 1y) //Add roadmap to buy a coin //Add reddit link ? // public class HomeActivity extends AppCompatActivity { + private PreferencesManager preferencesManager; + private HomeLayoutGenerator layoutGenerator; private BalanceManager balanceManager; + private int coinCounter; private int iconCounter; - private HomeLayoutGenerator layoutGenerator; - private LinearLayout currencyLayout; - private Toolbar toolbar; + private long lastTimestamp; + private boolean detailsChecker; + private boolean isDetailed; + private CollapsingToolbarLayout toolbarLayout; private SwipeRefreshLayout refreshLayout; + private LinearLayout currencyLayout; private TextView toolbarSubtitle; - private boolean view; private Dialog loadingDialog; - private boolean iconChecker; - private PreferencesManager preferencesManager; - private DatabaseManager databaseManager; - private long lastTimestamp; private Handler handler; private Runnable updateRunnable; @@ -79,27 +73,52 @@ public class HomeActivity extends AppCompatActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + /**Interface setup**/ + + //Setup main interface requestWindowFeature(Window.FEATURE_NO_TITLE); this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_currency_summary); - toolbar = (Toolbar) findViewById(R.id.toolbar); - setSupportActionBar(toolbar); - - preferencesManager = new PreferencesManager(this); - - view = preferencesManager.getDetailOption(); + setSupportActionBar((Toolbar) findViewById(R.id.toolbar)); generateSplash(); + //Objects initializatoin + preferencesManager = new PreferencesManager(this); + layoutGenerator = new HomeLayoutGenerator(this); + balanceManager = new BalanceManager(this); + handler = new Handler(); + updateRunnable = new Runnable() { + @Override + public void run() { + if (refreshLayout.isRefreshing()) + { + refreshLayout.setRefreshing(false); + + showErrorSnackbar(); + } + + if (loadingDialog.isShowing()) + { + loadingDialog.dismiss(); + + showErrorSnackbar(); + } + } + }; + + isDetailed = preferencesManager.getDetailOption(); + + //Layouts setup + refreshLayout = findViewById(R.id.swiperefresh); + toolbarLayout = findViewById(R.id.toolbar_layout); + toolbarSubtitle = findViewById(R.id.toolbarSubtitle); + currencyLayout = findViewById(R.id.currencyListLayout); + + ImageButton addCurrencyButton = findViewById(R.id.addCurrencyButton); ImageButton detailsButton = findViewById(R.id.switch_button); ImageButton settingsButton = findViewById(R.id.settings_button); - refreshLayout = findViewById(R.id.swiperefresh); - - toolbarLayout = findViewById(R.id.toolbar_layout); - - toolbarSubtitle = findViewById(R.id.toolbarSubtitle); - toolbarLayout.setExpandedTitleGravity(Gravity.CENTER); toolbarLayout.setCollapsedTitleGravity(Gravity.CENTER); toolbarLayout.setForegroundGravity(Gravity.CENTER); @@ -107,6 +126,7 @@ public class HomeActivity extends AppCompatActivity { toolbarSubtitle.setText("US$0.00"); + //Events setup detailsButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -123,12 +143,6 @@ public class HomeActivity extends AppCompatActivity { } }); - layoutGenerator = new HomeLayoutGenerator(this); - - balanceManager = new BalanceManager(this); - - currencyLayout = findViewById(R.id.currencyListLayout); - refreshLayout.setOnRefreshListener( new SwipeRefreshLayout.OnRefreshListener() { @Override @@ -138,8 +152,6 @@ public class HomeActivity extends AppCompatActivity { } ); - final ImageButton addCurrencyButton = findViewById(R.id.addCurrencyButton); - addCurrencyButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -154,55 +166,26 @@ public class HomeActivity extends AppCompatActivity { addIntent.putExtra("currencyListNames", nameList); startActivity(addIntent); - - - /*Snackbar.make(findViewById(R.id.currencyListLayout), "This feature is not yet available...", Snackbar.LENGTH_LONG) - .show();*/ } }); - databaseManager = new DatabaseManager(this); - - handler = new Handler(); - - updateRunnable = new Runnable() { - @Override - public void run() { - if (refreshLayout.isRefreshing()) - { - refreshLayout.setRefreshing(false); - - Snackbar.make(findViewById(R.id.currencyListLayout), "Error while updating data", Snackbar.LENGTH_LONG) - .setAction("Update", new View.OnClickListener() { - @Override - public void onClick(View view) { - updateAll(true); - } - }) - .show(); - } - - if (loadingDialog.isShowing()) - { - loadingDialog.dismiss(); - - Snackbar.make(findViewById(R.id.currencyListLayout), "Error while updating data", Snackbar.LENGTH_LONG) - .setAction("Update", new View.OnClickListener() { - @Override - public void onClick(View view) { - updateAll(true); - } - }) - .show(); - } - } - }; - updateViewButtonIcon(); lastTimestamp = 0; } + private void showErrorSnackbar() + { + Snackbar.make(findViewById(R.id.currencyListLayout), "Error while updating data", Snackbar.LENGTH_LONG) + .setAction("Update", new View.OnClickListener() { + @Override + public void onClick(View view) { + updateAll(true); + } + }) + .show(); + } + @Override protected void onResume() { super.onResume(); @@ -210,13 +193,6 @@ public class HomeActivity extends AppCompatActivity { Intent intent = getIntent(); updateAll(intent.getBooleanExtra("update", false)); - - /*if(System.currentTimeMillis()/1000 - lastTimestamp > 60 || intent.getBooleanExtra("update", false)) - { - lastTimestamp = System.currentTimeMillis()/1000; - - updateAll(); - }*/ } @Override @@ -245,15 +221,15 @@ public class HomeActivity extends AppCompatActivity { private void switchView() { - if(!view) + if(isDetailed) { - view = true; + isDetailed = false; adaptView(); } else { - view = false; + isDetailed = true; adaptView(); } @@ -261,31 +237,28 @@ public class HomeActivity extends AppCompatActivity { private void adaptView() { - if(!view) - { - for(int i = 0; i < currencyLayout.getChildCount(); i++) - { - currencyLayout.getChildAt(i).findViewWithTag("chart_layout").setVisibility(View.GONE); - currencyLayout.getChildAt(i).findViewWithTag("separator_layout").setVisibility(View.GONE); - } - } - else + if(isDetailed) { currencyLayout.removeAllViews(); - //layoutGenerator.setCurrencyList(balanceManager.getTotalBalance()); - //layoutGenerator.resetCurrencyList(); - for(int i = 0; i < balanceManager.getTotalBalance().size(); i++) { final Currency currency = balanceManager.getTotalBalance().get(i); - if(!currency.getSymbol().equals("USD") && ((currency.getBalance() * currency.getValue()) > 0.001 || currency.getDayPriceHistory() == null)) + if(!currency.getSymbol().equals("USD") && ((currency.getBalance() * currency.getValue()) > 0.001 || currency.getHistoryMinutes() == null)) { currencyLayout.addView(layoutGenerator.getInfoLayout(currency)); } } } + else + { + for(int i = 0; i < currencyLayout.getChildCount(); i++) + { + currencyLayout.getChildAt(i).findViewWithTag("chart_layout").setVisibility(View.GONE); + currencyLayout.getChildAt(i).findViewWithTag("separator_layout").setVisibility(View.GONE); + } + } updateViewButtonIcon(); } @@ -297,11 +270,12 @@ public class HomeActivity extends AppCompatActivity { if(System.currentTimeMillis()/1000 - lastTimestamp > 60 || mustUpdate) { lastTimestamp = System.currentTimeMillis() / 1000; - resetCounter(); balanceManager.updateExchangeKeys(); + refreshLayout.setRefreshing(true); + + resetCounters(); DataUpdater updater = new DataUpdater(); updater.execute(); - refreshLayout.setRefreshing(true); handler.postDelayed(updateRunnable, 10000); } @@ -314,11 +288,11 @@ public class HomeActivity extends AppCompatActivity { } } - private void resetCounter() + private void resetCounters() { coinCounter = 0; iconCounter = 0; - iconChecker = false; + detailsChecker = false; } private void getBitmapFromURL(String src, IconCallBack callBack) { @@ -344,11 +318,11 @@ public class HomeActivity extends AppCompatActivity { { iconCounter++; - if(iconCounter == balanceManager.getTotalBalance().size() - 1) + if(balanceManager.getTotalBalance() != null) { - if(balanceManager.getTotalBalance() != null) + if(iconCounter == balanceManager.getTotalBalance().size() - 1) { - if(coinCounter == balanceManager.getTotalBalance().size() - 1 && iconChecker) + if(coinCounter == balanceManager.getTotalBalance().size() - 1 && detailsChecker) { UiHeavyLoadCalculator uiHeavyLoadCalculator = new UiHeavyLoadCalculator(); uiHeavyLoadCalculator.execute(); @@ -356,10 +330,17 @@ public class HomeActivity extends AppCompatActivity { if(balanceManager.getTotalBalance().size() == 0) { - refreshLayout.setRefreshing(false); - + updateNoBalance(); + } + } + /*else + { + if(balanceManager.getTotalBalance().size() == 0) + { currencyLayout.removeAllViews(); + refreshLayout.setRefreshing(false); + if(loadingDialog.isShowing()) { loadingDialog.dismiss(); @@ -376,33 +357,31 @@ public class HomeActivity extends AppCompatActivity { } }); } - } + }*/ } - else + } + + private void updateNoBalance() + { + refreshLayout.setRefreshing(false); + + currencyLayout.removeAllViews(); + + if(loadingDialog.isShowing()) { - if(balanceManager.getTotalBalance().size() == 0) - { - currencyLayout.removeAllViews(); - - refreshLayout.setRefreshing(false); - - if(loadingDialog.isShowing()) - { - loadingDialog.dismiss(); - } - - runOnUiThread(new Runnable() { - @Override - public void run() { - toolbarLayout.setTitle("US$0.00"); - - toolbarSubtitle.setText("US$0.00"); - - toolbarSubtitle.setTextColor(-1275068417); - } - }); - } + loadingDialog.dismiss(); } + + runOnUiThread(new Runnable() { + @Override + public void run() { + toolbarLayout.setTitle("US$0.00"); + + toolbarSubtitle.setText("US$0.00"); + + toolbarSubtitle.setTextColor(-1275068417); + } + }); } private void countCoins(boolean isCoin, boolean isDetails) @@ -414,7 +393,7 @@ public class HomeActivity extends AppCompatActivity { if(isDetails) { - iconChecker = true; + detailsChecker = true; } if(balanceManager.getTotalBalance() != null) @@ -423,14 +402,14 @@ public class HomeActivity extends AppCompatActivity { { for (int i = 0; i < balanceManager.getTotalBalance().size(); i++) { - final int index = i; + final Currency localCurrency = balanceManager.getTotalBalance().get(i); - if(balanceManager.getIconUrl(balanceManager.getTotalBalance().get(i).getSymbol()) != null) + if(balanceManager.getIconUrl(localCurrency.getSymbol()) != null) { - getBitmapFromURL(balanceManager.getIconUrl(balanceManager.getTotalBalance().get(i).getSymbol()), new IconCallBack() { + getBitmapFromURL(balanceManager.getIconUrl(localCurrency.getSymbol()), new IconCallBack() { @Override public void onSuccess(Bitmap bitmapIcon) { - balanceManager.getTotalBalance().get(index).setIcon(bitmapIcon); + localCurrency.setIcon(bitmapIcon); countIcons(); } }); @@ -451,7 +430,7 @@ public class HomeActivity extends AppCompatActivity { { ImageButton imgButton = findViewById(R.id.switch_button); - if(view) + if(isDetailed) { imgButton.setBackground(this.getResources().getDrawable(R.drawable.ic_unfold_less_black_24dp)); preferencesManager.setDetailOption(true); @@ -521,28 +500,19 @@ public class HomeActivity extends AppCompatActivity { balanceManager.sortCoins(); - //layoutGenerator.setCurrencyList(balanceManager.getTotalBalance()); - for(int i = 0; i < balanceManager.getTotalBalance().size(); i++) { final Currency localCurrency = balanceManager.getTotalBalance().get(i); if(localCurrency.getIcon() != null) { - //balanceManager.getTotalBalance().get(i).setIcon(getBitmapFromURL(balanceManager.getIconUrl(balanceManager.getTotalBalance().get(i).getSymbol()))); - Palette.Builder builder = Palette.from(localCurrency.getIcon()); localCurrency.setChartColor(builder.generate().getDominantColor(0)); - - //layoutGenerator.addCurrencyToList(currency); - //currencyLayout.addView(layoutGenerator.getInfoLayout(i)); } else { - //currency.setChartColor(12369084); localCurrency.setChartColor(12369084); - //currencyLayout.addView(layoutGenerator.getInfoLayout(i)); } if(!localCurrency.getSymbol().equals("USD") && (localCurrency.getBalance() * localCurrency.getValue()) > 0.001) @@ -551,17 +521,12 @@ public class HomeActivity extends AppCompatActivity { localCurrency.setId(balanceManager.getCurrencyId(localCurrency.getSymbol())); totalValue += localCurrency.getValue() * localCurrency.getBalance(); totalFluctuation += (localCurrency.getValue() * localCurrency.getBalance()) * (localCurrency.getDayFluctuationPercentage() / 100); - //balanceManager.getTotalBalance().get(i).setIcon(getBitmapFromURL(balanceManager.getIconUrl(balanceManager.getTotalBalance().get(i).getSymbol()))); - //currencyLayout.addView(layoutGenerator.getInfoLayout(i)); cardList.add(layoutGenerator.getInfoLayout(localCurrency)); } - if(!localCurrency.getSymbol().equals("USD") && localCurrency.getDayPriceHistory() == null) + if(!localCurrency.getSymbol().equals("USD") && localCurrency.getHistoryMinutes() == null) { - //balanceManager.getTotalBalance().get(i).setIcon(getBitmapFromURL(balanceManager.getIconUrl(balanceManager.getTotalBalance().get(i).getSymbol()))); - //currencyLayout.addView(layoutGenerator.getInfoLayout(i)); - cardList.add(layoutGenerator.getInfoLayout(localCurrency)); } @@ -656,7 +621,7 @@ public class HomeActivity extends AppCompatActivity { { for(int i = 0; i < balanceManager.getTotalBalance().size(); i++) { - balance.get(i).updateDayPriceHistory(getApplicationContext(), new Currency.CurrencyCallBack() { + balance.get(i).updateHistoryMinutes(getApplicationContext(), new Currency.CurrencyCallBack() { @Override public void onSuccess(Currency currency) { countCoins(true, false); diff --git a/app/src/main/java/com/nauk/coinfolio/DataManagers/CurrencyData/Currency.java b/app/src/main/java/com/nauk/coinfolio/DataManagers/CurrencyData/Currency.java index a16027c..209e55a 100644 --- a/app/src/main/java/com/nauk/coinfolio/DataManagers/CurrencyData/Currency.java +++ b/app/src/main/java/com/nauk/coinfolio/DataManagers/CurrencyData/Currency.java @@ -3,6 +3,7 @@ package com.nauk.coinfolio.DataManagers.CurrencyData; import android.graphics.Bitmap; import android.os.Parcel; import android.os.Parcelable; +import android.util.Log; import java.util.ArrayList; import java.util.List; @@ -22,8 +23,10 @@ public class Currency implements Parcelable { private double balance; private float dayFluctuationPercentage; private double dayFluctuation; - private List dayPriceHistory; - private CurrencyDataRetriver dataRetriver; + private List historyMinutes; + private List historyHours; + private List historyDays; + private CurrencyDataRetriever dataRetriver; private Bitmap icon; private int chartColor; @@ -36,7 +39,7 @@ public class Currency implements Parcelable { this.balance = currency.balance; this.dayFluctuationPercentage = currency.getDayFluctuationPercentage(); this.dayFluctuation = currency.getDayFluctuation(); - this.dayPriceHistory = currency.dayPriceHistory; + this.historyMinutes = currency.historyMinutes; this.dataRetriver = currency.getDataRetriver(); this.icon = currency.icon; this.chartColor = currency.chartColor; @@ -61,13 +64,13 @@ public class Currency implements Parcelable { this.symbol = symbol; } - public void updateDayPriceHistory(android.content.Context context, final CurrencyCallBack callBack) + public void updateHistoryMinutes(android.content.Context context, final CurrencyCallBack callBack) { - dataRetriver = new CurrencyDataRetriver(context); - dataRetriver.updateLastDayHistory(symbol, new CurrencyDataRetriver.DataChartCallBack() { + dataRetriver = new CurrencyDataRetriever(context); + dataRetriver.updateHistory(symbol, new CurrencyDataRetriever.DataChartCallBack() { @Override public void onSuccess(List dataChart) { - setDayPriceHistory(dataChart); + setHistoryMinutes(dataChart); updateDayFluctuation(); if(dataChart != null) @@ -81,27 +84,33 @@ public class Currency implements Parcelable { callBack.onSuccess(Currency.this); } - }); + }, CurrencyDataRetriever.MINUTES); } - public void updateName(android.content.Context context, final CurrencyCallBack callBack) + public void updateHistoryHours(android.content.Context context, final CurrencyCallBack callBack) { - dataRetriver = new CurrencyDataRetriver(context); - dataRetriver.updateCurrencyName(symbol, new CurrencyDataRetriver.NameCallBack() { + dataRetriver = new CurrencyDataRetriever(context); + dataRetriver.updateHistory(symbol, new CurrencyDataRetriever.DataChartCallBack() { @Override - public void onSuccess(String name) { - if(name != null) - { - setName(name); - } - else - { - setName("NameNotFound"); - } + public void onSuccess(List dataChart) { + setHistoryHours(dataChart); callBack.onSuccess(Currency.this); } - }); + }, CurrencyDataRetriever.HOURS); + } + + public void updateHistoryDays(android.content.Context context, final CurrencyCallBack callBack) + { + dataRetriver = new CurrencyDataRetriever(context); + dataRetriver.updateHistory(symbol, new CurrencyDataRetriever.DataChartCallBack() { + @Override + public void onSuccess(List dataChart) { + setHistoryDays(dataChart); + + callBack.onSuccess(Currency.this); + } + }, CurrencyDataRetriever.DAYS); } public void setId(int id) @@ -124,14 +133,24 @@ public class Currency implements Parcelable { return chartColor; } - public CurrencyDataRetriver getDataRetriver() + public CurrencyDataRetriever getDataRetriver() { return dataRetriver; } - public List getDayPriceHistory() + public List getHistoryMinutes() { - return dayPriceHistory; + return historyMinutes; + } + + public List getHistoryHours() + { + return historyHours; + } + + public List getHistoryDays() + { + return historyDays; } public String getName() @@ -179,9 +198,19 @@ public class Currency implements Parcelable { balance = newBalance; } - private void setDayPriceHistory(List newDataChart) + private void setHistoryMinutes(List newDataChart) { - dayPriceHistory = newDataChart; + historyMinutes = newDataChart; + } + + private void setHistoryHours(List newDataChart) + { + historyHours = newDataChart; + } + + private void setHistoryDays(List newDataChart) + { + historyDays = newDataChart; } public void setIcon(Bitmap newIcon) @@ -196,11 +225,11 @@ public class Currency implements Parcelable { private void updateDayFluctuation() { - if(dayPriceHistory != null) + if(historyMinutes != null) { - dayFluctuation = dayPriceHistory.get(dayPriceHistory.size() - 1).getOpen() - dayPriceHistory.get(0).getOpen(); + dayFluctuation = historyMinutes.get(historyMinutes.size() - 1).getOpen() - historyMinutes.get(0).getOpen(); - dayFluctuationPercentage = (float) (dayFluctuation / dayPriceHistory.get(0).getOpen() * 100); + dayFluctuationPercentage = (float) (dayFluctuation / historyMinutes.get(0).getOpen() * 100); } } @@ -223,7 +252,7 @@ public class Currency implements Parcelable { dest.writeDouble(this.balance); dest.writeFloat(this.dayFluctuationPercentage); dest.writeDouble(this.dayFluctuation); - dest.writeList(this.dayPriceHistory); + dest.writeList(this.historyMinutes); dest.writeParcelable(this.icon, flags); dest.writeInt(this.chartColor); } @@ -236,8 +265,8 @@ public class Currency implements Parcelable { this.balance = in.readDouble(); this.dayFluctuationPercentage = in.readFloat(); this.dayFluctuation = in.readDouble(); - this.dayPriceHistory = new ArrayList(); - in.readList(this.dayPriceHistory, CurrencyDataChart.class.getClassLoader()); + this.historyMinutes = new ArrayList(); + in.readList(this.historyMinutes, CurrencyDataChart.class.getClassLoader()); this.icon = in.readParcelable(Bitmap.class.getClassLoader()); this.chartColor = in.readInt(); } diff --git a/app/src/main/java/com/nauk/coinfolio/DataManagers/CurrencyData/CurrencyDataRetriever.java b/app/src/main/java/com/nauk/coinfolio/DataManagers/CurrencyData/CurrencyDataRetriever.java new file mode 100644 index 0000000..0a58524 --- /dev/null +++ b/app/src/main/java/com/nauk/coinfolio/DataManagers/CurrencyData/CurrencyDataRetriever.java @@ -0,0 +1,134 @@ +package com.nauk.coinfolio.DataManagers.CurrencyData; + +import android.util.Log; + +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.nauk.coinfolio.R; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Pattern; + +/** + * Created by Tiji on 05/01/2018. + */ + +public class CurrencyDataRetriever { + + final static int MINUTES = 0; + final static int HOURS = 1; + final static int DAYS = 2; + + private String minuteHistoryUrl = "https://min-api.cryptocompare.com/data/histominute"; + private String hourHistoryUrl = "https://min-api.cryptocompare.com/data/histohour"; + private String dayHistoryUrl = "https://min-api.cryptocompare.com/data/histoday"; + + private RequestQueue requestQueue; + + protected android.content.Context context; + + CurrencyDataRetriever(android.content.Context context) + { + this.context = context; + + requestQueue = Volley.newRequestQueue(context); + } + + private void updateHistory(String symbolCurrencyFrom, String symbolCyrrencyTo, final DataChartCallBack callBack, int timeUnit) + { + String requestUrl = null; + + switch (timeUnit) + { + case MINUTES: + requestUrl = minuteHistoryUrl + "?fsym=" + symbolCurrencyFrom + "&tsym=" + symbolCyrrencyTo + "&limit=1440"; + break; + case HOURS: + requestUrl = hourHistoryUrl + "?fsym=" + symbolCurrencyFrom + "&tsym=" + symbolCyrrencyTo + "&limit=744"; + break; + case DAYS: + requestUrl = dayHistoryUrl + "?fsym=" + symbolCurrencyFrom + "&tsym=" + symbolCyrrencyTo + "&limit=365"; + break; + } + + StringRequest stringRequest = new StringRequest(Request.Method.GET, requestUrl, + new Response.Listener() { + @Override + public void onResponse(String response) { + callBack.onSuccess(processHistoryResult(response)); + } + }, + new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + callBack.onSuccess(null); + } + }); + + requestQueue.add(stringRequest); + } + + private List processHistoryResult(String response) + { + List dataChart = new ArrayList<>(); + + if(response.length() > 200) + { + response = response.substring(response.indexOf("Data\":[{") + 7, response.lastIndexOf("}],\"TimeTo")); + String[] tab = response.split(Pattern.quote("},{")); + for(int i = 0; i < tab.length; i++) + { + + if(i == 0) + { + tab[i] = tab[i] + "}"; + } + else + { + tab[i] = "{" + tab[i] + "}"; + } + + try { + JSONObject jsonObject = new JSONObject(tab[i]); + + long timestamp = Long.parseLong(jsonObject.getString("time")); + double close = Double.parseDouble(jsonObject.getString("close")); + double high = Double.parseDouble(jsonObject.getString("high")); + double low = Double.parseDouble(jsonObject.getString("low")); + double open = Double.parseDouble(jsonObject.getString("open")); + + dataChart.add(new CurrencyDataChart(timestamp, close, high, low, open)); + + } catch (JSONException e) { + Log.d(context.getResources().getString(R.string.debug_volley), "API Request error: " + e + " index: " + i); + } + } + } + else + { + dataChart = null; + } + + return dataChart; + } + + void updateHistory(String symbolCurrencyFrom, final DataChartCallBack callBack, int timeUnit) + { + if(!symbolCurrencyFrom.equals("USD")) + { + updateHistory(symbolCurrencyFrom, "USD", callBack, timeUnit); + } + } + + public interface DataChartCallBack { + void onSuccess(List dataChart); + } +} diff --git a/app/src/main/java/com/nauk/coinfolio/DataManagers/CurrencyData/CurrencyDataRetriver.java b/app/src/main/java/com/nauk/coinfolio/DataManagers/CurrencyData/CurrencyDataRetriver.java deleted file mode 100644 index 48a6428..0000000 --- a/app/src/main/java/com/nauk/coinfolio/DataManagers/CurrencyData/CurrencyDataRetriver.java +++ /dev/null @@ -1,181 +0,0 @@ -package com.nauk.coinfolio.DataManagers.CurrencyData; - -import android.util.Log; - -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.nauk.coinfolio.R; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Pattern; - -/** - * Created by Tiji on 05/01/2018. - */ - -public class CurrencyDataRetriver { - - String minuteHistoryUrl = "https://min-api.cryptocompare.com/data/histominute"; - String hourHistoryUrl = "https://min-api.cryptocompare.com/data/histohour"; - String dayHistoryUrl = "https://min-api.cryptocompare.com/data/histoday"; - String nameUrl = "https://api.hitbtc.com/api/2/public/currency/"; - - RequestQueue requestQueue; - - android.content.Context context; - - public CurrencyDataRetriver(android.content.Context context) - { - this.context = context; - - requestQueue = Volley.newRequestQueue(context); - } - - public void updateLastHourHistory(String symbolCurrencyFrom, String symbolCyrrencyTo, final DataChartCallBack callBack) - { - final String requestUrl = minuteHistoryUrl + "?fsym=" + symbolCurrencyFrom + "&tsym=" + symbolCyrrencyTo + "&limit=60"; - - StringRequest stringRequest = new StringRequest(Request.Method.GET, requestUrl, - new Response.Listener() { - @Override - public void onResponse(String response) { - callBack.onSuccess(processHourResult(response)); - } - }, - new Response.ErrorListener() { - @Override - public void onErrorResponse(VolleyError error) { - - } - }); - - requestQueue.add(stringRequest); - } - - public void updateCurrencyName(String symbol, final NameCallBack callBack) - { - final String requestUrl = nameUrl + symbol; - - StringRequest stringRequest = new StringRequest(Request.Method.GET, requestUrl, - new Response.Listener() { - @Override - public void onResponse(String response) { - response = response.substring(response.indexOf(",") + 13); - response = response.substring(0, response.indexOf(",") - 1); - - callBack.onSuccess(response); - } - }, - new Response.ErrorListener() { - @Override - public void onErrorResponse(VolleyError error) { - callBack.onSuccess(null); - } - }); - - requestQueue.add(stringRequest); - } - - public void updateLastDayHistory(String symbolCurrencyFrom, String symbolCyrrencyTo, final DataChartCallBack callBack) - { - final String requestUrl = minuteHistoryUrl + "?fsym=" + symbolCurrencyFrom + "&tsym=" + symbolCyrrencyTo + "&limit=1440"; - - StringRequest stringRequest = new StringRequest(Request.Method.GET, requestUrl, - new Response.Listener() { - @Override - public void onResponse(String response) { - callBack.onSuccess(processHourResult(response)); - } - }, - new Response.ErrorListener() { - @Override - public void onErrorResponse(VolleyError error) { - callBack.onSuccess(null); - } - }); - - requestQueue.add(stringRequest); - } - - private List processHourResult(String response) - { - List dataChart = new ArrayList<>(); - - if(response.length() > 200) - { - response = response.substring(response.indexOf("Data\":[{") + 7, response.lastIndexOf("}],\"TimeTo")); - String[] tab = response.split(Pattern.quote("},{")); - for(int i = 0; i < tab.length; i++) - { - - if(i == 0) - { - tab[i] = tab[i] + "}"; - } - else - { - tab[i] = "{" + tab[i] + "}"; - } - - try { - JSONObject jsonObject = new JSONObject(tab[i]); - - long timestamp = Long.parseLong(jsonObject.getString("time")); - double close = Double.parseDouble(jsonObject.getString("close")); - double high = Double.parseDouble(jsonObject.getString("high")); - double low = Double.parseDouble(jsonObject.getString("low")); - double open = Double.parseDouble(jsonObject.getString("open")); - - dataChart.add(new CurrencyDataChart(timestamp, close, high, low, open)); - - } catch (JSONException e) { - Log.d(context.getResources().getString(R.string.debug_volley), "API Request error: " + e + " index: " + i); - } - } - } - else - { - /*for(int i = 1; i <= 1440; i++) - { - dataChart.add(new CurrencyDataChart(i, 1, 1, 1, 1)); - }*/ - - dataChart = null; - } - - return dataChart; - } - - public void updateLastHourHistory(String symbolCurrencyFrom, final DataChartCallBack callBack) - { - updateLastHourHistory(symbolCurrencyFrom, "USD", callBack); - } - - public void updateLastDayHistory(String symbolCurrencyFrom, final DataChartCallBack callBack) - { - if(!symbolCurrencyFrom.equals("USD")) - { - updateLastDayHistory(symbolCurrencyFrom, "USD", callBack); - } - } - - public interface DataChartCallBack { - void onSuccess(List dataChart); - } - - public interface CurrencyDetailCallBack { - void onSuccess(); - } - - public interface NameCallBack { - void onSuccess(String name); - } -} diff --git a/app/src/main/java/com/nauk/coinfolio/LayoutManagers/HomeLayoutGenerator.java b/app/src/main/java/com/nauk/coinfolio/LayoutManagers/HomeLayoutGenerator.java index f46c3cd..91f5925 100644 --- a/app/src/main/java/com/nauk/coinfolio/LayoutManagers/HomeLayoutGenerator.java +++ b/app/src/main/java/com/nauk/coinfolio/LayoutManagers/HomeLayoutGenerator.java @@ -6,27 +6,21 @@ import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.Color; -import android.support.design.widget.Snackbar; import android.support.v7.widget.CardView; -import android.util.Log; import android.view.Gravity; import android.view.View; -import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.db.chart.model.LineSet; -import com.db.chart.model.Point; import com.db.chart.renderer.AxisRenderer; import com.db.chart.view.LineChartView; import com.nauk.coinfolio.Activities.CurrencyDetailsActivity; -import com.nauk.coinfolio.Activities.HomeActivity; import com.nauk.coinfolio.DataManagers.CurrencyData.Currency; import com.nauk.coinfolio.DataManagers.CurrencyData.CurrencyDataChart; import com.nauk.coinfolio.R; -import java.util.ArrayList; import java.util.Calendar; import java.util.List; import java.util.Locale; @@ -184,9 +178,9 @@ public class HomeLayoutGenerator { { View toReturn; - if(currency.getDayPriceHistory() != null) + if(currency.getHistoryMinutes() != null) { - LineChartView lineChartView = chartGenerator(currency.getDayPriceHistory(), currency.getChartColor()); + LineChartView lineChartView = chartGenerator(currency.getHistoryMinutes(), currency.getChartColor()); chartLayout.setTag("chart_layout"); chartLayout.addView(lineChartView); lineChartView.show(); diff --git a/app/src/main/res/layout/activity_currency_details.xml b/app/src/main/res/layout/activity_currency_details.xml index be4d937..1ada9a2 100644 --- a/app/src/main/res/layout/activity_currency_details.xml +++ b/app/src/main/res/layout/activity_currency_details.xml @@ -18,6 +18,102 @@ android:layout_height="match_parent" android:orientation="vertical"> + + + + + + + + + + + +