From f0c406287123af6cae9cd0b80bf87191041c10b3 Mon Sep 17 00:00:00 2001 From: Tanguy Herbron Date: Sun, 15 Apr 2018 20:08:17 +0200 Subject: [PATCH] Several fixes/improvements - Add Watchlist charts - Add Detail Activity for Watchlist coins - Add padding for Watchlist - Remove superfluous 0s when displaying balance/price - Fix Summary Detail Button not changing form - Fix app crash when Marketcap fragment is not fully loaded - Fix separate Fragment update obligations - Fix 0 coin in Detail activity when coming from Watchlist --- .../Activities/CurrencyDetailsActivity.java | 14 +- .../Activities/CurrencySelectionActivity.java | 4 +- .../coinfolio/Activities/HomeActivity.java | 11 +- .../MarketCapitalization.java | 20 +- .../HomeActivityFragments/Summary.java | 84 ++++---- .../HomeActivityFragments/Watchlist.java | 196 +++++++++++++++++- .../Activities/RecordTransactionActivity.java | 6 +- .../Activities/SettingsActivity.java | 4 +- .../DataManagers/PreferencesManager.java | 29 ++- .../LayoutManagers/HomeLayoutGenerator.java | 29 +-- .../java/com/nauk/coinfolio/PagerAdapter.java | 2 + .../main/res/layout/cardview_watchlist.xml | 97 ++++----- .../fragment_marketcap_homeactivity.xml | 2 +- .../layout/fragment_summary_homeactivity.xml | 2 +- .../fragment_watchlist_homeactivity.xml | 5 +- 15 files changed, 356 insertions(+), 149 deletions(-) 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 db1d3f4..2cabb4d 100644 --- a/app/src/main/java/com/nauk/coinfolio/Activities/CurrencyDetailsActivity.java +++ b/app/src/main/java/com/nauk/coinfolio/Activities/CurrencyDetailsActivity.java @@ -202,8 +202,6 @@ public class CurrencyDetailsActivity extends AppCompatActivity { TradeUpdater updater = new TradeUpdater(); updater.execute(); - - Log.d("coinfolio", "Details loaded for " + currency.getId()); } private void updateInfoTab() @@ -213,7 +211,14 @@ public class CurrencyDetailsActivity extends AppCompatActivity { private void setupActionBar() { - setTitle(" " + currency.getName() + " | " + currency.getBalance()); + if(currency.getBalance() == 0) + { + setTitle(" " + currency.getName()); + } + else + { + setTitle(" " + currency.getName() + " | " + currency.getBalance()); + } getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_USE_LOGO); @@ -584,7 +589,6 @@ public class CurrencyDetailsActivity extends AppCompatActivity { private String getDate(long timeStamp){ try{ - //SimpleDateFormat sdf = new SimpleDateFormat(" HH:mm dd/MM/yyyy"); SimpleDateFormat sdf = new SimpleDateFormat(" HH:mm dd/MM/yyyy", Locale.getDefault()); Date netDate = (new Date(timeStamp)); return sdf.format(netDate); @@ -833,7 +837,7 @@ public class CurrencyDetailsActivity extends AppCompatActivity { deleteLayout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - preferencesManager.setMustUpdate(true); + preferencesManager.setMustUpdateSummary(true); databaseManager.deleteTransactionFromId(Integer.parseInt(view.getTag().toString())); drawTransactionList(); hasBeenModified = true; diff --git a/app/src/main/java/com/nauk/coinfolio/Activities/CurrencySelectionActivity.java b/app/src/main/java/com/nauk/coinfolio/Activities/CurrencySelectionActivity.java index ddacfd5..da5c84c 100644 --- a/app/src/main/java/com/nauk/coinfolio/Activities/CurrencySelectionActivity.java +++ b/app/src/main/java/com/nauk/coinfolio/Activities/CurrencySelectionActivity.java @@ -7,8 +7,6 @@ import android.os.Looper; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.CardView; import android.text.TextUtils; -import android.util.Log; -import android.view.Menu; import android.view.View; import android.view.Window; import android.view.WindowManager; @@ -100,7 +98,7 @@ public class CurrencySelectionActivity extends AppCompatActivity implements Sear DatabaseManager databaseManager = new DatabaseManager(getApplicationContext()); databaseManager.addCurrencyToWatchlist(selectedCurrency); - preferencesManager.setMustUpdate(true); + preferencesManager.setMustUpdateWatchlist(true); } else { 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 25fc772..16f734e 100644 --- a/app/src/main/java/com/nauk/coinfolio/Activities/HomeActivity.java +++ b/app/src/main/java/com/nauk/coinfolio/Activities/HomeActivity.java @@ -93,12 +93,14 @@ public class HomeActivity extends AppCompatActivity { switch (item.getItemId()) { case R.id.navigation_watchlist: + ((AppBarLayout) findViewById(R.id.app_bar)).setExpanded(false, true); viewPager.setCurrentItem(0); break; case R.id.navigation_currencies_list: viewPager.setCurrentItem(1); break; case R.id.navigation_market_cap: + ((AppBarLayout) findViewById(R.id.app_bar)).setExpanded(false, true); viewPager.setCurrentItem(2); break; } @@ -125,10 +127,16 @@ public class HomeActivity extends AppCompatActivity { final PagerAdapter adapter = new PagerAdapter(getSupportFragmentManager(), 3); viewPager.setAdapter(adapter); + viewPager.setOffscreenPageLimit(2); viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { bottomNavigationView.getMenu().getItem(position).setChecked(true); + + if(position % 2 == 0) + { + ((AppBarLayout) findViewById(R.id.app_bar)).setExpanded(false, true); + } } @Override @@ -165,11 +173,8 @@ public class HomeActivity extends AppCompatActivity { //overridePendingTransition(R.anim.activity_enter, R.anim.activity_exit); } }); - } - - private void switchMainView() { Log.d("coinfolio", "Should"); diff --git a/app/src/main/java/com/nauk/coinfolio/Activities/HomeActivityFragments/MarketCapitalization.java b/app/src/main/java/com/nauk/coinfolio/Activities/HomeActivityFragments/MarketCapitalization.java index 56e1134..cdc44f6 100644 --- a/app/src/main/java/com/nauk/coinfolio/Activities/HomeActivityFragments/MarketCapitalization.java +++ b/app/src/main/java/com/nauk/coinfolio/Activities/HomeActivityFragments/MarketCapitalization.java @@ -2,8 +2,10 @@ package com.nauk.coinfolio.Activities.HomeActivityFragments; import android.annotation.SuppressLint; import android.graphics.Color; +import android.support.design.widget.AppBarLayout; import android.support.v4.app.Fragment; import android.os.Bundle; +import android.support.v4.view.ViewPager; import android.support.v4.widget.SwipeRefreshLayout; import android.text.SpannableString; import android.util.Log; @@ -11,6 +13,7 @@ import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; +import android.view.ViewParent; import android.widget.TextView; import com.github.mikephil.charting.charts.PieChart; @@ -53,7 +56,7 @@ public class MarketCapitalization extends Fragment { setupDominantCurrenciesColors(); marketCapManager = new MarketCapManager(getContext()); - refreshLayout = view.findViewById(R.id.swiperefresh); + refreshLayout = view.findViewById(R.id.swiperefreshmarketcap); refreshLayout.setOnRefreshListener( new SwipeRefreshLayout.OnRefreshListener() { @@ -72,6 +75,12 @@ public class MarketCapitalization extends Fragment { return view; } + @Override + public void onResume() + { + super.onResume(); + } + private void setupDominantCurrenciesColors() { dominantCurrenciesColors = new HashMap<>(); @@ -196,11 +205,13 @@ public class MarketCapitalization extends Fragment { { case MotionEvent.ACTION_DOWN: refreshLayout.setEnabled(false); + getActivity().findViewById(R.id.viewPager).setEnabled(false); break; case MotionEvent.ACTION_MOVE: break; default: refreshLayout.setEnabled(true); + getActivity().findViewById(R.id.viewPager).setEnabled(true); break; } return false; @@ -210,8 +221,7 @@ public class MarketCapitalization extends Fragment { pieChart.getDescription().setEnabled(false); pieChart.getLegend().setEnabled(false); pieChart.setCenterText(generateCenterSpannableText()); - pieChart.invalidate(); // refresh - + pieChart.invalidate(); } private SpannableString generateCenterSpannableText() { @@ -228,8 +238,8 @@ public class MarketCapitalization extends Fragment { symbols.setGroupingSeparator(' '); formatter.setDecimalFormatSymbols(symbols); - ((TextView) view.findViewById(R.id.marketCapTextView)).setText(getResources().getString(R.string.market_cap_textview, formatter.format(marketCapManager.getMarketCap()))); + ((TextView) view.findViewById(R.id.marketCapTextView)).setText(getActivity().getResources().getString(R.string.market_cap_textview, formatter.format(marketCapManager.getMarketCap()))); - ((TextView) view.findViewById(R.id.dayVolumeTotalMarketCap)).setText(getResources().getString(R.string.volume_market_cap_textview, formatter.format(marketCapManager.getDayVolume()))); + ((TextView) view.findViewById(R.id.dayVolumeTotalMarketCap)).setText(getActivity().getResources().getString(R.string.volume_market_cap_textview, formatter.format(marketCapManager.getDayVolume()))); } } diff --git a/app/src/main/java/com/nauk/coinfolio/Activities/HomeActivityFragments/Summary.java b/app/src/main/java/com/nauk/coinfolio/Activities/HomeActivityFragments/Summary.java index b06ae5e..090f8f4 100644 --- a/app/src/main/java/com/nauk/coinfolio/Activities/HomeActivityFragments/Summary.java +++ b/app/src/main/java/com/nauk/coinfolio/Activities/HomeActivityFragments/Summary.java @@ -9,7 +9,6 @@ import android.os.AsyncTask; import android.os.Handler; import android.os.Looper; import android.support.design.widget.CollapsingToolbarLayout; -import android.support.design.widget.Snackbar; import android.support.v4.app.Fragment; import android.os.Bundle; import android.support.v4.widget.SwipeRefreshLayout; @@ -19,6 +18,7 @@ import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.Window; import android.widget.Button; import android.widget.ImageButton; import android.widget.LinearLayout; @@ -27,7 +27,6 @@ import android.widget.TextView; import com.nauk.coinfolio.Activities.CurrencySelectionActivity; import com.nauk.coinfolio.Activities.HomeActivity; -import com.nauk.coinfolio.Activities.SettingsActivity; import com.nauk.coinfolio.DataManagers.BalanceManager; import com.nauk.coinfolio.DataManagers.CurrencyData.Currency; import com.nauk.coinfolio.DataManagers.PreferencesManager; @@ -45,7 +44,6 @@ import java.util.List; public class Summary extends Fragment { - private boolean isDetailed; private LinearLayout currencyLayout; private PreferencesManager preferencesManager; private BalanceManager balanceManager; @@ -76,12 +74,10 @@ public class Summary extends Fragment { preferencesManager = new PreferencesManager(getActivity()); balanceManager = new BalanceManager(getActivity()); layoutGenerator = new HomeLayoutGenerator(getActivity()); - refreshLayout = view.findViewById(R.id.swiperefresh); + refreshLayout = view.findViewById(R.id.swiperefreshsummary); toolbarSubtitle = getActivity().findViewById(R.id.toolbarSubtitle); toolbarLayout = getActivity().findViewById(R.id.toolbar_layout); - isDetailed = preferencesManager.getDetailOption(); - totalValue = 0; totalFluctuation = 0; lastTimestamp = 0; @@ -133,6 +129,7 @@ public class Summary extends Fragment { detailsButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { + preferencesManager.setDetailOption(!preferencesManager.getDetailOption()); updateViewButtonIcon(); switchView(); } @@ -140,18 +137,45 @@ public class Summary extends Fragment { updateTitle(); - generateSplashScreen(); - updateAll(true); + generateSplashScreen(); + return view; } + private void generateSplashScreen() + { + LinearLayout loadingLayout = new LinearLayout(getActivity()); + + loadingLayout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); + loadingLayout.setGravity(Gravity.CENTER); + loadingLayout.setOrientation(LinearLayout.VERTICAL); + + loadingDialog = new Dialog(getActivity(), android.R.style.Theme_Black_NoTitleBar_Fullscreen); + + TextView txtView = new TextView(getActivity()); + txtView.setText("Loading data..."); + txtView.setTextSize(20); + txtView.setGravity(Gravity.CENTER); + txtView.setTextColor(this.getResources().getColor(R.color.cardview_light_background)); + + ProgressBar progressBar = new ProgressBar(getActivity()); + progressBar.setIndeterminate(true); + + loadingLayout.setBackgroundColor(getActivity().getResources().getColor(R.color.colorPrimaryDark)); + loadingLayout.addView(txtView); + loadingLayout.addView(progressBar); + + loadingDialog.setContentView(loadingLayout); + loadingDialog.show(); + } + @Override public void onResume() { super.onResume(); - updateAll(preferencesManager.mustUpdate()); + updateAll(preferencesManager.mustUpdateSummary()); updateViewButtonIcon(); @@ -207,45 +231,14 @@ public class Summary extends Fragment { totalFluctuation = 0; } - private void generateSplashScreen() - { - LinearLayout loadingLayout = new LinearLayout(getActivity()); - - loadingLayout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); - loadingLayout.setGravity(Gravity.CENTER); - loadingLayout.setOrientation(LinearLayout.VERTICAL); - - loadingDialog = new Dialog(getActivity(), android.R.style.Theme_Black_NoTitleBar_Fullscreen); - - TextView txtView = new TextView(getActivity()); - txtView.setText("Loading data..."); - txtView.setTextSize(20); - txtView.setGravity(Gravity.CENTER); - txtView.setTextColor(this.getResources().getColor(R.color.cardview_light_background)); - - ProgressBar progressBar = new ProgressBar(getActivity()); - progressBar.setIndeterminate(true); - - loadingLayout.setBackgroundColor(this.getResources().getColor(R.color.colorPrimaryDark)); - loadingLayout.addView(txtView); - loadingLayout.addView(progressBar); - - loadingDialog.setContentView(loadingLayout); - loadingDialog.show(); - } - private void switchView() { - if(isDetailed) + if(preferencesManager.getDetailOption()) { - isDetailed = false; - adaptView(); } else { - isDetailed = true; - adaptView(); } } @@ -260,7 +253,7 @@ public class Summary extends Fragment { if(!currency.getSymbol().equals("USD") && ((currency.getBalance() * currency.getValue()) > 0.001 || currency.getHistoryMinutes() == null)) { - currencyLayout.addView(layoutGenerator.getInfoLayout(currency, isDetailed, totalValue, preferencesManager.isBalanceHidden())); + currencyLayout.addView(layoutGenerator.getInfoLayout(currency, preferencesManager.getDetailOption(), totalValue, preferencesManager.isBalanceHidden())); } } } @@ -453,9 +446,11 @@ public class Summary extends Fragment { Currency currency = balanceManager.getTotalBalance().get(i); if(!currency.getSymbol().equals("USD") && (currency.getBalance() * currency.getValue()) > 0.001) { - currencyLayout.addView(layoutGenerator.getInfoLayout(currency, isDetailed, totalValue, preferencesManager.isBalanceHidden())); + currencyLayout.addView(layoutGenerator.getInfoLayout(currency, preferencesManager.getDetailOption(), totalValue, preferencesManager.isBalanceHidden())); } } + + adaptView(); } }); } @@ -502,7 +497,6 @@ public class Summary extends Fragment { refreshLayout.setRefreshing(false); refreshCurrencyList(); handler.removeCallbacks(updateRunnable); - adaptView(); } } @@ -536,12 +530,10 @@ public class Summary extends Fragment { if(preferencesManager.getDetailOption()) { imgButton.setBackground(this.getResources().getDrawable(R.drawable.ic_unfold_less_black_24dp)); - preferencesManager.setDetailOption(false); } else { imgButton.setBackground(this.getResources().getDrawable(R.drawable.ic_details_black_24dp)); - preferencesManager.setDetailOption(true); } } diff --git a/app/src/main/java/com/nauk/coinfolio/Activities/HomeActivityFragments/Watchlist.java b/app/src/main/java/com/nauk/coinfolio/Activities/HomeActivityFragments/Watchlist.java index 74d0a62..8994fda 100644 --- a/app/src/main/java/com/nauk/coinfolio/Activities/HomeActivityFragments/Watchlist.java +++ b/app/src/main/java/com/nauk/coinfolio/Activities/HomeActivityFragments/Watchlist.java @@ -3,24 +3,40 @@ package com.nauk.coinfolio.Activities.HomeActivityFragments; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffColorFilter; +import android.graphics.drawable.Drawable; import android.os.AsyncTask; +import android.support.design.widget.AppBarLayout; import android.support.v4.app.Fragment; import android.os.Bundle; +import android.support.v4.view.ViewPager; import android.support.v4.widget.SwipeRefreshLayout; +import android.support.v7.graphics.Palette; +import android.support.v7.widget.CardView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.ViewParent; +import android.view.animation.Animation; +import android.view.animation.Transformation; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; -import android.widget.ScrollView; import android.widget.TextView; +import com.github.mikephil.charting.charts.LineChart; +import com.github.mikephil.charting.data.Entry; +import com.github.mikephil.charting.data.LineData; +import com.github.mikephil.charting.data.LineDataSet; +import com.nauk.coinfolio.Activities.CurrencyDetailsActivity; import com.nauk.coinfolio.Activities.CurrencySelectionActivity; import com.nauk.coinfolio.Activities.HomeActivity; import com.nauk.coinfolio.DataManagers.BalanceManager; import com.nauk.coinfolio.DataManagers.CurrencyData.Currency; +import com.nauk.coinfolio.DataManagers.CurrencyData.CurrencyDataChart; import com.nauk.coinfolio.DataManagers.CurrencyData.CurrencyDetailsList; import com.nauk.coinfolio.DataManagers.PreferencesManager; import com.nauk.coinfolio.DataManagers.WatchlistManager; @@ -32,6 +48,8 @@ import org.json.JSONObject; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; +import java.util.ArrayList; +import java.util.List; import java.util.Locale; import static java.lang.Math.abs; @@ -55,7 +73,7 @@ public class Watchlist extends Fragment { { view = inflater.inflate(R.layout.fragment_watchlist_homeactivity, container, false); - refreshLayout = view.findViewById(R.id.swiperefresh); + refreshLayout = view.findViewById(R.id.swiperefreshwatchlist); currencyDetailsList = new CurrencyDetailsList(getContext()); preferencesManager = new PreferencesManager(getContext()); @@ -85,12 +103,78 @@ public class Watchlist extends Fragment { return view; } + private void collapseView(View view) + { + collapse(view.findViewById(R.id.collapsableLayout)); + } + + private void extendView(View view) + { + expand(view.findViewById(R.id.collapsableLayout)); + view.findViewById(R.id.LineChartView).invalidate(); + } + + private static void expand(final View v) { + v.measure(CardView.LayoutParams.MATCH_PARENT, CardView.LayoutParams.WRAP_CONTENT); + final int targetHeight = v.getMeasuredHeight(); + + // Older versions of android (pre API 21) cancel animations for views with a height of 0. + v.getLayoutParams().height = 1; + v.setVisibility(View.VISIBLE); + Animation a = new Animation() + { + @Override + protected void applyTransformation(float interpolatedTime, Transformation t) { + v.getLayoutParams().height = interpolatedTime == 1 + ? CardView.LayoutParams.WRAP_CONTENT + : (int)(targetHeight * interpolatedTime); + v.requestLayout(); + } + + @Override + public boolean willChangeBounds() { + return true; + } + }; + + // 1dp/ms + a.setDuration((int)(targetHeight / v.getContext().getResources().getDisplayMetrics().density)); + v.startAnimation(a); + } + + private static void collapse(final View v) { + final int initialHeight = v.getMeasuredHeight(); + + Animation a = new Animation() + { + @Override + protected void applyTransformation(float interpolatedTime, Transformation t) { + if(interpolatedTime == 1){ + v.setVisibility(View.GONE); + }else{ + v.getLayoutParams().height = initialHeight - (int)(initialHeight * interpolatedTime); + v.requestLayout(); + } + } + + @Override + public boolean willChangeBounds() { + return true; + } + }; + + // 1dp/ms + a.setDuration((int)(initialHeight / v.getContext().getResources().getDisplayMetrics().density)); + v.startAnimation(a); + } + + @Override public void onResume() { super.onResume(); - updateWatchlist(preferencesManager.mustUpdate()); + updateWatchlist(preferencesManager.mustUpdateWatchlist()); } private void updateWatchlist(boolean mustUpdate) @@ -131,7 +215,7 @@ public class Watchlist extends Fragment { { ((LinearLayout) view.findViewById(R.id.linearLayoutWatchlist)).removeAllViews(); - for(Currency currency : watchlistManager.getWatchlist()) + for(final Currency currency : watchlistManager.getWatchlist()) { View card = LayoutInflater.from(getContext()).inflate(R.layout.cardview_watchlist, null); @@ -142,16 +226,42 @@ public class Watchlist extends Fragment { ((ImageView) card.findViewById(R.id.currencyIcon)).setImageBitmap(currency.getIcon()); ((TextView) card.findViewById(R.id.currencyValueTextView)).setText(getResources().getString(R.string.currencyDollarPlaceholder, numberConformer(currency.getValue()))); + Drawable arrowDrawable = ((ImageView) card.findViewById(R.id.detailsArrow)).getDrawable(); + arrowDrawable.mutate(); + arrowDrawable.setColorFilter(new PorterDuffColorFilter(currency.getChartColor(), PorterDuff.Mode.SRC_IN)); + arrowDrawable.invalidateSelf(); + updateColor(card, currency); card.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); card.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - Log.d("coinfolio", "Clicked !"); + if(view.findViewById(R.id.collapsableLayout).getVisibility() == View.VISIBLE) + { + collapseView(view); + } + else + { + extendView(view); + } } }); + card.findViewById(R.id.LineChartView).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent intent = new Intent(getActivity(), CurrencyDetailsActivity.class); + intent.putExtra("currency", currency); + getActivity().getApplicationContext().startActivity(intent); + } + }); + + if(currency.getHistoryMinutes() != null) + { + setupLineChart(card, currency); + } + ((LinearLayout) view.findViewById(R.id.linearLayoutWatchlist)).addView(card, 0); } @@ -161,6 +271,65 @@ public class Watchlist extends Fragment { } } } + private LineData generateData(Currency currency) + { + LineDataSet dataSet; + List dataChartList = currency.getHistoryMinutes(); + ArrayList values = new ArrayList<>(); + + Log.d("coinfolio", "Generating data for " + currency.getSymbol()); + for(int i = 0; i < dataChartList.size(); i+=10) + { + values.add(new Entry(i, (float) dataChartList.get(i).getOpen())); + } + + dataSet = new LineDataSet(values, "History"); + dataSet.setDrawIcons(false); + dataSet.setColor(currency.getChartColor()); + dataSet.setLineWidth(1); + dataSet.setDrawFilled(true); + dataSet.setFillColor(getColorWithAplha(currency.getChartColor(), 0.5f)); + dataSet.setFormLineWidth(1); + dataSet.setFormSize(15); + dataSet.setDrawCircles(false); + dataSet.setDrawValues(false); + dataSet.setHighlightEnabled(false); + + return new LineData(dataSet); + } + + private int getColorWithAplha(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 setupLineChart(View view, final Currency currency) + { + LineChart lineChart = view.findViewById(R.id.LineChartView); + + lineChart.setDrawGridBackground(false); + lineChart.setDrawBorders(false); + lineChart.setDrawMarkers(false); + lineChart.setDoubleTapToZoomEnabled(false); + lineChart.setPinchZoom(false); + lineChart.setScaleEnabled(false); + lineChart.setDragEnabled(false); + lineChart.getDescription().setEnabled(false); + lineChart.getAxisLeft().setEnabled(false); + lineChart.getAxisRight().setEnabled(false); + lineChart.getLegend().setEnabled(false); + lineChart.getXAxis().setEnabled(false); + lineChart.setViewPortOffsets(0, 0, 0, 0); + lineChart.setData(generateData(currency)); + } private void updateColor(View card, Currency currency) { @@ -215,6 +384,20 @@ public class Watchlist extends Fragment { callBack.onSuccess(result); } + private void updateChartColor(Currency currency) + { + if(currency.getIcon() != null) + { + Palette.Builder builder = Palette.from(currency.getIcon()); + + currency.setChartColor(builder.generate().getDominantColor(0)); + } + else + { + currency.setChartColor(12369084); + } + } + private class WatchlistUpdater extends AsyncTask { @Override @@ -225,7 +408,7 @@ public class Watchlist extends Fragment { @Override protected Void doInBackground(Void... voids) { - for(Currency currency : watchlistManager.getWatchlist()) + for(final Currency currency : watchlistManager.getWatchlist()) { currency.updateHistoryMinutes(getActivity(), new Currency.CurrencyCallBack() { @Override @@ -236,6 +419,7 @@ public class Watchlist extends Fragment { @Override public void onSuccess(Bitmap bitmapIcon) { sucessCurrency.setIcon(bitmapIcon); + updateChartColor(currency); countWatchlist(); } }); diff --git a/app/src/main/java/com/nauk/coinfolio/Activities/RecordTransactionActivity.java b/app/src/main/java/com/nauk/coinfolio/Activities/RecordTransactionActivity.java index 6c4db11..28374d9 100644 --- a/app/src/main/java/com/nauk/coinfolio/Activities/RecordTransactionActivity.java +++ b/app/src/main/java/com/nauk/coinfolio/Activities/RecordTransactionActivity.java @@ -1,10 +1,7 @@ package com.nauk.coinfolio.Activities; -import android.app.DatePickerDialog; import android.content.Intent; import android.os.Bundle; -import android.preference.PreferenceManager; -import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; @@ -21,7 +18,6 @@ import com.nauk.coinfolio.R; import java.text.SimpleDateFormat; import java.util.Calendar; -import java.util.Date; public class RecordTransactionActivity extends AppCompatActivity { @@ -76,7 +72,7 @@ public class RecordTransactionActivity extends AppCompatActivity { @Override public void onClick(View view) { databaseManager.addCurrencyToManualCurrency(symbol, Double.parseDouble(amountTxtView.getText().toString()), calendar.getTime(), purchasedPrice.getText().toString()); - preferenceManager.setMustUpdate(true); + preferenceManager.setMustUpdateSummary(true); Intent intent = new Intent(RecordTransactionActivity.this, HomeActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(intent); diff --git a/app/src/main/java/com/nauk/coinfolio/Activities/SettingsActivity.java b/app/src/main/java/com/nauk/coinfolio/Activities/SettingsActivity.java index 71a2463..9f032d5 100644 --- a/app/src/main/java/com/nauk/coinfolio/Activities/SettingsActivity.java +++ b/app/src/main/java/com/nauk/coinfolio/Activities/SettingsActivity.java @@ -276,7 +276,7 @@ public class SettingsActivity extends AppCompatPreferenceActivity { SharedPreferences.Editor editor = preferences.edit(); - editor.putBoolean("mustUpdate", true); + editor.putBoolean("mustUpdateSummary", true); editor.apply(); return isChecked; @@ -292,7 +292,7 @@ public class SettingsActivity extends AppCompatPreferenceActivity { SharedPreferences.Editor editor = preferences.edit(); - editor.putBoolean("mustUpdate", true); + editor.putBoolean("mustUpdateSummary", true); editor.apply(); return isChecked; diff --git a/app/src/main/java/com/nauk/coinfolio/DataManagers/PreferencesManager.java b/app/src/main/java/com/nauk/coinfolio/DataManagers/PreferencesManager.java index 3234c13..706107f 100644 --- a/app/src/main/java/com/nauk/coinfolio/DataManagers/PreferencesManager.java +++ b/app/src/main/java/com/nauk/coinfolio/DataManagers/PreferencesManager.java @@ -83,20 +83,39 @@ public class PreferencesManager { editor.apply(); } - public void setMustUpdate(boolean mustUpdate) + public void setMustUpdateWatchlist(boolean mustUpdate) { SharedPreferences.Editor editor = settingPreferences.edit(); - editor.putBoolean("mustUpdate", mustUpdate); + editor.putBoolean("mustUpdateWatchlist", mustUpdate); editor.apply(); } - public boolean mustUpdate() + public boolean mustUpdateWatchlist() { - boolean mustUpdate = settingPreferences.getBoolean("mustUpdate", false); + boolean mustUpdate = settingPreferences.getBoolean("mustUpdateWatchlist", false); if(mustUpdate) { - setMustUpdate(false); + setMustUpdateWatchlist(false); + } + + return mustUpdate; + } + + public void setMustUpdateSummary(boolean mustUpdate) + { + SharedPreferences.Editor editor = settingPreferences.edit(); + editor.putBoolean("mustUpdateSummary", mustUpdate); + editor.apply(); + } + + public boolean mustUpdateSummary() + { + boolean mustUpdate = settingPreferences.getBoolean("mustUpdateSummary", false); + + if(mustUpdate) + { + setMustUpdateSummary(false); } return mustUpdate; 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 e2231fd..223b62b 100644 --- a/app/src/main/java/com/nauk/coinfolio/LayoutManagers/HomeLayoutGenerator.java +++ b/app/src/main/java/com/nauk/coinfolio/LayoutManagers/HomeLayoutGenerator.java @@ -7,6 +7,7 @@ import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; import android.graphics.drawable.Drawable; import android.support.v7.widget.CardView; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.animation.Animation; @@ -64,7 +65,19 @@ public class HomeLayoutGenerator { updateCardViewInfos(view, currency, totalValue, isBalanceHidden); - setupLineChart(view, currency); + view.findViewById(R.id.LineChartView).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent intent = new Intent(context.getApplicationContext(), CurrencyDetailsActivity.class); + intent.putExtra("currency", currency); + context.getApplicationContext().startActivity(intent); + } + }); + + if(currency.getHistoryMinutes() != null) + { + setupLineChart(view, currency); + } if(isExtended) { @@ -152,15 +165,6 @@ public class HomeLayoutGenerator { lineChart.getXAxis().setEnabled(false); lineChart.setViewPortOffsets(0, 0, 0, 0); lineChart.setData(generateData(currency)); - - lineChart.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Intent intent = new Intent(context.getApplicationContext(), CurrencyDetailsActivity.class); - intent.putExtra("currency", currency); - context.getApplicationContext().startActivity(intent); - } - }); } private void updateCardViewInfos(View view, Currency currency, float totalValue, boolean isBalanceHidden) @@ -249,6 +253,7 @@ public class HomeLayoutGenerator { List dataChartList = currency.getHistoryMinutes(); ArrayList values = new ArrayList<>(); + Log.d("coinfolio", "Generating data for " + currency.getSymbol()); for(int i = 0; i < dataChartList.size(); i+=10) { values.add(new Entry(i, (float) dataChartList.get(i).getOpen())); @@ -288,11 +293,11 @@ public class HomeLayoutGenerator { if(abs(number) > 1) { - str = String.format( Locale.UK, "%.2f", number); + str = String.format( Locale.UK, "%.2f", number).replaceAll("\\.?0*$", ""); } else { - str = String.format( Locale.UK, "%.4f", number); + str = String.format( Locale.UK, "%.4f", number).replaceAll("\\.?0*$", ""); } return str; diff --git a/app/src/main/java/com/nauk/coinfolio/PagerAdapter.java b/app/src/main/java/com/nauk/coinfolio/PagerAdapter.java index febfe10..d098777 100644 --- a/app/src/main/java/com/nauk/coinfolio/PagerAdapter.java +++ b/app/src/main/java/com/nauk/coinfolio/PagerAdapter.java @@ -1,5 +1,7 @@ package com.nauk.coinfolio; +import android.app.Dialog; +import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; diff --git a/app/src/main/res/layout/cardview_watchlist.xml b/app/src/main/res/layout/cardview_watchlist.xml index e8f4758..cb28d39 100644 --- a/app/src/main/res/layout/cardview_watchlist.xml +++ b/app/src/main/res/layout/cardview_watchlist.xml @@ -106,66 +106,57 @@ + android:visibility="gone" + android:orientation="vertical"> - - - + android:layout_height="wrap_content" + android:layout_margin="5dp"> + + + + + + + + + + + + + + - - - - - - - - - - - - diff --git a/app/src/main/res/layout/fragment_marketcap_homeactivity.xml b/app/src/main/res/layout/fragment_marketcap_homeactivity.xml index 1829a0a..c3b6ed9 100644 --- a/app/src/main/res/layout/fragment_marketcap_homeactivity.xml +++ b/app/src/main/res/layout/fragment_marketcap_homeactivity.xml @@ -1,7 +1,7 @@ + android:orientation="vertical" + android:paddingTop="10dp">