package net.bible.android.control.readingplan;
import java.util.BitSet;
import net.bible.service.common.CommonUtils;
import android.content.SharedPreferences;
/**
* @author Martin Denham [mjdenham at gmail dot com]
* @see gnu.lgpl.License for license details.<br>
* The copyright to this program is held by it's author.
*/
public class ReadingStatus {
private String planCode;
private int day;
private int numReadings;
// there won't be any more than 10 readings per day in any plan
private BitSet status = new BitSet(4);
private static final char ONE = '1';
private static final char ZERO = '0';
public ReadingStatus(String planCode, int day, int numReadings) {
super();
this.planCode = planCode;
this.day = day;
this.numReadings = numReadings;
reloadStatus();
}
public void setRead(int readingNo) {
status.set(readingNo);
saveStatus();
}
public boolean isRead(int readingNo) {
return status.get(readingNo);
}
public void setAllRead() {
for (int i=0; i<numReadings; i++) {
setRead(i);
}
saveStatus();
}
public boolean isAllRead() {
for (int i=0; i<numReadings; i++) {
if (!isRead(i)) {
return false;
}
}
return true;
}
/** do not leave prefs around for historic days
*/
public void delete() {
SharedPreferences prefs = CommonUtils.getSharedPreferences();
if (prefs.contains(getPrefsKey())) {
prefs.edit()
.remove(getPrefsKey())
.commit();
}
}
/** read status from prefs string
*/
public void reloadStatus() {
SharedPreferences prefs = CommonUtils.getSharedPreferences();
String gotStatus = prefs.getString(getPrefsKey(), "");
for (int i=0; i<gotStatus.length(); i++) {
if (gotStatus.charAt(i)==ONE) {
status.set(i);
} else {
status.clear(i);
}
}
}
/** serialize read status to prefs in a string
*/
private void saveStatus() {
StringBuffer strStatus = new StringBuffer();
for (int i=0; i<status.length(); i++) {
if (status.get(i)) {
strStatus.append(ONE);
} else {
strStatus.append(ZERO);
}
}
SharedPreferences prefs = CommonUtils.getSharedPreferences();
prefs.edit()
.putString(getPrefsKey(), strStatus.toString())
.commit();
}
protected String getPlanCode() {
return planCode;
}
protected int getDay() {
return day;
}
private String getPrefsKey() {
return planCode+"_"+day;
}
}