From fea6b0a144d18c6dc4425ced807d99afd67dd200 Mon Sep 17 00:00:00 2001 From: "voronkov.konstantin" Date: Mon, 16 May 2022 21:26:02 +0300 Subject: [PATCH] Voronkov.K. hw-4 --- .../epicdatabaseexample/db/NoteDatabase.kt | 10 ++++++++-- .../epicdatabaseexample/db/note/NoteDao.kt | 6 ++---- .../epicdatabaseexample/db/note/NoteEntity.kt | 7 +++---- .../ui/note_list/NoteListAdapter.kt | 19 +++++++++---------- .../ui/note_list/NoteListViewModel.kt | 5 ++++- 5 files changed, 26 insertions(+), 21 deletions(-) diff --git a/EpicDatabseExample/app/src/main/java/com/example/epicdatabaseexample/db/NoteDatabase.kt b/EpicDatabseExample/app/src/main/java/com/example/epicdatabaseexample/db/NoteDatabase.kt index 1c213b2..073e786 100644 --- a/EpicDatabseExample/app/src/main/java/com/example/epicdatabaseexample/db/NoteDatabase.kt +++ b/EpicDatabseExample/app/src/main/java/com/example/epicdatabaseexample/db/NoteDatabase.kt @@ -12,7 +12,7 @@ import com.example.epicdatabaseexample.db.note.NoteDao import com.example.epicdatabaseexample.db.note.NoteEntity @Database( - version = 2, + version = 3, exportSchema = false, entities = [ NoteEntity::class, @@ -48,7 +48,13 @@ abstract class NoteDatabase : RoomDatabase() { "DEFAULT ('${PersonEntity.DEFAULT_PERSON_NAME}')") } }, - // TODO Добавить миграцию. + object : Migration(2, 3) { + override fun migrate(database: SupportSQLiteDatabase) { + database.execSQL("ALTER TABLE $NOTE_TABLE " + + "ADD COLUMN ${NoteEntity.COLUMN_IS_COMPLETED} INTEGER NOT NULL " + + "DEFAULT 0") + } + } ) private fun createDatabaseInstance(application: Application): NoteDatabase { diff --git a/EpicDatabseExample/app/src/main/java/com/example/epicdatabaseexample/db/note/NoteDao.kt b/EpicDatabseExample/app/src/main/java/com/example/epicdatabaseexample/db/note/NoteDao.kt index 8645616..811559e 100644 --- a/EpicDatabseExample/app/src/main/java/com/example/epicdatabaseexample/db/note/NoteDao.kt +++ b/EpicDatabseExample/app/src/main/java/com/example/epicdatabaseexample/db/note/NoteDao.kt @@ -26,8 +26,6 @@ abstract class NoteDao { @Query("DELETE FROM note_table") abstract fun deleteAllNote(): Completable - // TODO Добавить метод для обновления одного элемента. - // Что можно указать в качестве возвращаемого типа? - // Напомню, что выше есть метод observeNoteList, который будет вызываться при любом - // изменении списка в Базе Данных. + @Update + abstract fun updateNote(note: NoteEntity): Completable } \ No newline at end of file diff --git a/EpicDatabseExample/app/src/main/java/com/example/epicdatabaseexample/db/note/NoteEntity.kt b/EpicDatabseExample/app/src/main/java/com/example/epicdatabaseexample/db/note/NoteEntity.kt index b42b9b3..7ba0dca 100644 --- a/EpicDatabseExample/app/src/main/java/com/example/epicdatabaseexample/db/note/NoteEntity.kt +++ b/EpicDatabseExample/app/src/main/java/com/example/epicdatabaseexample/db/note/NoteEntity.kt @@ -22,10 +22,8 @@ data class NoteEntity( @ColumnInfo(name = COLUMN_PERSON_NAME) var personName: String = PersonEntity.DEFAULT_PERSON_NAME, - // TODO Нужно добавить нове поле isCompleted типа Boolean. - // В SQLite не поддерживается Boolean, но в Room его можно использовать. - // Поэтому поле делаем именно Boolean, а при добавлении миграции - нужно будет погуглить, - // как обойти это ограничение. + @ColumnInfo(name = COLUMN_IS_COMPLETED) + var isCompleted: Boolean = false ) { companion object { @@ -33,5 +31,6 @@ data class NoteEntity( const val COLUMN_TITLE = "title" const val COLUMN_DESCRIPTION = "descriptions" const val COLUMN_PERSON_NAME = "person_name" + const val COLUMN_IS_COMPLETED = "is_completed" } } \ No newline at end of file diff --git a/EpicDatabseExample/app/src/main/java/com/example/epicdatabaseexample/ui/note_list/NoteListAdapter.kt b/EpicDatabseExample/app/src/main/java/com/example/epicdatabaseexample/ui/note_list/NoteListAdapter.kt index 192174f..73cbd79 100644 --- a/EpicDatabseExample/app/src/main/java/com/example/epicdatabaseexample/ui/note_list/NoteListAdapter.kt +++ b/EpicDatabseExample/app/src/main/java/com/example/epicdatabaseexample/ui/note_list/NoteListAdapter.kt @@ -20,15 +20,14 @@ class NoteListAdapter( onNoteClick.invoke(note.id) } holder.personName.text = note.personName - // TODO Раскомментировать, после добавления нового поля в NoteEntity. -// holder.isCompleted.setOnClickListener { -// onIsCompletedClick.invoke(note.copy( -// isCompleted = !note.isCompleted -// )) -// } -// val isCompletedChanged = note.isCompleted != holder.isCompleted.isChecked -// if (isCompletedChanged) { -// holder.isCompleted.isChecked = note.isCompleted -// } + holder.isCompleted.setOnClickListener { + onIsCompletedClick.invoke(note.copy( + isCompleted = !note.isCompleted + )) + } + val isCompletedChanged = note.isCompleted != holder.isCompleted.isChecked + if (isCompletedChanged) { + holder.isCompleted.isChecked = note.isCompleted + } } } \ No newline at end of file diff --git a/EpicDatabseExample/app/src/main/java/com/example/epicdatabaseexample/ui/note_list/NoteListViewModel.kt b/EpicDatabseExample/app/src/main/java/com/example/epicdatabaseexample/ui/note_list/NoteListViewModel.kt index 3344f2c..058e483 100644 --- a/EpicDatabseExample/app/src/main/java/com/example/epicdatabaseexample/ui/note_list/NoteListViewModel.kt +++ b/EpicDatabseExample/app/src/main/java/com/example/epicdatabaseexample/ui/note_list/NoteListViewModel.kt @@ -64,7 +64,10 @@ class NoteListViewModel constructor( } fun onIsCompletedClick(note: NoteEntity) { - // TODO Добавить вызов noteDao для обновления элемента в таблице. + compositeDisposable.add(noteDao.updateNote(note) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe()) } override fun onCleared() {