Detailed charts animations and tooltip for max values + bug fixing
Fix the major issues happening with data refreshing and optimizing data managment Tooltip for detailed history in progress
This commit is contained in:
parent
ba4655f64a
commit
d220e661b4
@ -3,23 +3,32 @@ package com.nauk.coinfolio.Activities;
|
||||
import android.content.ContentValues;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Rect;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.design.widget.BottomNavigationView;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.util.Log;
|
||||
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.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;
|
||||
@ -45,6 +54,10 @@ public class CurrencyDetailsActivity extends AppCompatActivity {
|
||||
private DatabaseManager databaseManager;
|
||||
//private String symbol;
|
||||
private Currency currency;
|
||||
private boolean hasBeenModified;
|
||||
private Tooltip tip;
|
||||
private int indexMax;
|
||||
private int indexMin;
|
||||
|
||||
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
|
||||
= new BottomNavigationView.OnNavigationItemSelectedListener() {
|
||||
@ -66,6 +79,17 @@ public class CurrencyDetailsActivity extends AppCompatActivity {
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
public void onBackPressed()
|
||||
{
|
||||
Log.d(this.getResources().getString(R.string.debug), "Back pressed");
|
||||
Intent intent = new Intent(this, HomeActivity.class);
|
||||
intent.putExtra("update", hasBeenModified);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
|
||||
startActivity(intent);
|
||||
finish();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
@ -80,23 +104,36 @@ public class CurrencyDetailsActivity extends AppCompatActivity {
|
||||
|
||||
viewFlipper = findViewById(R.id.vfCurrencyDetails);
|
||||
transactionLayout = findViewById(R.id.listTransactions);
|
||||
chartLayout = findViewById(R.id.chartLayout);
|
||||
chartLayout = findViewById(R.id.chartsLayout);
|
||||
|
||||
drawTransactionList();
|
||||
|
||||
if(currency.getDayPriceHistory().size() > 0)
|
||||
{
|
||||
drawChart();
|
||||
}
|
||||
else
|
||||
{
|
||||
TextView errorTextView = new TextView(this);
|
||||
errorTextView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 500));
|
||||
errorTextView.setText("Not enough data");
|
||||
errorTextView.setTag("chart_layout");
|
||||
errorTextView.setGravity(Gravity.CENTER);
|
||||
|
||||
chartLayout.addView(errorTextView);
|
||||
}
|
||||
|
||||
setTitle(currency.getName());
|
||||
|
||||
BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
|
||||
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
|
||||
|
||||
Log.d("coinfolio", "Color received : " + currency.getChartColor());
|
||||
hasBeenModified = false;
|
||||
}
|
||||
|
||||
private void drawChart()
|
||||
{
|
||||
LineChartView chartView = new LineChartView(this);
|
||||
final LineChartView chartView = new LineChartView(this);
|
||||
LineSet lineSet = new LineSet();
|
||||
double valMin;
|
||||
double valMax;
|
||||
@ -105,8 +142,10 @@ public class CurrencyDetailsActivity extends AppCompatActivity {
|
||||
String hour;
|
||||
String minute;
|
||||
|
||||
List<CurrencyDataChart> dataChartList = currency.getDayPriceHistory();
|
||||
final List<CurrencyDataChart> dataChartList = currency.getDayPriceHistory();
|
||||
|
||||
indexMin = 0;
|
||||
indexMax = 0;
|
||||
valMin = dataChartList.get(0).getOpen();
|
||||
valMax = dataChartList.get(0).getOpen();
|
||||
|
||||
@ -115,11 +154,13 @@ public class CurrencyDetailsActivity extends AppCompatActivity {
|
||||
if(valMax < dataChartList.get(i).getOpen())
|
||||
{
|
||||
valMax = dataChartList.get(i).getOpen();
|
||||
indexMax = i;
|
||||
}
|
||||
|
||||
if(valMin > dataChartList.get(i).getOpen())
|
||||
{
|
||||
valMin = dataChartList.get(i).getOpen();
|
||||
indexMin = i;
|
||||
}
|
||||
}
|
||||
|
||||
@ -130,7 +171,7 @@ public class CurrencyDetailsActivity extends AppCompatActivity {
|
||||
}
|
||||
|
||||
chartView.setAxisBorderValues((float) valMin, (float) valMax);
|
||||
chartView.setYLabels(AxisRenderer.LabelPosition.OUTSIDE);
|
||||
chartView.setYLabels(AxisRenderer.LabelPosition.NONE);
|
||||
chartView.setYAxis(false);
|
||||
chartView.setXAxis(false);
|
||||
|
||||
@ -168,15 +209,48 @@ public class CurrencyDetailsActivity extends AppCompatActivity {
|
||||
lineSet.setFill(getColorWitchAlpha(currency.getChartColor(), 0.5f));
|
||||
lineSet.setColor(currency.getChartColor());
|
||||
|
||||
chartView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 500));
|
||||
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);
|
||||
|
||||
Log.d("coinfolio", "Color : " + currency.getChartColor());
|
||||
|
||||
chartView.show();
|
||||
}
|
||||
|
||||
private int getColorWitchAlpha(int color, float ratio)
|
||||
@ -214,6 +288,7 @@ public class CurrencyDetailsActivity extends AppCompatActivity {
|
||||
databaseManager.deleteTransactionFromId(Integer.parseInt(view.getTag().toString()));
|
||||
Log.d(CurrencyDetailsActivity.this.getResources().getString(R.string.debug), "Id : " + view.getTag());
|
||||
drawTransactionList();
|
||||
hasBeenModified = true;
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -7,11 +7,14 @@ import android.graphics.BitmapFactory;
|
||||
import android.graphics.drawable.Icon;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.support.design.widget.CollapsingToolbarLayout;
|
||||
import android.support.design.widget.Snackbar;
|
||||
import android.support.v4.widget.SwipeRefreshLayout;
|
||||
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;
|
||||
@ -21,6 +24,7 @@ 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;
|
||||
@ -38,6 +42,7 @@ import com.nauk.coinfolio.R;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
//Use WilliamChart for charts https://github.com/diogobernardino/WilliamChart
|
||||
@ -67,6 +72,8 @@ public class HomeActivity extends AppCompatActivity {
|
||||
private PreferencesManager preferencesManager;
|
||||
private DatabaseManager databaseManager;
|
||||
private long lastTimestamp;
|
||||
private Handler handler;
|
||||
private Runnable updateRunnable;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
@ -126,7 +133,7 @@ public class HomeActivity extends AppCompatActivity {
|
||||
new SwipeRefreshLayout.OnRefreshListener() {
|
||||
@Override
|
||||
public void onRefresh() {
|
||||
updateAll();
|
||||
updateAll(false);
|
||||
}
|
||||
}
|
||||
);
|
||||
@ -156,6 +163,41 @@ public class HomeActivity extends AppCompatActivity {
|
||||
|
||||
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;
|
||||
@ -165,12 +207,16 @@ public class HomeActivity extends AppCompatActivity {
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
|
||||
if(System.currentTimeMillis()/1000 - lastTimestamp > 60)
|
||||
Intent intent = getIntent();
|
||||
|
||||
updateAll(intent.getBooleanExtra("update", false));
|
||||
|
||||
/*if(System.currentTimeMillis()/1000 - lastTimestamp > 60 || intent.getBooleanExtra("update", false))
|
||||
{
|
||||
lastTimestamp = System.currentTimeMillis()/1000;
|
||||
|
||||
updateAll();
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -236,7 +282,7 @@ public class HomeActivity extends AppCompatActivity {
|
||||
|
||||
if(!currency.getSymbol().equals("USD") && ((currency.getBalance() * currency.getValue()) > 0.001 || currency.getDayPriceHistory() == null))
|
||||
{
|
||||
currencyLayout.addView(layoutGenerator.getInfoLayout(currency, currency.getChartColor()));
|
||||
currencyLayout.addView(layoutGenerator.getInfoLayout(currency));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -246,13 +292,26 @@ public class HomeActivity extends AppCompatActivity {
|
||||
|
||||
|
||||
|
||||
private void updateAll()
|
||||
private void updateAll(boolean mustUpdate)
|
||||
{
|
||||
if(System.currentTimeMillis()/1000 - lastTimestamp > 60 || mustUpdate)
|
||||
{
|
||||
lastTimestamp = System.currentTimeMillis() / 1000;
|
||||
resetCounter();
|
||||
balanceManager.updateExchangeKeys();
|
||||
DataUpdater updater = new DataUpdater();
|
||||
updater.execute();
|
||||
refreshLayout.setRefreshing(true);
|
||||
|
||||
handler.postDelayed(updateRunnable, 10000);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(refreshLayout.isRefreshing())
|
||||
{
|
||||
refreshLayout.setRefreshing(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void resetCounter()
|
||||
@ -283,84 +342,16 @@ public class HomeActivity extends AppCompatActivity {
|
||||
|
||||
private void countIcons()
|
||||
{
|
||||
float totalValue = 0;
|
||||
float totalFluctuation = 0;
|
||||
|
||||
iconCounter++;
|
||||
|
||||
if(iconCounter == balanceManager.getTotalBalance().size())
|
||||
if(iconCounter == balanceManager.getTotalBalance().size() - 1)
|
||||
{
|
||||
|
||||
if(balanceManager.getTotalBalance() != null)
|
||||
{
|
||||
if(coinCounter == balanceManager.getTotalBalance().size() - 1 && iconChecker)
|
||||
{
|
||||
refreshLayout.setRefreshing(false);
|
||||
|
||||
balanceManager.sortCoins();
|
||||
|
||||
currencyLayout.removeAllViews();
|
||||
|
||||
//layoutGenerator.setCurrencyList(balanceManager.getTotalBalance());
|
||||
|
||||
for(int i = 0; i < balanceManager.getTotalBalance().size(); i++)
|
||||
{
|
||||
if(balanceManager.getTotalBalance().get(i).getIcon() != null)
|
||||
{
|
||||
//balanceManager.getTotalBalance().get(i).setIcon(getBitmapFromURL(balanceManager.getIconUrl(balanceManager.getTotalBalance().get(i).getSymbol())));
|
||||
|
||||
Palette.Builder builder = Palette.from(balanceManager.getTotalBalance().get(i).getIcon());
|
||||
|
||||
balanceManager.getTotalBalance().get(i).setChartColor(builder.generate().getDominantColor(0));
|
||||
|
||||
//layoutGenerator.addCurrencyToList(currency);
|
||||
//currencyLayout.addView(layoutGenerator.getInfoLayout(i));
|
||||
}
|
||||
else
|
||||
{
|
||||
//currency.setChartColor(12369084);
|
||||
balanceManager.getTotalBalance().get(i).setChartColor(12369084);
|
||||
//currencyLayout.addView(layoutGenerator.getInfoLayout(i));
|
||||
}
|
||||
|
||||
if(!balanceManager.getTotalBalance().get(i).getSymbol().equals("USD") && (balanceManager.getTotalBalance().get(i).getBalance() * balanceManager.getTotalBalance().get(i).getValue()) > 0.001)
|
||||
{
|
||||
balanceManager.getTotalBalance().get(i).setName(balanceManager.getCurrencyName(balanceManager.getTotalBalance().get(i).getSymbol()));
|
||||
totalValue += balanceManager.getTotalBalance().get(i).getValue() * balanceManager.getTotalBalance().get(i).getBalance();
|
||||
totalFluctuation += (balanceManager.getTotalBalance().get(i).getValue() * balanceManager.getTotalBalance().get(i).getBalance()) * (balanceManager.getTotalBalance().get(i).getDayFluctuationPercentage() / 100);
|
||||
//balanceManager.getTotalBalance().get(i).setIcon(getBitmapFromURL(balanceManager.getIconUrl(balanceManager.getTotalBalance().get(i).getSymbol())));
|
||||
//currencyLayout.addView(layoutGenerator.getInfoLayout(i));
|
||||
currencyLayout.addView(layoutGenerator.getInfoLayout(balanceManager.getTotalBalance().get(i), 0));
|
||||
}
|
||||
|
||||
if(!balanceManager.getTotalBalance().get(i).getSymbol().equals("USD") && balanceManager.getTotalBalance().get(i).getDayPriceHistory() == null)
|
||||
{
|
||||
//balanceManager.getTotalBalance().get(i).setIcon(getBitmapFromURL(balanceManager.getIconUrl(balanceManager.getTotalBalance().get(i).getSymbol())));
|
||||
//currencyLayout.addView(layoutGenerator.getInfoLayout(i));
|
||||
currencyLayout.addView(layoutGenerator.getInfoLayout(balanceManager.getTotalBalance().get(i), 0));
|
||||
}
|
||||
}
|
||||
|
||||
adaptView();
|
||||
|
||||
toolbarLayout.setTitle("US$" + String.format("%.2f", totalValue));
|
||||
|
||||
if(totalFluctuation > 0)
|
||||
{
|
||||
toolbarSubtitle.setTextColor(getResources().getColor(R.color.increase));
|
||||
}
|
||||
else
|
||||
{
|
||||
toolbarSubtitle.setTextColor(getResources().getColor(R.color.decrease));
|
||||
}
|
||||
|
||||
toolbarSubtitle.setText("US$" + String.format("%.2f", totalFluctuation));
|
||||
|
||||
|
||||
if(loadingDialog.isShowing())
|
||||
{
|
||||
loadingDialog.dismiss();
|
||||
}
|
||||
UiHeavyLoadCalculator uiHeavyLoadCalculator = new UiHeavyLoadCalculator();
|
||||
uiHeavyLoadCalculator.execute();
|
||||
}
|
||||
|
||||
if(balanceManager.getTotalBalance().size() == 0)
|
||||
@ -387,6 +378,31 @@ public class HomeActivity extends AppCompatActivity {
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
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);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void countCoins(boolean isCoin, boolean isDetails)
|
||||
@ -401,12 +417,16 @@ public class HomeActivity extends AppCompatActivity {
|
||||
iconChecker = true;
|
||||
}
|
||||
|
||||
if(balanceManager.getTotalBalance() != null)
|
||||
{
|
||||
if(coinCounter == balanceManager.getTotalBalance().size()-1)
|
||||
{
|
||||
for (int i = 0; i < balanceManager.getTotalBalance().size(); i++)
|
||||
{
|
||||
final int index = i;
|
||||
|
||||
if(balanceManager.getIconUrl(balanceManager.getTotalBalance().get(i).getSymbol()) != null)
|
||||
{
|
||||
getBitmapFromURL(balanceManager.getIconUrl(balanceManager.getTotalBalance().get(i).getSymbol()), new IconCallBack() {
|
||||
@Override
|
||||
public void onSuccess(Bitmap bitmapIcon) {
|
||||
@ -417,6 +437,15 @@ public class HomeActivity extends AppCompatActivity {
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(balanceManager.getTotalBalance().size() == 0)
|
||||
{
|
||||
countIcons();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void updateViewButtonIcon()
|
||||
{
|
||||
@ -460,6 +489,146 @@ public class HomeActivity extends AppCompatActivity {
|
||||
loadingDialog.show();
|
||||
}
|
||||
|
||||
private class UiHeavyLoadCalculator extends AsyncTask<Void, Integer, Void>
|
||||
{
|
||||
|
||||
private float totalValue;
|
||||
private float totalFluctuation;
|
||||
private float totalFluctuationPercentage;
|
||||
|
||||
@Override
|
||||
protected void onPreExecute()
|
||||
{
|
||||
super.onPreExecute();
|
||||
|
||||
totalValue = 0;
|
||||
totalFluctuation = 0;
|
||||
totalFluctuationPercentage = 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onProgressUpdate(Integer... values)
|
||||
{
|
||||
super.onProgressUpdate(values);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Void doInBackground(Void... params)
|
||||
{
|
||||
final List<CardView> cardList = new ArrayList<>();
|
||||
|
||||
Looper.prepare();
|
||||
|
||||
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)
|
||||
{
|
||||
localCurrency.setName(balanceManager.getCurrencyName(localCurrency.getSymbol()));
|
||||
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)
|
||||
{
|
||||
//balanceManager.getTotalBalance().get(i).setIcon(getBitmapFromURL(balanceManager.getIconUrl(balanceManager.getTotalBalance().get(i).getSymbol())));
|
||||
//currencyLayout.addView(layoutGenerator.getInfoLayout(i));
|
||||
|
||||
cardList.add(layoutGenerator.getInfoLayout(localCurrency));
|
||||
}
|
||||
|
||||
balanceManager.getTotalBalance().set(i, localCurrency);
|
||||
}
|
||||
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
refreshLayout.setRefreshing(false);
|
||||
currencyLayout.removeAllViews();
|
||||
|
||||
for(int i = 0; i < cardList.size(); i++)
|
||||
{
|
||||
currencyLayout.addView(cardList.get(i));
|
||||
}
|
||||
|
||||
adaptView();
|
||||
}
|
||||
});
|
||||
|
||||
toolbarLayout.setTitle("US$" + String.format("%.2f", totalValue));
|
||||
|
||||
if(totalFluctuation > 0)
|
||||
{
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
toolbarSubtitle.setTextColor(getResources().getColor(R.color.increase));
|
||||
}
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
toolbarSubtitle.setTextColor(getResources().getColor(R.color.decrease));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
totalFluctuationPercentage = totalFluctuation / (totalValue - totalFluctuation) *100;
|
||||
|
||||
toolbarSubtitle.setText("US$" + String.format("%.2f", totalFluctuation) + " (" + String.format("%.2f", totalFluctuationPercentage) + "%)");
|
||||
|
||||
if(loadingDialog.isShowing())
|
||||
{
|
||||
loadingDialog.dismiss();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Void result)
|
||||
{
|
||||
handler.removeCallbacks(updateRunnable);
|
||||
}
|
||||
}
|
||||
|
||||
private class DataUpdater extends AsyncTask<Void, Integer, Void>
|
||||
{
|
||||
@Override
|
||||
@ -490,12 +659,13 @@ public class HomeActivity extends AppCompatActivity {
|
||||
balance.get(i).updateDayPriceHistory(getApplicationContext(), new Currency.CurrencyCallBack() {
|
||||
@Override
|
||||
public void onSuccess(Currency currency) {
|
||||
currency.updateName(getApplicationContext(), new Currency.CurrencyCallBack() {
|
||||
countCoins(true, false);
|
||||
/*currency.updateName(getApplicationContext(), new Currency.CurrencyCallBack() {
|
||||
@Override
|
||||
public void onSuccess(Currency currency) {
|
||||
countCoins(true, false);
|
||||
}
|
||||
});
|
||||
});*/
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -515,10 +685,10 @@ public class HomeActivity extends AppCompatActivity {
|
||||
Snackbar.make(findViewById(R.id.currencyListLayout), "HitBTC synchronization error : Invalid keys", Snackbar.LENGTH_LONG)
|
||||
.show();
|
||||
refreshLayout.setRefreshing(false);
|
||||
updateAll();
|
||||
updateAll(true);
|
||||
break;
|
||||
default:
|
||||
updateAll();
|
||||
updateAll(true);
|
||||
}
|
||||
//updateAll();
|
||||
}
|
||||
|
@ -41,6 +41,7 @@ public class RecordTransactionActivity extends AppCompatActivity {
|
||||
public void onClick(View view) {
|
||||
databaseManager.addCurrencyToManualCurrency(symbol, Double.parseDouble(amountTxtView.getText().toString()));
|
||||
Intent intent = new Intent(RecordTransactionActivity.this, HomeActivity.class);
|
||||
intent.putExtra("update", true);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
|
||||
startActivity(intent);
|
||||
finish();
|
||||
|
@ -48,6 +48,7 @@ public class BalanceManager {
|
||||
private android.content.Context context;
|
||||
private Map<String, String> iconUrlList;
|
||||
private Map<String, String> coinList;
|
||||
private Map<String, Integer> coinIdList;
|
||||
private PreferencesManager preferenceManager;
|
||||
private DatabaseManager databaseManager;
|
||||
|
||||
@ -265,7 +266,16 @@ public class BalanceManager {
|
||||
|
||||
public String getIconUrl(String symbol)
|
||||
{
|
||||
return iconUrlList.get(symbol);
|
||||
String url;
|
||||
|
||||
try {
|
||||
url = iconUrlList.get(symbol);
|
||||
} catch (NullPointerException e) {
|
||||
Log.d(context.getResources().getString(R.string.debug), symbol + " has no icon URL");
|
||||
url = null;
|
||||
}
|
||||
|
||||
return url;
|
||||
}
|
||||
|
||||
public String getCurrencyName(String symbol)
|
||||
@ -273,6 +283,11 @@ public class BalanceManager {
|
||||
return coinList.get(symbol);
|
||||
}
|
||||
|
||||
public int getCurrencyId(String symbol)
|
||||
{
|
||||
return coinIdList.get(symbol);
|
||||
}
|
||||
|
||||
private void processDetailResult(String response, final IconCallBack callBack)
|
||||
{
|
||||
response = response.substring(response.indexOf("\"Data\"") + 7, response.lastIndexOf("},\"Type\":100}"));
|
||||
@ -280,6 +295,7 @@ public class BalanceManager {
|
||||
|
||||
iconUrlList = new HashMap<>();
|
||||
coinList = new HashMap<>();
|
||||
coinIdList = new HashMap<>();
|
||||
|
||||
for(int i = 0; i < tab.length; i++)
|
||||
{
|
||||
@ -292,6 +308,8 @@ public class BalanceManager {
|
||||
iconUrlList.put(jsonObject.getString("Symbol"), "https://www.cryptocompare.com" + jsonObject.getString("ImageUrl") + "?width=50");
|
||||
|
||||
coinList.put(jsonObject.getString("Symbol"), jsonObject.getString("CoinName"));
|
||||
|
||||
coinIdList.put(jsonObject.getString("Symbol"), jsonObject.getInt("Id"));
|
||||
} catch (JSONException e) {
|
||||
Log.d(context.getResources().getString(R.string.debug), "ImageUrl not found.");
|
||||
}
|
||||
|
@ -15,6 +15,7 @@ import static java.sql.Types.NULL;
|
||||
|
||||
public class Currency implements Parcelable {
|
||||
|
||||
private int id;
|
||||
private String name;
|
||||
private String symbol;
|
||||
private double value;
|
||||
@ -26,6 +27,21 @@ public class Currency implements Parcelable {
|
||||
private Bitmap icon;
|
||||
private int chartColor;
|
||||
|
||||
public Currency(Currency currency)
|
||||
{
|
||||
this.id = currency.id;
|
||||
this.name = currency.name;
|
||||
this.symbol = currency.symbol;
|
||||
this.value = currency.value;
|
||||
this.balance = currency.balance;
|
||||
this.dayFluctuationPercentage = currency.getDayFluctuationPercentage();
|
||||
this.dayFluctuation = currency.getDayFluctuation();
|
||||
this.dayPriceHistory = currency.dayPriceHistory;
|
||||
this.dataRetriver = currency.getDataRetriver();
|
||||
this.icon = currency.icon;
|
||||
this.chartColor = currency.chartColor;
|
||||
}
|
||||
|
||||
public Currency(String symbol, double balance)
|
||||
{
|
||||
this.symbol = symbol;
|
||||
@ -88,6 +104,16 @@ public class Currency implements Parcelable {
|
||||
});
|
||||
}
|
||||
|
||||
public void setId(int id)
|
||||
{
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public int getId()
|
||||
{
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setChartColor(int chartColor)
|
||||
{
|
||||
this.chartColor = chartColor;
|
||||
@ -190,6 +216,7 @@ public class Currency implements Parcelable {
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel dest, int flags) {
|
||||
dest.writeInt(this.id);
|
||||
dest.writeString(this.name);
|
||||
dest.writeString(this.symbol);
|
||||
dest.writeDouble(this.value);
|
||||
@ -202,6 +229,7 @@ public class Currency implements Parcelable {
|
||||
}
|
||||
|
||||
protected Currency(Parcel in) {
|
||||
this.id = in.readInt();
|
||||
this.name = in.readString();
|
||||
this.symbol = in.readString();
|
||||
this.value = in.readDouble();
|
||||
|
@ -98,7 +98,7 @@ public class CurrencyDataRetriver {
|
||||
new Response.ErrorListener() {
|
||||
@Override
|
||||
public void onErrorResponse(VolleyError error) {
|
||||
|
||||
callBack.onSuccess(null);
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -19,12 +19,11 @@ import com.nauk.coinfolio.R;
|
||||
|
||||
public class CurrencyAdapter extends ArrayAdapter<Currency> {
|
||||
|
||||
private ArrayList<Currency> Currencys, tempCurrency, suggestions;
|
||||
private ArrayList<Currency> tempCurrency, suggestions;
|
||||
private Context context;
|
||||
|
||||
public CurrencyAdapter(Context context, ArrayList<Currency> objects) {
|
||||
super(context, android.R.layout.simple_list_item_1, objects);
|
||||
this.Currencys = objects;
|
||||
this.tempCurrency = new ArrayList<Currency>(objects);
|
||||
this.suggestions = new ArrayList<Currency>(objects);
|
||||
|
||||
|
@ -49,7 +49,7 @@ public class HomeLayoutGenerator {
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
public CardView getInfoLayout(final Currency currency, int chartColor)
|
||||
public CardView getInfoLayout(final Currency currency)
|
||||
//public CardView getInfoLayout(int index)
|
||||
{
|
||||
CardView mainCard = new CardView(context);
|
||||
@ -132,7 +132,7 @@ public class HomeLayoutGenerator {
|
||||
|
||||
mainLinear.addView(separatorLayout);
|
||||
|
||||
mainLinear.addView(generateChart(currency, chartLayout, chartColor));
|
||||
mainLinear.addView(generateChart(currency, chartLayout));
|
||||
|
||||
mainLinear.setClickable(false);
|
||||
|
||||
@ -180,13 +180,13 @@ public class HomeLayoutGenerator {
|
||||
}
|
||||
}*/
|
||||
|
||||
private View generateChart(Currency currency, LinearLayout chartLayout, int chartColor)
|
||||
private View generateChart(Currency currency, LinearLayout chartLayout)
|
||||
{
|
||||
View toReturn;
|
||||
|
||||
if(currency.getDayPriceHistory() != null)
|
||||
{
|
||||
LineChartView lineChartView = chartGenerator(currency.getDayPriceHistory(), chartColor);
|
||||
LineChartView lineChartView = chartGenerator(currency.getDayPriceHistory(), currency.getChartColor());
|
||||
chartLayout.setTag("chart_layout");
|
||||
chartLayout.addView(lineChartView);
|
||||
lineChartView.show();
|
||||
|
23
app/src/main/res/drawable/circular_progress_bar.xml
Normal file
23
app/src/main/res/drawable/circular_progress_bar.xml
Normal file
@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<rotate
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:fromDegrees="90"
|
||||
android:pivotX="50%"
|
||||
android:pivotY="50%"
|
||||
android:toDegrees="360">
|
||||
|
||||
<shape
|
||||
android:innerRadiusRatio="3"
|
||||
android:shape="ring"
|
||||
android:thicknessRatio="7.0">
|
||||
|
||||
<gradient
|
||||
android:centerColor="@color/colorAccent"
|
||||
android:endColor="@color/colorAccent"
|
||||
android:startColor="@color/colorAccent"
|
||||
android:angle="0"
|
||||
android:type="sweep"
|
||||
android:useLevel="false" />
|
||||
</shape>
|
||||
|
||||
</rotate>
|
@ -12,31 +12,58 @@
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginBottom="56dp">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/chartsLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<ScrollView
|
||||
android:id="@+id/svCharts"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/chartLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"/>
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
</ScrollView>
|
||||
|
||||
<ScrollView
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/infosLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/progressBar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
style="?android:attr/progressBarStyleLarge"
|
||||
android:layout_gravity="center"
|
||||
android:background="@drawable/circular_progress_bar" />
|
||||
|
||||
<!--<ScrollView
|
||||
android:id="@+id/svInfos"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<TextView
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:text="Infos"/>
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
</ScrollView>
|
||||
<ProgressBar
|
||||
android:id="@+id/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>
|
||||
|
||||
</ScrollView>-->
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<ScrollView
|
||||
android:id="@+id/svTransactions"
|
||||
|
16
app/src/main/res/layout/tooltip_layout.xml
Normal file
16
app/src/main/res/layout/tooltip_layout.xml
Normal file
@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/rounded_corners"
|
||||
android:gravity="center_horizontal">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/value"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:gravity="center"
|
||||
android:textColor="#ffffff"
|
||||
android:textSize="16sp"/>
|
||||
</RelativeLayout>
|
Loading…
Reference in New Issue
Block a user