From e63b6986c66f3215b78c9b3363b90f22c94c8562 Mon Sep 17 00:00:00 2001 From: vanous Date: Fri, 2 Apr 2021 15:42:43 +0200 Subject: [PATCH] make Activity Charts dates move as calendar months and to go to now if jumping past today --- .../charts/AbstractChartFragment.java | 22 +++++++++++++++---- .../charts/ActivityListingDashboard.java | 5 ----- .../gadgetbridge/util/DateTimeUtils.java | 10 +++++++++ 3 files changed, 28 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/AbstractChartFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/AbstractChartFragment.java index 5f98a2d367..f50671135c 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/AbstractChartFragment.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/AbstractChartFragment.java @@ -265,9 +265,18 @@ public abstract class AbstractChartFragment extends AbstractGBFragment { } else if (ChartsHost.DATE_PREV_WEEK.equals(action)) { handleDate(getStartDate(), getEndDate(),-7); } else if (ChartsHost.DATE_NEXT_MONTH.equals(action)) { - handleDate(getStartDate(), getEndDate(),+30); + //calculate dates to jump by month but keep subsequent logic working + int time1 = DateTimeUtils.shiftMonths((int )(getStartDate().getTime()/1000), 1); + int time2 = DateTimeUtils.shiftMonths((int )(getEndDate().getTime()/1000), 1); + Date date1 = DateTimeUtils.shiftByDays(new Date(time1 * 1000L), 30); + Date date2 = DateTimeUtils.shiftByDays(new Date(time2 * 1000L), 30); + handleDate(date1, date2,-30); } else if (ChartsHost.DATE_PREV_MONTH.equals(action)) { - handleDate(getStartDate(), getEndDate(),-30); + int time1 = DateTimeUtils.shiftMonths((int )(getStartDate().getTime()/1000), -1); + int time2 = DateTimeUtils.shiftMonths((int )(getEndDate().getTime()/1000), -1); + Date date1 = DateTimeUtils.shiftByDays(new Date(time1 * 1000L), -30); + Date date2 = DateTimeUtils.shiftByDays(new Date(time2 * 1000L), -30); + handleDate(date1, date2,30); } } @@ -308,7 +317,11 @@ public abstract class AbstractChartFragment extends AbstractGBFragment { protected boolean shiftDates(Date startDate, Date endDate, int offset) { Date newStart = DateTimeUtils.shiftByDays(startDate, offset); Date newEnd = DateTimeUtils.shiftByDays(endDate, offset); - + Date now = new Date(); + if (newEnd.after(now)) { //allow to jump to the end (now) if week/month reach after now + newEnd=now; + newStart=DateTimeUtils.shiftByDays(now,-1); + } return setDateRange(newStart, newEnd); } @@ -688,7 +701,8 @@ public abstract class AbstractChartFragment extends AbstractGBFragment { throw new IllegalArgumentException("Bad date range: " + from + ".." + to); } Date now = new Date(); - if (to.after(now)) { + if (to.after(now) || //do not refresh chart if we reached now + to.getTime()/10000 == (getEndDate().getTime()/10000)) { return false; } setStartDate(from); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ActivityListingDashboard.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ActivityListingDashboard.java index 2a431a2cf0..cfd54bec4e 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ActivityListingDashboard.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ActivityListingDashboard.java @@ -191,11 +191,6 @@ public class ActivityListingDashboard extends DialogFragment { battery_status_time_span_seekbar.setProgress(2); } - private int daysBetweenTimes(int time1, int time2) { - return (int) TimeUnit.MILLISECONDS.toDays((time2 - time1) * 1000L); - } - - protected RefreshTask createRefreshTask(String task, Context context) { return new RefreshTask(task, context); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/DateTimeUtils.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/DateTimeUtils.java index cd832d1463..d516781146 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/DateTimeUtils.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/DateTimeUtils.java @@ -189,4 +189,14 @@ public class DateTimeUtils { return (int) (day.getTimeInMillis() / 1000); } + /** + * Calculates difference in days between two timestamps + * + * @param time1 + * @param time2 + */ + public static int getDaysBetweenTimes(int time1, int time2) { + return (int) TimeUnit.MILLISECONDS.toDays((time2 - time1) * 1000L); + } + }