aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2017-11-23 19:32:08 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2017-11-23 19:32:08 +0200
commit5b1e302b85b71ebe130ac45437f2394f29ae9bae (patch)
treec75b0c67710c1e3bacbaf55509c008dcbc8fce0c
parent14374562c002481b102feb8e25c7036cafb59853 (diff)
downloadTango-5b1e302b85b71ebe130ac45437f2394f29ae9bae.tar.gz
Tango-5b1e302b85b71ebe130ac45437f2394f29ae9bae.zip
Added support for android room persistence on android.
implemented pre-build task for copying the default data base to android app.
-rw-r--r--Software/Android_Studio/Tango.DAL/build.gradle50
-rw-r--r--Software/Android_Studio/Tango.DAL/proguard-rules.pro25
-rw-r--r--Software/Android_Studio/Tango.DAL/src/androidTest/java/com/twine/tango/dal/ExampleInstrumentedTest.java55
-rw-r--r--Software/Android_Studio/Tango.DAL/src/main/AndroidManifest.xml2
-rw-r--r--Software/Android_Studio/Tango.DAL/src/main/assets/mobile.dbbin0 -> 24576 bytes
-rw-r--r--Software/Android_Studio/Tango.DAL/src/main/java/com/twine/tango/dal/dao/UsersDAO.java27
-rw-r--r--Software/Android_Studio/Tango.DAL/src/main/java/com/twine/tango/dal/db/AppDataBase.java101
-rw-r--r--Software/Android_Studio/Tango.DAL/src/main/java/com/twine/tango/dal/entities/User.java55
-rw-r--r--Software/Android_Studio/Tango.DAL/src/main/java/com/twine/tango/dal/myClass.java4
-rw-r--r--Software/Android_Studio/Tango.DAL/src/main/res/values/strings.xml3
-rw-r--r--Software/Android_Studio/Tango.DAL/src/test/java/com/twine/tango/dal/ExampleUnitTest.java19
-rw-r--r--Software/Android_Studio/build.gradle3
-rw-r--r--Software/Android_Studio/settings.gradle2
-rw-r--r--Software/DB/mobile.dbbin0 -> 24576 bytes
14 files changed, 338 insertions, 8 deletions
diff --git a/Software/Android_Studio/Tango.DAL/build.gradle b/Software/Android_Studio/Tango.DAL/build.gradle
index dd45e60cd..ccdda3e4c 100644
--- a/Software/Android_Studio/Tango.DAL/build.gradle
+++ b/Software/Android_Studio/Tango.DAL/build.gradle
@@ -1,8 +1,52 @@
-apply plugin: 'java-library'
+apply plugin: 'com.android.library'
+
+android {
+ compileSdkVersion 26
+ buildToolsVersion "26.0.1"
+
+
+ defaultConfig {
+ minSdkVersion 22
+ targetSdkVersion 26
+ versionCode 1
+ versionName "1.0"
+
+ testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+
+
+ sourceCompatibility = 1.7
+ targetCompatibility = 1.7
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_7
+ targetCompatibility JavaVersion.VERSION_1_7
+ }
+}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
+
+ testImplementation 'junit:junit:4.12'
+ androidTestImplementation 'com.android.support.test:runner:1.0.1'
+ androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
+
+ //Room
+ compile 'android.arch.persistence.room:runtime:1.0.0-alpha9'
+ annotationProcessor 'android.arch.persistence.room:compiler:1.0.0-alpha9'
+}
+
+//Copy data base to assets folder.
+task copyFiles(type: Copy) {
+ from "$projectDir\\..\\..\\DB\\mobile.db"
+ into "$projectDir/src\\main\\assets\\"
}
-sourceCompatibility = "1.7"
-targetCompatibility = "1.7"
+preBuild.dependsOn(copyFiles) \ No newline at end of file
diff --git a/Software/Android_Studio/Tango.DAL/proguard-rules.pro b/Software/Android_Studio/Tango.DAL/proguard-rules.pro
new file mode 100644
index 000000000..a0eef131a
--- /dev/null
+++ b/Software/Android_Studio/Tango.DAL/proguard-rules.pro
@@ -0,0 +1,25 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in C:\Users\Roy\AppData\Local\Android\Sdk/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/Software/Android_Studio/Tango.DAL/src/androidTest/java/com/twine/tango/dal/ExampleInstrumentedTest.java b/Software/Android_Studio/Tango.DAL/src/androidTest/java/com/twine/tango/dal/ExampleInstrumentedTest.java
new file mode 100644
index 000000000..3684e9cfe
--- /dev/null
+++ b/Software/Android_Studio/Tango.DAL/src/androidTest/java/com/twine/tango/dal/ExampleInstrumentedTest.java
@@ -0,0 +1,55 @@
+package com.twine.tango.dal;
+
+import android.content.Context;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.runner.AndroidJUnit4;
+import android.util.Log;
+
+import com.twine.tango.dal.db.AppDataBase;
+import com.twine.tango.dal.db.AppDataBase_Impl;
+import com.twine.tango.dal.entities.User;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.List;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest
+{
+ @Test
+ public void useAppContext() throws Exception
+ {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getTargetContext();
+
+ assertEquals("com.twine.tango.dal.test", appContext.getPackageName());
+ }
+
+ @Test
+ public void testDB() throws Exception
+ {
+ Context appContext = InstrumentationRegistry.getTargetContext();
+ AppDataBase db = AppDataBase.getAppDatabase(appContext);
+
+ User u = new User();
+ u.setFirstName("Roy");
+ u.setLastName("Ben Shabat 2");
+ db.usersDAO().insert(u);
+
+ List<User> users = db.usersDAO().getAll();
+
+ for (User user : users)
+ {
+ Log.i("DB",user.getFirstName());
+ Log.i("DB",user.getLastName());
+ }
+ }
+}
diff --git a/Software/Android_Studio/Tango.DAL/src/main/AndroidManifest.xml b/Software/Android_Studio/Tango.DAL/src/main/AndroidManifest.xml
new file mode 100644
index 000000000..27f6bf1a0
--- /dev/null
+++ b/Software/Android_Studio/Tango.DAL/src/main/AndroidManifest.xml
@@ -0,0 +1,2 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.twine.tango.dal" />
diff --git a/Software/Android_Studio/Tango.DAL/src/main/assets/mobile.db b/Software/Android_Studio/Tango.DAL/src/main/assets/mobile.db
new file mode 100644
index 000000000..7b73a6ed5
--- /dev/null
+++ b/Software/Android_Studio/Tango.DAL/src/main/assets/mobile.db
Binary files differ
diff --git a/Software/Android_Studio/Tango.DAL/src/main/java/com/twine/tango/dal/dao/UsersDAO.java b/Software/Android_Studio/Tango.DAL/src/main/java/com/twine/tango/dal/dao/UsersDAO.java
new file mode 100644
index 000000000..e87286ad1
--- /dev/null
+++ b/Software/Android_Studio/Tango.DAL/src/main/java/com/twine/tango/dal/dao/UsersDAO.java
@@ -0,0 +1,27 @@
+package com.twine.tango.dal.dao;
+
+import android.arch.persistence.room.Dao;
+import android.arch.persistence.room.Delete;
+import android.arch.persistence.room.Insert;
+import android.arch.persistence.room.Query;
+
+import com.twine.tango.dal.entities.User;
+
+import java.util.List;
+
+/**
+ * Created by Roy on 11/23/2017.
+ */
+
+@Dao
+public interface UsersDAO
+{
+ @Query("SELECT * FROM USERS")
+ List<User> getAll();
+
+ @Insert
+ void insert(User user);
+
+ @Delete
+ void delete(User user);
+}
diff --git a/Software/Android_Studio/Tango.DAL/src/main/java/com/twine/tango/dal/db/AppDataBase.java b/Software/Android_Studio/Tango.DAL/src/main/java/com/twine/tango/dal/db/AppDataBase.java
new file mode 100644
index 000000000..b0a9f6a9f
--- /dev/null
+++ b/Software/Android_Studio/Tango.DAL/src/main/java/com/twine/tango/dal/db/AppDataBase.java
@@ -0,0 +1,101 @@
+package com.twine.tango.dal.db;
+
+
+import android.arch.persistence.db.SupportSQLiteDatabase;
+import android.arch.persistence.room.Database;
+import android.arch.persistence.room.Room;
+import android.arch.persistence.room.RoomDatabase;
+import android.arch.persistence.room.migration.Migration;
+import android.content.Context;
+
+import com.twine.tango.dal.dao.UsersDAO;
+import com.twine.tango.dal.entities.User;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+/**
+ * Created by Roy on 11/23/2017.
+ */
+
+@Database(entities = { User.class }, exportSchema = false, version = 1)
+public abstract class AppDataBase extends RoomDatabase
+{
+ private static String DB_PATH = "/data/data/com.twine.tango.dal.test/databases/";
+ private static String DB_NAME = "mobile";
+
+ private static AppDataBase INSTANCE;
+
+ public abstract UsersDAO usersDAO();
+
+ public static AppDataBase getAppDatabase(Context context) {
+ if (INSTANCE == null) {
+
+ try
+ {
+ DB_PATH = context.getDatabasePath(DB_NAME).getPath();
+
+ File file = new File(DB_PATH);
+ if(!file.exists())
+ {
+ copyDefaultDB(context);
+ }
+
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+
+ //TODO: fallback in case we fail in copying the default db.
+ }
+
+ INSTANCE =
+ Room.databaseBuilder(context.getApplicationContext(), AppDataBase.class, DB_NAME)
+ // allow queries on the main thread.
+ // Don't do this on a real app! See PersistenceBasicSample for an example.
+ .allowMainThreadQueries()
+ .build();
+ }
+ return INSTANCE;
+ }
+
+ private static void copyDefaultDB(Context context) throws Exception
+ {
+ //Open your local db as the input stream
+ InputStream myInput = context.getAssets().open("mobile.db");
+
+ //Open the empty db as the output stream
+ OutputStream myOutput = new FileOutputStream(DB_PATH);
+
+ //transfer bytes from the inputfile to the outputfile
+ byte[] buffer = new byte[1024];
+ int length;
+ while ((length = myInput.read(buffer))>0){
+ myOutput.write(buffer, 0, length);
+ }
+
+ //Close the streams
+ myOutput.flush();
+ myOutput.close();
+ myInput.close();
+ }
+
+ public static void destroyInstance() {
+ INSTANCE = null;
+ }
+
+ //region Migrations
+
+ static final Migration MIGRATION_1_2 = new Migration(1, 2) {
+ @Override
+ public void migrate(SupportSQLiteDatabase database) {
+ database.execSQL("CREATE TABLE `Fruit` (`id` INTEGER, "
+ + "`name` TEXT, PRIMARY KEY(`id`))");
+ }
+ };
+
+ //endregion
+
+}
+
diff --git a/Software/Android_Studio/Tango.DAL/src/main/java/com/twine/tango/dal/entities/User.java b/Software/Android_Studio/Tango.DAL/src/main/java/com/twine/tango/dal/entities/User.java
new file mode 100644
index 000000000..469064ead
--- /dev/null
+++ b/Software/Android_Studio/Tango.DAL/src/main/java/com/twine/tango/dal/entities/User.java
@@ -0,0 +1,55 @@
+package com.twine.tango.dal.entities;
+
+import android.arch.persistence.room.ColumnInfo;
+import android.arch.persistence.room.ColumnInfo.SQLiteTypeAffinity;
+import android.arch.persistence.room.Entity;
+import android.arch.persistence.room.PrimaryKey;
+import android.support.annotation.NonNull;
+
+/**
+ * Created by Roy on 11/23/2017.
+ */
+
+@Entity(tableName = "USERS")
+public class User
+{
+ @ColumnInfo(name = "ID")
+ @PrimaryKey(autoGenerate = true)
+ private int id;
+
+ @ColumnInfo(name = "FIRST_NAME")
+ private String firstName;
+
+ @ColumnInfo(name = "LAST_NAME")
+ private String lastName;
+
+ public int getId()
+ {
+ return id;
+ }
+
+ public void setId(int id)
+ {
+ this.id = id;
+ }
+
+ public String getFirstName()
+ {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName)
+ {
+ this.firstName = firstName;
+ }
+
+ public String getLastName()
+ {
+ return lastName;
+ }
+
+ public void setLastName(String lastName)
+ {
+ this.lastName = lastName;
+ }
+}
diff --git a/Software/Android_Studio/Tango.DAL/src/main/java/com/twine/tango/dal/myClass.java b/Software/Android_Studio/Tango.DAL/src/main/java/com/twine/tango/dal/myClass.java
deleted file mode 100644
index 1e28b85bb..000000000
--- a/Software/Android_Studio/Tango.DAL/src/main/java/com/twine/tango/dal/myClass.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package com.twine.tango.dal;
-
-public class myClass {
-}
diff --git a/Software/Android_Studio/Tango.DAL/src/main/res/values/strings.xml b/Software/Android_Studio/Tango.DAL/src/main/res/values/strings.xml
new file mode 100644
index 000000000..281f85fbb
--- /dev/null
+++ b/Software/Android_Studio/Tango.DAL/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+<resources>
+ <string name="app_name">Tango.DAL</string>
+</resources>
diff --git a/Software/Android_Studio/Tango.DAL/src/test/java/com/twine/tango/dal/ExampleUnitTest.java b/Software/Android_Studio/Tango.DAL/src/test/java/com/twine/tango/dal/ExampleUnitTest.java
new file mode 100644
index 000000000..a6ab77002
--- /dev/null
+++ b/Software/Android_Studio/Tango.DAL/src/test/java/com/twine/tango/dal/ExampleUnitTest.java
@@ -0,0 +1,19 @@
+package com.twine.tango.dal;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
+ */
+public class ExampleUnitTest
+{
+ @Test
+ public void addition_isCorrect() throws Exception
+ {
+ assertEquals(4, 2 + 2);
+ }
+} \ No newline at end of file
diff --git a/Software/Android_Studio/build.gradle b/Software/Android_Studio/build.gradle
index dedf7dca1..f5b0be400 100644
--- a/Software/Android_Studio/build.gradle
+++ b/Software/Android_Studio/build.gradle
@@ -20,6 +20,9 @@ allprojects {
google()
jcenter()
mavenCentral()
+ maven {
+ url "https://maven.google.com"
+ }
}
}
diff --git a/Software/Android_Studio/settings.gradle b/Software/Android_Studio/settings.gradle
index 88b0e3c36..8c9325ba4 100644
--- a/Software/Android_Studio/settings.gradle
+++ b/Software/Android_Studio/settings.gradle
@@ -1 +1 @@
-include ':app', ':Tango.BL', ':Tango.Stubs.UI', ':Tango.SharedUI', ':Tango.DAL', ':Tango.Models', ':Tango.Stubs', ':Tango.Integration', ':Tango.Transport', ':Tango.Core', ':Tango.PMR'
+include ':app', ':Tango.BL', ':Tango.Stubs.UI', ':Tango.SharedUI', ':Tango.Models', ':Tango.Stubs', ':Tango.Integration', ':Tango.Transport', ':Tango.Core', ':Tango.PMR', ':Tango.DAL'
diff --git a/Software/DB/mobile.db b/Software/DB/mobile.db
new file mode 100644
index 000000000..7b73a6ed5
--- /dev/null
+++ b/Software/DB/mobile.db
Binary files differ