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 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6774d6f9b..4f953b3a7 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"> diff --git a/app/src/main/java/org/isoron/helpers/DateHelper.java b/app/src/main/java/org/isoron/helpers/DateHelper.java index dbc20b35b..361b18cac 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; private static Long fixedLocalTime = null; public static long getLocalTime() diff --git a/app/src/main/java/org/isoron/uhabits/HabitBroadcastReceiver.java b/app/src/main/java/org/isoron/uhabits/HabitBroadcastReceiver.java index c4969b835..1141a6f75 100644 --- a/app/src/main/java/org/isoron/uhabits/HabitBroadcastReceiver.java +++ b/app/src/main/java/org/isoron/uhabits/HabitBroadcastReceiver.java @@ -92,10 +92,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) @@ -103,10 +105,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); } @@ -129,12 +132,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); } @@ -146,6 +149,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.checkmarks.getTodayValue() != Checkmark.UNCHECKED) return; habit.highlight = 1; 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]; 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 9e54c88ff..d7c3ba775 100644 --- a/app/src/main/java/org/isoron/uhabits/views/RingView.java +++ b/app/src/main/java/org/isoron/uhabits/views/RingView.java @@ -50,6 +50,7 @@ public class RingView extends View private float maxDiameter; private float textSize; + public RingView(Context context, AttributeSet attrs) { super(context, attrs); @@ -133,7 +134,6 @@ public class RingView extends View float lineHeight = pRing.getFontSpacing(); canvas.drawText(String.format("%.0f%%", percentage * 100), rect.centerX(), rect.centerY() + lineHeight / 3, pRing); - pRing.setTextSize(textSize); canvas.translate(width / 2, diameter + labelMarginTop); labelLayout.draw(canvas); 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 35f7538c1..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,7 +104,13 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider if(habitId < 0) return; Habit habit = Habit.get(habitId); - if(habit == null) return; + 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