From 0cc6da7cdd7c9b062798259d4293f48c96c3f3e6 Mon Sep 17 00:00:00 2001
From: Tanguy Herbron <tanguy.herbron@outlook.com>
Date: Tue, 3 Apr 2018 19:29:36 +0200
Subject: [PATCH] Synchronize cursor for detail activity

---
 .../Activities/CurrencyDetailsActivity.java   | 58 +++++++++++++++----
 .../CurrencyData/CurrencyDataChart.java       |  5 ++
 .../res/drawable/linear_chart_gradient.xml    | 10 ++++
 .../res/layout/activity_currency_details.xml  | 28 +++++++++
 .../res/layout/content_currency_summary.xml   |  3 +-
 5 files changed, 92 insertions(+), 12 deletions(-)
 create mode 100644 app/src/main/res/drawable/linear_chart_gradient.xml

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 1bf561b..d176ff9 100644
--- a/app/src/main/java/com/nauk/coinfolio/Activities/CurrencyDetailsActivity.java
+++ b/app/src/main/java/com/nauk/coinfolio/Activities/CurrencyDetailsActivity.java
@@ -5,7 +5,9 @@ import android.graphics.Bitmap;
 import android.graphics.Canvas;
 import android.graphics.Color;
 import android.graphics.Paint;
+import android.graphics.PorterDuff;
 import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.design.widget.BottomNavigationView;
@@ -41,8 +43,10 @@ import com.nauk.coinfolio.DataManagers.CurrencyData.Transaction;
 import com.nauk.coinfolio.DataManagers.DatabaseManager;
 import com.nauk.coinfolio.R;
 
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Calendar;
+import java.util.Date;
 import java.util.List;
 import java.util.Locale;
 
@@ -344,6 +348,7 @@ public class CurrencyDetailsActivity extends AppCompatActivity {
     private void drawPriceChart(int timeUnit, int amout)
     {
         final LineChart lineChart = findViewById(R.id.chartPriceView);
+        final BarChart barChart = findViewById(R.id.chartVolumeView);
 
         lineChart.setDrawGridBackground(false);
         lineChart.setDrawBorders(false);
@@ -366,6 +371,9 @@ public class CurrencyDetailsActivity extends AppCompatActivity {
             @Override
             public void onValueSelected(Entry e, Highlight h) {
                 updateFluctuation(lineChart.getData().getDataSets().get(0).getEntryForIndex(0).getY(), e.getY());
+                int index = lineChart.getData().getDataSets().get(0).getEntryIndex(e);
+                barChart.highlightValue(barChart.getData().getDataSets().get(0).getEntryForIndex(index).getX(), 0, index);
+                //((TextView) findViewById(R.id.timestampHightlight)).setText(getDate());
             }
 
             @Override
@@ -379,10 +387,9 @@ public class CurrencyDetailsActivity extends AppCompatActivity {
             public boolean onTouch(View view, MotionEvent motionEvent) {
                 if(motionEvent.getAction() == MotionEvent.ACTION_UP)
                 {
-                    //lineChart.highlightValue(lineChart.getData().getDataSetCount()-1, 0);
                     lineChart.highlightValue(null);
                     updateFluctuation(lineChart.getData().getDataSets().get(0).getEntryForIndex(0).getY(), lineChart.getData().getDataSets().get(0).getEntryForIndex(lineChart.getData().getDataSets().get(0).getEntryCount() - 1).getY());
-
+                    barChart.highlightValues(null);
                 }
                 return false;
             }
@@ -394,6 +401,18 @@ public class CurrencyDetailsActivity extends AppCompatActivity {
         findViewById(R.id.progressLayoutChart).setVisibility(View.GONE);
     }
 
+    private String getDate(long timeStamp){
+
+        try{
+            SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
+            Date netDate = (new Date(timeStamp));
+            return sdf.format(netDate);
+        }
+        catch(Exception ex){
+            return "xx";
+        }
+    }
+
     private BarData generateVolumeChartSet(int timeUnit, int amount)
     {
         BarDataSet dataSet;
@@ -437,13 +456,16 @@ public class CurrencyDetailsActivity extends AppCompatActivity {
                 break;
         }
 
-        int offset = (int) Math.floor(dataChartList.size() / 50);
+        int offset = (int) Math.floor(dataChartList.size() / 200);
 
-        int loopNumber = 0;
-        for(int i = 0; i < dataChartList.size(); i += offset)
+        if(offset < 1)
         {
-            values.add(new BarEntry(loopNumber, (float) dataChartList.get(i).getVolumeTo()));
-            loopNumber++;
+            offset = 1;
+        }
+
+        for(int i = 0, j = 0; i < dataChartList.size(); i += offset, j++)
+        {
+            values.add(new BarEntry(j, (float) dataChartList.get(i).getVolumeFrom()));
         }
 
         dataSet = new BarDataSet(values, "Volume");
@@ -527,8 +549,8 @@ public class CurrencyDetailsActivity extends AppCompatActivity {
                 break;
         }
 
-        for(int i = 0; i < dataChartList.size(); i++)
-        {
+        /*for(int i = 0; i < dataChartList.size(); i++)
+        {*/
             /*if(counter == offset)
             {
                 calendar.setTimeInMillis(dataChartList.get(i).getTimestamp()*1000);
@@ -650,7 +672,19 @@ public class CurrencyDetailsActivity extends AppCompatActivity {
                 counter++;
                 lineSet.addPoint("", (float) dataChartList.get(i).getOpen());
             }*/
-            values.add(new Entry(i, (float) dataChartList.get(i).getOpen()));
+            /*values.add(new Entry(i, (float) dataChartList.get(i).getOpen()));
+        }*/
+
+        int offsetRange = (int) Math.floor(dataChartList.size() / 200);
+
+        if(offsetRange < 1)
+        {
+            offsetRange = 1;
+        }
+
+        for(int i = 0, j = 0; i < dataChartList.size(); i += offsetRange, j++)
+        {
+            values.add(new Entry(j, (float) dataChartList.get(i).getOpen()));
         }
 
         dataSet = new LineDataSet(values, "History");
@@ -667,6 +701,10 @@ public class CurrencyDetailsActivity extends AppCompatActivity {
         dataSet.setDrawHorizontalHighlightIndicator(false);
         dataSet.setHighLightColor(currency.getChartColor());
 
+        Drawable fillDrawable = ContextCompat.getDrawable(this, R.drawable.linear_chart_gradient);
+        fillDrawable.setColorFilter(getColorWithAlpha(currency.getChartColor(), 0.5f), PorterDuff.Mode.SRC_ATOP);
+        //dataSet.setFillDrawable(fillDrawable);
+
         return new LineData(dataSet);
     }
 
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 8fea2be..1f96930 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
@@ -43,6 +43,11 @@ public class CurrencyDataChart implements Parcelable {
         return volumeTo;
     }
 
+    public double getVolumeFrom()
+    {
+        return volumeFrom;
+    }
+
     public long getTimestamp()
     {
         return timestamp;
diff --git a/app/src/main/res/drawable/linear_chart_gradient.xml b/app/src/main/res/drawable/linear_chart_gradient.xml
new file mode 100644
index 0000000..5222848
--- /dev/null
+++ b/app/src/main/res/drawable/linear_chart_gradient.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <gradient
+        android:angle="90"
+        android:type="linear"
+        android:startColor="#00ff0000"
+        android:centerColor="#00ff0000"
+        android:endColor="#ffffffff"
+        android:centerY="1%" />
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_currency_details.xml b/app/src/main/res/layout/activity_currency_details.xml
index 92892ff..3137af2 100644
--- a/app/src/main/res/layout/activity_currency_details.xml
+++ b/app/src/main/res/layout/activity_currency_details.xml
@@ -42,6 +42,34 @@
                 android:layout_height="250dp"
                 android:layout_marginTop="15dp" />
 
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal">
+
+                <TextView
+                    android:id="@+id/timestampHightlight"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:visibility="invisible"
+                    android:layout_weight="0.33"/>
+
+                <TextView
+                    android:id="@+id/priceHightlight"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:visibility="invisible"
+                    android:layout_weight="0.33" />
+
+                <TextView
+                    android:id="@+id/volumeHightlight"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:visibility="invisible"
+                    android:layout_weight="0.33"/>
+
+            </LinearLayout>
+
             <com.github.mikephil.charting.charts.BarChart
                 android:id="@+id/chartVolumeView"
                 android:layout_width="match_parent"
diff --git a/app/src/main/res/layout/content_currency_summary.xml b/app/src/main/res/layout/content_currency_summary.xml
index 81a1ad0..6d0a96d 100644
--- a/app/src/main/res/layout/content_currency_summary.xml
+++ b/app/src/main/res/layout/content_currency_summary.xml
@@ -81,8 +81,7 @@
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
                 android:visibility="gone"
-                android:orientation="vertical"
-                android:gravity="center_vertical">
+                android:orientation="vertical">
 
                 <TextView
                     android:id="@+id/marketCapTextView"