diff --git a/app/build.gradle b/app/build.gradle index d7f25c94..b6e3f121 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -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' diff --git a/app/src/androidTest/java/it/niedermann/owncloud/notes/persistence/NotesDatabaseTest.java b/app/src/androidTest/java/it/niedermann/owncloud/notes/persistence/NotesNotesRoomDatabaseTest.java similarity index 99% rename from app/src/androidTest/java/it/niedermann/owncloud/notes/persistence/NotesDatabaseTest.java rename to app/src/androidTest/java/it/niedermann/owncloud/notes/persistence/NotesNotesRoomDatabaseTest.java index 9fe80283..437f58c9 100644 --- a/app/src/androidTest/java/it/niedermann/owncloud/notes/persistence/NotesDatabaseTest.java +++ b/app/src/androidTest/java/it/niedermann/owncloud/notes/persistence/NotesNotesRoomDatabaseTest.java @@ -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; diff --git a/app/src/main/java/it/niedermann/owncloud/notes/android/activity/NotesListViewActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/android/activity/NotesListViewActivity.java index 3daf809a..da4bbb36 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/android/activity/NotesListViewActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/android/activity/NotesListViewActivity.java @@ -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 localAccountEntities = dao.getAccounts(); + Log.v("TEST", localAccountEntities.size() + " acs"); + }).start(); setupToolbars(); setupNavigationList(categoryAdapterSelectedItem); setupNavigationMenu(); diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRoomDatabase.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRoomDatabase.java new file mode 100644 index 00000000..dc945d2f --- /dev/null +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRoomDatabase.java @@ -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(); +} diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/dao/CategoryDao.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/dao/CategoryDao.java new file mode 100644 index 00000000..d628dff4 --- /dev/null +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/dao/CategoryDao.java @@ -0,0 +1,7 @@ +package it.niedermann.owncloud.notes.persistence.dao; + +import androidx.room.Dao; + +@Dao +public interface CategoryDao { +} diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/dao/LocalAccountDao.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/dao/LocalAccountDao.java new file mode 100644 index 00000000..cff471ff --- /dev/null +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/dao/LocalAccountDao.java @@ -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 getAccounts(); +} diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/dao/NoteDao.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/dao/NoteDao.java new file mode 100644 index 00000000..22941fb3 --- /dev/null +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/dao/NoteDao.java @@ -0,0 +1,7 @@ +package it.niedermann.owncloud.notes.persistence.dao; + +import androidx.room.Dao; + +@Dao +public interface NoteDao { +} diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/entity/CategoryEntity.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/entity/CategoryEntity.java new file mode 100644 index 00000000..823a23f5 --- /dev/null +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/entity/CategoryEntity.java @@ -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); \ No newline at end of file diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/entity/LocalAccountEntity.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/entity/LocalAccountEntity.java new file mode 100644 index 00000000..03b7e9e7 --- /dev/null +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/entity/LocalAccountEntity.java @@ -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); \ No newline at end of file diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/entity/NoteEntity.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/entity/NoteEntity.java new file mode 100644 index 00000000..44d04e25 --- /dev/null +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/entity/NoteEntity.java @@ -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); \ No newline at end of file