synchronize HabitList properly

When the app is not running and ReminderReceiver receives ACTION_SHOW_REMINDER,
the (SQLite)HabitList will start loading its data in the background for some
reason, and if the loading takes a moment, ReminderReceiver will call
the unsynchronized HabitList.getById() before the loading finishes,
failing to find the habit for which to show the notification.
pull/348/head
Luboš Luňák 8 years ago
parent b8f7d4fad2
commit b1c2ab90d3

@ -155,14 +155,14 @@ public class MemoryHabitList extends HabitList
}
@Override
public int indexOf(@NonNull Habit h)
public synchronized int indexOf(@NonNull Habit h)
{
return list.indexOf(h);
}
@NonNull
@Override
public Iterator<Habit> iterator()
public synchronized Iterator<Habit> iterator()
{
return Collections.unmodifiableCollection(list).iterator();
}
@ -200,13 +200,13 @@ public class MemoryHabitList extends HabitList
}
@Override
public int size()
public synchronized int size()
{
return list.size();
}
@Override
public void update(List<Habit> habits)
public synchronized void update(List<Habit> habits)
{
resort();
getObservable().notifyListeners();

@ -91,7 +91,7 @@ public class SQLiteHabitList extends HabitList
@Override
@Nullable
public Habit getById(long id)
public synchronized Habit getById(long id)
{
loadRecords();
return list.getById(id);
@ -99,7 +99,7 @@ public class SQLiteHabitList extends HabitList
@Override
@NonNull
public Habit getByPosition(int position)
public synchronized Habit getByPosition(int position)
{
loadRecords();
return list.getByPosition(position);
@ -107,7 +107,7 @@ public class SQLiteHabitList extends HabitList
@NonNull
@Override
public HabitList getFiltered(HabitMatcher filter)
public synchronized HabitList getFiltered(HabitMatcher filter)
{
loadRecords();
return list.getFiltered(filter);
@ -121,21 +121,21 @@ public class SQLiteHabitList extends HabitList
}
@Override
public void setOrder(@NonNull Order order)
public synchronized void setOrder(@NonNull Order order)
{
list.setOrder(order);
getObservable().notifyListeners();
}
@Override
public int indexOf(@NonNull Habit h)
public synchronized int indexOf(@NonNull Habit h)
{
loadRecords();
return list.indexOf(h);
}
@Override
public Iterator<Habit> iterator()
public synchronized Iterator<Habit> iterator()
{
loadRecords();
return list.iterator();
@ -214,7 +214,7 @@ public class SQLiteHabitList extends HabitList
}
@Override
public void repair()
public synchronized void repair()
{
loadRecords();
rebuildOrder();
@ -222,7 +222,7 @@ public class SQLiteHabitList extends HabitList
}
@Override
public int size()
public synchronized int size()
{
loadRecords();
return list.size();
@ -245,7 +245,7 @@ public class SQLiteHabitList extends HabitList
getObservable().notifyListeners();
}
public void reload()
public synchronized void reload()
{
loaded = false;
}

Loading…
Cancel
Save