Update Piechart colors

This commit is contained in:
Tanguy Herbron 2018-03-12 13:39:05 +01:00
parent a306f48c02
commit 511d239f16
5 changed files with 122 additions and 33 deletions

View File

@ -57,9 +57,15 @@ import com.nauk.coinfolio.R;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Random;
//Use WilliamChart for charts https://github.com/diogobernardino/WilliamChart
@ -94,6 +100,8 @@ public class HomeActivity extends AppCompatActivity {
private Runnable updateRunnable;
private ViewFlipper viewFlipper;
private HashMap<String, Integer> dominantCurrenciesColors;
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@ -246,6 +254,29 @@ public class HomeActivity extends AppCompatActivity {
lastTimestamp = 0;
setupNavBar(savedInstanceState);
setupDominantCurrenciesColors();
}
private void setupDominantCurrenciesColors()
{
dominantCurrenciesColors = new HashMap<>();
dominantCurrenciesColors.put("BTC", -489456);
dominantCurrenciesColors.put("ETH", -13619152);
dominantCurrenciesColors.put("XRP", -16744256);
dominantCurrenciesColors.put("BCH", -1011696);
dominantCurrenciesColors.put("LTC", -4671304);
dominantCurrenciesColors.put("ADA", -16773080);
dominantCurrenciesColors.put("NEO", -9390048);
dominantCurrenciesColors.put("XLM", -11509656);
dominantCurrenciesColors.put("XMR", -499712);
dominantCurrenciesColors.put("EOS", -1513240);
dominantCurrenciesColors.put("IOT", -1513240);
dominantCurrenciesColors.put("DASH", -15175496);
dominantCurrenciesColors.put("XEM", -7829368);
dominantCurrenciesColors.put("TRX", -7829360);
dominantCurrenciesColors.put("ETC", -10448784);
}
private void setupNavBar(Bundle savedInstanceState)
@ -269,6 +300,7 @@ public class HomeActivity extends AppCompatActivity {
nav.changeCurrentItem(-1);
findViewById(R.id.toolbar_layout).setFocusable(true);
findViewById(R.id.nestedScrollViewLayout).setNestedScrollingEnabled(true);
((AppBarLayout) findViewById(R.id.app_bar)).setExpanded(true, true);
@ -284,6 +316,7 @@ public class HomeActivity extends AppCompatActivity {
//0 : Unknown
//1 : Market cap
findViewById(R.id.toolbar_layout).setFocusable(false);
((AppBarLayout) findViewById(R.id.app_bar)).setExpanded(false, true);
findViewById(R.id.nestedScrollViewLayout).setNestedScrollingEnabled(false);
@ -421,8 +454,6 @@ public class HomeActivity extends AppCompatActivity {
private void getBitmapFromURL(String src, IconCallBack callBack) {
Bitmap result;
Log.d("coinfolio", "Downloading bitmap");
try {
java.net.URL url = new java.net.URL(src);
HttpURLConnection connection = (HttpURLConnection) url
@ -523,10 +554,15 @@ public class HomeActivity extends AppCompatActivity {
if(marketCapCounter == 2)
{
setupTextViewMarketCap();
findViewById(R.id.progressBarMarketCap).setVisibility(View.GONE);
findViewById(R.id.layoutProgressMarketCap).setVisibility(View.VISIBLE);
List<PieEntry> entries = new ArrayList<>();
ArrayList<Integer> colors = new ArrayList<>();
PieChart pieChart = findViewById(R.id.marketCapPieChart);
float otherCurrenciesDominance = 0;
@ -534,14 +570,16 @@ public class HomeActivity extends AppCompatActivity {
for(Iterator i = marketCapManager.getDominance().keySet().iterator(); i.hasNext(); )
{
String key = (String) i.next();
Log.d(getResources().getString(R.string.debug), "Sym : " + key + " " + marketCapManager.getDominance().get(key));
entries.add(new PieEntry(marketCapManager.getDominance().get(key), key));
otherCurrenciesDominance += marketCapManager.getDominance().get(key);
colors.add(dominantCurrenciesColors.get(key));
}
entries.add(new PieEntry(100-otherCurrenciesDominance, "Others"));
colors.add(-12369084);
PieDataSet set = new PieDataSet(entries, "Market Cap Dominance");
set.setColors(colors);
set.setSliceSpace(1);
PieData data = new PieData(set);
pieChart.setData(data);
@ -550,21 +588,28 @@ public class HomeActivity extends AppCompatActivity {
pieChart.setTouchEnabled(false);
pieChart.getDescription().setEnabled(false);
pieChart.getLegend().setEnabled(false);
pieChart.setCenterText(generateCenterSpannableText());
pieChart.setVisibility(View.VISIBLE);
pieChart.invalidate(); // refresh
}
}
private void setupTextViewMarketCap()
{
DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.UK);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
symbols.setGroupingSeparator(' ');
formatter.setDecimalFormatSymbols(symbols);
((TextView) findViewById(R.id.marketCapTextView)).setText(getResources().getString(R.string.market_cap_textview, formatter.format(marketCapManager.getMarketCap())));
((TextView) findViewById(R.id.dayVolumeTotalMarketCap)).setText(getResources().getString(R.string.volume_market_cap_textview, formatter.format(marketCapManager.getDayVolume())));
}
private SpannableString generateCenterSpannableText() {
SpannableString s = new SpannableString("MPAndroidChart\ndeveloped by Philipp Jahoda");
s.setSpan(new RelativeSizeSpan(1.7f), 0, 14, 0);
s.setSpan(new StyleSpan(Typeface.NORMAL), 14, s.length() - 15, 0);
s.setSpan(new ForegroundColorSpan(Color.GRAY), 14, s.length() - 15, 0);
s.setSpan(new RelativeSizeSpan(.8f), 14, s.length() - 15, 0);
s.setSpan(new StyleSpan(Typeface.ITALIC), s.length() - 14, s.length(), 0);
s.setSpan(new ForegroundColorSpan(ColorTemplate.getHoloBlue()), s.length() - 14, s.length(), 0);
SpannableString s = new SpannableString("Market Capitalization Dominance");
return s;
}
@ -728,6 +773,7 @@ public class HomeActivity extends AppCompatActivity {
Palette.Builder builder = Palette.from(localCurrency.getIcon());
localCurrency.setChartColor(builder.generate().getDominantColor(0));
}
else
{

View File

@ -239,23 +239,26 @@ public class BalanceManager {
private void mergeBalanceTotal(List<Currency> balance)
{
for(int i = 0; i < balance.size(); i++)
if(balance != null)
{
boolean isIn = false;
for(int j = 0; j < totalBalance.size(); j++)
for(int i = 0; i < balance.size(); i++)
{
if(balance.get(i).getSymbol().equals(totalBalance.get(j).getSymbol()))
boolean isIn = false;
for(int j = 0; j < totalBalance.size(); j++)
{
totalBalance.get(j).setBalance(totalBalance.get(j).getBalance() + balance.get(i).getBalance());
if(balance.get(i).getSymbol().equals(totalBalance.get(j).getSymbol()))
{
totalBalance.get(j).setBalance(totalBalance.get(j).getBalance() + balance.get(i).getBalance());
isIn = true;
isIn = true;
}
}
}
if(!isIn)
{
totalBalance.add(balance.get(i));
if(!isIn)
{
totalBalance.add(balance.get(i));
}
}
}
}

View File

@ -28,6 +28,7 @@ public class MarketCapManager {
private RequestQueue requestQueue;
private String topRequestResult[];
private long marketCap;
private long dayVolume;
public MarketCapManager(android.content.Context context)
{
@ -88,6 +89,8 @@ public class MarketCapManager {
JSONObject jsonObject = new JSONObject(response);
marketCap = new BigDecimal(jsonObject.getString("total_market_cap_usd")).longValue();
dayVolume = new BigDecimal(jsonObject.getString("total_24h_volume_usd")).longValue();
} catch (JSONException e) {
e.printStackTrace();
}
@ -111,6 +114,11 @@ public class MarketCapManager {
return dominance;
}
public long getDayVolume()
{
return dayVolume;
}
private void processTopCurrencies(String response)
{
response = response.substring(response.indexOf('[')+1, response.lastIndexOf(']'));
@ -124,7 +132,7 @@ public class MarketCapManager {
JSONObject jsonObject = new JSONObject(topRequestResult[i]);
Log.d("coinfolio", "Symbol : " + jsonObject.getString("symbol") + " " + jsonObject.getString("rank"));
//Log.d("coinfolio", "Symbol : " + jsonObject.getString("symbol") + " " + jsonObject.getString("rank"));
} catch (JSONException e) {
e.printStackTrace();
@ -132,6 +140,11 @@ public class MarketCapManager {
}
}
public long getMarketCap()
{
return marketCap;
}
public interface VolleyCallBack
{
void onSuccess();

View File

@ -66,7 +66,8 @@
<LinearLayout
android:id="@+id/layoutMarketCap"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:orientation="vertical">
<!--<TextView
android:layout_width="match_parent"
@ -75,25 +76,47 @@
android:layout_gravity="center_vertical"
android:gravity="center_horizontal"/>-->
<ProgressBar
android:id="@+id/progressBarMarketCap"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleLarge"
android:layout_gravity="center"
android:background="@drawable/circular_progress_bar" />
<LinearLayout
android:id="@+id/layoutProgressMarketCap"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="visible"
android:visibility="gone"
android:orientation="vertical">
<ProgressBar
android:id="@+id/progressBarMarketCap"
<TextView
android:id="@+id/marketCapTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleLarge"
android:layout_gravity="center"
android:background="@drawable/circular_progress_bar" />
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:layout_marginRight="10dp"
android:layout_marginBottom="5dp"
android:textSize="20dp"
android:gravity="center_horizontal"/>
<TextView
android:id="@+id/dayVolumeTotalMarketCap"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="5dp"
android:layout_marginRight="10dp"
android:layout_marginBottom="10dp"
android:textSize="18dp"
android:gravity="center_horizontal"/>
<com.github.mikephil.charting.charts.PieChart
android:id="@+id/marketCapPieChart"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone"/>
android:layout_height="350dp"/>
</LinearLayout>

View File

@ -149,4 +149,8 @@
<string name="fingerprint_dialog_cancel">Cancel</string>
<string name="fingerprint_dialog_title">Verify your fingerprint to continue</string>
<string name="market_cap_textview">Total Market Capitalization :\nUS$%1$s</string>
<string name="volume_market_cap_textview">24h volume :\nUS$%1$s</string>
</resources>