summaryrefslogtreecommitdiff
path: root/src/ui/android
diff options
context:
space:
mode:
authorkrasimir <krasimir@chalmers.se>2015-07-01 09:51:01 +0000
committerkrasimir <krasimir@chalmers.se>2015-07-01 09:51:01 +0000
commit7daf119cbcc2f0e3d266d2e48e6942d9161c55ef (patch)
tree65b6e557a1efefed11936d4b592b6abc9c39cd22 /src/ui/android
parent34ef01f613339c858fedafdc555df3aacf1ac83d (diff)
forgot to add the DBManager
Diffstat (limited to 'src/ui/android')
-rw-r--r--src/ui/android/src/org/grammaticalframework/ui/android/DBManager.java92
1 files changed, 92 insertions, 0 deletions
diff --git a/src/ui/android/src/org/grammaticalframework/ui/android/DBManager.java b/src/ui/android/src/org/grammaticalframework/ui/android/DBManager.java
new file mode 100644
index 000000000..e395ccf75
--- /dev/null
+++ b/src/ui/android/src/org/grammaticalframework/ui/android/DBManager.java
@@ -0,0 +1,92 @@
+package org.grammaticalframework.ui.android;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteException;
+import android.database.sqlite.SQLiteOpenHelper;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+public class DBManager extends SQLiteOpenHelper {
+ private final Context mContext;
+
+ public DBManager(Context context) {
+ super(context, "defs.db", null, 1);
+ mContext = context;
+ }
+
+ @Override
+ public synchronized SQLiteDatabase getReadableDatabase() {
+ copyDatabaseFromAssets();
+ return super.getReadableDatabase();
+ }
+
+ @Override
+ public synchronized SQLiteDatabase getWritableDatabase() {
+ copyDatabaseFromAssets();
+ return super.getWritableDatabase();
+ }
+
+ private void copyDatabaseFromAssets() throws SQLiteException {
+ String path = mContext.getDatabasePath(getDatabaseName()).getPath();
+
+ File file = new File(path);
+ if (file.exists()) {
+ return;
+ }
+
+ InputStream ins = null;
+ OutputStream outs = null;
+
+ try {
+ File dir = new File(mContext.getApplicationInfo().dataDir + "/databases");
+ if (!dir.exists()) {
+ dir.mkdir();
+ }
+
+ ins = mContext.getAssets().open(getDatabaseName());
+ outs = new FileOutputStream(path);
+
+ byte[] buffer = new byte[1024];
+ int length;
+ while ((length = ins.read(buffer)) > 0) {
+ outs.write(buffer, 0, length);
+ }
+ outs.flush();
+ } catch (IOException e) {
+ SQLiteException se = new SQLiteException("Unable to write " + path + " to data directory");
+ se.setStackTrace(e.getStackTrace());
+
+ if (outs != null) {
+ try {
+ outs.close();
+ } catch (IOException e2) {
+ }
+ outs = null;
+ }
+
+ file.delete();
+ throw se;
+ } finally {
+ try {
+ if (outs != null)
+ outs.close();
+ if (ins != null)
+ ins.close();
+ } catch (IOException e) {
+ }
+ }
+ }
+
+ @Override
+ public final void onCreate(SQLiteDatabase db) {
+ }
+
+ @Override
+ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+ }
+}