From 1c75676b8aee0f65bdb527ee467d324a3be8da7f Mon Sep 17 00:00:00 2001 From: tom79 Date: Tue, 30 Jul 2019 17:23:32 +0200 Subject: [PATCH] Improve speed for drawing charts --- .../activities/OwnerChartsActivity.java | 30 +++++++++----- .../android/client/Entities/Charts.java | 29 +++++--------- .../android/sqlite/StatusCacheDAO.java | 40 ++++++++++--------- 3 files changed, 51 insertions(+), 48 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/activities/OwnerChartsActivity.java b/app/src/main/java/app/fedilab/android/activities/OwnerChartsActivity.java index 3c6869291..e1d9821d9 100644 --- a/app/src/main/java/app/fedilab/android/activities/OwnerChartsActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/OwnerChartsActivity.java @@ -59,8 +59,10 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; +import java.util.Iterator; import java.util.List; import java.util.Locale; +import java.util.Map; import app.fedilab.android.R; import app.fedilab.android.asynctasks.RetrieveChartsAsyncTask; @@ -324,23 +326,29 @@ public class OwnerChartsActivity extends BaseActivity implements OnRetrieveChart List boostsEntry = new ArrayList<>(); int i = 0; - for (int boost : charts.getBoosts()) { - boostsEntry.add(new Entry(charts.getxValues().get(i), boost)); - i++; + Iterator it = charts.getBoosts().entrySet().iterator(); + while (it.hasNext()) { + Map.Entry pair = (Map.Entry)it.next(); + boostsEntry.add(new Entry((long)pair.getKey(), (int)pair.getValue())); + it.remove(); } List repliesEntry = new ArrayList<>(); - i = 0; - for (int reply : charts.getReplies()) { - repliesEntry.add(new Entry(charts.getxValues().get(i), reply)); - i++; + it = charts.getReplies().entrySet().iterator(); + while (it.hasNext()) { + Map.Entry pair = (Map.Entry)it.next(); + repliesEntry.add(new Entry((long)pair.getKey(), (int)pair.getValue())); + it.remove(); } + List statusesEntry = new ArrayList<>(); - i = 0; - for (int status : charts.getStatuses()) { - statusesEntry.add(new Entry(charts.getxValues().get(i), status)); - i++; + it = charts.getStatuses().entrySet().iterator(); + while (it.hasNext()) { + Map.Entry pair = (Map.Entry)it.next(); + statusesEntry.add(new Entry((long)pair.getKey(), (int)pair.getValue())); + it.remove(); } + LineDataSet dataSetBoosts = new LineDataSet(boostsEntry, getString(R.string.reblog)); dataSetBoosts.setColor(ContextCompat.getColor(OwnerChartsActivity.this, R.color.chart_boost)); dataSetBoosts.setValueTextSize(12f); diff --git a/app/src/main/java/app/fedilab/android/client/Entities/Charts.java b/app/src/main/java/app/fedilab/android/client/Entities/Charts.java index fba217c12..6ce3fe70f 100644 --- a/app/src/main/java/app/fedilab/android/client/Entities/Charts.java +++ b/app/src/main/java/app/fedilab/android/client/Entities/Charts.java @@ -1,5 +1,7 @@ package app.fedilab.android.client.Entities; +import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; /* Copyright 2019 Thomas Schneider @@ -21,10 +23,9 @@ public class Charts { private List xLabels; private List yLabels; - private List xValues; - private List statuses; - private List boosts; - private List replies; + private LinkedHashMap statuses; + private LinkedHashMap boosts; + private LinkedHashMap replies; public List getxLabels() { return xLabels; @@ -42,35 +43,27 @@ public class Charts { this.yLabels = yLabels; } - public List getxValues() { - return xValues; - } - - public void setxValues(List xValues) { - this.xValues = xValues; - } - - public List getStatuses() { + public LinkedHashMap getStatuses() { return statuses; } - public void setStatuses(List statuses) { + public void setStatuses(LinkedHashMap statuses) { this.statuses = statuses; } - public List getBoosts() { + public LinkedHashMap getBoosts() { return boosts; } - public void setBoosts(List boosts) { + public void setBoosts(LinkedHashMap boosts) { this.boosts = boosts; } - public List getReplies() { + public LinkedHashMap getReplies() { return replies; } - public void setReplies(List replies) { + public void setReplies(LinkedHashMap replies) { this.replies = replies; } } diff --git a/app/src/main/java/app/fedilab/android/sqlite/StatusCacheDAO.java b/app/src/main/java/app/fedilab/android/sqlite/StatusCacheDAO.java index 0589e1125..216431061 100644 --- a/app/src/main/java/app/fedilab/android/sqlite/StatusCacheDAO.java +++ b/app/src/main/java/app/fedilab/android/sqlite/StatusCacheDAO.java @@ -24,6 +24,7 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.concurrent.TimeUnit; @@ -466,16 +467,11 @@ public class StatusCacheDAO { } catch (Exception e) { e.printStackTrace(); } - int inc = 0; List xLabel = new ArrayList<>(); - List xValues = new ArrayList<>(); - List statuses = new ArrayList<>(); - List boosts = new ArrayList<>(); - List replies = new ArrayList<>(); - int boostsCount = 0; - int repliesCount = 0; - int statusesCount = 0; + charts.setStatuses(new LinkedHashMap<>()); + charts.setBoosts(new LinkedHashMap<>()); + charts.setReplies(new LinkedHashMap<>()); if( data != null) { for (Status status : data) { Calendar tempdate = Calendar.getInstance(); @@ -483,24 +479,30 @@ public class StatusCacheDAO { tempdate.set(Calendar.HOUR_OF_DAY, 0); tempdate.set(Calendar.MINUTE, 0); tempdate.set(Calendar.SECOND, 0); - xValues.add(tempdate.getTimeInMillis()); + long date = tempdate.getTimeInMillis(); if (status.getReblog() != null) { - boostsCount++; + if(charts.getBoosts().containsKey(date)){ + charts.getBoosts().put(date,(charts.getBoosts().get(date)+1)); + }else{ + charts.getBoosts().put(date,1); + } + } else if (status.getIn_reply_to_id() != null && !status.getIn_reply_to_id().trim().equals("null")) { - repliesCount++; + if(charts.getReplies().containsKey(date)){ + charts.getReplies().put(date,(charts.getReplies().get(date)+1)); + }else{ + charts.getReplies().put(date,1); + } } else { - statusesCount++; + if(charts.getStatuses().containsKey(date)){ + charts.getStatuses().put(date,(charts.getStatuses().get(date)+1)); + }else{ + charts.getStatuses().put(date,1); + } } } } - boosts.add(boostsCount); - replies.add(repliesCount); - statuses.add(statusesCount); charts.setxLabels(xLabel); - charts.setxValues(xValues); - charts.setBoosts(boosts); - charts.setReplies(replies); - charts.setStatuses(statuses); return charts; }