From 59ed9ec9bd0e8c20061a24d61df6a67a564ee7b7 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Tue, 15 Mar 2016 19:51:50 -0400 Subject: [PATCH 1/6] Bump version to 1.3.1 --- app/src/main/AndroidManifest.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 545c02988..46f3eac51 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,8 +21,8 @@ + android:versionCode="11" + android:versionName="1.3.1"> From 8102c18c67bf17a7bbe9f4ebc2d2e22d6435a15a Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Tue, 15 Mar 2016 19:55:50 -0400 Subject: [PATCH 2/6] Use long for millisecondsInOneDay Fixes #34 --- app/src/main/java/org/isoron/helpers/DateHelper.java | 2 +- app/src/main/java/org/isoron/uhabits/models/ScoreList.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/isoron/helpers/DateHelper.java b/app/src/main/java/org/isoron/helpers/DateHelper.java index 0aef8c0c6..173c5c627 100644 --- a/app/src/main/java/org/isoron/helpers/DateHelper.java +++ b/app/src/main/java/org/isoron/helpers/DateHelper.java @@ -31,7 +31,7 @@ import java.util.TimeZone; public class DateHelper { - public static int millisecondsInOneDay = 24 * 60 * 60 * 1000; + public static long millisecondsInOneDay = 24 * 60 * 60 * 1000; public static long getLocalTime() { diff --git a/app/src/main/java/org/isoron/uhabits/models/ScoreList.java b/app/src/main/java/org/isoron/uhabits/models/ScoreList.java index 18b67758d..c703e393a 100644 --- a/app/src/main/java/org/isoron/uhabits/models/ScoreList.java +++ b/app/src/main/java/org/isoron/uhabits/models/ScoreList.java @@ -124,7 +124,7 @@ public class ScoreList return lastScore; } - public int[] getAllValues(Long fromTimestamp, Long toTimestamp, Integer divisor) + public int[] getAllValues(Long fromTimestamp, Long toTimestamp, Long divisor) { // Force rebuild of the score table getNewestValue(); @@ -157,7 +157,7 @@ public class ScoreList } - public int[] getAllValues(int divisor) + public int[] getAllValues(long divisor) { Repetition oldestRep = habit.repetitions.getOldest(); if(oldestRep == null) return new int[0]; From ef847dac17407a62d2a2181eed51faf7cd7a85c6 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Mon, 14 Mar 2016 13:34:05 -0400 Subject: [PATCH 3/6] Use StaticLayout to draw RingView label Fixes #29 --- .../org/isoron/uhabits/views/RingView.java | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/isoron/uhabits/views/RingView.java b/app/src/main/java/org/isoron/uhabits/views/RingView.java index 80c04c095..1e05e00d3 100644 --- a/app/src/main/java/org/isoron/uhabits/views/RingView.java +++ b/app/src/main/java/org/isoron/uhabits/views/RingView.java @@ -24,6 +24,9 @@ import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RectF; +import android.text.Layout; +import android.text.StaticLayout; +import android.text.TextPaint; import android.util.AttributeSet; import android.view.View; @@ -37,10 +40,11 @@ public class RingView extends View private int size; private int color; private float percentage; - private Paint pRing; - private float lineHeight; + private float labelMarginTop; + private TextPaint pRing; private String label; private RectF rect; + private StaticLayout labelLayout; public RingView(Context context, AttributeSet attrs) { @@ -68,12 +72,16 @@ public class RingView extends View private void init() { - pRing = new Paint(); + pRing = new TextPaint(); pRing.setAntiAlias(true); pRing.setColor(color); pRing.setTextAlign(Paint.Align.CENTER); - pRing.setTextSize(size * 0.2f); - lineHeight = pRing.getFontSpacing(); + + pRing.setTextSize(size * 0.15f); + labelMarginTop = size * 0.10f; + labelLayout = new StaticLayout(label, pRing, size, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0f, + false); + rect = new RectF(); } @@ -81,7 +89,11 @@ public class RingView extends View protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); - setMeasuredDimension(size, size + (int) (2 * lineHeight)); + + int width = Math.max(size, labelLayout.getWidth()); + int height = (int) (size + labelLayout.getHeight() + labelMarginTop); + + setMeasuredDimension(width, height); } @Override @@ -101,12 +113,14 @@ public class RingView extends View rect.inset(thickness, thickness); canvas.drawArc(rect, -90, 360, true, pRing); + float lineHeight = pRing.getFontSpacing(); pRing.setColor(Color.GRAY); pRing.setTextSize(size * 0.2f); canvas.drawText(String.format("%.0f%%", percentage * 100), rect.centerX(), rect.centerY() + lineHeight / 3, pRing); pRing.setTextSize(size * 0.15f); - canvas.drawText(label, size / 2, size + lineHeight * 1.2f, pRing); + canvas.translate(size / 2, size + labelMarginTop); + labelLayout.draw(canvas); } } From 7778c5fb2126728bb08ae8d786c440d418f1a06e Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Tue, 15 Mar 2016 20:17:15 -0400 Subject: [PATCH 4/6] Check for null on notifications --- .../uhabits/HabitBroadcastReceiver.java | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/org/isoron/uhabits/HabitBroadcastReceiver.java b/app/src/main/java/org/isoron/uhabits/HabitBroadcastReceiver.java index a43757c84..4546bdd24 100644 --- a/app/src/main/java/org/isoron/uhabits/HabitBroadcastReceiver.java +++ b/app/src/main/java/org/isoron/uhabits/HabitBroadcastReceiver.java @@ -91,10 +91,12 @@ public class HabitBroadcastReceiver extends BroadcastReceiver SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); long delayMinutes = Long.parseLong(prefs.getString("pref_snooze_interval", "15")); - Habit habit = Habit.get(ContentUris.parseId(data)); - ReminderHelper.createReminderAlarm(context, habit, - new Date().getTime() + delayMinutes * 60 * 1000); - dismissNotification(context, habit); + long habitId = ContentUris.parseId(data); + Habit habit = Habit.get(habitId); + if(habit != null) + ReminderHelper.createReminderAlarm(context, habit, + new Date().getTime() + delayMinutes * 60 * 1000); + dismissNotification(context, habitId); } private void checkHabit(Context context, Intent intent) @@ -102,10 +104,11 @@ public class HabitBroadcastReceiver extends BroadcastReceiver Uri data = intent.getData(); Long timestamp = intent.getLongExtra("timestamp", DateHelper.getStartOfToday()); - Habit habit = Habit.get(ContentUris.parseId(data)); - habit.repetitions.toggle(timestamp); - habit.save(); - dismissNotification(context, habit); + long habitId = ContentUris.parseId(data); + Habit habit = Habit.get(habitId); + if(habit != null) + habit.repetitions.toggle(timestamp); + dismissNotification(context, habitId); sendRefreshBroadcast(context); } @@ -128,12 +131,12 @@ public class HabitBroadcastReceiver extends BroadcastReceiver } } - private void dismissNotification(Context context, Habit habit) + private void dismissNotification(Context context, Long habitId) { NotificationManager notificationManager = (NotificationManager) context.getSystemService(Activity.NOTIFICATION_SERVICE); - int notificationId = (int) (habit.getId() % Integer.MAX_VALUE); + int notificationId = (int) (habitId % Integer.MAX_VALUE); notificationManager.cancel(notificationId); } @@ -145,6 +148,7 @@ public class HabitBroadcastReceiver extends BroadcastReceiver Long timestamp = intent.getLongExtra("timestamp", DateHelper.getStartOfToday()); Long reminderTime = intent.getLongExtra("reminderTime", DateHelper.getStartOfToday()); + if (habit == null) return; if (habit.repetitions.hasImplicitRepToday()) return; habit.highlight = 1; From 851cae366216b7d0b1af5a3c9b62a5180ada6e97 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Tue, 15 Mar 2016 20:25:47 -0400 Subject: [PATCH 5/6] Show error message on widget when habit not found Fixes #35 --- .../uhabits/widgets/BaseWidgetProvider.java | 10 ++++- app/src/main/res/layout/widget_error.xml | 41 +++++++++++++++++++ 2 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 app/src/main/res/layout/widget_error.xml diff --git a/app/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java b/app/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java index 6f95d5713..1610c243a 100644 --- a/app/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java +++ b/app/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java @@ -25,7 +25,6 @@ import android.appwidget.AppWidgetProvider; import android.content.Context; import android.content.SharedPreferences; import android.graphics.Bitmap; -import android.media.Image; import android.os.Build; import android.os.Bundle; import android.preference.PreferenceManager; @@ -33,7 +32,6 @@ import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageView; -import android.widget.LinearLayout; import android.widget.RemoteViews; import org.isoron.helpers.DialogHelper; @@ -106,6 +104,14 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider if(habitId < 0) return; Habit habit = Habit.get(habitId); + if(habit == null) + { + RemoteViews errorView = new RemoteViews(context.getPackageName(), + R.layout.widget_error); + manager.updateAppWidget(widgetId, errorView); + return; + } + View widgetView = buildCustomView(context, habit); measureCustomView(context, width, height, widgetView); diff --git a/app/src/main/res/layout/widget_error.xml b/app/src/main/res/layout/widget_error.xml new file mode 100644 index 000000000..37155adf6 --- /dev/null +++ b/app/src/main/res/layout/widget_error.xml @@ -0,0 +1,41 @@ + + + + + + + + \ No newline at end of file From fcb82bcb72324d65629f72d34c753c30ec823513 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Tue, 15 Mar 2016 20:30:01 -0400 Subject: [PATCH 6/6] Update changelog for v1.3.1 --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f4dd8bd6c..74771cfd3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +### 1.3.1 (March 15, 2016) + +* Fixes crash on devices with large screen, such as the Nexus 10 +* Fixes crash when clicking widgets and reminders of deleted habits +* Other minor bug fixes + ### 1.3.0 (March 12, 2016) * New frequency plot: view total repetitions per day of week