From 5516f40571ca6cb1e399e8575eefcfbab817f4d9 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Sat, 30 Jan 2021 19:53:57 -0600 Subject: [PATCH 1/4] Bump version to 1.8.12; update CHANGELOG and release notes --- CHANGELOG.md | 5 +++++ android/gradle.properties | 4 ++-- .../src/main/play/release-notes/en-US/default.txt | 5 +++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 09d7bace6..bb7ca9226 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +### 1.8.12 (TBD) + +* Fix bug that caused incorrect check marks to show after scrolling (#713) +* Fix issue preventing widgets from updating at midnight (#680) + ### 1.8.11 (Dev 29, 2020) * Fix theme issues on Xiaomi phones diff --git a/android/gradle.properties b/android/gradle.properties index 0617454e0..870dacfa1 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,5 +1,5 @@ -VERSION_CODE = 10811 -VERSION_NAME = 1.8.11 +VERSION_CODE = 10812 +VERSION_NAME = 1.8.12 MIN_SDK_VERSION = 21 TARGET_SDK_VERSION = 29 diff --git a/android/uhabits-android/src/main/play/release-notes/en-US/default.txt b/android/uhabits-android/src/main/play/release-notes/en-US/default.txt index 98136243c..bbebfe656 100644 --- a/android/uhabits-android/src/main/play/release-notes/en-US/default.txt +++ b/android/uhabits-android/src/main/play/release-notes/en-US/default.txt @@ -1,2 +1,3 @@ -1.8.11: -* Fix theme issues on Xiaomi phones +1.8.12: +* Fix bug that caused incorrect check marks to show after scrolling +* Fix issue preventing widgets from updating at midnight From 2cf3347f8c8c878e16dc79387e0b544d4b080f8d Mon Sep 17 00:00:00 2001 From: Quentin Hibon Date: Thu, 28 Jan 2021 23:36:56 +0100 Subject: [PATCH 2/4] Set dataOffset when attaching a new CardView Fixes #713. --- .../activities/habits/list/views/HabitCardListAdapter.java | 2 +- .../uhabits/activities/habits/list/views/HabitCardListView.kt | 3 ++- .../activities/habits/list/views/HabitCardViewHolder.kt | 4 +--- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListAdapter.java b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListAdapter.java index ad4f8013e..1b9d30a04 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListAdapter.java +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListAdapter.java @@ -206,7 +206,7 @@ public class HabitCardListAdapter int viewType) { if (listView == null) return null; - View view = listView.createHabitCardView(); + HabitCardView view = listView.createHabitCardView(); return new HabitCardViewHolder(view); } diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.kt index 259d1f14a..211c436ed 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.kt +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.kt @@ -62,7 +62,7 @@ class HabitCardListView( super.setAdapter(adapter) } - fun createHabitCardView(): View { + fun createHabitCardView(): HabitCardView { return cardViewFactory.create() } @@ -91,6 +91,7 @@ class HabitCardListView( } fun attachCardView(holder: HabitCardViewHolder) { + (holder.itemView as HabitCardView).dataOffset = dataOffset attachedHolders.add(holder) } diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardViewHolder.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardViewHolder.kt index 3f0b9d0ca..865c0d8f5 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardViewHolder.kt +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardViewHolder.kt @@ -19,8 +19,6 @@ package org.isoron.uhabits.activities.habits.list.views -import androidx.appcompat.widget.* -import android.view.* import androidx.recyclerview.widget.RecyclerView -class HabitCardViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) +class HabitCardViewHolder(itemView: HabitCardView) : RecyclerView.ViewHolder(itemView) From 4dd77463fb29a50bce248d91ab9b6b2cd987f159 Mon Sep 17 00:00:00 2001 From: Kristian Tashkov Date: Sun, 6 Sep 2020 01:25:46 +0300 Subject: [PATCH 3/4] Update widgets at midnight (#634) --- .../org/isoron/uhabits/HabitsApplication.kt | 1 + .../isoron/uhabits/intents/IntentScheduler.kt | 13 +++++++++---- .../uhabits/intents/PendingIntentFactory.kt | 8 ++++++++ .../uhabits/receivers/WidgetReceiver.java | 17 +++++++++++++++-- .../org/isoron/uhabits/widgets/WidgetUpdater.kt | 10 +++++++++- .../core/reminders/ReminderScheduler.java | 2 ++ .../isoron/uhabits/core/utils/DateUtils.java | 7 ++++++- .../uhabits/core/utils/DateUtilsTest.java | 1 + 8 files changed, 51 insertions(+), 8 deletions(-) diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.kt index df162766c..a2c2b0e99 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.kt +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.kt @@ -62,6 +62,7 @@ class HabitsApplication : Application() { widgetUpdater = component.widgetUpdater widgetUpdater.startListening() + widgetUpdater.scheduleStartDayWidgetUpdate() reminderScheduler = component.reminderScheduler reminderScheduler.startListening() diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentScheduler.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentScheduler.kt index 934942f15..2882d3022 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentScheduler.kt +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentScheduler.kt @@ -45,7 +45,7 @@ class IntentScheduler private val manager = context.getSystemService(ALARM_SERVICE) as AlarmManager - fun schedule(timestamp: Long, intent: PendingIntent) { + fun schedule(timestamp: Long, intent: PendingIntent, alarmType: Int) { Log.d("IntentScheduler", "timestamp=" + timestamp + " current=" + System.currentTimeMillis()) if (timestamp < System.currentTimeMillis()) { @@ -54,19 +54,24 @@ class IntentScheduler return; } if (SDK_INT >= M) - manager.setExactAndAllowWhileIdle(RTC_WAKEUP, timestamp, intent) + manager.setExactAndAllowWhileIdle(alarmType, timestamp, intent) else - manager.setExact(RTC_WAKEUP, timestamp, intent) + manager.setExact(alarmType, timestamp, intent) } override fun scheduleShowReminder(reminderTime: Long, habit: Habit, timestamp: Long) { val intent = pendingIntents.showReminder(habit, reminderTime, timestamp) - schedule(reminderTime, intent) + schedule(reminderTime, intent, RTC_WAKEUP) logReminderScheduled(habit, reminderTime) } + override fun scheduleWidgetUpdate(updateTime: Long) { + val intent = pendingIntents.updateWidgets() + schedule(updateTime, intent, RTC) + } + override fun log(componentName: String, msg: String) { Log.d(componentName, msg) } diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.kt index 0901a0836..befdc7be0 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.kt +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.kt @@ -103,4 +103,12 @@ class PendingIntentFactory if (timestamp != null) putExtra("timestamp", timestamp) }, FLAG_UPDATE_CURRENT) + + fun updateWidgets(): PendingIntent = + PendingIntent.getBroadcast( + context, 0, + Intent(context, WidgetReceiver::class.java).apply { + action = WidgetReceiver.ACTION_UPDATE_WIDGETS_VALUE + }, + FLAG_UPDATE_CURRENT) } diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java b/android/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java index e5dec0218..7320a40dd 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java @@ -26,6 +26,7 @@ import org.isoron.uhabits.*; import org.isoron.uhabits.core.preferences.*; import org.isoron.uhabits.core.ui.widgets.*; import org.isoron.uhabits.intents.*; +import org.isoron.uhabits.widgets.*; import dagger.*; @@ -48,6 +49,9 @@ public class WidgetReceiver extends BroadcastReceiver public static final String ACTION_TOGGLE_REPETITION = "org.isoron.uhabits.ACTION_TOGGLE_REPETITION"; + public static final String ACTION_UPDATE_WIDGETS_VALUE = + "org.isoron.uhabits.ACTION_UPDATE_WIDGETS_VALUE"; + private static final String TAG = "WidgetReceiver"; @Override @@ -64,13 +68,17 @@ public class WidgetReceiver extends BroadcastReceiver IntentParser parser = app.getComponent().getIntentParser(); WidgetBehavior controller = component.getWidgetController(); Preferences prefs = app.getComponent().getPreferences(); + WidgetUpdater widgetUpdater = app.getComponent().getWidgetUpdater(); Log.i(TAG, String.format("Received intent: %s", intent.toString())); try { - IntentParser.CheckmarkIntentData data; - data = parser.parseCheckmarkIntent(intent); + IntentParser.CheckmarkIntentData data = null; + if (intent.getAction() != ACTION_UPDATE_WIDGETS_VALUE) + { + data = parser.parseCheckmarkIntent(intent); + } switch (intent.getAction()) { @@ -100,6 +108,11 @@ public class WidgetReceiver extends BroadcastReceiver controller.onRemoveRepetition(data.getHabit(), data.getTimestamp()); break; + + case ACTION_UPDATE_WIDGETS_VALUE: + widgetUpdater.updateWidgets(); + widgetUpdater.scheduleStartDayWidgetUpdate(); + break; } } catch (RuntimeException e) diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/WidgetUpdater.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/WidgetUpdater.kt index b8293582a..3f84f4fc3 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/WidgetUpdater.kt +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/WidgetUpdater.kt @@ -25,6 +25,8 @@ import org.isoron.androidbase.* import org.isoron.uhabits.core.commands.* import org.isoron.uhabits.core.preferences.* import org.isoron.uhabits.core.tasks.* +import org.isoron.uhabits.core.utils.* +import org.isoron.uhabits.intents.* import javax.inject.* /** @@ -36,7 +38,8 @@ class WidgetUpdater @AppContext private val context: Context, private val commandRunner: CommandRunner, private val taskRunner: TaskRunner, - private val widgetPrefs: WidgetPreferences + private val widgetPrefs: WidgetPreferences, + private val intentScheduler: IntentScheduler ) : CommandRunner.Listener { override fun onCommandExecuted(command: Command, refreshKey: Long?) { @@ -60,6 +63,11 @@ class WidgetUpdater commandRunner.removeListener(this) } + fun scheduleStartDayWidgetUpdate() { + val timestamp = DateUtils.getStartOfTomorrow() + intentScheduler.scheduleWidgetUpdate(timestamp); + } + fun updateWidgets(modifiedHabitId: Long?) { taskRunner.execute { updateWidgets(modifiedHabitId, CheckmarkWidgetProvider::class.java) diff --git a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/reminders/ReminderScheduler.java b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/reminders/ReminderScheduler.java index ab00c78eb..6dfb41e38 100644 --- a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/reminders/ReminderScheduler.java +++ b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/reminders/ReminderScheduler.java @@ -164,6 +164,8 @@ public class ReminderScheduler implements CommandRunner.Listener { void scheduleShowReminder(long reminderTime, Habit habit, long timestamp); + void scheduleWidgetUpdate(long updateTime); + void log(String componentName, String msg); } } diff --git a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/DateUtils.java b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/DateUtils.java index 796a12740..e10625d05 100644 --- a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/DateUtils.java +++ b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/DateUtils.java @@ -175,9 +175,14 @@ public abstract class DateUtils return getStartOfDay(getLocalTime()); } + public static long getStartOfTomorrow() + { + return getUpcomingTimeInMillis(0, 0); + } + public static long millisecondsUntilTomorrow() { - return getStartOfToday() + DAY_LENGTH - getLocalTime(); + return getStartOfTomorrow() - getLocalTime(); } public static GregorianCalendar getStartOfTodayCalendar() diff --git a/android/uhabits-core/src/test/java/org/isoron/uhabits/core/utils/DateUtilsTest.java b/android/uhabits-core/src/test/java/org/isoron/uhabits/core/utils/DateUtilsTest.java index ee7db003a..84c942cb4 100644 --- a/android/uhabits-core/src/test/java/org/isoron/uhabits/core/utils/DateUtilsTest.java +++ b/android/uhabits-core/src/test/java/org/isoron/uhabits/core/utils/DateUtilsTest.java @@ -164,6 +164,7 @@ public class DateUtilsTest extends BaseUnitTest @Test public void testMillisecondsUntilTomorrow() throws Exception { + DateUtils.setFixedTimeZone(TimeZone.getTimeZone("GMT")); DateUtils.setFixedLocalTime(unixTime(2017, JANUARY, 1, 23, 59)); assertThat(DateUtils.millisecondsUntilTomorrow(), equalTo(60000L)); From 0f86cb4d5340c4b35f84adb11a260deb0bddad89 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Sat, 30 Jan 2021 20:39:19 -0600 Subject: [PATCH 4/4] Update list of developers --- android/uhabits-android/src/main/res/layout/about.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/android/uhabits-android/src/main/res/layout/about.xml b/android/uhabits-android/src/main/res/layout/about.xml index f36bd68d2..b86a1b931 100644 --- a/android/uhabits-android/src/main/res/layout/about.xml +++ b/android/uhabits-android/src/main/res/layout/about.xml @@ -129,6 +129,8 @@ + +