Merge branch 'hotfix/1.7.4'

pull/216/merge v1.7.4
Alinson S. Xavier 8 years ago
commit be3d7145ab

@ -21,8 +21,8 @@
<manifest
package="org.isoron.uhabits"
xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="30"
android:versionName="1.7.3">
android:versionCode="31"
android:versionName="1.7.4">
<uses-permission android:name="android.permission.VIBRATE"/>

@ -81,7 +81,7 @@ public abstract class ScoreList implements Iterable<Score>
* @param timestamp the timestamp of a day
* @return score value for that day
*/
public final int getValue(long timestamp)
public final synchronized int getValue(long timestamp)
{
compute(timestamp, timestamp);
Score s = getComputedByTimestamp(timestamp);

@ -38,6 +38,12 @@ import java.util.*;
public class SQLiteCheckmarkList extends CheckmarkList
{
private static final String ADD_QUERY =
"insert into Checkmarks(habit, timestamp, value) values (?,?,?)";
private static final String INVALIDATE_QUERY =
"delete from Checkmarks where habit = ? and timestamp >= ?";
@Nullable
private HabitRecord habitRecord;
@ -45,7 +51,7 @@ public class SQLiteCheckmarkList extends CheckmarkList
private final SQLiteUtils<CheckmarkRecord> sqlite;
@Nullable
private Integer todayValue;
private CachedData cache;
@NonNull
private final SQLiteStatement invalidateStatement;
@ -56,12 +62,6 @@ public class SQLiteCheckmarkList extends CheckmarkList
@NonNull
private final SQLiteDatabase db;
private static final String ADD_QUERY =
"insert into Checkmarks(habit, timestamp, value) values (?,?,?)";
private static final String INVALIDATE_QUERY =
"delete from Checkmarks where habit = ? and timestamp >= ?";
public SQLiteCheckmarkList(Habit habit)
{
super(habit);
@ -102,8 +102,7 @@ public class SQLiteCheckmarkList extends CheckmarkList
check(habit.getId());
compute(fromTimestamp, toTimestamp);
String query = "select habit, timestamp, value " +
"from checkmarks " +
String query = "select habit, timestamp, value from checkmarks " +
"where habit = ? and timestamp >= ? and timestamp <= ? " +
"order by timestamp desc";
@ -127,10 +126,19 @@ public class SQLiteCheckmarkList extends CheckmarkList
return toCheckmarks(records);
}
@Override
public int getTodayValue()
{
if (cache == null || cache.expired())
cache = new CachedData(super.getTodayValue());
return cache.todayValue;
}
@Override
public void invalidateNewerThan(long timestamp)
{
todayValue = null;
cache = null;
invalidateStatement.bindLong(1, habit.getId());
invalidateStatement.bindLong(2, timestamp);
invalidateStatement.execute();
@ -142,10 +150,8 @@ public class SQLiteCheckmarkList extends CheckmarkList
protected Checkmark getNewestComputed()
{
check(habit.getId());
String query = "select habit, timestamp, value " +
"from checkmarks " +
"where habit = ? " +
"order by timestamp desc " +
String query = "select habit, timestamp, value from checkmarks " +
"where habit = ? " + "order by timestamp desc " +
"limit 1";
String params[] = { Long.toString(habit.getId()) };
@ -157,10 +163,8 @@ public class SQLiteCheckmarkList extends CheckmarkList
protected Checkmark getOldestComputed()
{
check(habit.getId());
String query = "select habit, timestamp, value " +
"from checkmarks " +
"where habit = ? " +
"order by timestamp asc " +
String query = "select habit, timestamp, value from checkmarks " +
"where habit = ? " + "order by timestamp asc " +
"limit 1";
String params[] = { Long.toString(habit.getId()) };
@ -194,10 +198,21 @@ public class SQLiteCheckmarkList extends CheckmarkList
return checkmarks;
}
@Override
public int getTodayValue()
private static class CachedData
{
if(todayValue == null) todayValue = super.getTodayValue();
return todayValue;
int todayValue;
private long today;
CachedData(int todayValue)
{
this.todayValue = todayValue;
this.today = DateUtils.getStartOfToday();
}
boolean expired()
{
return today != DateUtils.getStartOfToday();
}
}
}

@ -270,9 +270,7 @@ public class SQLiteHabitList extends HabitList
for (HabitRecord record : recordList)
{
Habit habit = getById(record.getId());
if (habit == null)
throw new RuntimeException("habit not in database");
if (habit == null) continue;
if (!filter.matches(habit)) continue;
habits.add(habit);
}

@ -27,6 +27,7 @@ import com.activeandroid.*;
import org.isoron.uhabits.models.*;
import org.isoron.uhabits.models.sqlite.records.*;
import org.isoron.uhabits.utils.*;
import org.jetbrains.annotations.*;
import java.util.*;
@ -36,6 +37,11 @@ import java.util.*;
*/
public class SQLiteScoreList extends ScoreList
{
public static final String ADD_QUERY =
"insert into Score(habit, timestamp, score) values (?,?,?)";
public static final String INVALIDATE_QUERY =
"delete from Score where habit = ? and timestamp >= ?";
@Nullable
private HabitRecord habitRecord;
@ -43,23 +49,17 @@ public class SQLiteScoreList extends ScoreList
@NonNull
private final SQLiteUtils<ScoreRecord> sqlite;
@Nullable
private Integer todayValue;
@NonNull
private final SQLiteStatement invalidateStatement;
@NonNull
private final SQLiteStatement addStatement;
public static final String ADD_QUERY =
"insert into Score(habit, timestamp, score) values (?,?,?)";
public static final String INVALIDATE_QUERY =
"delete from Score where habit = ? " + "and timestamp >= ?";
private final SQLiteDatabase db;
@Nullable
private CachedData cache = null;
/**
* Constructs a new ScoreList associated with the given habit.
*
@ -105,15 +105,14 @@ public class SQLiteScoreList extends ScoreList
check(habit.getId());
compute(fromTimestamp, toTimestamp);
String query = "select habit, timestamp, score " +
"from Score " +
"where habit = ? and timestamp >= ? and timestamp <= ? " +
"order by timestamp desc";
String query = "select habit, timestamp, score from Score " +
"where habit = ? and timestamp >= ? and timestamp <= ? " +
"order by timestamp desc";
String params[] = {
Long.toString(habit.getId()),
Long.toString(fromTimestamp),
Long.toString(toTimestamp)
Long.toString(habit.getId()),
Long.toString(fromTimestamp),
Long.toString(toTimestamp)
};
List<ScoreRecord> records = sqlite.query(query, params);
@ -137,10 +136,19 @@ public class SQLiteScoreList extends ScoreList
return getScoreFromQuery(query, params);
}
@Override
public int getTodayValue()
{
if (cache == null || cache.expired())
cache = new CachedData(super.getTodayValue());
return cache.todayValue;
}
@Override
public void invalidateNewerThan(long timestamp)
{
todayValue = null;
cache = null;
invalidateStatement.bindLong(1, habit.getId());
invalidateStatement.bindLong(2, timestamp);
invalidateStatement.execute();
@ -171,8 +179,7 @@ public class SQLiteScoreList extends ScoreList
{
check(habit.getId());
String query = "select habit, timestamp, score from Score " +
"where habit = ? order by timestamp desc " +
"limit 1";
"where habit = ? order by timestamp desc limit 1";
String params[] = { Long.toString(habit.getId()) };
return getScoreFromQuery(query, params);
@ -184,8 +191,7 @@ public class SQLiteScoreList extends ScoreList
{
check(habit.getId());
String query = "select habit, timestamp, score from Score " +
"where habit = ? order by timestamp asc " +
"limit 1";
"where habit = ? order by timestamp asc limit 1";
String params[] = { Long.toString(habit.getId()) };
return getScoreFromQuery(query, params);
@ -217,10 +223,21 @@ public class SQLiteScoreList extends ScoreList
return scores;
}
@Override
public int getTodayValue()
private static class CachedData
{
if (todayValue == null) todayValue = super.getTodayValue();
return todayValue;
int todayValue;
private long today;
CachedData(int todayValue)
{
this.todayValue = todayValue;
this.today = DateUtils.getStartOfToday();
}
boolean expired()
{
return today != DateUtils.getStartOfToday();
}
}
}

Loading…
Cancel
Save