diff --git a/app/build.gradle b/app/build.gradle index 6a810b4..d3fd690 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -42,6 +42,7 @@ dependencies { implementation 'org.apache.commons:commons-lang3:3.6' implementation 'com.github.PhilJay:MPAndroidChart:v3.0.3' implementation 'com.mattprecious.swirl:swirl:1.1.0' + implementation 'com.wdullaer:materialdatetimepicker:3.5.2' //implementation 'com.github.lecho:hellocharts-library:1.5.8@aar' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' 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 d176ff9..f8bfc50 100644 --- a/app/src/main/java/com/nauk/coinfolio/Activities/CurrencyDetailsActivity.java +++ b/app/src/main/java/com/nauk/coinfolio/Activities/CurrencyDetailsActivity.java @@ -61,14 +61,12 @@ public class CurrencyDetailsActivity extends AppCompatActivity { //private String symbol; private Currency currency; private boolean hasBeenModified; - private Tooltip tip; - private int indexMax; - private int indexMin; private final static int HOUR = 0; private final static int DAY = 1; private final static int WEEK = 2; private final static int MONTH = 3; private final static int YEAR = 4; + private List dataChartList; private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener = new BottomNavigationView.OnNavigationItemSelectedListener() { @@ -103,7 +101,6 @@ public class CurrencyDetailsActivity extends AppCompatActivity { @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { - // Respond to the action bar's Up/Home button case android.R.id.home: NavUtils.navigateUpFromSameTask(this); return true; @@ -118,7 +115,6 @@ public class CurrencyDetailsActivity extends AppCompatActivity { Intent intent = getIntent(); - //symbol = intent.getStringExtra("symbol"); currency = intent.getParcelableExtra("currency"); databaseManager = new DatabaseManager(this); @@ -131,23 +127,9 @@ public class CurrencyDetailsActivity extends AppCompatActivity { initializeButtons(); - if(currency.getHistoryMinutes().size() > 0) - { - drawPriceChart(DAY, 1); - drawVolumeChart(DAY, 1); - } - else - { - /*TextView errorTextView = new TextView(this); - errorTextView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 750)); - errorTextView.setText("Not enough data"); - errorTextView.setTag("chart_layout"); - errorTextView.setGravity(Gravity.CENTER); + createCharts(DAY, 1); - chartLayout.addView(errorTextView, 0);*/ - } - - setTitle(" " + currency.getName()); + setTitle(" " + currency.getName() + " | " + currency.getBalance()); getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_USE_LOGO); @@ -222,16 +204,13 @@ public class CurrencyDetailsActivity extends AppCompatActivity { switch (interval) { case "1h": - drawPriceChart(HOUR, 1); - drawVolumeChart(HOUR, 1); + createCharts(HOUR, 1); break; case "3h": - drawPriceChart(HOUR, 3); - drawVolumeChart(HOUR, 3); + createCharts(HOUR, 3); break; case "1d": - drawPriceChart(DAY, 1); - drawVolumeChart(DAY, 1); + createCharts(DAY, 1); break; case "3d": currency.updateHistoryHours(this, new Currency.CurrencyCallBack() { @@ -240,8 +219,7 @@ public class CurrencyDetailsActivity extends AppCompatActivity { runOnUiThread(new Runnable() { @Override public void run() { - drawPriceChart(CurrencyDetailsActivity.DAY, 3); - drawVolumeChart(CurrencyDetailsActivity.DAY, 3); + createCharts(CurrencyDetailsActivity.DAY, 3); } }); } @@ -254,8 +232,7 @@ public class CurrencyDetailsActivity extends AppCompatActivity { runOnUiThread(new Runnable() { @Override public void run() { - drawPriceChart(CurrencyDetailsActivity.WEEK, 1); - drawVolumeChart(CurrencyDetailsActivity.WEEK, 1); + createCharts(CurrencyDetailsActivity.WEEK, 11); } }); } @@ -268,8 +245,7 @@ public class CurrencyDetailsActivity extends AppCompatActivity { runOnUiThread(new Runnable() { @Override public void run() { - drawPriceChart(CurrencyDetailsActivity.MONTH, 1); - drawVolumeChart(CurrencyDetailsActivity.MONTH, 1); + createCharts(CurrencyDetailsActivity.MONTH, 1); } }); } @@ -282,8 +258,7 @@ public class CurrencyDetailsActivity extends AppCompatActivity { runOnUiThread(new Runnable() { @Override public void run() { - drawPriceChart(CurrencyDetailsActivity.MONTH, 3); - drawVolumeChart(CurrencyDetailsActivity.MONTH, 3); + createCharts(CurrencyDetailsActivity.MONTH, 3); } }); } @@ -296,8 +271,7 @@ public class CurrencyDetailsActivity extends AppCompatActivity { runOnUiThread(new Runnable() { @Override public void run() { - drawPriceChart(CurrencyDetailsActivity.MONTH, 6); - drawVolumeChart(CurrencyDetailsActivity.MONTH, 6); + createCharts(CurrencyDetailsActivity.MONTH, 6); } }); } @@ -310,8 +284,7 @@ public class CurrencyDetailsActivity extends AppCompatActivity { runOnUiThread(new Runnable() { @Override public void run() { - drawPriceChart(CurrencyDetailsActivity.YEAR, 1); - drawVolumeChart(CurrencyDetailsActivity.YEAR, 1); + createCharts(CurrencyDetailsActivity.YEAR, 1); } }); } @@ -320,7 +293,56 @@ public class CurrencyDetailsActivity extends AppCompatActivity { } } - private void drawVolumeChart(int timeUnit, int amout) + private void createCharts(int timeUnit, int amount) + { + updateChartsData(timeUnit, amount); + drawPriceChart(); + drawVolumeChart(); + } + + private void updateChartsData(int timeUnit, int amount) + { + dataChartList = new ArrayList<>(); + + switch (timeUnit) + { + case HOUR: + dataChartList = currency.getHistoryMinutes().subList(currency.getHistoryMinutes().size()-(60*amount), currency.getHistoryMinutes().size()); + break; + case DAY: + if(amount == 1) + { + dataChartList = currency.getHistoryMinutes(); + } + else + { + dataChartList = currency.getHistoryHours().subList(currency.getHistoryHours().size()-(24*amount), currency.getHistoryHours().size()); + } + break; + case WEEK: + dataChartList = currency.getHistoryHours().subList(currency.getHistoryHours().size()-168, currency.getHistoryHours().size()); + break; + case MONTH: + switch (amount) + { + case 1: + dataChartList = currency.getHistoryHours(); + break; + case 3: + dataChartList = currency.getHistoryDays().subList(currency.getHistoryDays().size()-93, currency.getHistoryDays().size()); + break; + case 6: + dataChartList = currency.getHistoryDays().subList(currency.getHistoryDays().size()-186, currency.getHistoryDays().size()); + break; + } + break; + case YEAR: + dataChartList = currency.getHistoryDays(); + break; + } + } + + private void drawVolumeChart() { final BarChart barChart = findViewById(R.id.chartVolumeView); @@ -339,13 +361,13 @@ public class CurrencyDetailsActivity extends AppCompatActivity { barChart.setViewPortOffsets(0, 0, 0, 0); barChart.setFitBars(true); - barChart.setData(generateVolumeChartSet(timeUnit, amout)); + barChart.setData(generateVolumeChartSet()); barChart.invalidate(); findViewById(R.id.chartVolumeView).setVisibility(View.VISIBLE); } - private void drawPriceChart(int timeUnit, int amout) + private void drawPriceChart() { final LineChart lineChart = findViewById(R.id.chartPriceView); final BarChart barChart = findViewById(R.id.chartVolumeView); @@ -364,16 +386,32 @@ public class CurrencyDetailsActivity extends AppCompatActivity { lineChart.getXAxis().setEnabled(false); lineChart.setViewPortOffsets(0, 0, 0, 0); - lineChart.setData(generatePriceChartSet(timeUnit, amout)); + lineChart.setData(generatePriceChartSet()); lineChart.getAxisLeft().setAxisMinValue(lineChart.getData().getYMin()); lineChart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() { @Override public void onValueSelected(Entry e, Highlight h) { - updateFluctuation(lineChart.getData().getDataSets().get(0).getEntryForIndex(0).getY(), e.getY()); + //updateFluctuation(lineChart.getData().getDataSets().get(0).getEntryForIndex(0).getY(), e.getY()); int index = lineChart.getData().getDataSets().get(0).getEntryIndex(e); + String date = null; barChart.highlightValue(barChart.getData().getDataSets().get(0).getEntryForIndex(index).getX(), 0, index); - //((TextView) findViewById(R.id.timestampHightlight)).setText(getDate()); + findViewById(R.id.volumeHightlight).setVisibility(View.VISIBLE); + findViewById(R.id.priceHightlight).setVisibility(View.VISIBLE); + findViewById(R.id.timestampHightlight).setVisibility(View.VISIBLE); + + if(dataChartList.size() > 200) + { + date = getDate(dataChartList.get((int) Math.floor(dataChartList.size() / 200) * index).getTimestamp() * 1000); + } + else + { + date = getDate(dataChartList.get(index).getTimestamp() * 1000); + } + + ((TextView) findViewById(R.id.volumeHightlight)).setText("Volume : US$" + barChart.getData().getDataSets().get(0).getEntryForIndex(index).getY()); + ((TextView) findViewById(R.id.priceHightlight)).setText("Price : US$" + e.getY()); + ((TextView) findViewById(R.id.timestampHightlight)).setText("Date : " + date); } @Override @@ -390,6 +428,9 @@ public class CurrencyDetailsActivity extends AppCompatActivity { 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); + findViewById(R.id.volumeHightlight).setVisibility(View.INVISIBLE); + findViewById(R.id.priceHightlight).setVisibility(View.INVISIBLE); + findViewById(R.id.timestampHightlight).setVisibility(View.INVISIBLE); } return false; } @@ -404,7 +445,7 @@ public class CurrencyDetailsActivity extends AppCompatActivity { private String getDate(long timeStamp){ try{ - SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); + SimpleDateFormat sdf = new SimpleDateFormat(" HH:mm dd/MM/yyyy"); Date netDate = (new Date(timeStamp)); return sdf.format(netDate); } @@ -413,49 +454,11 @@ public class CurrencyDetailsActivity extends AppCompatActivity { } } - private BarData generateVolumeChartSet(int timeUnit, int amount) + private BarData generateVolumeChartSet() { BarDataSet dataSet; - List dataChartList = new ArrayList<>(); ArrayList values = new ArrayList<>(); - switch (timeUnit) - { - case HOUR: - dataChartList = currency.getHistoryMinutes().subList(currency.getHistoryMinutes().size()-(60*amount), currency.getHistoryMinutes().size()); - break; - case DAY: - if(amount == 1) - { - dataChartList = currency.getHistoryMinutes(); - } - else - { - dataChartList = currency.getHistoryHours().subList(currency.getHistoryHours().size()-(24*amount), currency.getHistoryHours().size()); - } - break; - case WEEK: - dataChartList = currency.getHistoryHours().subList(currency.getHistoryHours().size()-168, currency.getHistoryHours().size()); - break; - case MONTH: - switch (amount) - { - case 1: - dataChartList = currency.getHistoryHours(); - break; - case 3: - dataChartList = currency.getHistoryDays().subList(currency.getHistoryDays().size()-93, currency.getHistoryDays().size()); - break; - case 6: - dataChartList = currency.getHistoryDays().subList(currency.getHistoryDays().size()-186, currency.getHistoryDays().size()); - break; - } - break; - case YEAR: - dataChartList = currency.getHistoryDays(); - break; - } - int offset = (int) Math.floor(dataChartList.size() / 200); if(offset < 1) @@ -465,7 +468,7 @@ public class CurrencyDetailsActivity extends AppCompatActivity { for(int i = 0, j = 0; i < dataChartList.size(); i += offset, j++) { - values.add(new BarEntry(j, (float) dataChartList.get(i).getVolumeFrom())); + values.add(new BarEntry(j, (float) dataChartList.get(i).getVolumeTo())); } dataSet = new BarDataSet(values, "Volume"); @@ -478,78 +481,154 @@ public class CurrencyDetailsActivity extends AppCompatActivity { return new BarData(dataSet); } - private LineData generatePriceChartSet(int timeUnit, int amount) + private LineData generatePriceChartSet() { LineDataSet dataSet; - List dataChartList = new ArrayList<>(); ArrayList values = new ArrayList<>(); - int counter = 0; - Calendar calendar = Calendar.getInstance(Locale.FRANCE); - String hour; - String minute; - String dayName = ""; - String dayNumber; - String monthName = ""; - String monthNumber; - int offset = 10; - int pointFormat = HOUR; + int offsetRange = (int) Math.floor(dataChartList.size() / 200); - switch (timeUnit) + if(offsetRange < 1) { - case HOUR: - dataChartList = currency.getHistoryMinutes().subList(currency.getHistoryMinutes().size()-(60*amount), currency.getHistoryMinutes().size()); - offset = 10 * amount; - pointFormat = HOUR; - break; - case DAY: - if(amount == 1) - { - dataChartList = currency.getHistoryMinutes(); - offset = 10 * 24; - pointFormat = HOUR; - } - else - { - dataChartList = currency.getHistoryHours().subList(currency.getHistoryHours().size()-(24*amount), currency.getHistoryHours().size()); - offset = 24; - pointFormat = DAY; - } - break; - case WEEK: - dataChartList = currency.getHistoryHours().subList(currency.getHistoryHours().size()-168, currency.getHistoryHours().size()); - offset = 28; - pointFormat = DAY; - break; - case MONTH: - switch (amount) - { - case 1: - dataChartList = currency.getHistoryHours(); - Log.d("coinfolio", "1 month"); - offset = 124; - pointFormat = MONTH; - break; - case 3: - dataChartList = currency.getHistoryDays().subList(currency.getHistoryDays().size()-93, currency.getHistoryDays().size()); - offset = 15; - pointFormat = MONTH; - break; - case 6: - dataChartList = currency.getHistoryDays().subList(currency.getHistoryDays().size()-186, currency.getHistoryDays().size()); - offset = 31; - pointFormat = MONTH; - break; - } - break; - case YEAR: - dataChartList = currency.getHistoryDays(); - offset = 30; - pointFormat = YEAR; - break; + offsetRange = 1; } - /*for(int i = 0; i < dataChartList.size(); i++) + 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"); + dataSet.setDrawIcons(false); + dataSet.setColor(currency.getChartColor()); + dataSet.setLineWidth(1); + dataSet.setDrawFilled(true); + dataSet.setFillColor(getColorWithAlpha(currency.getChartColor(), 0.5f)); + dataSet.setFormLineWidth(1); + dataSet.setFormSize(15); + dataSet.setDrawCircles(false); + dataSet.setDrawValues(false); + dataSet.setHighlightEnabled(true); + 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); + } + + private void updateFluctuation(float start, float end) + { + float fluctuation = end - start; + float percentageFluctuation = (float) (fluctuation / start * 100); + + if(percentageFluctuation < 0) + { + ((TextView) findViewById(R.id.txtViewPercentage)).setTextColor(getResources().getColor(R.color.red)); + } + else + { + ((TextView) findViewById(R.id.txtViewPercentage)).setTextColor(getResources().getColor(R.color.green)); + } + + ((TextView) findViewById(R.id.txtViewPriceStart)).setText("$" + start); + ((TextView) findViewById(R.id.txtViewPriceNow)).setText("$" + end); + ((TextView) findViewById(R.id.txtViewPercentage)).setText(percentageFluctuation + "%"); + } + + private int getColorWithAlpha(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(currency.getSymbol()); + + for(int i = 0; i < transactionList.size(); i++) + { + 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); + TextView dateTxtView = view.findViewById(R.id.purchaseDate); + + Log.d("coinfolio", "Timestamp " + transactionList.get(i).getTimestamp()); + + dateTxtView.setText(getDate(transactionList.get(i).getTimestamp())); + + LinearLayout deleteLayout = view.findViewById(R.id.deleteTransactionLayout); + deleteLayout.setTag(transactionList.get(i).getTransactionId()); + + deleteLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + databaseManager.deleteTransactionFromId(Integer.parseInt(view.getTag().toString())); + drawTransactionList(); + hasBeenModified = true; + } + }); + + amountTxtView.setText(transactionList.get(i).getAmount() + ""); + + SwipeLayout swipeLayout = view.findViewById(R.id.swipeLayout); + + //set show mode. + swipeLayout.setShowMode(SwipeLayout.ShowMode.LayDown); + + //add drag edge.(If the BottomView has 'layout_gravity' attribute, this line is unnecessary) + swipeLayout.addDrag(SwipeLayout.DragEdge.Left, view.findViewById(R.id.bottom_wrapper)); + + swipeLayout.addSwipeListener(new SwipeLayout.SwipeListener() { + @Override + public void onClose(SwipeLayout layout) { + //when the SurfaceView totally cover the BottomView. + } + + @Override + public void onUpdate(SwipeLayout layout, int leftOffset, int topOffset) { + //you are swiping. + } + + @Override + public void onStartOpen(SwipeLayout layout) { + + } + + @Override + public void onOpen(SwipeLayout layout) { + //when the BottomView totally show. + } + + @Override + public void onStartClose(SwipeLayout layout) { + + } + + @Override + public void onHandRelease(SwipeLayout layout, float xvel, float yvel) { + //when user's hand released. + } + }); + + transactionLayout.addView(view); + } + + } + +} +/*for(int i = 0; i < dataChartList.size(); i++) {*/ /*if(counter == offset) { @@ -673,344 +752,4 @@ public class CurrencyDetailsActivity extends AppCompatActivity { lineSet.addPoint("", (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"); - dataSet.setDrawIcons(false); - dataSet.setColor(currency.getChartColor()); - dataSet.setLineWidth(1); - dataSet.setDrawFilled(true); - dataSet.setFillColor(getColorWithAlpha(currency.getChartColor(), 0.5f)); - dataSet.setFormLineWidth(1); - dataSet.setFormSize(15); - dataSet.setDrawCircles(false); - dataSet.setDrawValues(false); - dataSet.setHighlightEnabled(true); - 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); - } - - private void updateFluctuation(float start, float end) - { - float fluctuation = end - start; - float percentageFluctuation = (float) (fluctuation / start * 100); - - if(percentageFluctuation < 0) - { - ((TextView) findViewById(R.id.txtViewPercentage)).setTextColor(getResources().getColor(R.color.red)); - } - else - { - ((TextView) findViewById(R.id.txtViewPercentage)).setTextColor(getResources().getColor(R.color.green)); - } - - ((TextView) findViewById(R.id.txtViewPriceStart)).setText("$" + start); - ((TextView) findViewById(R.id.txtViewPriceNow)).setText("$" + end); - ((TextView) findViewById(R.id.txtViewPercentage)).setText(percentageFluctuation + "%"); - } - - /*private LineSet generatePriceChartSet(int timeUnit, int amount) - { - List dataChartList = new ArrayList<>(); - LineSet lineSet = new LineSet(); - int counter = 0; - Calendar calendar = Calendar.getInstance(Locale.FRANCE); - String hour; - String minute; - String dayName = ""; - String dayNumber; - String monthName = ""; - String monthNumber; - int offset = 10; - int pointFormat = HOUR; - - switch (timeUnit) - { - case HOUR: - dataChartList = currency.getHistoryMinutes().subList(currency.getHistoryMinutes().size()-(60*amount), currency.getHistoryMinutes().size()); - offset = 10 * amount; - pointFormat = HOUR; - break; - case DAY: - if(amount == 1) - { - dataChartList = currency.getHistoryMinutes(); - offset = 10 * 24; - pointFormat = HOUR; - } - else - { - dataChartList = currency.getHistoryHours().subList(currency.getHistoryHours().size()-(24*amount), currency.getHistoryHours().size()); - offset = 24; - pointFormat = DAY; - } - break; - case WEEK: - dataChartList = currency.getHistoryHours().subList(currency.getHistoryHours().size()-168, currency.getHistoryHours().size()); - offset = 28; - pointFormat = DAY; - break; - case MONTH: - switch (amount) - { - case 1: - dataChartList = currency.getHistoryHours(); - offset = 124; - pointFormat = MONTH; - break; - case 3: - dataChartList = currency.getHistoryDays().subList(currency.getHistoryDays().size()-93, currency.getHistoryDays().size()); - offset = 15; - pointFormat = MONTH; - break; - case 6: - dataChartList = currency.getHistoryDays().subList(currency.getHistoryDays().size()-186, currency.getHistoryDays().size()); - offset = 31; - pointFormat = MONTH; - break; - } - break; - case YEAR: - dataChartList = currency.getHistoryDays(); - offset = 30; - pointFormat = YEAR; - break; - } - - for(int i = 0; i < dataChartList.size(); i++) - { - if(counter == offset) - { - calendar.setTimeInMillis(dataChartList.get(i).getTimestamp()*1000); - - switch (pointFormat) - { - case HOUR: - 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()); - break; - case DAY: - int dayIndex = calendar.get(Calendar.DAY_OF_WEEK)+1; - - switch (dayIndex) - { - case Calendar.MONDAY: - dayName = "Mon"; - break; - case Calendar.TUESDAY: - dayName = "Tue"; - break; - case Calendar.WEDNESDAY: - dayName = "Wed"; - break; - case Calendar.THURSDAY: - dayName = "Thu"; - break; - case Calendar.FRIDAY: - dayName = "Fri"; - break; - case Calendar.SATURDAY: - dayName = "Sat"; - break; - case Calendar.SUNDAY: - dayName = "Sun"; - break; - } - - lineSet.addPoint(dayName, (float) dataChartList.get(i).getOpen()); - break; - case MONTH: - dayNumber = String.valueOf(calendar.get(Calendar.DAY_OF_MONTH)+1); - monthNumber = String.valueOf(calendar.get(Calendar.MONTH)+1); - - if(dayNumber.length() < 2) - { - dayNumber = '0' + dayNumber; - } - - if(monthNumber.length() < 2) - { - monthNumber = '0' + monthNumber; - } - - lineSet.addPoint(dayNumber + "/" + monthNumber, (float) dataChartList.get(i).getOpen()); - break; - case YEAR: - int mb = calendar.get(Calendar.MONTH); - - switch (mb) - { - case Calendar.JANUARY: - monthName = "Jan"; - break; - case Calendar.FEBRUARY: - monthName = "Feb"; - break; - case Calendar.MARCH: - monthName = "Mar"; - break; - case Calendar.APRIL: - monthName = "Apr"; - break; - case Calendar.MAY: - monthName = "May"; - break; - case Calendar.JUNE: - monthName = "Jun"; - break; - case Calendar.JULY: - monthName = "Jul"; - break; - case Calendar.AUGUST: - monthName = "Aug"; - break; - case Calendar.SEPTEMBER: - monthName = "Sep"; - break; - case Calendar.OCTOBER: - monthName = "Oct"; - break; - case Calendar.NOVEMBER: - monthName = "Nov"; - break; - case Calendar.DECEMBER: - monthName = "Dec"; - break; - } - - lineSet.addPoint(monthName, (float) dataChartList.get(i).getOpen()); - break; - } - counter = 0; - } - else - { - counter++; - lineSet.addPoint("", (float) dataChartList.get(i).getOpen()); - } - } - - lineSet.setSmooth(true); - lineSet.setThickness(3); - lineSet.setFill(getColorWithAlpha(currency.getChartColor(), 0.5f)); - lineSet.setColor(currency.getChartColor()); - - return lineSet; - }*/ - - private int getColorWithAlpha(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(currency.getSymbol()); - - for(int i = 0; i < transactionList.size(); i++) - { - 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); - TextView dateTxtView = view.findViewById(R.id.purchaseDate); - - LinearLayout deleteLayout = view.findViewById(R.id.deleteTransactionLayout); - deleteLayout.setTag(transactionList.get(i).getTransactionId()); - - deleteLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - databaseManager.deleteTransactionFromId(Integer.parseInt(view.getTag().toString())); - drawTransactionList(); - hasBeenModified = true; - } - }); - - amountTxtView.setText(transactionList.get(i).getAmount() + ""); - - SwipeLayout swipeLayout = view.findViewById(R.id.swipeLayout); - - //set show mode. - swipeLayout.setShowMode(SwipeLayout.ShowMode.LayDown); - - //add drag edge.(If the BottomView has 'layout_gravity' attribute, this line is unnecessary) - swipeLayout.addDrag(SwipeLayout.DragEdge.Left, view.findViewById(R.id.bottom_wrapper)); - - swipeLayout.addSwipeListener(new SwipeLayout.SwipeListener() { - @Override - public void onClose(SwipeLayout layout) { - //when the SurfaceView totally cover the BottomView. - } - - @Override - public void onUpdate(SwipeLayout layout, int leftOffset, int topOffset) { - //you are swiping. - } - - @Override - public void onStartOpen(SwipeLayout layout) { - - } - - @Override - public void onOpen(SwipeLayout layout) { - //when the BottomView totally show. - } - - @Override - public void onStartClose(SwipeLayout layout) { - - } - - @Override - public void onHandRelease(SwipeLayout layout, float xvel, float yvel) { - //when user's hand released. - } - }); - - transactionLayout.addView(view); - } - - } - -} + }*/ \ No newline at end of file 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 53f604b..fa11d1b 100644 --- a/app/src/main/java/com/nauk/coinfolio/Activities/HomeActivity.java +++ b/app/src/main/java/com/nauk/coinfolio/Activities/HomeActivity.java @@ -398,6 +398,8 @@ public class HomeActivity extends AppCompatActivity { Intent intent = getIntent(); + Log.d("coinfolio", "Updated ? " + intent.getBooleanExtra("update", false)); + updateAll(intent.getBooleanExtra("update", false)); ((SpaceNavigationView) findViewById(R.id.space)).changeCenterButtonIcon(R.drawable.ic_view_list_white_24dp); } 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 aa07931..f30af5f 100644 --- a/app/src/main/java/com/nauk/coinfolio/Activities/RecordTransactionActivity.java +++ b/app/src/main/java/com/nauk/coinfolio/Activities/RecordTransactionActivity.java @@ -1,23 +1,35 @@ package com.nauk.coinfolio.Activities; +import android.app.DatePickerDialog; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; +import android.util.Log; import android.view.View; import android.widget.Button; +import android.widget.DatePicker; +import android.widget.EditText; import android.widget.TextView; +import android.widget.TimePicker; import com.nauk.coinfolio.DataManagers.DatabaseManager; import com.nauk.coinfolio.R; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; + public class RecordTransactionActivity extends AppCompatActivity { private String coin; private String symbol; private TextView symbolTxtView; - private TextView amountTxtView; + private EditText amountTxtView; + private TextView purchasedDate; private Button validateButton; private DatabaseManager databaseManager; + private Calendar calendar; + private SimpleDateFormat sdf; @Override protected void onCreate(Bundle savedInstanceState) { @@ -30,16 +42,31 @@ public class RecordTransactionActivity extends AppCompatActivity { setTitle("Add " + coin + " transaction"); + sdf = new SimpleDateFormat(" HH:mm dd/MM/yyyy"); + + calendar = Calendar.getInstance(); + databaseManager = new DatabaseManager(this); validateButton = findViewById(R.id.validateButton); amountTxtView = findViewById(R.id.currencyAmount); + purchasedDate = findViewById(R.id.purchaseDate); + + purchasedDate.setText(sdf.format(calendar.getTime())); + + purchasedDate.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + createDatePicker(); + } + }); + validateButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - databaseManager.addCurrencyToManualCurrency(symbol, Double.parseDouble(amountTxtView.getText().toString())); + databaseManager.addCurrencyToManualCurrency(symbol, Double.parseDouble(amountTxtView.getText().toString()), calendar.getTime()); Intent intent = new Intent(RecordTransactionActivity.this, HomeActivity.class); intent.putExtra("update", true); intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); @@ -48,4 +75,42 @@ public class RecordTransactionActivity extends AppCompatActivity { } }); } + + private void createDatePicker() + { + new android.app.DatePickerDialog( + RecordTransactionActivity.this, + new android.app.DatePickerDialog.OnDateSetListener() { + @Override + public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) { + calendar.set(Calendar.YEAR, year); + calendar.set(Calendar.MONTH, month); + calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth); + purchasedDate.setText(sdf.format(calendar.getTime())); + createTimePicker(); + } + }, + calendar.get(Calendar.YEAR), + calendar.get(Calendar.MONTH), + calendar.get(Calendar.DAY_OF_MONTH) + ).show(); + } + + private void createTimePicker() + { + new android.app.TimePickerDialog( + RecordTransactionActivity.this, + new android.app.TimePickerDialog.OnTimeSetListener() { + @Override + public void onTimeSet(TimePicker view, int hour, int minute) { + calendar.set(Calendar.HOUR_OF_DAY, hour); + calendar.set(Calendar.MINUTE, minute); + purchasedDate.setText(sdf.format(calendar.getTime())); + } + }, + calendar.get(Calendar.HOUR_OF_DAY), + calendar.get(Calendar.MINUTE), + true + ).show(); + } } diff --git a/app/src/main/java/com/nauk/coinfolio/DataManagers/CurrencyData/Transaction.java b/app/src/main/java/com/nauk/coinfolio/DataManagers/CurrencyData/Transaction.java index ac05f62..420092a 100644 --- a/app/src/main/java/com/nauk/coinfolio/DataManagers/CurrencyData/Transaction.java +++ b/app/src/main/java/com/nauk/coinfolio/DataManagers/CurrencyData/Transaction.java @@ -9,14 +9,16 @@ public class Transaction { private int transactionId; private String symbol; private double amount; + private long timestamp; private double purchasedPrice; private boolean isMined; - public Transaction(int transactionId, String symbol, double amount) + public Transaction(int transactionId, String symbol, double amount, long timestamp) { this.transactionId = transactionId; this.symbol = symbol; this.amount = amount; + this.timestamp = timestamp; } public int getTransactionId() { @@ -39,6 +41,11 @@ public class Transaction { return amount; } + public long getTimestamp() + { + return timestamp; + } + public void setAmount(double amount) { this.amount = amount; } diff --git a/app/src/main/java/com/nauk/coinfolio/DataManagers/DatabaseManager.java b/app/src/main/java/com/nauk/coinfolio/DataManagers/DatabaseManager.java index 4afe2df..82e566e 100644 --- a/app/src/main/java/com/nauk/coinfolio/DataManagers/DatabaseManager.java +++ b/app/src/main/java/com/nauk/coinfolio/DataManagers/DatabaseManager.java @@ -10,6 +10,7 @@ import com.nauk.coinfolio.DataManagers.CurrencyData.Currency; import com.nauk.coinfolio.DataManagers.CurrencyData.Transaction; import java.util.ArrayList; +import java.util.Date; import java.util.List; /** @@ -51,7 +52,7 @@ public class DatabaseManager extends SQLiteOpenHelper{ + KEY_CURRENCY_SYMBOL + " VARCHAR(4)," + KEY_CURRENCY_NAME + " VARCHAR(45)," + KEY_CURRENCY_BALANCE + " TEXT," - + KEY_CURRENCY_DATE + " DATE," + + KEY_CURRENCY_DATE + " TEXT," + KEY_CURRENCY_PURCHASED_PRICE + " TEXT," + KEY_CURRENCY_IS_MINED + " INTEGER" + ");"); @@ -75,14 +76,14 @@ public class DatabaseManager extends SQLiteOpenHelper{ onCreate(db); } - public void addCurrencyToManualCurrency(String symbol, double balance) + public void addCurrencyToManualCurrency(String symbol, double balance, Date date) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(KEY_CURRENCY_SYMBOL, symbol); values.put(KEY_CURRENCY_BALANCE, balance); - //values.put(KEY_CURRENCY_DATE, getDate()); + values.put(KEY_CURRENCY_DATE, date.getTime()); //values.put(KEY_CURRENCY_PURCHASED_PRICE, something); db.insert(TABLE_MANUAL_CURRENCIES, null, values); @@ -122,7 +123,7 @@ public class DatabaseManager extends SQLiteOpenHelper{ while(resultatList.moveToNext()) { //transactionList.put(resultatList.getInt(0), resultatList.getDouble(3)); - transactionList.add(new Transaction(resultatList.getInt(0), resultatList.getString(1), resultatList.getDouble(3))); + transactionList.add(new Transaction(resultatList.getInt(0), resultatList.getString(1), resultatList.getDouble(3), resultatList.getLong(4))); } resultatList.close(); diff --git a/app/src/main/java/com/nauk/coinfolio/DataManagers/ExchangeManager/BinanceManager.java b/app/src/main/java/com/nauk/coinfolio/DataManagers/ExchangeManager/BinanceManager.java index a035ca1..25544e5 100644 --- a/app/src/main/java/com/nauk/coinfolio/DataManagers/ExchangeManager/BinanceManager.java +++ b/app/src/main/java/com/nauk/coinfolio/DataManagers/ExchangeManager/BinanceManager.java @@ -56,6 +56,11 @@ public class BinanceManager { } } + public void getTrades() + { + + } + public void setPublicKey(String publicKey) { this.publicKey = publicKey; diff --git a/app/src/main/res/layout/activity_record_transaction.xml b/app/src/main/res/layout/activity_record_transaction.xml index 8054ae1..f9e21dd 100644 --- a/app/src/main/res/layout/activity_record_transaction.xml +++ b/app/src/main/res/layout/activity_record_transaction.xml @@ -22,7 +22,16 @@ android:layout_height="wrap_content" android:hint="@string/activity_add_amount"/> + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 990ec9d..921c25c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -120,6 +120,7 @@ Amount Purchased price + Purchased date CurrencyDetailsActivity History charts Watchlist