Skip to content

Commit

Permalink
Merge branch 'hotfix/v1.8.12'
Browse files Browse the repository at this point in the history
  • Loading branch information
iSoron committed Jan 31, 2021
2 parents 56f9152 + 0f86cb4 commit 98abebe
Show file tree
Hide file tree
Showing 15 changed files with 67 additions and 17 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
4 changes: 2 additions & 2 deletions android/gradle.properties
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ class HabitsApplication : Application() {

widgetUpdater = component.widgetUpdater
widgetUpdater.startListening()
widgetUpdater.scheduleStartDayWidgetUpdate()

reminderScheduler = component.reminderScheduler
reminderScheduler.startListening()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ public HabitCardViewHolder onCreateViewHolder(ViewGroup parent,
int viewType)
{
if (listView == null) return null;
View view = listView.createHabitCardView();
HabitCardView view = listView.createHabitCardView();
return new HabitCardViewHolder(view);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ class HabitCardListView(
super.setAdapter(adapter)
}

fun createHabitCardView(): View {
fun createHabitCardView(): HabitCardView {
return cardViewFactory.create()
}

Expand Down Expand Up @@ -91,6 +91,7 @@ class HabitCardListView(
}

fun attachCardView(holder: HabitCardViewHolder) {
(holder.itemView as HabitCardView).dataOffset = dataOffset
attachedHolders.add(holder)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Original file line number Diff line number Diff line change
Expand Up @@ -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()) {
Expand All @@ -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)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
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.*;

Expand All @@ -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
Expand All @@ -64,13 +68,17 @@ public void onReceive(final Context context, Intent intent)
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())
{
Expand Down Expand Up @@ -100,6 +108,11 @@ public void onReceive(final Context context, Intent intent)
controller.onRemoveRepetition(data.getHabit(),
data.getTimestamp());
break;

case ACTION_UPDATE_WIDGETS_VALUE:
widgetUpdater.updateWidgets();
widgetUpdater.scheduleStartDayWidgetUpdate();
break;
}
}
catch (RuntimeException e)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.*

/**
Expand All @@ -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?) {
Expand All @@ -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)
Expand Down
Original file line number Diff line number Diff line change
@@ -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
2 changes: 2 additions & 0 deletions android/uhabits-android/src/main/res/layout/about.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,8 @@ public interface SystemScheduler
{
void scheduleShowReminder(long reminderTime, Habit habit, long timestamp);

void scheduleWidgetUpdate(long updateTime);

void log(String componentName, String msg);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -175,9 +175,14 @@ public static long getStartOfToday()
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()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,7 @@ public void testTruncate_year()
@Test
public void testMillisecondsUntilTomorrow() throws Exception
{
DateUtils.setFixedTimeZone(TimeZone.getTimeZone("GMT"));
DateUtils.setFixedLocalTime(unixTime(2017, JANUARY, 1, 23, 59));
assertThat(DateUtils.millisecondsUntilTomorrow(), equalTo(60000L));

Expand Down

0 comments on commit 98abebe

Please sign in to comment.