Room Database implementation

This commit is contained in:
henry 2017-09-07 20:31:38 -04:00
parent 4d6772aa31
commit 19d9924bac
9 changed files with 223 additions and 3 deletions

View file

@ -2,10 +2,10 @@ apply plugin: 'com.android.application'
android { android {
compileSdkVersion 26 compileSdkVersion 26
buildToolsVersion "25.0.3" buildToolsVersion "26.0.1"
defaultConfig { defaultConfig {
applicationId "carbon.crypto.com.carbon" applicationId "cy.agorise.crystalwallet"
minSdkVersion 21 minSdkVersion 19
targetSdkVersion 26 targetSdkVersion 26
versionCode 1 versionCode 1
versionName "1.0" versionName "1.0"
@ -27,4 +27,8 @@ dependencies {
compile 'com.android.support:appcompat-v7:26.+' compile 'com.android.support:appcompat-v7:26.+'
compile 'com.android.support.constraint:constraint-layout:1.0.2' compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12' testCompile 'junit:junit:4.12'
compile 'android.arch.persistence.room:runtime:1.0.0-alpha9';
} }

View file

@ -0,0 +1,15 @@
package cy.agorise.crystalwallet;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import carbon.crypto.com.carbon.R;
public class IntroActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_intro);
}
}

View file

@ -0,0 +1,20 @@
package cy.agorise.crystalwallet.application;
import android.app.Application;
import cy.agorise.crystalwallet.dao.DatabaseConnection;
/**
* Created by Henry Varona on 6/9/2017.
*/
public class CrystalApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//initialize the database
DatabaseConnection.getConnection(this.getApplicationContext());
}
}

View file

@ -0,0 +1,29 @@
package cy.agorise.crystalwallet.dao;
import android.arch.persistence.db.SupportSQLiteDatabase;
import android.arch.persistence.room.*;
import android.arch.persistence.room.migration.Migration;
import cy.agorise.crystalwallet.models.AccountSeed;
import cy.agorise.crystalwallet.models.CryptoNetAccount;
/**
* Created by Henry Varona on 4/9/2017.
*/
@Database(entities = {AccountSeed.class, CryptoNetAccount.class}, version = 2)
public abstract class CrystalDatabase extends RoomDatabase {
static final Migration MIGRATION_1_2 = new Migration(1, 2) {
@Override
public void migrate(SupportSQLiteDatabase database) {
database.execSQL("CREATE TABLE 'account_seed' ('id' INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "'name' TEXT, 'master_seed' NUMERIC)");
database.execSQL("CREATE TABLE 'crypto_net_account' ('id' INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "'seed_id', "
+ "'account_number' INT, 'account_index' INT,"
+ "FOREIGN_KEY(seed_id) REFERENCES seed(id))");
}
};
}

View file

@ -0,0 +1,27 @@
package cy.agorise.crystalwallet.dao;
import android.arch.persistence.room.Room;
import android.content.Context;
/**
* Created by Henry Varona on 6/9/2017.
*/
public class DatabaseConnection {
private static final DatabaseConnection instance = new DatabaseConnection();
private CrystalDatabase db;
private DatabaseConnection(){
}
public static CrystalDatabase getConnection(Context context){
if (instance.db == null){
instance.db = Room.databaseBuilder(context,
CrystalDatabase.class, "CrystalWallet.db")
.addMigrations(CrystalDatabase.MIGRATION_1_2)
.build();
}
return instance.db;
}
}

View file

@ -0,0 +1,46 @@
package cy.agorise.crystalwallet.models;
import android.arch.persistence.room.*;
/**
* Created by Henry Varona on 6/9/2017.
*/
@Entity
public class AccountSeed {
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "id")
private int mId;
@ColumnInfo(name = "name")
private String mName;
@ColumnInfo(name = "master_seed")
private String mMasterSeed;
public int getId() {
return mId;
}
public void setId(int id){
this.mId = id;
}
public String getName() {
return mName;
}
public void setName(String mName) {
this.mName = mName;
}
public String getMasterSeed() {
return mMasterSeed;
}
public void setMasterSeed(String mMasterSeed) {
this.mMasterSeed = mMasterSeed;
}
}

View file

@ -0,0 +1,58 @@
package cy.agorise.crystalwallet.models;
import android.arch.persistence.room.*;
/**
* Created by Henry Varona on 6/9/2017.
*/
@Entity (foreignKeys = @ForeignKey(entity = AccountSeed.class,
parentColumns = "id",
childColumns = "seed_id"))
public class CryptoNetAccount {
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "id")
private int mId;
@ColumnInfo(name = "seed_id")
private int mSeedId;
@ColumnInfo(name = "account_number")
private int mAccountNumber;
@ColumnInfo(name = "account_index")
private int mAccountIndex;
public int getId() {
return mId;
}
public void setId(int id){
this.mId = id;
}
public int getSeedId() {
return mSeedId;
}
public void setSeedId(int mSeedId) {
this.mSeedId = mSeedId;
}
public int getAccountNumber() {
return mAccountNumber;
}
public void setAccountNumber(int mAccountNumber) {
this.mAccountNumber = mAccountNumber;
}
public int getAccountIndex() {
return mAccountIndex;
}
public void setAccountIndex(int mAccountIndex) {
this.mAccountIndex = mAccountIndex;
}
}

View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_intro"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="cy.agorise.crystalwallet.IntroActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
</RelativeLayout>

View file

@ -15,6 +15,10 @@ buildscript {
allprojects { allprojects {
repositories { repositories {
jcenter() jcenter()
maven {
// For Room Persistence Library
url "https://maven.google.com"
}
} }
} }