package net.bible.android.control.backup;
import android.os.Environment;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import net.bible.android.SharedConstants;
import net.bible.android.activity.R;
import net.bible.android.control.ApplicationScope;
import net.bible.android.view.activity.base.Callback;
import net.bible.android.view.activity.base.Dialogs;
import net.bible.service.common.FileManager;
import net.bible.service.db.CommonDatabaseHelper;
import java.io.File;
import javax.inject.Inject;
/**
* Support backup and restore of the And bible database which contains bookmarks and notes.
*
* @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.
*/
@ApplicationScope
public class BackupControl {
// this is now unused because And Bible databases are held on the SD card to facilitate easier backup by file copy
private static final File internalDbDir = new File(Environment.getDataDirectory(), "/data/"+SharedConstants.PACKAGE_NAME+"/databases/");
private static final String TAG = "BackupControl";
@Inject
public BackupControl() {
}
public void updateOptionsMenu(Menu menu) {
MenuItem restoreMenuItem = menu.findItem(R.id.restore);
if (restoreMenuItem!=null) {
restoreMenuItem.setEnabled(isBackupFile());
}
}
/** backup database to sd card
*/
public void backupDatabase() {
boolean ok = FileManager.copyFile(CommonDatabaseHelper.DATABASE_NAME, internalDbDir, SharedConstants.BACKUP_DIR);
if (ok) {
Log.d(TAG, "Copied database to SD card successfully");
Dialogs.getInstance().showMsg(R.string.backup_success, SharedConstants.BACKUP_DIR.getName());
} else {
Log.e(TAG, "Error copying database to SD card");
Dialogs.getInstance().showErrorMsg(R.string.error_occurred);
}
}
/** restore database from sd card
*/
public void restoreDatabase() {
Dialogs.getInstance().showMsg(R.string.restore_confirmation, true, new Callback() {
@Override
public void okay() {
boolean ok = FileManager.copyFile(CommonDatabaseHelper.DATABASE_NAME, SharedConstants.BACKUP_DIR, internalDbDir);
if (ok) {
Log.d(TAG, "Copied database from SD card successfully");
Dialogs.getInstance().showMsg(R.string.restore_success, SharedConstants.BACKUP_DIR.getName());
} else {
Log.e(TAG, "Error copying database from SD card");
Dialogs.getInstance().showErrorMsg(R.string.error_occurred);
}
}
});
}
/** return true if a backup has been done and the file is on the sd card
*/
private boolean isBackupFile() {
return new File(SharedConstants.BACKUP_DIR, CommonDatabaseHelper.DATABASE_NAME).exists();
}
}