From 59a2f31a73c16eb0000c49a4d76b3959e6282a94 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Thu, 10 Mar 2016 05:25:22 -0500 Subject: [PATCH] Fix timezone issues; rename class to HabitFrequencyView --- .../uhabits/fragments/ShowHabitFragment.java | 6 ++-- .../isoron/uhabits/models/RepetitionList.java | 12 ++----- ...uencyView.java => HabitFrequencyView.java} | 35 +++++++++++++++---- 3 files changed, 35 insertions(+), 18 deletions(-) rename app/src/main/java/org/isoron/uhabits/views/{WeekdayFrequencyView.java => HabitFrequencyView.java} (88%) diff --git a/app/src/main/java/org/isoron/uhabits/fragments/ShowHabitFragment.java b/app/src/main/java/org/isoron/uhabits/fragments/ShowHabitFragment.java index 57b4be849..e1dde9c66 100644 --- a/app/src/main/java/org/isoron/uhabits/fragments/ShowHabitFragment.java +++ b/app/src/main/java/org/isoron/uhabits/fragments/ShowHabitFragment.java @@ -42,7 +42,7 @@ import org.isoron.uhabits.helpers.ReminderHelper; import org.isoron.uhabits.models.Habit; import org.isoron.uhabits.models.Score; import org.isoron.uhabits.views.HabitHistoryView; -import org.isoron.uhabits.views.WeekdayFrequencyView; +import org.isoron.uhabits.views.HabitFrequencyView; import org.isoron.uhabits.views.HabitScoreView; import org.isoron.uhabits.views.HabitStreakView; import org.isoron.uhabits.views.RingView; @@ -55,7 +55,7 @@ public class ShowHabitFragment extends Fragment private HabitStreakView streakView; private HabitScoreView scoreView; private HabitHistoryView historyView; - private WeekdayFrequencyView punchcardView; + private HabitFrequencyView punchcardView; @Override public void onStart() @@ -77,7 +77,7 @@ public class ShowHabitFragment extends Fragment streakView = (HabitStreakView) view.findViewById(R.id.streakView); scoreView = (HabitScoreView) view.findViewById(R.id.scoreView); historyView = (HabitHistoryView) view.findViewById(R.id.historyView); - punchcardView = (WeekdayFrequencyView) view.findViewById(R.id.punchcardView); + punchcardView = (HabitFrequencyView) view.findViewById(R.id.punchcardView); updateHeaders(view); updateScoreRing(view); diff --git a/app/src/main/java/org/isoron/uhabits/models/RepetitionList.java b/app/src/main/java/org/isoron/uhabits/models/RepetitionList.java index 4118933e7..f21038748 100644 --- a/app/src/main/java/org/isoron/uhabits/models/RepetitionList.java +++ b/app/src/main/java/org/isoron/uhabits/models/RepetitionList.java @@ -21,7 +21,6 @@ package org.isoron.uhabits.models; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; -import android.util.Log; import com.activeandroid.Cache; import com.activeandroid.query.Delete; @@ -129,6 +128,7 @@ public class RepetitionList if(!cursor.moveToFirst()) return new HashMap<>(); HashMap map = new HashMap<>(); + GregorianCalendar date = DateHelper.getStartOfTodayCalendar(); do { @@ -137,15 +137,9 @@ public class RepetitionList int weekday = (Integer.parseInt(cursor.getString(2)) + 1) % 7; int count = cursor.getInt(3); - Log.d("RepetitionList", - String.format("year=%d month=%d weekday=%d", year, month, weekday)); - - GregorianCalendar date = DateHelper.getStartOfTodayCalendar(); - date.set(Calendar.YEAR, year); - date.set(Calendar.MONTH, month); - date.set(Calendar.DAY_OF_MONTH, 1); - + date.set(year, month - 1, 1); long timestamp = date.getTimeInMillis(); + Integer[] list = map.get(timestamp); if(list == null) diff --git a/app/src/main/java/org/isoron/uhabits/views/WeekdayFrequencyView.java b/app/src/main/java/org/isoron/uhabits/views/HabitFrequencyView.java similarity index 88% rename from app/src/main/java/org/isoron/uhabits/views/WeekdayFrequencyView.java rename to app/src/main/java/org/isoron/uhabits/views/HabitFrequencyView.java index ee404ed1b..98cc96543 100644 --- a/app/src/main/java/org/isoron/uhabits/views/WeekdayFrequencyView.java +++ b/app/src/main/java/org/isoron/uhabits/views/HabitFrequencyView.java @@ -25,6 +25,7 @@ import android.graphics.Color; import android.graphics.Paint; import android.graphics.RectF; import android.util.AttributeSet; +import android.util.Log; import org.isoron.helpers.ColorHelper; import org.isoron.helpers.DateHelper; @@ -37,8 +38,9 @@ import java.util.GregorianCalendar; import java.util.HashMap; import java.util.Locale; import java.util.Random; +import java.util.TimeZone; -public class WeekdayFrequencyView extends ScrollableDataView +public class HabitFrequencyView extends ScrollableDataView { private Paint pGrid; @@ -65,7 +67,7 @@ public class WeekdayFrequencyView extends ScrollableDataView private HashMap frequency; private String wdays[]; - public WeekdayFrequencyView(Context context, AttributeSet attrs) + public HabitFrequencyView(Context context, AttributeSet attrs) { super(context, attrs); this.primaryColor = ColorHelper.palette[7]; @@ -91,6 +93,9 @@ public class WeekdayFrequencyView extends ScrollableDataView dfMonth = new SimpleDateFormat("MMM", Locale.getDefault()); dfYear = new SimpleDateFormat("yyyy", Locale.getDefault()); + dfMonth.setTimeZone(TimeZone.getTimeZone("GMT")); + dfYear.setTimeZone(TimeZone.getTimeZone("GMT")); + rect = new RectF(); prevRect = new RectF(); } @@ -207,14 +212,22 @@ public class WeekdayFrequencyView extends ScrollableDataView prevRect.setEmpty(); GregorianCalendar currentDate = DateHelper.getStartOfTodayCalendar(); + + SimpleDateFormat df = new SimpleDateFormat(); + df.setTimeZone(TimeZone.getTimeZone("GMT")); + currentDate.set(Calendar.DAY_OF_MONTH, 1); - currentDate.add(Calendar.MONTH, - nColumns + 2 - getDataOffset()); + currentDate.add(Calendar.MONTH, -nColumns + 2 - getDataOffset()); + + // - n + 3 - off + n - 2 for(int i = 0; i < nColumns - 1; i++) { rect.set(0, 0, columnWidth, columnHeight); rect.offset(i * columnWidth, 0); + Log.d("HabitFrequencyView", df.format(currentDate.getTime())); + drawColumn(canvas, rect, currentDate); currentDate.add(Calendar.MONTH, 1); } @@ -222,16 +235,22 @@ public class WeekdayFrequencyView extends ScrollableDataView private void drawColumn(Canvas canvas, RectF rect, GregorianCalendar date) { + Log.d("HabitFrequencyView", String.format("timestamp=%d", date.getTimeInMillis())); Integer values[] = frequency.get(date.getTimeInMillis()); float rowHeight = rect.height() / 8.0f; prevRect.set(rect); for (int i = 0; i < 7; i++) { - rect.set(0, 0, columnWidth, columnWidth); + rect.set(0, 0, baseSize, baseSize); rect.offset(prevRect.left, prevRect.top + columnWidth * i); - if(values != null) drawMarker(canvas, rect, values[i]); + if(values != null) + { + drawMarker(canvas, rect, values[i]); + Log.d("HabitFrequencyView", String.format("value[%d]=%d", i, values[i])); + } + rect.offset(0, rowHeight); } @@ -243,6 +262,7 @@ public class WeekdayFrequencyView extends ScrollableDataView Date time = date.getTime(); canvas.drawText(dfMonth.format(time), rect.centerX(), rect.centerY() - 0.1f * em, pText); + if(date.get(Calendar.MONTH) == 1) canvas.drawText(dfYear.format(time), rect.centerX(), rect.centerY() + 0.9f * em, pText); } @@ -267,9 +287,12 @@ public class WeekdayFrequencyView extends ScrollableDataView for (int i = 0; i < nRows; i++) { - canvas.drawText(wdays[i], rGrid.right - columnWidth, rGrid.top + rowHeight / 2 + 0.25f * em, pText); + canvas.drawText(wdays[i], rGrid.right - columnWidth, + rGrid.top + rowHeight / 2 + 0.25f * em, pText); + pGrid.setStrokeWidth(1f); canvas.drawLine(rGrid.left, rGrid.top, rGrid.right, rGrid.top, pGrid); + rGrid.offset(0, rowHeight); }