package it.fdev.unisaconnect.data; import it.fdev.utils.Utils; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import android.content.Context; import android.content.SharedPreferences; import android.preference.PreferenceManager; import android.util.Log; public class DatabaseHelper { private String databaseName; private static final int DATABASE_VERSION = 3; private String SP_KEY_DB_VER = "db_ver"; private final Context mContext; public DatabaseHelper(Context context, String databaseName) { this.databaseName = databaseName; SP_KEY_DB_VER += databaseName; mContext = context; initialize(); } /** * Initializes database. Creates database if doesn't exist. */ private void initialize() { if (databaseExists()) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext); int dbVersion = prefs.getInt(SP_KEY_DB_VER, 1); if (DATABASE_VERSION != dbVersion) { Log.d(Utils.TAG, "Database "+ databaseName +" will be updated"); File dbFile = mContext.getDatabasePath(databaseName); if (!dbFile.delete()) { Log.w(Utils.TAG, "Unable to update database "+ databaseName); } } } if (!databaseExists()) { createDatabase(); } } /** * Returns true if database file exists, false otherwise. * @return */ private boolean databaseExists() { File dbFile = mContext.getDatabasePath(databaseName); return dbFile.exists(); } /** * Creates database by copying it from assets directory. */ private void createDatabase() { String parentPath = mContext.getDatabasePath(databaseName).getParent(); String path = mContext.getDatabasePath(databaseName).getPath(); File file = new File(parentPath); if (!file.exists()) { if (!file.mkdir()) { Log.w(Utils.TAG, "Unable to create database directory for: "+ databaseName); return; } } InputStream is = null; OutputStream os = null; try { is = mContext.getAssets().open(databaseName); os = new FileOutputStream(path); byte[] buffer = new byte[1024]; int length; while ((length = is.read(buffer)) > 0) { os.write(buffer, 0, length); } os.flush(); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext); SharedPreferences.Editor editor = prefs.edit(); editor.putInt(SP_KEY_DB_VER, DATABASE_VERSION); editor.commit(); } catch (IOException e) { e.printStackTrace(); } finally { if (is != null) { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } if (os != null) { try { os.close(); } catch (IOException e) { e.printStackTrace(); } } } } }