Experiment: Room

This commit is contained in:
Stefan Niedermann 2020-06-10 08:23:53 +02:00
parent 3d0a1fdc12
commit c64e1110f6
10 changed files with 206 additions and 2 deletions

View file

@ -75,6 +75,10 @@ dependencies {
implementation 'androidx.work:work-runtime:2.3.4'
implementation "com.google.android.material:material:1.1.0"
// Database
implementation "androidx.room:room-runtime:2.2.5"
annotationProcessor "androidx.room:room-compiler:2.2.5"
// Testing
testImplementation 'junit:junit:4.13'
androidTestImplementation 'com.android.support:support-annotations:28.0.0'

View file

@ -46,7 +46,7 @@ import static org.junit.Assert.fail;
*/
@RunWith(AndroidJUnit4.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class NotesDatabaseTest {
public class NotesNotesRoomDatabaseTest {
private NotesDatabase db = null;

View file

@ -77,6 +77,9 @@ import it.niedermann.owncloud.notes.persistence.LoadNotesListTask.NotesLoadedLis
import it.niedermann.owncloud.notes.persistence.NoteServerSyncHelper;
import it.niedermann.owncloud.notes.persistence.NoteServerSyncHelper.ViewProvider;
import it.niedermann.owncloud.notes.persistence.NotesDatabase;
import it.niedermann.owncloud.notes.persistence.NotesRoomDatabase;
import it.niedermann.owncloud.notes.persistence.dao.LocalAccountDao;
import it.niedermann.owncloud.notes.persistence.entity.LocalAccountEntity;
import it.niedermann.owncloud.notes.util.NoteUtil;
import static android.view.View.GONE;
@ -176,7 +179,12 @@ public class NotesListViewActivity extends LockedActivity implements NoteClickLi
}
db = NotesDatabase.getInstance(this);
NotesRoomDatabase db = NotesRoomDatabase.getInstance(this);
LocalAccountDao dao = db.getLocalAccountDao();
new Thread(() -> {
List<LocalAccountEntity> localAccountEntities = dao.getAccounts();
Log.v("TEST", localAccountEntities.size() + " acs");
}).start();
setupToolbars();
setupNavigationList(categoryAdapterSelectedItem);
setupNavigationMenu();

View file

@ -0,0 +1,72 @@
package it.niedermann.owncloud.notes.persistence;
import android.content.Context;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.room.Database;
import androidx.room.Room;
import androidx.room.RoomDatabase;
import androidx.room.migration.Migration;
import androidx.sqlite.db.SupportSQLiteDatabase;
import it.niedermann.owncloud.notes.persistence.dao.LocalAccountDao;
import it.niedermann.owncloud.notes.persistence.dao.NoteDao;
import it.niedermann.owncloud.notes.persistence.entity.LocalAccountEntity;
import it.niedermann.owncloud.notes.persistence.entity.NoteEntity;
@Database(
entities = {
LocalAccountEntity.class,
NoteEntity.class
}, version = 18
)
public abstract class NotesRoomDatabase extends RoomDatabase {
private static final String TAG = NotesRoomDatabase.class.getSimpleName();
private static final String NOTES_DB_NAME = "OWNCLOUD_NOTES";
// private final NoteServerSyncHelper serverSyncHelper;
private static NotesRoomDatabase instance;
// private NotesRoomDatabase(Context context) {
//// serverSyncHelper = NoteServerSyncHelper.getInstance(this);
// }
public static NotesRoomDatabase getInstance(Context context) {
if (instance == null) {
instance = create(context);
}
return instance;
}
private static NotesRoomDatabase create(final Context context) {
return Room.databaseBuilder(
context,
NotesRoomDatabase.class,
NOTES_DB_NAME)
.addMigrations(OLD_STUFF)
.fallbackToDestructiveMigration()
.addCallback(new RoomDatabase.Callback() {
@Override
public void onCreate(@NonNull SupportSQLiteDatabase db) {
super.onCreate(db);
Log.v(TAG, NotesRoomDatabase.class.getSimpleName() + " created.");
}
})
.build();
}
private static final Migration OLD_STUFF = new Migration(17, 18) {
@Override
public void migrate(SupportSQLiteDatabase database) {
// database.execSQL("ALTER TABLE `Account` ADD `color` TEXT NOT NULL DEFAULT '#0082c9'");
// database.execSQL("ALTER TABLE `Account` ADD `textColor` TEXT NOT NULL DEFAULT '#ffffff'");
// database.execSQL("ALTER TABLE `Account` ADD `serverDeckVersion` TEXT NOT NULL DEFAULT '0.6.4'");
// database.execSQL("ALTER TABLE `Account` ADD `maintenanceEnabled` INTEGER NOT NULL DEFAULT 0");
}
};
public abstract NoteDao getNoteDao();
public abstract LocalAccountDao getLocalAccountDao();
}

View file

@ -0,0 +1,7 @@
package it.niedermann.owncloud.notes.persistence.dao;
import androidx.room.Dao;
@Dao
public interface CategoryDao {
}

View file

@ -0,0 +1,16 @@
package it.niedermann.owncloud.notes.persistence.dao;
import androidx.room.Dao;
import androidx.room.Query;
import java.util.List;
import it.niedermann.owncloud.notes.persistence.entity.LocalAccountEntity;
@Dao
public interface LocalAccountDao {
@Query("SELECT * FROM localaccountentity")
List<LocalAccountEntity> getAccounts();
}

View file

@ -0,0 +1,7 @@
package it.niedermann.owncloud.notes.persistence.dao;
import androidx.room.Dao;
@Dao
public interface NoteDao {
}

View file

@ -0,0 +1,32 @@
package it.niedermann.owncloud.notes.persistence.entity;
import androidx.room.Entity;
import androidx.room.PrimaryKey;
@Entity
public class CategoryEntity {
@PrimaryKey
public int id;
public int remoteId;
public int accountId;
public String status;
public String title;
public int modified;
public String content;
public String eTag;
public String excerpt;
public int scrollY;
}
// "FOREIGN KEY(" + key_category + ") REFERENCES " + table_category + "(" + key_category_id + "), " +
// "FOREIGN KEY(" + key_account_id + ") REFERENCES " + table_accounts + "(" + key_id + "))");
// DatabaseIndexUtil.createIndex(db, table_notes, key_remote_id, key_account_id, key_status, key_favorite, key_category, key_modified);

View file

@ -0,0 +1,24 @@
package it.niedermann.owncloud.notes.persistence.entity;
import androidx.room.Entity;
import androidx.room.PrimaryKey;
import it.niedermann.owncloud.notes.util.DatabaseIndexUtil;
@Entity()
public class LocalAccountEntity {
@PrimaryKey
public int id;
public String url;
public String username;
public String accountName;
public String eTag;
public int modified;
public String apiVersion;
public String color;
public String textColor;
public String capabilitiesETag;
}
// DatabaseIndexUtil.createIndex(db, table_accounts, key_url, key_username, key_account_name, key_etag, key_modified);

View file

@ -0,0 +1,34 @@
package it.niedermann.owncloud.notes.persistence.entity;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.Index;
import androidx.room.PrimaryKey;
@Entity
public class NoteEntity {
@PrimaryKey
public int id;
public int remoteId;
public int accountId;
public String status;
public String title;
public int modified;
public String content;
public String eTag;
public String excerpt;
public int scrollY;
}
// "FOREIGN KEY(" + key_category + ") REFERENCES " + table_category + "(" + key_category_id + "), " +
// "FOREIGN KEY(" + key_account_id + ") REFERENCES " + table_accounts + "(" + key_id + "))");
// DatabaseIndexUtil.createIndex(db, table_notes, key_remote_id, key_account_id, key_status, key_favorite, key_category, key_modified);