package org.bbssh.model;
import java.io.EOFException;
import java.util.Vector;
import net.rim.device.api.synchronization.SyncObject;
import org.bbssh.io.SyncBuffer;
public class SettingsManager extends DefaultSyncCollection {
private Settings settings;
public static final long SETTINGS_GUID = 0xcc33d531af98444cL; // org.bbssh.model.Settings
private static SettingsManager me;
private SettingsManager() {
}
public void initialize() {
// @todo - use this to give as element 1 -> internalSettings? Instead of
// adding internal settings to the user-configurable settings object...
Vector d = getDataVector();
if (d.size() == 0 || d.elementAt(0) == null) {
settings = new Settings();
d.addElement(settings);
commitData();
} else {
settings = (Settings) d.elementAt(0);
}
}
public synchronized static SettingsManager getInstance() {
if (me == null) {
me = new SettingsManager();
}
return me;
}
public static synchronized Settings getSettings() {
return getInstance().settings;
}
protected boolean convertImpl(SyncObject object, SyncBuffer buffer, int version) {
if (!(object instanceof Settings))
return false;
Settings s = (Settings) object;
buffer.writeField(s.isAutoCheckUpdateEnabled());
buffer.writeField(s.getAPN());
buffer.writeField(s.getAPNUserName());
buffer.writeField(s.getAPNPassword());
buffer.writeField(s.getShowPlaintextPassword());
buffer.writeField(s.isVibrateOnAlertEnabled());
// Free field: BYTE
buffer.writeField((byte) 0);
// Free field: INT
buffer.writeField((int) 0);
// Free field: INT
buffer.writeField((int) 0);
// Free field: BYTE
buffer.writeField((byte) 0);
// Free field: BYTE
buffer.writeField((byte) 0);
// Free field: BYTE
buffer.writeField((byte) 0);
// Oops - incorrect field was written here, this can be re-used for a boolean at any time.
buffer.writeField(false);
// END VERSION 0 FIELDS
// VERSION 1 FIELDS
// we can write this blindly, if user downgrades it wil just be ignored (then lost on save)
buffer.writeField(s.isHomeScreenNotificationIconEnabled());
// VERSION 2 FIELDS
buffer.writeField(s.getLastCleanupVersion());
// VERSION 3 FIELDS
buffer.writeField(s.isAnonymousUsageStatsEnabled());
buffer.writeField(s.isMessageIntegrationEnabled());
// VERSION 4 FIELDS
buffer.writeField(s.isBackgroundOnCloseEnabled());
int count = s.getRememberOptionCount();
buffer.writeField(count);
for (int x = 0; x < count; x++) {
buffer.writeField(s.getRememberOption(x));
}
// VERSION 5
buffer.writeField(s.isTitlebarDisplayEnabled());
// 6
buffer.writeField(s.getShowKeyboardOnSliderClose());
// 7
buffer.writeField(s.getLastSaveVersion());
// 8 - FFREE FIELD - boolean
buffer.writeField(false);
// 9
ConnectionManager mgr = ConnectionManager.getInstance();
buffer.writeField(mgr.getSyncVersion());
mgr.serializeConnectionProperties(s.getDefaultConnectionProperties(), buffer);
// 10
buffer.writeField(s.getDisableKeybindWhenOnCall());
// 11
buffer.writeField(s.getUpdateCheckInterval());
buffer.writeField(s.getLastUpdateCheckTime());
// 12 - available
buffer.writeField(true);
return true;
}
public SyncObject convertImpl(SyncBuffer buffer, int version, int UID, boolean syncDirty) {
Settings s = new Settings();
s.setSyncStateDirty(syncDirty);
try {
s.setAutoCheckUpdates(buffer.readNextBooleanField());
s.setAPN(buffer.readNextStringField());
s.setAPNUserName(buffer.readNextStringField());
s.setAPNPassword(buffer.readNextStringField());
s.setShowPlaintextPassword(buffer.readNextBooleanField());
s.setVibrateOnAlertEnabled(buffer.readNextBooleanField());
// @todo usage: if (version > safe-version) { use avail fields } else { ignore values }
// available field:
buffer.readNextByteField();
// available field:
buffer.readNextIntField();
// available field:
buffer.readNextIntField();
// available field (3x byte)
buffer.readNextByteField();
buffer.readNextByteField();
buffer.readNextByteField();
// Mistake in earlier version - discard the next field
buffer.readNextBooleanField();
// END VERSION 0 FIELDS
if (version >= 1) {
s.setHomeScreenNotificationIconEnabled(buffer.readNextBooleanField());
}
if (version >= 2) {
s.setLastCleanupVersion(buffer.readNextIntField());
}
if (version >= 3) {
s.setAnonymousUsageStatsEnabled(buffer.readNextBooleanField());
s.setMessageIntegrationEnabled(buffer.readNextBooleanField());
}
if (version >= 4) {
s.setBackgroundOnClose(buffer.readNextBooleanField());
int count = buffer.readNextIntField();
for (int x = 0; x < count; x++) {
s.setRememberOption(x, buffer.readNextBooleanField());
}
}
if (version >= 5) {
s.setTitlebarDisplayEnabled(buffer.readNextBooleanField());
}
if (version >= 6) {
s.setShowKeyboardOnSliderClose(buffer.readNextBooleanField());
}
if (version >= 7) {
s.setLastSaveVersion(buffer.readNextLongField());
}
if (version >= 8) {
// free field:
buffer.readNextBooleanField();
}
if (version >= 9) {
s.setDefaultConnectionProperties(ConnectionManager.getInstance().deserializeConnectionProperties(
buffer, buffer.readNextIntField()));
}
if (version >= 10) {
s.setDisableKeybindsWhenOnCall(buffer.readNextBooleanField());
}
if (version >= 11) {
s.setUpdateCheckInterval(buffer.readNextIntField());
s.setLastUpdateCheckTime(buffer.readNextLongField());
}
if (version >= 12) {
// available boolean field
buffer.readNextBooleanField();
}
} catch (EOFException e) {
s = null;
}
return s;
}
public String getSyncName() {
return "BBSSH Configuration";
}
public int getSyncVersion() {
return 12;
}
public long getPersistentStoreId() {
return SETTINGS_GUID;
}
public void resetDefaults() {
// Simple for us, we'll just re-initialize.
initialize();
}
public boolean isSecureStoreRequired() {
return false;
}
}