Merge branch 'hotfix/v1.8.12'

pull/760/head v1.8.12
Alinson S. Xavier 5 years ago
commit 98abebe099

@ -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

@ -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

@ -62,6 +62,7 @@ class HabitsApplication : Application() {
widgetUpdater = component.widgetUpdater
widgetUpdater.startListening()
widgetUpdater.scheduleStartDayWidgetUpdate()
reminderScheduler = component.reminderScheduler
reminderScheduler.startListening()

@ -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);
}

@ -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)
}

@ -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)

@ -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)
}

@ -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)
}

@ -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;
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)

@ -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)

@ -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

@ -129,6 +129,8 @@
<TextView style="@style/About.Item" android:text="Nikhil (regularcoder)"/>
<TextView style="@style/About.Item" android:text="JanetQC"/>
<TextView style="@style/About.Item" android:text="olegivo"/>
<TextView style="@style/About.Item" android:text="Kristian Tashkov"/>
<TextView style="@style/About.Item" android:text="Quentin Hibon (hiqua)"/>
<TextView
android:id="@+id/tvContributors"
style="@style/About.Item.Clickable"

@ -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);
}
}

@ -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()

@ -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));

Loading…
Cancel
Save