From f17e3a0dc8fa222b58cc6fa5ce89908f4cbccd23 Mon Sep 17 00:00:00 2001 From: Tanguy Herbron Date: Thu, 1 Feb 2018 20:38:57 +0100 Subject: [PATCH] Currency parcelable for activity intent --- app/src/main/AndroidManifest.xml | 15 ++- .../Activities/CurrencyDetailsActivity.java | 106 +++++++++++++++++- .../coinfolio/Activities/HomeActivity.java | 51 +++++---- .../DataManagers/BalanceManager.java | 5 + .../DataManagers/CurrencyData/Currency.java | 48 +++++++- .../CurrencyData/CurrencyDataChart.java | 39 ++++++- .../LayoutManagers/HomeLayoutGenerator.java | 3 +- 7 files changed, 233 insertions(+), 34 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2c2db21..85cbf63 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -14,7 +14,8 @@ + android:theme="@style/AppTheme.NoActionBar" + android:screenOrientation="portrait"> @@ -23,12 +24,16 @@ - - + android:label="@string/title_activity_settings" + android:screenOrientation="portrait"/> + + + android:label="@string/title_activity_currency_details" + android:screenOrientation="portrait"/> \ No newline at end of file diff --git a/app/src/main/java/com/nauk/coinfolio/Activities/CurrencyDetailsActivity.java b/app/src/main/java/com/nauk/coinfolio/Activities/CurrencyDetailsActivity.java index dcdac32..eb8e70e 100644 --- a/app/src/main/java/com/nauk/coinfolio/Activities/CurrencyDetailsActivity.java +++ b/app/src/main/java/com/nauk/coinfolio/Activities/CurrencyDetailsActivity.java @@ -1,6 +1,8 @@ package com.nauk.coinfolio.Activities; +import android.content.ContentValues; import android.content.Intent; +import android.graphics.Color; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.design.widget.BottomNavigationView; @@ -17,7 +19,10 @@ import android.widget.ViewFlipper; import com.daimajia.swipe.SwipeLayout; import com.db.chart.model.LineSet; +import com.db.chart.renderer.AxisRenderer; import com.db.chart.view.LineChartView; +import com.nauk.coinfolio.DataManagers.CurrencyData.Currency; +import com.nauk.coinfolio.DataManagers.CurrencyData.CurrencyDataChart; import com.nauk.coinfolio.DataManagers.CurrencyData.Transaction; import com.nauk.coinfolio.DataManagers.DatabaseManager; import com.nauk.coinfolio.R; @@ -38,7 +43,8 @@ public class CurrencyDetailsActivity extends AppCompatActivity { private LinearLayout transactionLayout; private LinearLayout chartLayout; private DatabaseManager databaseManager; - private String symbol; + //private String symbol; + private Currency currency; private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener = new BottomNavigationView.OnNavigationItemSelectedListener() { @@ -67,7 +73,8 @@ public class CurrencyDetailsActivity extends AppCompatActivity { Intent intent = getIntent(); - symbol = intent.getStringExtra("symbol"); + //symbol = intent.getStringExtra("symbol"); + currency = (Currency) intent.getParcelableExtra("currency"); databaseManager = new DatabaseManager(this); @@ -77,10 +84,14 @@ public class CurrencyDetailsActivity extends AppCompatActivity { drawTransactionList(); - //drawChart(); + drawChart(); + + setTitle(currency.getName()); BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation); navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener); + + Log.d("coinfolio", "Color received : " + currency.getChartColor()); } private void drawChart() @@ -93,17 +104,102 @@ public class CurrencyDetailsActivity extends AppCompatActivity { Calendar calendar = Calendar.getInstance(Locale.FRANCE); String hour; String minute; + + List dataChartList = currency.getDayPriceHistory(); + + valMin = dataChartList.get(0).getOpen(); + valMax = dataChartList.get(0).getOpen(); + + for(int i = 1; i < dataChartList.size(); i++) + { + if(valMax < dataChartList.get(i).getOpen()) + { + valMax = dataChartList.get(i).getOpen(); + } + + if(valMin > dataChartList.get(i).getOpen()) + { + valMin = dataChartList.get(i).getOpen(); + } + } + + if(valMax == valMin) + { + valMin = 0; + valMax *= 2; + } + + chartView.setAxisBorderValues((float) valMin, (float) valMax); + chartView.setYLabels(AxisRenderer.LabelPosition.OUTSIDE); + chartView.setYAxis(false); + chartView.setXAxis(false); + + for(int i = 0; i < dataChartList.size(); i+=10) + { + if(counter == 30) + { + calendar.setTimeInMillis(dataChartList.get(i).getTimestamp()*1000); + + hour = String.valueOf(calendar.get(Calendar.HOUR_OF_DAY)); + minute = String.valueOf(calendar.get(Calendar.MINUTE)); + + if(hour.length() < 2) + { + hour = "0" + hour; + } + + if(minute.length() < 2) + { + minute = "0" + minute; + } + + lineSet.addPoint(hour + ":" + minute, (float) dataChartList.get(i).getOpen()); + counter = 0; + } + else + { + counter++; + lineSet.addPoint("", (float) dataChartList.get(i).getOpen()); + } + } + + lineSet.setSmooth(true); + lineSet.setThickness(4); + lineSet.setFill(getColorWitchAlpha(currency.getChartColor(), 0.5f)); + lineSet.setColor(currency.getChartColor()); + + chartView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 500)); + + chartView.addData(lineSet); + + chartLayout.addView(chartView); + + Log.d("coinfolio", "Color : " + currency.getChartColor()); + + chartView.show(); + } + + private int getColorWitchAlpha(int color, float ratio) + { + int transColor; + int alpha = Math.round(Color.alpha(color) * ratio); + int r = Color.red(color); + int g = Color.green(color); + int b = Color.blue(color); + + transColor = Color.argb(alpha, r, g, b); + + return transColor; } private void drawTransactionList() { transactionLayout.removeAllViews(); - List transactionList = databaseManager.getCurrencyTransactions(symbol); + List transactionList = databaseManager.getCurrencyTransactions(currency.getSymbol()); for(int i = 0; i < transactionList.size(); i++) { - Log.d("coinfoliobeta", "test"); View view = LayoutInflater.from(this).inflate(R.layout.custom_transaction_row, null); TextView amountTxtView = view.findViewById(R.id.amountPurchased); TextView valueTxtView = view.findViewById(R.id.puchasedValue); diff --git a/app/src/main/java/com/nauk/coinfolio/Activities/HomeActivity.java b/app/src/main/java/com/nauk/coinfolio/Activities/HomeActivity.java index 2a9e2e8..7bd070e 100644 --- a/app/src/main/java/com/nauk/coinfolio/Activities/HomeActivity.java +++ b/app/src/main/java/com/nauk/coinfolio/Activities/HomeActivity.java @@ -234,23 +234,7 @@ public class HomeActivity extends AppCompatActivity { if(!currency.getSymbol().equals("USD") && ((currency.getBalance() * currency.getValue()) > 0.001 || currency.getDayPriceHistory() == null)) { - if(currency.getIcon() != null) - { - Palette.Builder builder = Palette.from(currency.getIcon()); - - currency.setChartColor(builder.generate().getDominantColor(0)); - - //layoutGenerator.addCurrencyToList(currency); - - currencyLayout.addView(layoutGenerator.getInfoLayout(currency, builder.generate().getDominantColor(0))); - //currencyLayout.addView(layoutGenerator.getInfoLayout(i)); - } - else - { - //currency.setChartColor(12369084); - currencyLayout.addView(layoutGenerator.getInfoLayout(currency, 12369084)); - //currencyLayout.addView(layoutGenerator.getInfoLayout(i)); - } + currencyLayout.addView(layoutGenerator.getInfoLayout(currency, currency.getChartColor())); } } } @@ -290,7 +274,7 @@ public class HomeActivity extends AppCompatActivity { return null; } - private void countCoins(boolean isCoin, boolean isIcon) + private void countCoins(boolean isCoin, boolean isDetails) { float totalValue = 0; float totalFluctuation = 0; @@ -300,11 +284,17 @@ public class HomeActivity extends AppCompatActivity { coinCounter++; } - if(isIcon) + if(isDetails) { iconChecker = true; } + + for(int i = 0; i < coinCounter; i++) + { + balanceManager.getTotalBalance().get(i).setIcon(getBitmapFromURL(balanceManager.getIconUrl(balanceManager.getTotalBalance().get(i).getSymbol()))); + } + if(balanceManager.getTotalBalance() != null) { if(coinCounter == balanceManager.getTotalBalance().size()-1 && iconChecker) @@ -319,18 +309,37 @@ public class HomeActivity extends AppCompatActivity { 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()))); + //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()))); + //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)); } diff --git a/app/src/main/java/com/nauk/coinfolio/DataManagers/BalanceManager.java b/app/src/main/java/com/nauk/coinfolio/DataManagers/BalanceManager.java index a919bb2..1978bd1 100644 --- a/app/src/main/java/com/nauk/coinfolio/DataManagers/BalanceManager.java +++ b/app/src/main/java/com/nauk/coinfolio/DataManagers/BalanceManager.java @@ -268,6 +268,11 @@ public class BalanceManager { return iconUrlList.get(symbol); } + public String getCurrencyName(String symbol) + { + return coinList.get(symbol); + } + private void processDetailResult(String response, final IconCallBack callBack) { response = response.substring(response.indexOf("\"Data\"") + 7, response.lastIndexOf("},\"Type\":100}")); diff --git a/app/src/main/java/com/nauk/coinfolio/DataManagers/CurrencyData/Currency.java b/app/src/main/java/com/nauk/coinfolio/DataManagers/CurrencyData/Currency.java index aef1f7d..a22f24d 100644 --- a/app/src/main/java/com/nauk/coinfolio/DataManagers/CurrencyData/Currency.java +++ b/app/src/main/java/com/nauk/coinfolio/DataManagers/CurrencyData/Currency.java @@ -1,7 +1,10 @@ package com.nauk.coinfolio.DataManagers.CurrencyData; import android.graphics.Bitmap; +import android.os.Parcel; +import android.os.Parcelable; +import java.util.ArrayList; import java.util.List; import static java.sql.Types.NULL; @@ -10,7 +13,7 @@ import static java.sql.Types.NULL; * Created by Tiji on 25/12/2017. */ -public class Currency { +public class Currency implements Parcelable { private String name; private String symbol; @@ -179,4 +182,47 @@ public class Currency { void onSuccess(Currency currency); } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(this.name); + dest.writeString(this.symbol); + dest.writeDouble(this.value); + dest.writeDouble(this.balance); + dest.writeFloat(this.dayFluctuationPercentage); + dest.writeDouble(this.dayFluctuation); + dest.writeList(this.dayPriceHistory); + dest.writeParcelable(this.icon, flags); + dest.writeInt(this.chartColor); + } + + protected Currency(Parcel in) { + this.name = in.readString(); + this.symbol = in.readString(); + this.value = in.readDouble(); + this.balance = in.readDouble(); + this.dayFluctuationPercentage = in.readFloat(); + this.dayFluctuation = in.readDouble(); + this.dayPriceHistory = new ArrayList(); + in.readList(this.dayPriceHistory, CurrencyDataChart.class.getClassLoader()); + this.icon = in.readParcelable(Bitmap.class.getClassLoader()); + this.chartColor = in.readInt(); + } + + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + @Override + public Currency createFromParcel(Parcel source) { + return new Currency(source); + } + + @Override + public Currency[] newArray(int size) { + return new Currency[size]; + } + }; } diff --git a/app/src/main/java/com/nauk/coinfolio/DataManagers/CurrencyData/CurrencyDataChart.java b/app/src/main/java/com/nauk/coinfolio/DataManagers/CurrencyData/CurrencyDataChart.java index df11263..31cc654 100644 --- a/app/src/main/java/com/nauk/coinfolio/DataManagers/CurrencyData/CurrencyDataChart.java +++ b/app/src/main/java/com/nauk/coinfolio/DataManagers/CurrencyData/CurrencyDataChart.java @@ -1,10 +1,13 @@ package com.nauk.coinfolio.DataManagers.CurrencyData; +import android.os.Parcel; +import android.os.Parcelable; + /** * Created by Tiji on 05/01/2018. */ -public class CurrencyDataChart { +public class CurrencyDataChart implements Parcelable { long timestamp; double close; @@ -35,4 +38,38 @@ public class CurrencyDataChart { { return timestamp; } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeLong(this.timestamp); + dest.writeDouble(this.close); + dest.writeDouble(this.high); + dest.writeDouble(this.low); + dest.writeDouble(this.open); + } + + protected CurrencyDataChart(Parcel in) { + this.timestamp = in.readLong(); + this.close = in.readDouble(); + this.high = in.readDouble(); + this.low = in.readDouble(); + this.open = in.readDouble(); + } + + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + @Override + public CurrencyDataChart createFromParcel(Parcel source) { + return new CurrencyDataChart(source); + } + + @Override + public CurrencyDataChart[] newArray(int size) { + return new CurrencyDataChart[size]; + } + }; } diff --git a/app/src/main/java/com/nauk/coinfolio/LayoutManagers/HomeLayoutGenerator.java b/app/src/main/java/com/nauk/coinfolio/LayoutManagers/HomeLayoutGenerator.java index 1cd4bff..3139711 100644 --- a/app/src/main/java/com/nauk/coinfolio/LayoutManagers/HomeLayoutGenerator.java +++ b/app/src/main/java/com/nauk/coinfolio/LayoutManagers/HomeLayoutGenerator.java @@ -78,7 +78,8 @@ public class HomeLayoutGenerator { //switchingView(view); view.animate(); Intent intent = new Intent(context.getApplicationContext(), CurrencyDetailsActivity.class); - intent.putExtra("symbol", currency.getSymbol()); + //intent.putExtra("symbol", currency.getSymbol()); + intent.putExtra("currency", currency); context.getApplicationContext().startActivity(intent); } });