diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2017-11-23 19:32:08 +0200 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2017-11-23 19:32:08 +0200 |
| commit | 5b1e302b85b71ebe130ac45437f2394f29ae9bae (patch) | |
| tree | c75b0c67710c1e3bacbaf55509c008dcbc8fce0c /Software/Android_Studio | |
| parent | 14374562c002481b102feb8e25c7036cafb59853 (diff) | |
| download | Tango-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.
Diffstat (limited to 'Software/Android_Studio')
13 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 Binary files differnew file mode 100644 index 000000000..7b73a6ed5 --- /dev/null +++ b/Software/Android_Studio/Tango.DAL/src/main/assets/mobile.db 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' |
