/*
* Universal Password Manager
* Copyright (c) 2010-2011 Adrian Smith
*
* This file is part of Universal Password Manager.
*
* Universal Password Manager is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Universal Password Manager is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Universal Password Manager; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
package com.u17od.upm;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.util.Date;
import android.app.Activity;
import android.app.Application;
import android.os.Environment;
import android.util.Log;
import android.widget.Toast;
import com.u17od.upm.database.PasswordDatabase;
/**
* This class replaces the regular Application class in the application and
* allows us to store data at the application level.
*/
public class UPMApplication extends Application {
private PasswordDatabase passwordDatabase;
private Date timeOfLastSync;
public Date getTimeOfLastSync() {
return timeOfLastSync;
}
public void setTimeOfLastSync(Date timeOfLastSync) {
this.timeOfLastSync = timeOfLastSync;
}
public void setPasswordDatabase(PasswordDatabase passwordDatabase) {
this.passwordDatabase = passwordDatabase;
}
public PasswordDatabase getPasswordDatabase() {
return passwordDatabase;
}
protected boolean copyFile(File source, File dest, Activity activity) {
boolean successful = false;
FileChannel sourceChannel = null;
FileChannel destinationChannel = null;
FileInputStream is = null;
FileOutputStream os = null;
try {
is = new FileInputStream(source);
sourceChannel = is.getChannel();
File destFile = null;
if (dest.isDirectory()) {
destFile = new File(dest, source.getName());
} else {
destFile = dest;
}
os = new FileOutputStream(destFile);
destinationChannel = os.getChannel();
destinationChannel.transferFrom(sourceChannel, 0, sourceChannel.size());
successful=true;
} catch (IOException e) {
Log.e(activity.getClass().getName(), getString(R.string.file_problem), e);
Toast.makeText(activity, R.string.file_problem, Toast.LENGTH_LONG).show();
} finally {
try {
if (sourceChannel != null) {
sourceChannel.close();
}
if (is != null) {
is.close();
}
if (destinationChannel != null) {
destinationChannel.close();
}
if (os != null) {
os.close();
}
} catch (IOException e) {
Log.e(activity.getClass().getName(), getString(R.string.file_problem), e);
Toast.makeText(activity, R.string.file_problem, Toast.LENGTH_LONG).show();
}
}
return successful;
}
protected void restoreDatabase(Activity activity) {
deleteDatabase(activity);
File fileOnSDCard = new File(Environment.getExternalStorageDirectory(), Utilities.DEFAULT_DATABASE_FILE);
File databaseFile = Utilities.getDatabaseFile(activity);
((UPMApplication) activity.getApplication()).copyFile(fileOnSDCard, databaseFile, activity);
}
protected void deleteDatabase(Activity activity) {
Utilities.getDatabaseFile(activity).delete();
Utilities.setDatabaseFileName(null, activity);
}
}