Update detail activity
Details for 1h, 3h, 1d, 3d, 1w, 1M, 3M, 6M & 1Y
This commit is contained in:
parent
d220e661b4
commit
267cdefc9b
@ -1,9 +1,8 @@
|
|||||||
package com.nauk.coinfolio.Activities;
|
package com.nauk.coinfolio.Activities;
|
||||||
|
|
||||||
import android.content.ContentValues;
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.graphics.Rect;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.design.widget.BottomNavigationView;
|
import android.support.design.widget.BottomNavigationView;
|
||||||
@ -13,22 +12,16 @@ import android.view.Gravity;
|
|||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.widget.Button;
|
||||||
import android.view.animation.BounceInterpolator;
|
|
||||||
import android.widget.ArrayAdapter;
|
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.ListView;
|
|
||||||
import android.widget.RelativeLayout;
|
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.ViewFlipper;
|
import android.widget.ViewFlipper;
|
||||||
|
|
||||||
import com.daimajia.swipe.SwipeLayout;
|
import com.daimajia.swipe.SwipeLayout;
|
||||||
import com.db.chart.animation.Animation;
|
import com.db.chart.animation.Animation;
|
||||||
import com.db.chart.model.LineSet;
|
import com.db.chart.model.LineSet;
|
||||||
import com.db.chart.model.Point;
|
|
||||||
import com.db.chart.renderer.AxisRenderer;
|
import com.db.chart.renderer.AxisRenderer;
|
||||||
import com.db.chart.tooltip.Tooltip;
|
import com.db.chart.tooltip.Tooltip;
|
||||||
import com.db.chart.util.Tools;
|
|
||||||
import com.db.chart.view.LineChartView;
|
import com.db.chart.view.LineChartView;
|
||||||
import com.nauk.coinfolio.DataManagers.CurrencyData.Currency;
|
import com.nauk.coinfolio.DataManagers.CurrencyData.Currency;
|
||||||
import com.nauk.coinfolio.DataManagers.CurrencyData.CurrencyDataChart;
|
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.DataManagers.DatabaseManager;
|
||||||
import com.nauk.coinfolio.R;
|
import com.nauk.coinfolio.R;
|
||||||
|
|
||||||
import org.w3c.dom.Text;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
@ -58,6 +48,11 @@ public class CurrencyDetailsActivity extends AppCompatActivity {
|
|||||||
private Tooltip tip;
|
private Tooltip tip;
|
||||||
private int indexMax;
|
private int indexMax;
|
||||||
private int indexMin;
|
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
|
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
|
||||||
= new BottomNavigationView.OnNavigationItemSelectedListener() {
|
= new BottomNavigationView.OnNavigationItemSelectedListener() {
|
||||||
@ -108,19 +103,21 @@ public class CurrencyDetailsActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
drawTransactionList();
|
drawTransactionList();
|
||||||
|
|
||||||
if(currency.getDayPriceHistory().size() > 0)
|
initializeButtons();
|
||||||
|
|
||||||
|
if(currency.getHistoryMinutes().size() > 0)
|
||||||
{
|
{
|
||||||
drawChart();
|
drawChart(DAY, 1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
TextView errorTextView = new TextView(this);
|
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.setText("Not enough data");
|
||||||
errorTextView.setTag("chart_layout");
|
errorTextView.setTag("chart_layout");
|
||||||
errorTextView.setGravity(Gravity.CENTER);
|
errorTextView.setGravity(Gravity.CENTER);
|
||||||
|
|
||||||
chartLayout.addView(errorTextView);
|
chartLayout.addView(errorTextView, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
setTitle(currency.getName());
|
setTitle(currency.getName());
|
||||||
@ -131,56 +128,259 @@ public class CurrencyDetailsActivity extends AppCompatActivity {
|
|||||||
hasBeenModified = false;
|
hasBeenModified = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void drawChart()
|
private void initializeButtons()
|
||||||
{
|
{
|
||||||
final LineChartView chartView = new LineChartView(this);
|
LinearLayout buttonLayout = findViewById(R.id.layoutChartButtons);
|
||||||
LineSet lineSet = new LineSet();
|
|
||||||
double valMin;
|
|
||||||
double valMax;
|
|
||||||
int counter = 0;
|
|
||||||
Calendar calendar = Calendar.getInstance(Locale.FRANCE);
|
|
||||||
String hour;
|
|
||||||
String minute;
|
|
||||||
|
|
||||||
final List<CurrencyDataChart> dataChartList = currency.getDayPriceHistory();
|
for(int i = 0; i < buttonLayout.getChildCount(); i++)
|
||||||
|
|
||||||
indexMin = 0;
|
|
||||||
indexMax = 0;
|
|
||||||
valMin = dataChartList.get(0).getOpen();
|
|
||||||
valMax = dataChartList.get(0).getOpen();
|
|
||||||
|
|
||||||
for(int i = 1; i < dataChartList.size(); i++)
|
|
||||||
{
|
{
|
||||||
if(valMax < dataChartList.get(i).getOpen())
|
final Button button = (Button) buttonLayout.getChildAt(i);
|
||||||
{
|
button.setOnClickListener(new View.OnClickListener() {
|
||||||
valMax = dataChartList.get(i).getOpen();
|
@Override
|
||||||
indexMax = i;
|
public void onClick(View v) {
|
||||||
|
buttonEvent(v);
|
||||||
}
|
}
|
||||||
|
});
|
||||||
if(valMin > dataChartList.get(i).getOpen())
|
|
||||||
{
|
|
||||||
valMin = dataChartList.get(i).getOpen();
|
|
||||||
indexMin = i;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(valMax == valMin)
|
private void buttonEvent(View v)
|
||||||
{
|
{
|
||||||
valMin = 0;
|
v.setEnabled(false);
|
||||||
valMax *= 2;
|
|
||||||
|
LinearLayout buttonLayout = (LinearLayout) v.getParent();
|
||||||
|
|
||||||
|
for(int i = 0; i < buttonLayout.getChildCount(); i++)
|
||||||
|
{
|
||||||
|
Button button = (Button) buttonLayout.getChildAt(i);
|
||||||
|
|
||||||
|
if(button != v)
|
||||||
|
{
|
||||||
|
button.setEnabled(true);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
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.setAxisBorderValues((float) valMin, (float) valMax);
|
||||||
chartView.setYLabels(AxisRenderer.LabelPosition.NONE);
|
chartView.setYLabels(AxisRenderer.LabelPosition.NONE);
|
||||||
chartView.setYAxis(false);
|
chartView.setYAxis(false);
|
||||||
chartView.setXAxis(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)
|
||||||
{
|
{
|
||||||
if(counter == 30)
|
List<CurrencyDataChart> 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)
|
||||||
|
{
|
||||||
|
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);
|
calendar.setTimeInMillis(dataChartList.get(i).getTimestamp()*1000);
|
||||||
|
|
||||||
|
switch (pointFormat)
|
||||||
|
{
|
||||||
|
case HOUR:
|
||||||
hour = String.valueOf(calendar.get(Calendar.HOUR_OF_DAY));
|
hour = String.valueOf(calendar.get(Calendar.HOUR_OF_DAY));
|
||||||
minute = String.valueOf(calendar.get(Calendar.MINUTE));
|
minute = String.valueOf(calendar.get(Calendar.MINUTE));
|
||||||
|
|
||||||
@ -195,6 +395,99 @@ public class CurrencyDetailsActivity extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
lineSet.addPoint(hour + ":" + minute, (float) dataChartList.get(i).getOpen());
|
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;
|
counter = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -205,52 +498,11 @@ public class CurrencyDetailsActivity extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
lineSet.setSmooth(true);
|
lineSet.setSmooth(true);
|
||||||
lineSet.setThickness(4);
|
lineSet.setThickness(3);
|
||||||
lineSet.setFill(getColorWitchAlpha(currency.getChartColor(), 0.5f));
|
lineSet.setFill(getColorWitchAlpha(currency.getChartColor(), 0.5f));
|
||||||
lineSet.setColor(currency.getChartColor());
|
lineSet.setColor(currency.getChartColor());
|
||||||
|
|
||||||
final LinearLayout.LayoutParams chartParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 500);
|
return lineSet;
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getColorWitchAlpha(int color, float ratio)
|
private int getColorWitchAlpha(int color, float ratio)
|
||||||
@ -337,34 +589,6 @@ public class CurrencyDetailsActivity extends AppCompatActivity {
|
|||||||
transactionLayout.addView(view);
|
transactionLayout.addView(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
//final ArrayAdapter<HashMap<Integer, Double>> transactionAdapter = new ArrayAdapter<HashMap<Integer, Double>>(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);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,6 @@ import android.app.Dialog;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.BitmapFactory;
|
import android.graphics.BitmapFactory;
|
||||||
import android.graphics.drawable.Icon;
|
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
@ -16,7 +15,6 @@ import android.support.v7.app.AppCompatActivity;
|
|||||||
import android.support.v7.graphics.Palette;
|
import android.support.v7.graphics.Palette;
|
||||||
import android.support.v7.widget.CardView;
|
import android.support.v7.widget.CardView;
|
||||||
import android.support.v7.widget.Toolbar;
|
import android.support.v7.widget.Toolbar;
|
||||||
import android.util.Log;
|
|
||||||
import android.view.Gravity;
|
import android.view.Gravity;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
@ -24,17 +22,13 @@ import android.view.MenuItem;
|
|||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.Window;
|
import android.view.Window;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
import android.widget.ArrayAdapter;
|
|
||||||
import android.widget.ImageButton;
|
import android.widget.ImageButton;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.TextView;
|
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.BalanceManager;
|
||||||
import com.nauk.coinfolio.DataManagers.CurrencyData.Currency;
|
import com.nauk.coinfolio.DataManagers.CurrencyData.Currency;
|
||||||
import com.nauk.coinfolio.DataManagers.DatabaseManager;
|
|
||||||
import com.nauk.coinfolio.LayoutManagers.HomeLayoutGenerator;
|
import com.nauk.coinfolio.LayoutManagers.HomeLayoutGenerator;
|
||||||
import com.nauk.coinfolio.DataManagers.PreferencesManager;
|
import com.nauk.coinfolio.DataManagers.PreferencesManager;
|
||||||
import com.nauk.coinfolio.R;
|
import com.nauk.coinfolio.R;
|
||||||
@ -50,28 +44,28 @@ import java.util.List;
|
|||||||
//Auto refresh with predefined intervals
|
//Auto refresh with predefined intervals
|
||||||
//Adding manually currencies (date, purchased price)
|
//Adding manually currencies (date, purchased price)
|
||||||
//Multiple portfolio (exchanges & custom)
|
//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 roadmap to buy a coin
|
||||||
//Add reddit link ?
|
//Add reddit link ?
|
||||||
//
|
//
|
||||||
|
|
||||||
public class HomeActivity extends AppCompatActivity {
|
public class HomeActivity extends AppCompatActivity {
|
||||||
|
|
||||||
|
private PreferencesManager preferencesManager;
|
||||||
|
private HomeLayoutGenerator layoutGenerator;
|
||||||
private BalanceManager balanceManager;
|
private BalanceManager balanceManager;
|
||||||
|
|
||||||
private int coinCounter;
|
private int coinCounter;
|
||||||
private int iconCounter;
|
private int iconCounter;
|
||||||
private HomeLayoutGenerator layoutGenerator;
|
private long lastTimestamp;
|
||||||
private LinearLayout currencyLayout;
|
private boolean detailsChecker;
|
||||||
private Toolbar toolbar;
|
private boolean isDetailed;
|
||||||
|
|
||||||
private CollapsingToolbarLayout toolbarLayout;
|
private CollapsingToolbarLayout toolbarLayout;
|
||||||
private SwipeRefreshLayout refreshLayout;
|
private SwipeRefreshLayout refreshLayout;
|
||||||
|
private LinearLayout currencyLayout;
|
||||||
private TextView toolbarSubtitle;
|
private TextView toolbarSubtitle;
|
||||||
private boolean view;
|
|
||||||
private Dialog loadingDialog;
|
private Dialog loadingDialog;
|
||||||
private boolean iconChecker;
|
|
||||||
private PreferencesManager preferencesManager;
|
|
||||||
private DatabaseManager databaseManager;
|
|
||||||
private long lastTimestamp;
|
|
||||||
private Handler handler;
|
private Handler handler;
|
||||||
private Runnable updateRunnable;
|
private Runnable updateRunnable;
|
||||||
|
|
||||||
@ -79,27 +73,52 @@ public class HomeActivity extends AppCompatActivity {
|
|||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
/**Interface setup**/
|
||||||
|
|
||||||
|
//Setup main interface
|
||||||
requestWindowFeature(Window.FEATURE_NO_TITLE);
|
requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||||
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
||||||
setContentView(R.layout.activity_currency_summary);
|
setContentView(R.layout.activity_currency_summary);
|
||||||
toolbar = (Toolbar) findViewById(R.id.toolbar);
|
setSupportActionBar((Toolbar) findViewById(R.id.toolbar));
|
||||||
setSupportActionBar(toolbar);
|
|
||||||
|
|
||||||
preferencesManager = new PreferencesManager(this);
|
|
||||||
|
|
||||||
view = preferencesManager.getDetailOption();
|
|
||||||
|
|
||||||
generateSplash();
|
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 detailsButton = findViewById(R.id.switch_button);
|
||||||
ImageButton settingsButton = findViewById(R.id.settings_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.setExpandedTitleGravity(Gravity.CENTER);
|
||||||
toolbarLayout.setCollapsedTitleGravity(Gravity.CENTER);
|
toolbarLayout.setCollapsedTitleGravity(Gravity.CENTER);
|
||||||
toolbarLayout.setForegroundGravity(Gravity.CENTER);
|
toolbarLayout.setForegroundGravity(Gravity.CENTER);
|
||||||
@ -107,6 +126,7 @@ public class HomeActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
toolbarSubtitle.setText("US$0.00");
|
toolbarSubtitle.setText("US$0.00");
|
||||||
|
|
||||||
|
//Events setup
|
||||||
detailsButton.setOnClickListener(new View.OnClickListener() {
|
detailsButton.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View view) {
|
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(
|
refreshLayout.setOnRefreshListener(
|
||||||
new SwipeRefreshLayout.OnRefreshListener() {
|
new SwipeRefreshLayout.OnRefreshListener() {
|
||||||
@Override
|
@Override
|
||||||
@ -138,8 +152,6 @@ public class HomeActivity extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
final ImageButton addCurrencyButton = findViewById(R.id.addCurrencyButton);
|
|
||||||
|
|
||||||
addCurrencyButton.setOnClickListener(new View.OnClickListener() {
|
addCurrencyButton.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
@ -154,55 +166,26 @@ public class HomeActivity extends AppCompatActivity {
|
|||||||
addIntent.putExtra("currencyListNames", nameList);
|
addIntent.putExtra("currencyListNames", nameList);
|
||||||
|
|
||||||
startActivity(addIntent);
|
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();
|
updateViewButtonIcon();
|
||||||
|
|
||||||
lastTimestamp = 0;
|
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
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
@ -210,13 +193,6 @@ public class HomeActivity extends AppCompatActivity {
|
|||||||
Intent intent = getIntent();
|
Intent intent = getIntent();
|
||||||
|
|
||||||
updateAll(intent.getBooleanExtra("update", false));
|
updateAll(intent.getBooleanExtra("update", false));
|
||||||
|
|
||||||
/*if(System.currentTimeMillis()/1000 - lastTimestamp > 60 || intent.getBooleanExtra("update", false))
|
|
||||||
{
|
|
||||||
lastTimestamp = System.currentTimeMillis()/1000;
|
|
||||||
|
|
||||||
updateAll();
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -245,15 +221,15 @@ public class HomeActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
private void switchView()
|
private void switchView()
|
||||||
{
|
{
|
||||||
if(!view)
|
if(isDetailed)
|
||||||
{
|
{
|
||||||
view = true;
|
isDetailed = false;
|
||||||
|
|
||||||
adaptView();
|
adaptView();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
view = false;
|
isDetailed = true;
|
||||||
|
|
||||||
adaptView();
|
adaptView();
|
||||||
}
|
}
|
||||||
@ -261,31 +237,28 @@ public class HomeActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
private void adaptView()
|
private void adaptView()
|
||||||
{
|
{
|
||||||
if(!view)
|
if(isDetailed)
|
||||||
{
|
|
||||||
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
|
|
||||||
{
|
{
|
||||||
currencyLayout.removeAllViews();
|
currencyLayout.removeAllViews();
|
||||||
|
|
||||||
//layoutGenerator.setCurrencyList(balanceManager.getTotalBalance());
|
|
||||||
//layoutGenerator.resetCurrencyList();
|
|
||||||
|
|
||||||
for(int i = 0; i < balanceManager.getTotalBalance().size(); i++)
|
for(int i = 0; i < balanceManager.getTotalBalance().size(); i++)
|
||||||
{
|
{
|
||||||
final Currency currency = balanceManager.getTotalBalance().get(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));
|
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();
|
updateViewButtonIcon();
|
||||||
}
|
}
|
||||||
@ -297,11 +270,12 @@ public class HomeActivity extends AppCompatActivity {
|
|||||||
if(System.currentTimeMillis()/1000 - lastTimestamp > 60 || mustUpdate)
|
if(System.currentTimeMillis()/1000 - lastTimestamp > 60 || mustUpdate)
|
||||||
{
|
{
|
||||||
lastTimestamp = System.currentTimeMillis() / 1000;
|
lastTimestamp = System.currentTimeMillis() / 1000;
|
||||||
resetCounter();
|
|
||||||
balanceManager.updateExchangeKeys();
|
balanceManager.updateExchangeKeys();
|
||||||
|
refreshLayout.setRefreshing(true);
|
||||||
|
|
||||||
|
resetCounters();
|
||||||
DataUpdater updater = new DataUpdater();
|
DataUpdater updater = new DataUpdater();
|
||||||
updater.execute();
|
updater.execute();
|
||||||
refreshLayout.setRefreshing(true);
|
|
||||||
|
|
||||||
handler.postDelayed(updateRunnable, 10000);
|
handler.postDelayed(updateRunnable, 10000);
|
||||||
}
|
}
|
||||||
@ -314,11 +288,11 @@ public class HomeActivity extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void resetCounter()
|
private void resetCounters()
|
||||||
{
|
{
|
||||||
coinCounter = 0;
|
coinCounter = 0;
|
||||||
iconCounter = 0;
|
iconCounter = 0;
|
||||||
iconChecker = false;
|
detailsChecker = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void getBitmapFromURL(String src, IconCallBack callBack) {
|
private void getBitmapFromURL(String src, IconCallBack callBack) {
|
||||||
@ -344,11 +318,11 @@ public class HomeActivity extends AppCompatActivity {
|
|||||||
{
|
{
|
||||||
iconCounter++;
|
iconCounter++;
|
||||||
|
|
||||||
if(iconCounter == balanceManager.getTotalBalance().size() - 1)
|
|
||||||
{
|
|
||||||
if(balanceManager.getTotalBalance() != null)
|
if(balanceManager.getTotalBalance() != null)
|
||||||
{
|
{
|
||||||
if(coinCounter == balanceManager.getTotalBalance().size() - 1 && iconChecker)
|
if(iconCounter == balanceManager.getTotalBalance().size() - 1)
|
||||||
|
{
|
||||||
|
if(coinCounter == balanceManager.getTotalBalance().size() - 1 && detailsChecker)
|
||||||
{
|
{
|
||||||
UiHeavyLoadCalculator uiHeavyLoadCalculator = new UiHeavyLoadCalculator();
|
UiHeavyLoadCalculator uiHeavyLoadCalculator = new UiHeavyLoadCalculator();
|
||||||
uiHeavyLoadCalculator.execute();
|
uiHeavyLoadCalculator.execute();
|
||||||
@ -356,29 +330,10 @@ public class HomeActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
if(balanceManager.getTotalBalance().size() == 0)
|
if(balanceManager.getTotalBalance().size() == 0)
|
||||||
{
|
{
|
||||||
refreshLayout.setRefreshing(false);
|
updateNoBalance();
|
||||||
|
|
||||||
currencyLayout.removeAllViews();
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
/*else
|
||||||
else
|
|
||||||
{
|
{
|
||||||
if(balanceManager.getTotalBalance().size() == 0)
|
if(balanceManager.getTotalBalance().size() == 0)
|
||||||
{
|
{
|
||||||
@ -402,9 +357,33 @@ public class HomeActivity extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
}*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void updateNoBalance()
|
||||||
|
{
|
||||||
|
refreshLayout.setRefreshing(false);
|
||||||
|
|
||||||
|
currencyLayout.removeAllViews();
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private void countCoins(boolean isCoin, boolean isDetails)
|
private void countCoins(boolean isCoin, boolean isDetails)
|
||||||
{
|
{
|
||||||
if(isCoin)
|
if(isCoin)
|
||||||
@ -414,7 +393,7 @@ public class HomeActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
if(isDetails)
|
if(isDetails)
|
||||||
{
|
{
|
||||||
iconChecker = true;
|
detailsChecker = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(balanceManager.getTotalBalance() != null)
|
if(balanceManager.getTotalBalance() != null)
|
||||||
@ -423,14 +402,14 @@ public class HomeActivity extends AppCompatActivity {
|
|||||||
{
|
{
|
||||||
for (int i = 0; i < balanceManager.getTotalBalance().size(); i++)
|
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
|
@Override
|
||||||
public void onSuccess(Bitmap bitmapIcon) {
|
public void onSuccess(Bitmap bitmapIcon) {
|
||||||
balanceManager.getTotalBalance().get(index).setIcon(bitmapIcon);
|
localCurrency.setIcon(bitmapIcon);
|
||||||
countIcons();
|
countIcons();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -451,7 +430,7 @@ public class HomeActivity extends AppCompatActivity {
|
|||||||
{
|
{
|
||||||
ImageButton imgButton = findViewById(R.id.switch_button);
|
ImageButton imgButton = findViewById(R.id.switch_button);
|
||||||
|
|
||||||
if(view)
|
if(isDetailed)
|
||||||
{
|
{
|
||||||
imgButton.setBackground(this.getResources().getDrawable(R.drawable.ic_unfold_less_black_24dp));
|
imgButton.setBackground(this.getResources().getDrawable(R.drawable.ic_unfold_less_black_24dp));
|
||||||
preferencesManager.setDetailOption(true);
|
preferencesManager.setDetailOption(true);
|
||||||
@ -521,28 +500,19 @@ public class HomeActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
balanceManager.sortCoins();
|
balanceManager.sortCoins();
|
||||||
|
|
||||||
//layoutGenerator.setCurrencyList(balanceManager.getTotalBalance());
|
|
||||||
|
|
||||||
for(int i = 0; i < balanceManager.getTotalBalance().size(); i++)
|
for(int i = 0; i < balanceManager.getTotalBalance().size(); i++)
|
||||||
{
|
{
|
||||||
final Currency localCurrency = balanceManager.getTotalBalance().get(i);
|
final Currency localCurrency = balanceManager.getTotalBalance().get(i);
|
||||||
|
|
||||||
if(localCurrency.getIcon() != null)
|
if(localCurrency.getIcon() != null)
|
||||||
{
|
{
|
||||||
//balanceManager.getTotalBalance().get(i).setIcon(getBitmapFromURL(balanceManager.getIconUrl(balanceManager.getTotalBalance().get(i).getSymbol())));
|
|
||||||
|
|
||||||
Palette.Builder builder = Palette.from(localCurrency.getIcon());
|
Palette.Builder builder = Palette.from(localCurrency.getIcon());
|
||||||
|
|
||||||
localCurrency.setChartColor(builder.generate().getDominantColor(0));
|
localCurrency.setChartColor(builder.generate().getDominantColor(0));
|
||||||
|
|
||||||
//layoutGenerator.addCurrencyToList(currency);
|
|
||||||
//currencyLayout.addView(layoutGenerator.getInfoLayout(i));
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//currency.setChartColor(12369084);
|
|
||||||
localCurrency.setChartColor(12369084);
|
localCurrency.setChartColor(12369084);
|
||||||
//currencyLayout.addView(layoutGenerator.getInfoLayout(i));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!localCurrency.getSymbol().equals("USD") && (localCurrency.getBalance() * localCurrency.getValue()) > 0.001)
|
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()));
|
localCurrency.setId(balanceManager.getCurrencyId(localCurrency.getSymbol()));
|
||||||
totalValue += localCurrency.getValue() * localCurrency.getBalance();
|
totalValue += localCurrency.getValue() * localCurrency.getBalance();
|
||||||
totalFluctuation += (localCurrency.getValue() * localCurrency.getBalance()) * (localCurrency.getDayFluctuationPercentage() / 100);
|
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));
|
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));
|
cardList.add(layoutGenerator.getInfoLayout(localCurrency));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -656,7 +621,7 @@ public class HomeActivity extends AppCompatActivity {
|
|||||||
{
|
{
|
||||||
for(int i = 0; i < balanceManager.getTotalBalance().size(); i++)
|
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
|
@Override
|
||||||
public void onSuccess(Currency currency) {
|
public void onSuccess(Currency currency) {
|
||||||
countCoins(true, false);
|
countCoins(true, false);
|
||||||
|
@ -3,6 +3,7 @@ package com.nauk.coinfolio.DataManagers.CurrencyData;
|
|||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.os.Parcel;
|
import android.os.Parcel;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -22,8 +23,10 @@ public class Currency implements Parcelable {
|
|||||||
private double balance;
|
private double balance;
|
||||||
private float dayFluctuationPercentage;
|
private float dayFluctuationPercentage;
|
||||||
private double dayFluctuation;
|
private double dayFluctuation;
|
||||||
private List<CurrencyDataChart> dayPriceHistory;
|
private List<CurrencyDataChart> historyMinutes;
|
||||||
private CurrencyDataRetriver dataRetriver;
|
private List<CurrencyDataChart> historyHours;
|
||||||
|
private List<CurrencyDataChart> historyDays;
|
||||||
|
private CurrencyDataRetriever dataRetriver;
|
||||||
private Bitmap icon;
|
private Bitmap icon;
|
||||||
private int chartColor;
|
private int chartColor;
|
||||||
|
|
||||||
@ -36,7 +39,7 @@ public class Currency implements Parcelable {
|
|||||||
this.balance = currency.balance;
|
this.balance = currency.balance;
|
||||||
this.dayFluctuationPercentage = currency.getDayFluctuationPercentage();
|
this.dayFluctuationPercentage = currency.getDayFluctuationPercentage();
|
||||||
this.dayFluctuation = currency.getDayFluctuation();
|
this.dayFluctuation = currency.getDayFluctuation();
|
||||||
this.dayPriceHistory = currency.dayPriceHistory;
|
this.historyMinutes = currency.historyMinutes;
|
||||||
this.dataRetriver = currency.getDataRetriver();
|
this.dataRetriver = currency.getDataRetriver();
|
||||||
this.icon = currency.icon;
|
this.icon = currency.icon;
|
||||||
this.chartColor = currency.chartColor;
|
this.chartColor = currency.chartColor;
|
||||||
@ -61,13 +64,13 @@ public class Currency implements Parcelable {
|
|||||||
this.symbol = symbol;
|
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 = new CurrencyDataRetriever(context);
|
||||||
dataRetriver.updateLastDayHistory(symbol, new CurrencyDataRetriver.DataChartCallBack() {
|
dataRetriver.updateHistory(symbol, new CurrencyDataRetriever.DataChartCallBack() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(List<CurrencyDataChart> dataChart) {
|
public void onSuccess(List<CurrencyDataChart> dataChart) {
|
||||||
setDayPriceHistory(dataChart);
|
setHistoryMinutes(dataChart);
|
||||||
updateDayFluctuation();
|
updateDayFluctuation();
|
||||||
|
|
||||||
if(dataChart != null)
|
if(dataChart != null)
|
||||||
@ -81,27 +84,33 @@ public class Currency implements Parcelable {
|
|||||||
|
|
||||||
callBack.onSuccess(Currency.this);
|
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 = new CurrencyDataRetriever(context);
|
||||||
dataRetriver.updateCurrencyName(symbol, new CurrencyDataRetriver.NameCallBack() {
|
dataRetriver.updateHistory(symbol, new CurrencyDataRetriever.DataChartCallBack() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(String name) {
|
public void onSuccess(List<CurrencyDataChart> dataChart) {
|
||||||
if(name != null)
|
setHistoryHours(dataChart);
|
||||||
{
|
|
||||||
setName(name);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
setName("NameNotFound");
|
|
||||||
}
|
|
||||||
|
|
||||||
callBack.onSuccess(Currency.this);
|
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<CurrencyDataChart> dataChart) {
|
||||||
|
setHistoryDays(dataChart);
|
||||||
|
|
||||||
|
callBack.onSuccess(Currency.this);
|
||||||
|
}
|
||||||
|
}, CurrencyDataRetriever.DAYS);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setId(int id)
|
public void setId(int id)
|
||||||
@ -124,14 +133,24 @@ public class Currency implements Parcelable {
|
|||||||
return chartColor;
|
return chartColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
public CurrencyDataRetriver getDataRetriver()
|
public CurrencyDataRetriever getDataRetriver()
|
||||||
{
|
{
|
||||||
return dataRetriver;
|
return dataRetriver;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<CurrencyDataChart> getDayPriceHistory()
|
public List<CurrencyDataChart> getHistoryMinutes()
|
||||||
{
|
{
|
||||||
return dayPriceHistory;
|
return historyMinutes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<CurrencyDataChart> getHistoryHours()
|
||||||
|
{
|
||||||
|
return historyHours;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<CurrencyDataChart> getHistoryDays()
|
||||||
|
{
|
||||||
|
return historyDays;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getName()
|
public String getName()
|
||||||
@ -179,9 +198,19 @@ public class Currency implements Parcelable {
|
|||||||
balance = newBalance;
|
balance = newBalance;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setDayPriceHistory(List<CurrencyDataChart> newDataChart)
|
private void setHistoryMinutes(List<CurrencyDataChart> newDataChart)
|
||||||
{
|
{
|
||||||
dayPriceHistory = newDataChart;
|
historyMinutes = newDataChart;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setHistoryHours(List<CurrencyDataChart> newDataChart)
|
||||||
|
{
|
||||||
|
historyHours = newDataChart;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setHistoryDays(List<CurrencyDataChart> newDataChart)
|
||||||
|
{
|
||||||
|
historyDays = newDataChart;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setIcon(Bitmap newIcon)
|
public void setIcon(Bitmap newIcon)
|
||||||
@ -196,11 +225,11 @@ public class Currency implements Parcelable {
|
|||||||
|
|
||||||
private void updateDayFluctuation()
|
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.writeDouble(this.balance);
|
||||||
dest.writeFloat(this.dayFluctuationPercentage);
|
dest.writeFloat(this.dayFluctuationPercentage);
|
||||||
dest.writeDouble(this.dayFluctuation);
|
dest.writeDouble(this.dayFluctuation);
|
||||||
dest.writeList(this.dayPriceHistory);
|
dest.writeList(this.historyMinutes);
|
||||||
dest.writeParcelable(this.icon, flags);
|
dest.writeParcelable(this.icon, flags);
|
||||||
dest.writeInt(this.chartColor);
|
dest.writeInt(this.chartColor);
|
||||||
}
|
}
|
||||||
@ -236,8 +265,8 @@ public class Currency implements Parcelable {
|
|||||||
this.balance = in.readDouble();
|
this.balance = in.readDouble();
|
||||||
this.dayFluctuationPercentage = in.readFloat();
|
this.dayFluctuationPercentage = in.readFloat();
|
||||||
this.dayFluctuation = in.readDouble();
|
this.dayFluctuation = in.readDouble();
|
||||||
this.dayPriceHistory = new ArrayList<CurrencyDataChart>();
|
this.historyMinutes = new ArrayList<CurrencyDataChart>();
|
||||||
in.readList(this.dayPriceHistory, CurrencyDataChart.class.getClassLoader());
|
in.readList(this.historyMinutes, CurrencyDataChart.class.getClassLoader());
|
||||||
this.icon = in.readParcelable(Bitmap.class.getClassLoader());
|
this.icon = in.readParcelable(Bitmap.class.getClassLoader());
|
||||||
this.chartColor = in.readInt();
|
this.chartColor = in.readInt();
|
||||||
}
|
}
|
||||||
|
@ -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<String>() {
|
||||||
|
@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<CurrencyDataChart> processHistoryResult(String response)
|
||||||
|
{
|
||||||
|
List<CurrencyDataChart> 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<CurrencyDataChart> dataChart);
|
||||||
|
}
|
||||||
|
}
|
@ -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<String>() {
|
|
||||||
@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<String>() {
|
|
||||||
@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<String>() {
|
|
||||||
@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<CurrencyDataChart> processHourResult(String response)
|
|
||||||
{
|
|
||||||
List<CurrencyDataChart> 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<CurrencyDataChart> dataChart);
|
|
||||||
}
|
|
||||||
|
|
||||||
public interface CurrencyDetailCallBack {
|
|
||||||
void onSuccess();
|
|
||||||
}
|
|
||||||
|
|
||||||
public interface NameCallBack {
|
|
||||||
void onSuccess(String name);
|
|
||||||
}
|
|
||||||
}
|
|
@ -6,27 +6,21 @@ import android.content.Context;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.support.design.widget.Snackbar;
|
|
||||||
import android.support.v7.widget.CardView;
|
import android.support.v7.widget.CardView;
|
||||||
import android.util.Log;
|
|
||||||
import android.view.Gravity;
|
import android.view.Gravity;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.db.chart.model.LineSet;
|
import com.db.chart.model.LineSet;
|
||||||
import com.db.chart.model.Point;
|
|
||||||
import com.db.chart.renderer.AxisRenderer;
|
import com.db.chart.renderer.AxisRenderer;
|
||||||
import com.db.chart.view.LineChartView;
|
import com.db.chart.view.LineChartView;
|
||||||
import com.nauk.coinfolio.Activities.CurrencyDetailsActivity;
|
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.Currency;
|
||||||
import com.nauk.coinfolio.DataManagers.CurrencyData.CurrencyDataChart;
|
import com.nauk.coinfolio.DataManagers.CurrencyData.CurrencyDataChart;
|
||||||
import com.nauk.coinfolio.R;
|
import com.nauk.coinfolio.R;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
@ -184,9 +178,9 @@ public class HomeLayoutGenerator {
|
|||||||
{
|
{
|
||||||
View toReturn;
|
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.setTag("chart_layout");
|
||||||
chartLayout.addView(lineChartView);
|
chartLayout.addView(lineChartView);
|
||||||
lineChartView.show();
|
lineChartView.show();
|
||||||
|
@ -18,6 +18,102 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/progressLayoutChart"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="300dp"
|
||||||
|
android:layout_marginTop="15dp"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:gravity="center">
|
||||||
|
|
||||||
|
<ProgressBar
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
style="?android:attr/progressBarStyleLarge"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:background="@drawable/circular_progress_bar"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
||||||
|
<com.db.chart.view.LineChartView
|
||||||
|
android:id="@+id/chartView"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="300dp"
|
||||||
|
android:layout_marginTop="15dp" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/layoutChartButtons"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<Button
|
||||||
|
style="@style/Widget.AppCompat.Button.Colored"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="11.1"
|
||||||
|
android:text="@string/button1h"/>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
style="@style/Widget.AppCompat.Button.Colored"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="11.1"
|
||||||
|
android:text="@string/button3h"/>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
style="@style/Widget.AppCompat.Button.Colored"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="11.1"
|
||||||
|
android:enabled="false"
|
||||||
|
android:text="@string/button1d"/>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
style="@style/Widget.AppCompat.Button.Colored"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="11.1"
|
||||||
|
android:text="@string/button3d"/>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
style="@style/Widget.AppCompat.Button.Colored"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="11.1"
|
||||||
|
android:text="@string/button1w"/>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
style="@style/Widget.AppCompat.Button.Colored"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="11.1"
|
||||||
|
android:text="@string/button1m"/>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
style="@style/Widget.AppCompat.Button.Colored"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="11.1"
|
||||||
|
android:text="@string/button3m"/>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
style="@style/Widget.AppCompat.Button.Colored"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="11.1"
|
||||||
|
android:text="@string/button6m"/>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
style="@style/Widget.AppCompat.Button.Colored"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="11.1"
|
||||||
|
android:text="@string/button1y"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<ScrollView
|
<ScrollView
|
||||||
android:id="@+id/svCharts"
|
android:id="@+id/svCharts"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="match_parent"
|
||||||
android:background="@drawable/rounded_corners"
|
|
||||||
android:gravity="center_horizontal">
|
android:gravity="center_horizontal">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
@ -12,5 +11,12 @@
|
|||||||
android:layout_centerVertical="true"
|
android:layout_centerVertical="true"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:textColor="#ffffff"
|
android:textColor="#ffffff"
|
||||||
android:textSize="16sp"/>
|
android:textSize="16sp"
|
||||||
|
android:background="@drawable/rounded_corners" />
|
||||||
|
|
||||||
|
<Space
|
||||||
|
android:id="@+id/separationLine"
|
||||||
|
android:layout_width="3dp"
|
||||||
|
android:layout_height="match_parent" />
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
@ -120,4 +120,15 @@
|
|||||||
<string name="title_charts">Charts</string>
|
<string name="title_charts">Charts</string>
|
||||||
<string name="title_infos">Infos</string>
|
<string name="title_infos">Infos</string>
|
||||||
<string name="title_transactions">Transactions</string>
|
<string name="title_transactions">Transactions</string>
|
||||||
|
|
||||||
|
<!--Chart buttons texts-->
|
||||||
|
<string name="button1h">1h</string>
|
||||||
|
<string name="button3h">3h</string>
|
||||||
|
<string name="button1d">1d</string>
|
||||||
|
<string name="button3d">3d</string>
|
||||||
|
<string name="button1w">1w</string>
|
||||||
|
<string name="button1m">1M</string>
|
||||||
|
<string name="button3m">3M</string>
|
||||||
|
<string name="button6m">6M</string>
|
||||||
|
<string name="button1y">1y</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
Loading…
Reference in New Issue
Block a user