/
AndroidIMTemplateDatabase.java
91 lines (71 loc) · 3.65 KB
/
AndroidIMTemplateDatabase.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package io.github.nandandesai.android_im_template.database;
import android.annotation.SuppressLint;
import androidx.sqlite.db.SupportSQLiteDatabase;
import androidx.room.Database;
import androidx.room.Room;
import androidx.room.RoomDatabase;
import android.content.Context;
import android.os.AsyncTask;
import androidx.annotation.NonNull;
import android.util.Log;
import com.commonsware.cwac.saferoom.SafeHelperFactory;
import io.github.nandandesai.android_im_template.models.ChatSession;
import io.github.nandandesai.android_im_template.models.ChatMessage;
import io.github.nandandesai.android_im_template.models.Contact;
@Database(entities = {ChatMessage.class, ChatSession.class, Contact.class},version = 1)
public abstract class AndroidIMTemplateDatabase extends RoomDatabase {
private static final String TAG = "AndroidIMTemplateDatabase";
private static AndroidIMTemplateDatabase instance;
private static final String DB_NAME="androidimtemplate.db";
public abstract ChatMessageDao chatMessageDao();
public abstract ChatSessionDao chatSessionDao();
public abstract ContactDao contactDao();
public static synchronized AndroidIMTemplateDatabase getInstance(Context context){
if(instance==null) {
/*
*
* Here the passphrase is being hardcoded. This should not be done. It is your responsibility to generate
* random Secret Key as mentioned in the README file.
*
* */
String passPhrase="templateSecret";
SafeHelperFactory factory = new SafeHelperFactory(passPhrase.toCharArray());
instance=Room.databaseBuilder(context, AndroidIMTemplateDatabase.class, DB_NAME)
.openHelperFactory(factory)
//.allowMainThreadQueries()
.fallbackToDestructiveMigration()
.addCallback(roomCallback)
.build();
}
//Log.d(TAG,"Is database encrypted? : "+ SQLCipherUtils.getDatabaseState(context, DB_NAME));
return instance;
}
private static RoomDatabase.Callback roomCallback=new RoomDatabase.Callback(){
@Override
public void onCreate(@NonNull SupportSQLiteDatabase db){
super.onCreate(db);
new InitializeDb(instance).execute();
}
};
//this class will initialize database with some sample rows. This will be executed when the app is run for the first time.
//this class can be removed if you want.
private static class InitializeDb extends AsyncTask<Void, Void, Void>{
private ContactDao contactDao;
private ChatSessionDao chatSessionDao;
public InitializeDb(AndroidIMTemplateDatabase database) {
this.contactDao = database.contactDao();
this.chatSessionDao=database.chatSessionDao();
}
@SuppressLint("LongLogTag")
@Override
protected Void doInBackground(Void... voids) {
Contact contact = new Contact("me", "https://images.unsplash.com/photo-1529665253569-6d01c0eaf7b6?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&w=1000&q=80", "Me","Hey there! I'm using AndroidIMTemplate.");
contactDao.insert(contact);
Log.d(TAG, "doInBackground: Sample contact inserted which represents the owner of the app as 'Me'");
ChatSession chatSession=new ChatSession("abcd123", "Sample", ChatSession.TYPE.DIRECT, "https://images.unsplash.com/photo-1529665253569-6d01c0eaf7b6?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&w=1000&q=80");
chatSessionDao.insert(chatSession);
Log.d(TAG, "doInBackground: Sample ChatSession inserted");
return null;
}
}
}