package org.ebookdroid.common.settings;
import org.ebookdroid.common.settings.books.BookBackupType;
import org.ebookdroid.common.settings.definitions.BackupPreferences;
import org.ebookdroid.common.settings.listeners.IBackupSettingsChangeListener;
import android.content.SharedPreferences;
import org.emdev.common.backup.BackupManager;
import org.emdev.common.backup.IBackupAgent;
import org.emdev.common.settings.backup.SettingsBackupHelper;
import org.json.JSONObject;
public class BackupSettings implements BackupPreferences, IBackupAgent {
public static final String BACKUP_KEY = "backup-settings";
private static BackupSettings current;
/* =============== Backup settings =============== */
public final boolean backupOnExit;
public final boolean backupOnBookClose;
public final int maxNumberOfAutoBackups;
public final BookBackupType bookBackup;
private BackupSettings() {
BackupManager.addAgent(this);
final SharedPreferences prefs = SettingsManager.prefs;
/* =============== Backup settings =============== */
backupOnExit = BACKUP_ON_EXIT.getPreferenceValue(prefs);
backupOnBookClose = BACKUP_ON_BOOK_CLOSE.getPreferenceValue(prefs);
maxNumberOfAutoBackups = MAX_NUMBER_OF_AUTO_BACKUPS.getPreferenceValue(prefs);
bookBackup = BOOK_BACKUP_TYPE.getPreferenceValue(prefs);
}
public static void init() {
current = new BackupSettings();
}
public static BackupSettings current() {
SettingsManager.lock.readLock().lock();
try {
return current;
} finally {
SettingsManager.lock.readLock().unlock();
}
}
@Override
public String key() {
return BACKUP_KEY;
}
@Override
public JSONObject backup() {
return SettingsBackupHelper.backup(BACKUP_KEY, SettingsManager.prefs, BackupPreferences.class);
}
@Override
public void restore(final JSONObject backup) {
// For backup compatibility
SettingsBackupHelper.restore(AppSettings.BACKUP_KEY, SettingsManager.prefs, BackupPreferences.class, backup);
SettingsBackupHelper.restore(BACKUP_KEY, SettingsManager.prefs, BackupPreferences.class, backup);
onSettingsChanged();
}
static Diff onSettingsChanged() {
final BackupSettings oldAppSettings = current;
current = new BackupSettings();
return applySettingsChanges(oldAppSettings, current);
}
static BackupSettings.Diff applySettingsChanges(final BackupSettings oldSettings, final BackupSettings newSettings) {
final BackupSettings.Diff diff = new BackupSettings.Diff(oldSettings, newSettings);
final IBackupSettingsChangeListener l = SettingsManager.listeners.getListener();
l.onBackupSettingsChanged(oldSettings, newSettings, diff);
return diff;
}
public static class Diff {
public Diff(final BackupSettings oldSettings, final BackupSettings newSettings) {
// TODO Auto-generated constructor stub
}
}
}