From 14821e35d67e40d142682f86577d24723f23423a Mon Sep 17 00:00:00 2001 From: Denis Verentsov Date: Mon, 1 Jun 2020 20:42:08 +0300 Subject: [PATCH 01/21] Updated AGP to 4.0. --- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index c83441e..a896d21 100644 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ buildscript { } } dependencies { - classpath 'com.android.tools.build:gradle:3.6.3' + classpath 'com.android.tools.build:gradle:4.0.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:$detekt_version" classpath "com.diffplug.spotless:spotless-plugin-gradle:$spotless_version" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 10987c8..da1ea48 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Tue Oct 01 21:16:31 MSK 2019 +#Sat May 30 18:39:23 MSK 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip From 45d21ead12fb4e0ee63a16c0362eddaf236854a1 Mon Sep 17 00:00:00 2001 From: Denis Verentsov Date: Mon, 1 Jun 2020 21:18:45 +0300 Subject: [PATCH 02/21] Added archive swipe. Updated tests. --- ...eleteCallback.kt => NotepadSwipeCallback.kt} | 17 +++++++++++++---- .../adapter/notepad/NotepadSwipeDirection.kt | 8 ++++++++ .../presentation/ui/notepad/NotepadFragment.kt | 12 +++++++----- .../presentation/ui/notepad/NotepadViewModel.kt | 15 ++++++++++++++- .../ui/notepad/NotepadViewModelTest.kt | 5 +++-- 5 files changed, 45 insertions(+), 12 deletions(-) rename features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/{NotepadSwipeToDeleteCallback.kt => NotepadSwipeCallback.kt} (81%) create mode 100644 features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadSwipeDirection.kt diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadSwipeToDeleteCallback.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadSwipeCallback.kt similarity index 81% rename from features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadSwipeToDeleteCallback.kt rename to features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadSwipeCallback.kt index 8655c16..7be42e3 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadSwipeToDeleteCallback.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadSwipeCallback.kt @@ -13,9 +13,9 @@ import androidx.recyclerview.widget.RecyclerView import com.dvinc.notepad.R import com.dvinc.notepad.presentation.model.NoteUi -class NotepadSwipeToDeleteCallback( +class NotepadSwipeCallback( private val notesAdapter: NotepadAdapter, - private val onItemSwipedListener: (note: NoteUi) -> Unit + private val onItemSwipedListener: (note: NoteUi, swipeDirection: NotepadSwipeDirection) -> Unit ) : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT) { companion object { @@ -24,6 +24,8 @@ class NotepadSwipeToDeleteCallback( private val deletedItemBackground = ColorDrawable(Color.RED) + private val archiveItemBackground = ColorDrawable(Color.GREEN) + override fun onMove( recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, @@ -35,7 +37,12 @@ class NotepadSwipeToDeleteCallback( override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) { val position = viewHolder.adapterPosition val swipedNote = notesAdapter.getItem(position) - onItemSwipedListener.invoke(swipedNote) + // (!) Be careful about directions + if (direction == ItemTouchHelper.RIGHT) { + onItemSwipedListener.invoke(swipedNote, NotepadSwipeDirection.LEFT) + } else if (direction == ItemTouchHelper.LEFT) { + onItemSwipedListener.invoke(swipedNote, NotepadSwipeDirection.RIGHT) + } } override fun onChildDraw( @@ -56,7 +63,7 @@ class NotepadSwipeToDeleteCallback( when { dX > 0 -> { - deletedItemBackground.setBounds( + archiveItemBackground.setBounds( itemView.left, itemView.top, itemView.left + (dX.toInt() + BACKGROUND_CORNER_OFFSET), @@ -80,9 +87,11 @@ class NotepadSwipeToDeleteCallback( } else -> { deletedItemBackground.setBounds(0, 0, 0, 0) + archiveItemBackground.setBounds(0, 0, 0, 0) } } deletedItemBackground.draw(c) + archiveItemBackground.draw(c) deleteIcon.draw(c) } } diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadSwipeDirection.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadSwipeDirection.kt new file mode 100644 index 0000000..d08c762 --- /dev/null +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadSwipeDirection.kt @@ -0,0 +1,8 @@ +package com.dvinc.notepad.presentation.adapter.notepad + +enum class NotepadSwipeDirection { + + LEFT, + + RIGHT +} diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadFragment.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadFragment.kt index 57ff44e..79852af 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadFragment.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadFragment.kt @@ -19,7 +19,8 @@ import com.dvinc.core.ui.ViewCommand import com.dvinc.notepad.R import com.dvinc.notepad.di.component.DaggerNotepadComponent import com.dvinc.notepad.presentation.adapter.notepad.NotepadAdapter -import com.dvinc.notepad.presentation.adapter.notepad.NotepadSwipeToDeleteCallback +import com.dvinc.notepad.presentation.adapter.notepad.NotepadSwipeCallback +import com.dvinc.notepad.presentation.adapter.notepad.NotepadSwipeDirection import com.dvinc.notepad.presentation.model.NoteUi import javax.inject.Inject import javax.inject.Provider @@ -43,9 +44,10 @@ class NotepadFragment : BaseFragment(layoutResId = R.layout.fragment_notepad) { } } - private val noteItemSwipeListener: (note: NoteUi) -> Unit = { - viewModel.onNoteDelete(it.id) - } + private val noteItemSwipeListener: (note: NoteUi, swipeDirection: NotepadSwipeDirection) -> Unit = + { note, direction -> + viewModel.onNoteSwipe(note.id, direction) + } override fun injectDependencies() { DaggerNotepadComponent.factory() @@ -78,7 +80,7 @@ class NotepadFragment : BaseFragment(layoutResId = R.layout.fragment_notepad) { adapter = notesAdapter addItemDecoration(SpaceItemDecorator()) } - val notepadTouchCallback = NotepadSwipeToDeleteCallback(notesAdapter, noteItemSwipeListener) + val notepadTouchCallback = NotepadSwipeCallback(notesAdapter, noteItemSwipeListener) val swipeToDeleteTouchHelper = ItemTouchHelper(notepadTouchCallback) swipeToDeleteTouchHelper.attachToRecyclerView(notesRecycler) } diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModel.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModel.kt index 54e7ad1..d37338f 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModel.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModel.kt @@ -8,7 +8,9 @@ import com.dvinc.core.ui.BaseViewModel import com.dvinc.notepad.R import com.dvinc.notepad.common.DEFAULT_NOTE_ID import com.dvinc.notepad.domain.usecase.notepad.NotepadUseCase +import com.dvinc.notepad.presentation.adapter.notepad.NotepadSwipeDirection import com.dvinc.notepad.presentation.mapper.NotePresentationMapper +import com.dvinc.notepad.presentation.model.NoteUi import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach @@ -41,7 +43,14 @@ class NotepadViewModel @Inject constructor( navigateTo(noteNavDirection) } - fun onNoteDelete(noteId: Long) { + fun onNoteSwipe(noteId: Long, swipeDirection: NotepadSwipeDirection) { + when (swipeDirection) { + NotepadSwipeDirection.LEFT -> onNoteArchive(noteId) + NotepadSwipeDirection.RIGHT -> onNoteDelete(noteId) + } + } + + private fun onNoteDelete(noteId: Long) { viewModelScope.safeLaunch( launchBlock = { notepadUseCase.deleteNote(noteId) @@ -56,6 +65,10 @@ class NotepadViewModel @Inject constructor( ) } + private fun onNoteArchive(noteId: Long) { + //TODO(dv): + } + private fun loadNotes() { notepadUseCase.getNotes() .onEach { diff --git a/features/notepad/src/test/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModelTest.kt b/features/notepad/src/test/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModelTest.kt index 4e3a56e..afa8bfc 100644 --- a/features/notepad/src/test/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModelTest.kt +++ b/features/notepad/src/test/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModelTest.kt @@ -13,6 +13,7 @@ import com.dvinc.notepad.BaseTest import com.dvinc.notepad.R import com.dvinc.notepad.domain.model.note.Note import com.dvinc.notepad.domain.usecase.notepad.NotepadUseCase +import com.dvinc.notepad.presentation.adapter.notepad.NotepadSwipeDirection import com.dvinc.notepad.presentation.mapper.NotePresentationMapper import com.dvinc.notepad.presentation.model.NoteUi import com.dvinc.notepad.presentation.ui.ViewCommandUtil @@ -94,7 +95,7 @@ class NotepadViewModelTest : BaseTest() { val notepadViewModel = NotepadViewModel(notepadUseCase, noteMapper) // When - notepadViewModel.onNoteDelete(10L) + notepadViewModel.onNoteSwipe(10L, NotepadSwipeDirection.RIGHT) // Then val resultViewCommandList = notepadViewModel.viewCommands.getOrAwaitValue() @@ -111,7 +112,7 @@ class NotepadViewModelTest : BaseTest() { whenever(notepadUseCase.deleteNote(noteUi.id)).thenThrow(IllegalStateException()) // When - notepadViewModel.onNoteDelete(noteUi.id) + notepadViewModel.onNoteSwipe(noteUi.id, NotepadSwipeDirection.RIGHT) // Then val resultViewCommandList = notepadViewModel.viewCommands.getOrAwaitValue() From 62b11e7a0118cbe524ffe45ccfbaa0dc89e9c2aa Mon Sep 17 00:00:00 2001 From: Denis Verentsov Date: Wed, 3 Jun 2020 21:10:24 +0300 Subject: [PATCH 03/21] Added message about archive. Added domain and data methods for archive. --- .../data/repository/note/NoteDataRepository.kt | 4 ++++ .../domain/repository/note/NoteRepository.kt | 2 ++ .../domain/usecase/notepad/NotepadUseCase.kt | 4 ++++ .../presentation/ui/notepad/NotepadViewModel.kt | 13 ++++++++++++- features/notepad/src/main/res/values/strings.xml | 2 ++ 5 files changed, 24 insertions(+), 1 deletion(-) diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/note/NoteDataRepository.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/note/NoteDataRepository.kt index 86c85fe..d4b8439 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/note/NoteDataRepository.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/note/NoteDataRepository.kt @@ -36,4 +36,8 @@ class NoteDataRepository @Inject constructor( val noteEntity = noteDao.getNoteById(id) return noteMapper.fromEntityToDomain(noteEntity) } + + override suspend fun archiveNoteById(id: Long) { + //TODO(dv): + } } diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/note/NoteRepository.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/note/NoteRepository.kt index faa2721..dce5483 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/note/NoteRepository.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/note/NoteRepository.kt @@ -18,5 +18,7 @@ interface NoteRepository { suspend fun deleteNoteById(id: Long) + suspend fun archiveNoteById(id: Long) + suspend fun getNoteById(id: Long): Note } diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/notepad/NotepadUseCase.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/notepad/NotepadUseCase.kt index 949c4cb..9565e99 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/notepad/NotepadUseCase.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/notepad/NotepadUseCase.kt @@ -23,4 +23,8 @@ class NotepadUseCase @Inject constructor( suspend fun deleteNote(noteId: Long) { noteRepository.deleteNoteById(noteId) } + + suspend fun archiveNote(noteId: Long) { + noteRepository.archiveNoteById(noteId) + } } diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModel.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModel.kt index d37338f..f13489a 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModel.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModel.kt @@ -66,7 +66,18 @@ class NotepadViewModel @Inject constructor( } private fun onNoteArchive(noteId: Long) { - //TODO(dv): + viewModelScope.safeLaunch( + launchBlock = { + notepadUseCase.archiveNote(noteId) + }, + onSuccess = { + showMessage(R.string.note_successfully_archived) + }, + onError = { + showErrorMessage(R.string.error_while_archiving_note) + Timber.tag(TAG).e(it) + } + ) } private fun loadNotes() { diff --git a/features/notepad/src/main/res/values/strings.xml b/features/notepad/src/main/res/values/strings.xml index b9e50ce..b48282b 100644 --- a/features/notepad/src/main/res/values/strings.xml +++ b/features/notepad/src/main/res/values/strings.xml @@ -6,11 +6,13 @@ Note Note deleted + Note archived An error has occurred while loading from database An error has occurred while deleting note Cannot load note from database Cannot add note + An error has occurred while archiving note Filter icon From d629339b275e8ef62e4d94cf21a8ed2f7c0ab67e Mon Sep 17 00:00:00 2001 From: Denis Verentsov Date: Sat, 6 Jun 2020 18:27:02 +0300 Subject: [PATCH 04/21] Added empty Archive repository. --- .../archive/ArchiveDataRepository.kt | 21 +++++++++++++++++++ .../repository/note/NoteDataRepository.kt | 4 ---- .../dvinc/notepad/di/module/NotepadModule.kt | 10 +++++++++ .../domain/repository/ArchiveRepository.kt | 10 +++++++++ .../domain/repository/note/NoteRepository.kt | 2 -- .../domain/usecase/notepad/NotepadUseCase.kt | 6 ++++-- 6 files changed, 45 insertions(+), 8 deletions(-) create mode 100644 features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/archive/ArchiveDataRepository.kt create mode 100644 features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/ArchiveRepository.kt diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/archive/ArchiveDataRepository.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/archive/ArchiveDataRepository.kt new file mode 100644 index 0000000..5457c4e --- /dev/null +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/archive/ArchiveDataRepository.kt @@ -0,0 +1,21 @@ +package com.dvinc.notepad.data.repository.archive + +import com.dvinc.core.database.dao.note.NoteDao +import com.dvinc.notepad.data.mapper.note.NoteDataMapper +import com.dvinc.notepad.domain.model.note.Note +import com.dvinc.notepad.domain.repository.ArchiveRepository +import javax.inject.Inject + +class ArchiveDataRepository @Inject constructor( + private val noteDao: NoteDao, + private val noteMapper: NoteDataMapper +) : ArchiveRepository { + + override suspend fun archiveNoteById(id: Long) { + TODO("Not yet implemented") + } + + override suspend fun getArchivedNotes(): List { + TODO("Not yet implemented") + } +} diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/note/NoteDataRepository.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/note/NoteDataRepository.kt index d4b8439..86c85fe 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/note/NoteDataRepository.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/note/NoteDataRepository.kt @@ -36,8 +36,4 @@ class NoteDataRepository @Inject constructor( val noteEntity = noteDao.getNoteById(id) return noteMapper.fromEntityToDomain(noteEntity) } - - override suspend fun archiveNoteById(id: Long) { - //TODO(dv): - } } diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/di/module/NotepadModule.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/di/module/NotepadModule.kt index 2b78d35..3583271 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/di/module/NotepadModule.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/di/module/NotepadModule.kt @@ -8,7 +8,9 @@ package com.dvinc.notepad.di.module import com.dvinc.core.database.NotepadDatabase import com.dvinc.core.database.dao.note.NoteDao import com.dvinc.notepad.data.mapper.note.NoteDataMapper +import com.dvinc.notepad.data.repository.archive.ArchiveDataRepository import com.dvinc.notepad.data.repository.note.NoteDataRepository +import com.dvinc.notepad.domain.repository.ArchiveRepository import com.dvinc.notepad.domain.repository.note.NoteRepository import dagger.Module import dagger.Provides @@ -28,4 +30,12 @@ class NotepadModule { ): NoteRepository { return NoteDataRepository(noteDao, noteDataMapper) } + + @Provides + fun provideArchiveRepository( + noteDao: NoteDao, + noteDataMapper: NoteDataMapper + ): ArchiveRepository { + return ArchiveDataRepository(noteDao, noteDataMapper) + } } diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/ArchiveRepository.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/ArchiveRepository.kt new file mode 100644 index 0000000..3147335 --- /dev/null +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/ArchiveRepository.kt @@ -0,0 +1,10 @@ +package com.dvinc.notepad.domain.repository + +import com.dvinc.notepad.domain.model.note.Note + +interface ArchiveRepository { + + suspend fun archiveNoteById(id: Long) + + suspend fun getArchivedNotes(): List +} diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/note/NoteRepository.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/note/NoteRepository.kt index dce5483..faa2721 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/note/NoteRepository.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/note/NoteRepository.kt @@ -18,7 +18,5 @@ interface NoteRepository { suspend fun deleteNoteById(id: Long) - suspend fun archiveNoteById(id: Long) - suspend fun getNoteById(id: Long): Note } diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/notepad/NotepadUseCase.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/notepad/NotepadUseCase.kt index 9565e99..6a653fd 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/notepad/NotepadUseCase.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/notepad/NotepadUseCase.kt @@ -8,12 +8,14 @@ package com.dvinc.notepad.domain.usecase.notepad import com.dvinc.notepad.domain.model.note.Note +import com.dvinc.notepad.domain.repository.ArchiveRepository import com.dvinc.notepad.domain.repository.note.NoteRepository import kotlinx.coroutines.flow.Flow import javax.inject.Inject class NotepadUseCase @Inject constructor( - private val noteRepository: NoteRepository + private val noteRepository: NoteRepository, + private val archiveRepository: ArchiveRepository ) { fun getNotes(): Flow> { @@ -25,6 +27,6 @@ class NotepadUseCase @Inject constructor( } suspend fun archiveNote(noteId: Long) { - noteRepository.archiveNoteById(noteId) + archiveRepository.archiveNoteById(noteId) } } From b61eec698763f765ccc38fb6548bdd9249a49f1c Mon Sep 17 00:00:00 2001 From: Denis Verentsov Date: Sat, 6 Jun 2020 18:44:00 +0300 Subject: [PATCH 05/21] Added ability to archive note and load archived notes via db. --- .../kotlin/com/dvinc/core/database/dao/note/NoteDao.kt | 8 +++++++- .../com/dvinc/core/database/entity/note/NoteEntity.kt | 5 ++++- .../data/repository/archive/ArchiveDataRepository.kt | 9 ++++++--- .../dvinc/notepad/domain/repository/ArchiveRepository.kt | 3 ++- 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/core/src/main/kotlin/com/dvinc/core/database/dao/note/NoteDao.kt b/core/src/main/kotlin/com/dvinc/core/database/dao/note/NoteDao.kt index b6f9a40..f506acf 100644 --- a/core/src/main/kotlin/com/dvinc/core/database/dao/note/NoteDao.kt +++ b/core/src/main/kotlin/com/dvinc/core/database/dao/note/NoteDao.kt @@ -18,7 +18,7 @@ interface NoteDao { @Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun addNote(note: NoteEntity) - @Query("SELECT * FROM Notes ORDER BY id DESC") + @Query("SELECT * FROM Notes WHERE is_archived = 0 ORDER BY id DESC") fun getNotes(): Flow> @Query("DELETE FROM Notes WHERE id = :id") @@ -26,4 +26,10 @@ interface NoteDao { @Query("SELECT * FROM Notes WHERE id = :id") suspend fun getNoteById(id: Long): NoteEntity + + @Query("UPDATE Notes SET is_archived = 1 WHERE id =:noteId") + suspend fun markNoteAsArchived(noteId: Long) + + @Query("SELECT * FROM Notes WHERE is_archived = 1 ORDER BY id DESC") + fun getArchive(): Flow> } diff --git a/core/src/main/kotlin/com/dvinc/core/database/entity/note/NoteEntity.kt b/core/src/main/kotlin/com/dvinc/core/database/entity/note/NoteEntity.kt index d1f0a4c..5ca0088 100644 --- a/core/src/main/kotlin/com/dvinc/core/database/entity/note/NoteEntity.kt +++ b/core/src/main/kotlin/com/dvinc/core/database/entity/note/NoteEntity.kt @@ -22,5 +22,8 @@ data class NoteEntity( val content: String, @ColumnInfo(name = "update_time") - val updateTime: Long + val updateTime: Long, + + @ColumnInfo(name = "is_archived") + val isArchived: Boolean = false ) diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/archive/ArchiveDataRepository.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/archive/ArchiveDataRepository.kt index 5457c4e..f9276d4 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/archive/ArchiveDataRepository.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/archive/ArchiveDataRepository.kt @@ -4,6 +4,8 @@ import com.dvinc.core.database.dao.note.NoteDao import com.dvinc.notepad.data.mapper.note.NoteDataMapper import com.dvinc.notepad.domain.model.note.Note import com.dvinc.notepad.domain.repository.ArchiveRepository +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map import javax.inject.Inject class ArchiveDataRepository @Inject constructor( @@ -12,10 +14,11 @@ class ArchiveDataRepository @Inject constructor( ) : ArchiveRepository { override suspend fun archiveNoteById(id: Long) { - TODO("Not yet implemented") + noteDao.markNoteAsArchived(id) } - override suspend fun getArchivedNotes(): List { - TODO("Not yet implemented") + override fun getArchivedNotes(): Flow> { + return noteDao.getArchive() + .map { noteMapper.fromEntityToDomain(it) } } } diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/ArchiveRepository.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/ArchiveRepository.kt index 3147335..3d39136 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/ArchiveRepository.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/ArchiveRepository.kt @@ -1,10 +1,11 @@ package com.dvinc.notepad.domain.repository import com.dvinc.notepad.domain.model.note.Note +import kotlinx.coroutines.flow.Flow interface ArchiveRepository { suspend fun archiveNoteById(id: Long) - suspend fun getArchivedNotes(): List + fun getArchivedNotes(): Flow> } From 4d7ab643e0eb84816f1bfad34492306db6194030 Mon Sep 17 00:00:00 2001 From: Denis Verentsov Date: Sat, 6 Jun 2020 19:22:10 +0300 Subject: [PATCH 06/21] Added Archive usecase. --- .../domain/usecase/archive/ArchiveUseCase.kt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/archive/ArchiveUseCase.kt diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/archive/ArchiveUseCase.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/archive/ArchiveUseCase.kt new file mode 100644 index 0000000..2a10797 --- /dev/null +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/archive/ArchiveUseCase.kt @@ -0,0 +1,15 @@ +package com.dvinc.notepad.domain.usecase.archive + +import com.dvinc.notepad.domain.model.note.Note +import com.dvinc.notepad.domain.repository.ArchiveRepository +import kotlinx.coroutines.flow.Flow +import javax.inject.Inject + +class ArchiveUseCase @Inject constructor( + private val archiveRepository: ArchiveRepository +) { + + fun getArchivedNotes(): Flow> { + return archiveRepository.getArchivedNotes() + } +} From 14ddb6fc49e9ea64b9dd0739d1e6c8640bebc590 Mon Sep 17 00:00:00 2001 From: Denis Verentsov Date: Sat, 6 Jun 2020 19:23:15 +0300 Subject: [PATCH 07/21] Added Archive screen with VM and fragment. --- .../notepad/di/component/NotepadComponent.kt | 3 + .../ui/archive/ArchiveFragment.kt | 58 +++++++++++++++++++ .../ui/archive/ArchiveViewModel.kt | 44 ++++++++++++++ .../ui/archive/ArchiveViewState.kt | 8 +++ .../src/main/res/layout/fragment_archive.xml | 39 +++++++++++++ .../notepad/src/main/res/values/strings.xml | 5 ++ 6 files changed, 157 insertions(+) create mode 100644 features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveFragment.kt create mode 100644 features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewModel.kt create mode 100644 features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewState.kt create mode 100644 features/notepad/src/main/res/layout/fragment_archive.xml diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/di/component/NotepadComponent.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/di/component/NotepadComponent.kt index 5d2d03f..6a4c76a 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/di/component/NotepadComponent.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/di/component/NotepadComponent.kt @@ -8,6 +8,7 @@ package com.dvinc.notepad.di.component import com.dvinc.core.di.provider.ApplicationProvider import com.dvinc.notepad.di.module.AssistedInjectModule import com.dvinc.notepad.di.module.NotepadModule +import com.dvinc.notepad.presentation.ui.archive.ArchiveFragment import com.dvinc.notepad.presentation.ui.note.NoteFragment import com.dvinc.notepad.presentation.ui.notepad.NotepadFragment import dagger.Component @@ -27,6 +28,8 @@ interface NotepadComponent { fun inject(target: NoteFragment) + fun inject(target: ArchiveFragment) + @Component.Factory interface Factory { fun create(applicationProvider: ApplicationProvider): NotepadComponent diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveFragment.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveFragment.kt new file mode 100644 index 0000000..7537f58 --- /dev/null +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveFragment.kt @@ -0,0 +1,58 @@ +package com.dvinc.notepad.presentation.ui.archive + +import android.os.Bundle +import android.view.View +import androidx.recyclerview.widget.LinearLayoutManager +import com.dvinc.core.extension.observe +import com.dvinc.core.extension.toggleGone +import com.dvinc.core.extension.viewModels +import com.dvinc.core.recycler.SpaceItemDecorator +import com.dvinc.core.ui.BaseFragment +import com.dvinc.notepad.R +import com.dvinc.notepad.di.component.DaggerNotepadComponent +import com.dvinc.notepad.presentation.adapter.notepad.NotepadAdapter +import kotlinx.android.synthetic.main.fragment_archive.fragment_archive_recycler as archiveRecycle +import kotlinx.android.synthetic.main.fragment_archive.fragment_archive_stub_container as stubContainer +import javax.inject.Inject +import javax.inject.Provider + +class ArchiveFragment : BaseFragment(layoutResId = R.layout.fragment_archive) { + + @Inject + lateinit var viewModelProvider: Provider + + private val viewModel by viewModels { viewModelProvider.get() } + + private val notesAdapter: NotepadAdapter by lazy { NotepadAdapter() } + + override fun injectDependencies() { + DaggerNotepadComponent.factory() + .create(appComponent) + .inject(this) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + observerViewModel() + initViews() + } + + private fun observerViewModel() { + observe(viewModel.viewState, ::handleViewState) + observe(viewModel.viewCommands, ::handleViewCommand) + } + + private fun initViews() { + with(archiveRecycle) { + layoutManager = LinearLayoutManager(requireContext()) + adapter = notesAdapter + addItemDecoration(SpaceItemDecorator()) + } + } + + private fun handleViewState(viewState: ArchiveViewState) { + notesAdapter.updateNotes(viewState.archivedNotes) + stubContainer.toggleGone(viewState.isStubViewVisible) + } +} diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewModel.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewModel.kt new file mode 100644 index 0000000..7ae4450 --- /dev/null +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewModel.kt @@ -0,0 +1,44 @@ +package com.dvinc.notepad.presentation.ui.archive + +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.viewModelScope +import com.dvinc.core.extension.update +import com.dvinc.core.ui.BaseViewModel +import com.dvinc.notepad.R +import com.dvinc.notepad.domain.usecase.archive.ArchiveUseCase +import com.dvinc.notepad.presentation.mapper.NotePresentationMapper +import kotlinx.coroutines.flow.catch +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach +import timber.log.Timber +import javax.inject.Inject + +class ArchiveViewModel @Inject constructor( + private val archiveUseCase: ArchiveUseCase, + private val noteMapper: NotePresentationMapper +) : BaseViewModel() { + + val viewState = MutableLiveData(ArchiveViewState()) + + init { + loadArchive() + } + + private fun loadArchive() { + archiveUseCase.getArchivedNotes() + .onEach { + val notes = noteMapper.fromDomainToUi(it) + viewState.update { state -> + state.copy( + archivedNotes = notes, + isStubViewVisible = notes.isEmpty() + ) + } + } + .catch { + showErrorMessage(R.string.error_while_load_data_from_db) + Timber.e(it) + } + .launchIn(viewModelScope) + } +} diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewState.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewState.kt new file mode 100644 index 0000000..1cc742f --- /dev/null +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewState.kt @@ -0,0 +1,8 @@ +package com.dvinc.notepad.presentation.ui.archive + +import com.dvinc.notepad.presentation.model.NoteUi + +data class ArchiveViewState( + val archivedNotes: List = emptyList(), + val isStubViewVisible: Boolean = false +) diff --git a/features/notepad/src/main/res/layout/fragment_archive.xml b/features/notepad/src/main/res/layout/fragment_archive.xml new file mode 100644 index 0000000..fc2632d --- /dev/null +++ b/features/notepad/src/main/res/layout/fragment_archive.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + diff --git a/features/notepad/src/main/res/values/strings.xml b/features/notepad/src/main/res/values/strings.xml index b48282b..eef5d87 100644 --- a/features/notepad/src/main/res/values/strings.xml +++ b/features/notepad/src/main/res/values/strings.xml @@ -8,6 +8,7 @@ Note deleted Note archived + An error has occurred while loading from database An error has occurred while deleting note Cannot load note from database @@ -18,4 +19,8 @@ Filter icon Your notepad is empty + + + Your archive is empty + From b1d47c57283e29c67cca89959cf5a280bdafd1c2 Mon Sep 17 00:00:00 2001 From: Denis Verentsov Date: Sat, 6 Jun 2020 19:23:49 +0300 Subject: [PATCH 08/21] Added navigation to archive screen. --- .../notepad/presentation/ui/notepad/NotepadFragment.kt | 4 ++-- .../presentation/ui/notepad/NotepadViewModel.kt | 5 +++++ features/notepad/src/main/res/navigation/nav_graph.xml | 10 ++++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadFragment.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadFragment.kt index 79852af..da541f4 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadFragment.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadFragment.kt @@ -36,7 +36,7 @@ class NotepadFragment : BaseFragment(layoutResId = R.layout.fragment_notepad) { private val viewModel: NotepadViewModel by viewModels { viewModelFactory.get() } - private val notesAdapter: NotepadAdapter = NotepadAdapter() + private val notesAdapter: NotepadAdapter by lazy { NotepadAdapter() } private val noteItemClickListener = object : NotepadAdapter.ItemClickListener { override fun onItemClick(note: NoteUi) { @@ -100,7 +100,7 @@ class NotepadFragment : BaseFragment(layoutResId = R.layout.fragment_notepad) { bottomBar.setOnMenuItemClickListener { when (it.itemId) { R.id.fragment_notepad_filter_menu_item -> { - // TODO(dv): handle filter click + viewModel.onArchiveClick() } } true diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModel.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModel.kt index f13489a..58391c5 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModel.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModel.kt @@ -50,6 +50,11 @@ class NotepadViewModel @Inject constructor( } } + fun onArchiveClick() { + val archiveNavDirection = NotepadFragmentDirections.actionNotepadFragmentToArchiveFragment() + navigateTo(archiveNavDirection) + } + private fun onNoteDelete(noteId: Long) { viewModelScope.safeLaunch( launchBlock = { diff --git a/features/notepad/src/main/res/navigation/nav_graph.xml b/features/notepad/src/main/res/navigation/nav_graph.xml index 22d200a..ec3b3f8 100644 --- a/features/notepad/src/main/res/navigation/nav_graph.xml +++ b/features/notepad/src/main/res/navigation/nav_graph.xml @@ -16,6 +16,9 @@ app:exitAnim="@anim/nav_default_exit_anim" app:popEnterAnim="@anim/nav_default_pop_enter_anim" app:popExitAnim="@anim/nav_default_pop_exit_anim" /> + + + + From 015e3a74a640e57a31a3a7683f4cf10599dceb3d Mon Sep 17 00:00:00 2001 From: Denis Verentsov Date: Sat, 6 Jun 2020 19:35:38 +0300 Subject: [PATCH 09/21] Added ViewState field for Base VM. Updated VMs. --- .../kotlin/com/dvinc/core/ui/BaseViewModel.kt | 15 ++++++++++++++- .../main/kotlin/com/dvinc/core/ui/ViewState.kt | 3 +++ .../presentation/ui/archive/ArchiveViewModel.kt | 5 +---- .../presentation/ui/archive/ArchiveViewState.kt | 3 ++- .../notepad/presentation/ui/note/NoteViewModel.kt | 5 +---- .../notepad/presentation/ui/note/NoteViewState.kt | 3 ++- .../presentation/ui/notepad/NotepadViewModel.kt | 6 +----- .../presentation/ui/notepad/NotepadViewState.kt | 3 ++- 8 files changed, 26 insertions(+), 17 deletions(-) create mode 100644 core/src/main/kotlin/com/dvinc/core/ui/ViewState.kt diff --git a/core/src/main/kotlin/com/dvinc/core/ui/BaseViewModel.kt b/core/src/main/kotlin/com/dvinc/core/ui/BaseViewModel.kt index d7352a4..99ad93f 100644 --- a/core/src/main/kotlin/com/dvinc/core/ui/BaseViewModel.kt +++ b/core/src/main/kotlin/com/dvinc/core/ui/BaseViewModel.kt @@ -1,13 +1,20 @@ package com.dvinc.core.ui import androidx.annotation.StringRes +import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.navigation.NavDirections -abstract class BaseViewModel : ViewModel() { +abstract class BaseViewModel(initialViewState: State? = null) : ViewModel() { + + val viewState = MutableLiveData() val viewCommands = CommandsLiveData() + init { + setInitialViewState(initialViewState) + } + protected fun showMessage(@StringRes messageResId: Int) { val showMessageCommand = ShowMessage(messageResId) viewCommands.onNext(showMessageCommand) @@ -26,4 +33,10 @@ abstract class BaseViewModel : ViewModel() { protected fun navigateBack() { viewCommands.onNext(NavigateUp) } + + private fun setInitialViewState(initialViewState: State?) { + initialViewState?.let { + viewState.value = it + } + } } diff --git a/core/src/main/kotlin/com/dvinc/core/ui/ViewState.kt b/core/src/main/kotlin/com/dvinc/core/ui/ViewState.kt new file mode 100644 index 0000000..eae24b5 --- /dev/null +++ b/core/src/main/kotlin/com/dvinc/core/ui/ViewState.kt @@ -0,0 +1,3 @@ +package com.dvinc.core.ui + +interface ViewState diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewModel.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewModel.kt index 7ae4450..3765329 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewModel.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewModel.kt @@ -1,6 +1,5 @@ package com.dvinc.notepad.presentation.ui.archive -import androidx.lifecycle.MutableLiveData import androidx.lifecycle.viewModelScope import com.dvinc.core.extension.update import com.dvinc.core.ui.BaseViewModel @@ -16,9 +15,7 @@ import javax.inject.Inject class ArchiveViewModel @Inject constructor( private val archiveUseCase: ArchiveUseCase, private val noteMapper: NotePresentationMapper -) : BaseViewModel() { - - val viewState = MutableLiveData(ArchiveViewState()) +) : BaseViewModel(initialViewState = ArchiveViewState()) { init { loadArchive() diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewState.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewState.kt index 1cc742f..05e3769 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewState.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewState.kt @@ -1,8 +1,9 @@ package com.dvinc.notepad.presentation.ui.archive +import com.dvinc.core.ui.ViewState import com.dvinc.notepad.presentation.model.NoteUi data class ArchiveViewState( val archivedNotes: List = emptyList(), val isStubViewVisible: Boolean = false -) +) : ViewState diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/note/NoteViewModel.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/note/NoteViewModel.kt index 96fd819..8c880f5 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/note/NoteViewModel.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/note/NoteViewModel.kt @@ -5,7 +5,6 @@ package com.dvinc.notepad.presentation.ui.note -import androidx.lifecycle.MutableLiveData import androidx.lifecycle.viewModelScope import com.dvinc.core.extension.onNext import com.dvinc.core.extension.safeLaunch @@ -24,14 +23,12 @@ class NoteViewModel @AssistedInject constructor( @Assisted private val noteId: Long, private val noteUseCase: NoteUseCase, private val noteMapper: NotePresentationMapper -) : BaseViewModel() { +) : BaseViewModel() { companion object { private const val TAG = "NoteViewModel" } - val viewState = MutableLiveData() - init { initNote(noteId) } diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/note/NoteViewState.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/note/NoteViewState.kt index 2298c41..4ec96ad 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/note/NoteViewState.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/note/NoteViewState.kt @@ -5,9 +5,10 @@ package com.dvinc.notepad.presentation.ui.note +import com.dvinc.core.ui.ViewState import com.dvinc.notepad.domain.model.note.Note -sealed class NoteViewState { +sealed class NoteViewState : ViewState { object NewNoteViewState : NoteViewState() diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModel.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModel.kt index 58391c5..1f7aaa6 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModel.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModel.kt @@ -1,6 +1,5 @@ package com.dvinc.notepad.presentation.ui.notepad -import androidx.lifecycle.MutableLiveData import androidx.lifecycle.viewModelScope import com.dvinc.core.extension.safeLaunch import com.dvinc.core.extension.update @@ -10,7 +9,6 @@ import com.dvinc.notepad.common.DEFAULT_NOTE_ID import com.dvinc.notepad.domain.usecase.notepad.NotepadUseCase import com.dvinc.notepad.presentation.adapter.notepad.NotepadSwipeDirection import com.dvinc.notepad.presentation.mapper.NotePresentationMapper -import com.dvinc.notepad.presentation.model.NoteUi import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach @@ -20,14 +18,12 @@ import javax.inject.Inject class NotepadViewModel @Inject constructor( private val notepadUseCase: NotepadUseCase, private val noteMapper: NotePresentationMapper -) : BaseViewModel() { +) : BaseViewModel(initialViewState = NotepadViewState()) { companion object { private const val TAG = "NotepadViewModel" } - val viewState = MutableLiveData(NotepadViewState()) - init { loadNotes() } diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewState.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewState.kt index e93083d..a5776f3 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewState.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewState.kt @@ -5,9 +5,10 @@ package com.dvinc.notepad.presentation.ui.notepad +import com.dvinc.core.ui.ViewState import com.dvinc.notepad.presentation.model.NoteUi data class NotepadViewState( val notes: List = emptyList(), val isStubViewVisible: Boolean = false -) +) : ViewState From de45350f9b34b1b34697b105e47d3f4b4232e4ef Mon Sep 17 00:00:00 2001 From: Denis Verentsov Date: Sat, 6 Jun 2020 19:41:38 +0300 Subject: [PATCH 10/21] Updated stub views. --- .../presentation/ui/archive/ArchiveFragment.kt | 2 +- .../presentation/ui/notepad/NotepadFragment.kt | 2 +- .../src/main/res/layout/fragment_archive.xml | 18 ++++++------------ .../src/main/res/layout/fragment_notepad.xml | 17 ++++++----------- 4 files changed, 14 insertions(+), 25 deletions(-) diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveFragment.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveFragment.kt index 7537f58..4a5d807 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveFragment.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveFragment.kt @@ -12,7 +12,7 @@ import com.dvinc.notepad.R import com.dvinc.notepad.di.component.DaggerNotepadComponent import com.dvinc.notepad.presentation.adapter.notepad.NotepadAdapter import kotlinx.android.synthetic.main.fragment_archive.fragment_archive_recycler as archiveRecycle -import kotlinx.android.synthetic.main.fragment_archive.fragment_archive_stub_container as stubContainer +import kotlinx.android.synthetic.main.fragment_archive.fragment_archive_stub_text as stubContainer import javax.inject.Inject import javax.inject.Provider diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadFragment.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadFragment.kt index da541f4..3cb54cb 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadFragment.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadFragment.kt @@ -27,7 +27,7 @@ import javax.inject.Provider import kotlinx.android.synthetic.main.fragment_notepad.fragment_notepad_bottom_app_bar as bottomBar import kotlinx.android.synthetic.main.fragment_notepad.fragment_notepad_fab as bottomBarFab import kotlinx.android.synthetic.main.fragment_notepad.fragment_notepad_recycler as notesRecycler -import kotlinx.android.synthetic.main.fragment_notepad.fragment_notepad_stub_container as stubContainer +import kotlinx.android.synthetic.main.fragment_notepad.fragment_notepad_stub_text as stubContainer class NotepadFragment : BaseFragment(layoutResId = R.layout.fragment_notepad) { diff --git a/features/notepad/src/main/res/layout/fragment_archive.xml b/features/notepad/src/main/res/layout/fragment_archive.xml index fc2632d..dc04add 100644 --- a/features/notepad/src/main/res/layout/fragment_archive.xml +++ b/features/notepad/src/main/res/layout/fragment_archive.xml @@ -6,21 +6,15 @@ android:layout_height="match_parent" android:fitsSystemWindows="true"> - - - - - + android:text="@string/fragment_archive_stub_text" + android:textColor="@color/black" + android:textSize="20sp" + android:visibility="gone" /> - - - - + android:text="@string/fragment_notepad_stub_text" + android:textColor="@color/black" + android:textSize="20sp" + android:visibility="gone" /> Date: Sat, 6 Jun 2020 19:43:56 +0300 Subject: [PATCH 11/21] Added file headers for new files. --- .../notepad/data/repository/archive/ArchiveDataRepository.kt | 5 +++++ .../com/dvinc/notepad/domain/repository/ArchiveRepository.kt | 5 +++++ .../dvinc/notepad/domain/usecase/archive/ArchiveUseCase.kt | 5 +++++ .../dvinc/notepad/presentation/ui/archive/ArchiveFragment.kt | 5 +++++ .../notepad/presentation/ui/archive/ArchiveViewModel.kt | 5 +++++ .../notepad/presentation/ui/archive/ArchiveViewState.kt | 5 +++++ 6 files changed, 30 insertions(+) diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/archive/ArchiveDataRepository.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/archive/ArchiveDataRepository.kt index f9276d4..3c6fef7 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/archive/ArchiveDataRepository.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/archive/ArchiveDataRepository.kt @@ -1,3 +1,8 @@ +/* + * Copyright (c) 2020 by Denis Verentsov (decsent@yandex.ru) + * All rights reserved. + */ + package com.dvinc.notepad.data.repository.archive import com.dvinc.core.database.dao.note.NoteDao diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/ArchiveRepository.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/ArchiveRepository.kt index 3d39136..aaa0aff 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/ArchiveRepository.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/ArchiveRepository.kt @@ -1,3 +1,8 @@ +/* + * Copyright (c) 2020 by Denis Verentsov (decsent@yandex.ru) + * All rights reserved. + */ + package com.dvinc.notepad.domain.repository import com.dvinc.notepad.domain.model.note.Note diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/archive/ArchiveUseCase.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/archive/ArchiveUseCase.kt index 2a10797..b1959d3 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/archive/ArchiveUseCase.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/archive/ArchiveUseCase.kt @@ -1,3 +1,8 @@ +/* + * Copyright (c) 2020 by Denis Verentsov (decsent@yandex.ru) + * All rights reserved. + */ + package com.dvinc.notepad.domain.usecase.archive import com.dvinc.notepad.domain.model.note.Note diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveFragment.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveFragment.kt index 4a5d807..0f8fe5d 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveFragment.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveFragment.kt @@ -1,3 +1,8 @@ +/* + * Copyright (c) 2020 by Denis Verentsov (decsent@yandex.ru) + * All rights reserved. + */ + package com.dvinc.notepad.presentation.ui.archive import android.os.Bundle diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewModel.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewModel.kt index 3765329..0a9e149 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewModel.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewModel.kt @@ -1,3 +1,8 @@ +/* + * Copyright (c) 2020 by Denis Verentsov (decsent@yandex.ru) + * All rights reserved. + */ + package com.dvinc.notepad.presentation.ui.archive import androidx.lifecycle.viewModelScope diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewState.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewState.kt index 05e3769..864dc57 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewState.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewState.kt @@ -1,3 +1,8 @@ +/* + * Copyright (c) 2020 by Denis Verentsov (decsent@yandex.ru) + * All rights reserved. + */ + package com.dvinc.notepad.presentation.ui.archive import com.dvinc.core.ui.ViewState From 1c7afea5111378c989d65df7aa1bf3cac644ec6b Mon Sep 17 00:00:00 2001 From: Denis Verentsov Date: Thu, 7 Jan 2021 16:02:44 +0300 Subject: [PATCH 12/21] Fixed usecase test. --- .../com/dvinc/notepad/domain/usecase/NotepadUseCaseTest.kt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/features/notepad/src/test/kotlin/com/dvinc/notepad/domain/usecase/NotepadUseCaseTest.kt b/features/notepad/src/test/kotlin/com/dvinc/notepad/domain/usecase/NotepadUseCaseTest.kt index b0e7cf4..878ea57 100644 --- a/features/notepad/src/test/kotlin/com/dvinc/notepad/domain/usecase/NotepadUseCaseTest.kt +++ b/features/notepad/src/test/kotlin/com/dvinc/notepad/domain/usecase/NotepadUseCaseTest.kt @@ -2,6 +2,7 @@ package com.dvinc.notepad.domain.usecase import com.dvinc.notepad.BaseTest import com.dvinc.notepad.domain.model.note.Note +import com.dvinc.notepad.domain.repository.ArchiveRepository import com.dvinc.notepad.domain.repository.note.NoteRepository import com.dvinc.notepad.domain.usecase.notepad.NotepadUseCase import com.nhaarman.mockitokotlin2.mock @@ -14,13 +15,13 @@ class NotepadUseCaseTest : BaseTest() { private lateinit var notepadUseCase: NotepadUseCase - private var note: Note = mock() - private var noteRepository: NoteRepository = mock() + private var acrhiveRepository: ArchiveRepository = mock() + @Before fun setUp() { - notepadUseCase = NotepadUseCase(noteRepository) + notepadUseCase = NotepadUseCase(noteRepository, acrhiveRepository) } @Test From 2e8ef39bd91ca61cefc9dfb29d3c5b0e99bc0165 Mon Sep 17 00:00:00 2001 From: Denis Verentsov Date: Thu, 7 Jan 2021 16:21:36 +0300 Subject: [PATCH 13/21] Added empty archive module. --- features/archive/.gitignore | 1 + features/archive/build.gradle | 51 +++++++++++++++++++ features/archive/proguard-rules.pro | 1 + features/archive/src/main/AndroidManifest.xml | 1 + settings.gradle | 3 +- 5 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 features/archive/.gitignore create mode 100644 features/archive/build.gradle create mode 100644 features/archive/proguard-rules.pro create mode 100644 features/archive/src/main/AndroidManifest.xml diff --git a/features/archive/.gitignore b/features/archive/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/features/archive/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/features/archive/build.gradle b/features/archive/build.gradle new file mode 100644 index 0000000..7669306 --- /dev/null +++ b/features/archive/build.gradle @@ -0,0 +1,51 @@ +apply plugin: 'com.android.library' +apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' +apply plugin: 'kotlin-kapt' +apply plugin: "androidx.navigation.safeargs.kotlin" + +apply from: rootProject.file('dependencies.gradle') +apply from: rootProject.file('versions.gradle') + +android { + compileSdkVersion versions.compileSdk + + defaultConfig { + minSdkVersion versions.minSdk + targetSdkVersion versions.targetSdk + } + + buildTypes { + debug { + testCoverageEnabled true + } + } + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + test.java.srcDirs += 'src/test/kotlin' + androidTest.java.srcDirs += 'src/androidTest/kotlin' + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = "1.8" + } + + androidExtensions { + experimental = true + } +} + +dependencies { + implementation project(":core") + + implementation( + deps.kotlin.stdlib, + deps.kotlin.coroutines + ) +} diff --git a/features/archive/proguard-rules.pro b/features/archive/proguard-rules.pro new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/features/archive/proguard-rules.pro @@ -0,0 +1 @@ + diff --git a/features/archive/src/main/AndroidManifest.xml b/features/archive/src/main/AndroidManifest.xml new file mode 100644 index 0000000..cb2e36b --- /dev/null +++ b/features/archive/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + diff --git a/settings.gradle b/settings.gradle index 4150700..f2061a5 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,3 +1,4 @@ include ':app', ':core', - ':features:notepad' + ':features:notepad', + ':features:archive' From d453be58553dc3aa2ee613de7fa71f9177389772 Mon Sep 17 00:00:00 2001 From: Denis Verentsov Date: Thu, 7 Jan 2021 16:28:07 +0300 Subject: [PATCH 14/21] Added empty base notepad module. --- base/notepad/.gitignore | 1 + base/notepad/build.gradle | 34 +++++++++++++++++++++++ base/notepad/proguard-rules.pro | 1 + base/notepad/src/main/AndroidManifest.xml | 1 + settings.gradle | 1 + 5 files changed, 38 insertions(+) create mode 100644 base/notepad/.gitignore create mode 100644 base/notepad/build.gradle create mode 100644 base/notepad/proguard-rules.pro create mode 100644 base/notepad/src/main/AndroidManifest.xml diff --git a/base/notepad/.gitignore b/base/notepad/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/base/notepad/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/base/notepad/build.gradle b/base/notepad/build.gradle new file mode 100644 index 0000000..3fb194d --- /dev/null +++ b/base/notepad/build.gradle @@ -0,0 +1,34 @@ +plugins { + id 'com.android.library' + id 'kotlin-android' +} + +apply from: rootProject.file('dependencies.gradle') +apply from: rootProject.file('versions.gradle') + +android { + compileSdkVersion versions.compileSdk + + defaultConfig { + minSdkVersion versions.minSdk + targetSdkVersion versions.targetSdk + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = '1.8' + } + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + test.java.srcDirs += 'src/test/kotlin' + androidTest.java.srcDirs += 'src/androidTest/kotlin' + } +} + +dependencies { + implementation( + deps.kotlin.stdlib + ) +} \ No newline at end of file diff --git a/base/notepad/proguard-rules.pro b/base/notepad/proguard-rules.pro new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/base/notepad/proguard-rules.pro @@ -0,0 +1 @@ + diff --git a/base/notepad/src/main/AndroidManifest.xml b/base/notepad/src/main/AndroidManifest.xml new file mode 100644 index 0000000..5f62fa3 --- /dev/null +++ b/base/notepad/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + diff --git a/settings.gradle b/settings.gradle index f2061a5..8c65964 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,4 +1,5 @@ include ':app', ':core', + ':base:notepad', ':features:notepad', ':features:archive' From 8c4e5c8e9636335fb566557e58119b38b0c60844 Mon Sep 17 00:00:00 2001 From: Denis Verentsov Date: Thu, 7 Jan 2021 16:44:24 +0300 Subject: [PATCH 15/21] Moved Note mapper and Note model to base notepad module. --- base/notepad/build.gradle | 7 ++++++- .../com/dvinc/base/notepad/domain/model}/Note.kt | 2 +- .../presentation/mapper/NotePresentationMapper.kt | 6 +++--- .../dvinc/base}/notepad/presentation/model/NoteUi.kt | 2 +- features/notepad/build.gradle | 1 + .../dvinc/notepad/data/mapper/note/NoteDataMapper.kt | 2 +- .../data/repository/archive/ArchiveDataRepository.kt | 2 +- .../notepad/data/repository/note/NoteDataRepository.kt | 2 +- .../notepad/domain/repository/ArchiveRepository.kt | 2 +- .../notepad/domain/repository/note/NoteRepository.kt | 2 +- .../notepad/domain/usecase/archive/ArchiveUseCase.kt | 2 +- .../dvinc/notepad/domain/usecase/note/NoteUseCase.kt | 2 +- .../notepad/domain/usecase/notepad/NotepadUseCase.kt | 2 +- .../presentation/adapter/notepad/NoteViewHolder.kt | 2 +- .../presentation/adapter/notepad/NotepadAdapter.kt | 2 +- .../adapter/notepad/NotepadDiffUtilsCallback.kt | 2 +- .../adapter/notepad/NotepadSwipeCallback.kt | 2 +- .../presentation/ui/archive/ArchiveViewModel.kt | 2 +- .../presentation/ui/archive/ArchiveViewState.kt | 2 +- .../notepad/presentation/ui/note/NoteViewModel.kt | 2 +- .../notepad/presentation/ui/note/NoteViewState.kt | 2 +- .../notepad/presentation/ui/notepad/NotepadFragment.kt | 2 +- .../presentation/ui/notepad/NotepadViewModel.kt | 2 +- .../presentation/ui/notepad/NotepadViewState.kt | 2 +- .../dvinc/notepad/data/mapper/NoteDataMapperTest.kt | 2 +- .../notepad/data/repository/NoteDataRepositoryTest.kt | 2 +- .../dvinc/notepad/domain/usecase/NoteUseCaseTest.kt | 2 +- .../dvinc/notepad/domain/usecase/NotepadUseCaseTest.kt | 1 - .../notepad/presentation/ui/note/NoteViewModelTest.kt | 4 ++-- .../presentation/ui/notepad/NotepadViewModelTest.kt | 10 +++++----- 30 files changed, 41 insertions(+), 36 deletions(-) rename {features/notepad/src/main/kotlin/com/dvinc/notepad/domain/model/note => base/notepad/src/main/kotlin/com/dvinc/base/notepad/domain/model}/Note.kt (83%) rename {features/notepad/src/main/kotlin/com/dvinc => base/notepad/src/main/kotlin/com/dvinc/base}/notepad/presentation/mapper/NotePresentationMapper.kt (92%) rename {features/notepad/src/main/kotlin/com/dvinc => base/notepad/src/main/kotlin/com/dvinc/base}/notepad/presentation/model/NoteUi.kt (80%) diff --git a/base/notepad/build.gradle b/base/notepad/build.gradle index 3fb194d..74efba1 100644 --- a/base/notepad/build.gradle +++ b/base/notepad/build.gradle @@ -1,6 +1,7 @@ plugins { id 'com.android.library' id 'kotlin-android' + id 'kotlin-kapt' } apply from: rootProject.file('dependencies.gradle') @@ -29,6 +30,10 @@ android { dependencies { implementation( - deps.kotlin.stdlib + deps.kotlin.stdlib, + deps.dagger.dagger + ) + kapt( + deps.dagger.processor ) } \ No newline at end of file diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/model/note/Note.kt b/base/notepad/src/main/kotlin/com/dvinc/base/notepad/domain/model/Note.kt similarity index 83% rename from features/notepad/src/main/kotlin/com/dvinc/notepad/domain/model/note/Note.kt rename to base/notepad/src/main/kotlin/com/dvinc/base/notepad/domain/model/Note.kt index b4e1ac3..96cb33e 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/model/note/Note.kt +++ b/base/notepad/src/main/kotlin/com/dvinc/base/notepad/domain/model/Note.kt @@ -5,7 +5,7 @@ * All rights reserved. */ -package com.dvinc.notepad.domain.model.note +package com.dvinc.base.notepad.domain.model data class Note( val id: Long, diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/mapper/NotePresentationMapper.kt b/base/notepad/src/main/kotlin/com/dvinc/base/notepad/presentation/mapper/NotePresentationMapper.kt similarity index 92% rename from features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/mapper/NotePresentationMapper.kt rename to base/notepad/src/main/kotlin/com/dvinc/base/notepad/presentation/mapper/NotePresentationMapper.kt index c7bd847..8a17810 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/mapper/NotePresentationMapper.kt +++ b/base/notepad/src/main/kotlin/com/dvinc/base/notepad/presentation/mapper/NotePresentationMapper.kt @@ -3,10 +3,10 @@ * All rights reserved. */ -package com.dvinc.notepad.presentation.mapper +package com.dvinc.base.notepad.presentation.mapper -import com.dvinc.notepad.domain.model.note.Note -import com.dvinc.notepad.presentation.model.NoteUi +import com.dvinc.base.notepad.domain.model.Note +import com.dvinc.base.notepad.presentation.model.NoteUi import java.text.SimpleDateFormat import java.util.Calendar import java.util.Date diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/model/NoteUi.kt b/base/notepad/src/main/kotlin/com/dvinc/base/notepad/presentation/model/NoteUi.kt similarity index 80% rename from features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/model/NoteUi.kt rename to base/notepad/src/main/kotlin/com/dvinc/base/notepad/presentation/model/NoteUi.kt index b967cdc..d759f50 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/model/NoteUi.kt +++ b/base/notepad/src/main/kotlin/com/dvinc/base/notepad/presentation/model/NoteUi.kt @@ -3,7 +3,7 @@ * All rights reserved. */ -package com.dvinc.notepad.presentation.model +package com.dvinc.base.notepad.presentation.model data class NoteUi( val id: Long, diff --git a/features/notepad/build.gradle b/features/notepad/build.gradle index 04ad018..a8e97cf 100644 --- a/features/notepad/build.gradle +++ b/features/notepad/build.gradle @@ -43,6 +43,7 @@ android { dependencies { implementation project(":core") + implementation project(":base:notepad") implementation( deps.kotlin.stdlib, diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/data/mapper/note/NoteDataMapper.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/data/mapper/note/NoteDataMapper.kt index 96096ec..3b8e419 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/data/mapper/note/NoteDataMapper.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/data/mapper/note/NoteDataMapper.kt @@ -6,7 +6,7 @@ package com.dvinc.notepad.data.mapper.note import com.dvinc.core.database.entity.note.NoteEntity -import com.dvinc.notepad.domain.model.note.Note +import com.dvinc.base.notepad.domain.model.Note import javax.inject.Inject class NoteDataMapper @Inject constructor() { diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/archive/ArchiveDataRepository.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/archive/ArchiveDataRepository.kt index 3c6fef7..3373df6 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/archive/ArchiveDataRepository.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/archive/ArchiveDataRepository.kt @@ -7,7 +7,7 @@ package com.dvinc.notepad.data.repository.archive import com.dvinc.core.database.dao.note.NoteDao import com.dvinc.notepad.data.mapper.note.NoteDataMapper -import com.dvinc.notepad.domain.model.note.Note +import com.dvinc.base.notepad.domain.model.Note import com.dvinc.notepad.domain.repository.ArchiveRepository import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/note/NoteDataRepository.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/note/NoteDataRepository.kt index 86c85fe..1bf2cc4 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/note/NoteDataRepository.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/note/NoteDataRepository.kt @@ -7,7 +7,7 @@ package com.dvinc.notepad.data.repository.note import com.dvinc.core.database.dao.note.NoteDao import com.dvinc.notepad.data.mapper.note.NoteDataMapper -import com.dvinc.notepad.domain.model.note.Note +import com.dvinc.base.notepad.domain.model.Note import com.dvinc.notepad.domain.repository.note.NoteRepository import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/ArchiveRepository.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/ArchiveRepository.kt index aaa0aff..947dfe8 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/ArchiveRepository.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/ArchiveRepository.kt @@ -5,7 +5,7 @@ package com.dvinc.notepad.domain.repository -import com.dvinc.notepad.domain.model.note.Note +import com.dvinc.base.notepad.domain.model.Note import kotlinx.coroutines.flow.Flow interface ArchiveRepository { diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/note/NoteRepository.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/note/NoteRepository.kt index faa2721..969039e 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/note/NoteRepository.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/note/NoteRepository.kt @@ -7,7 +7,7 @@ package com.dvinc.notepad.domain.repository.note -import com.dvinc.notepad.domain.model.note.Note +import com.dvinc.base.notepad.domain.model.Note import kotlinx.coroutines.flow.Flow interface NoteRepository { diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/archive/ArchiveUseCase.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/archive/ArchiveUseCase.kt index b1959d3..1ee0a94 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/archive/ArchiveUseCase.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/archive/ArchiveUseCase.kt @@ -5,7 +5,7 @@ package com.dvinc.notepad.domain.usecase.archive -import com.dvinc.notepad.domain.model.note.Note +import com.dvinc.base.notepad.domain.model.Note import com.dvinc.notepad.domain.repository.ArchiveRepository import kotlinx.coroutines.flow.Flow import javax.inject.Inject diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/note/NoteUseCase.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/note/NoteUseCase.kt index c2d6f7a..9694ff8 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/note/NoteUseCase.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/note/NoteUseCase.kt @@ -7,7 +7,7 @@ package com.dvinc.notepad.domain.usecase.note -import com.dvinc.notepad.domain.model.note.Note +import com.dvinc.base.notepad.domain.model.Note import com.dvinc.notepad.domain.repository.note.NoteRepository import javax.inject.Inject diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/notepad/NotepadUseCase.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/notepad/NotepadUseCase.kt index 6a653fd..e074404 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/notepad/NotepadUseCase.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/notepad/NotepadUseCase.kt @@ -7,7 +7,7 @@ package com.dvinc.notepad.domain.usecase.notepad -import com.dvinc.notepad.domain.model.note.Note +import com.dvinc.base.notepad.domain.model.Note import com.dvinc.notepad.domain.repository.ArchiveRepository import com.dvinc.notepad.domain.repository.note.NoteRepository import kotlinx.coroutines.flow.Flow diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NoteViewHolder.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NoteViewHolder.kt index ca5416a..b86272e 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NoteViewHolder.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NoteViewHolder.kt @@ -7,7 +7,7 @@ package com.dvinc.notepad.presentation.adapter.notepad import android.view.View import com.dvinc.core.ui.BaseViewHolder -import com.dvinc.notepad.presentation.model.NoteUi +import com.dvinc.base.notepad.presentation.model.NoteUi import kotlinx.android.synthetic.main.item_note.item_note_content as content import kotlinx.android.synthetic.main.item_note.item_note_name as name import kotlinx.android.synthetic.main.item_note.item_note_updating_time as updateTime diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadAdapter.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadAdapter.kt index 5ff2338..1676e28 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadAdapter.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadAdapter.kt @@ -10,7 +10,7 @@ import android.view.ViewGroup import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView import com.dvinc.notepad.R -import com.dvinc.notepad.presentation.model.NoteUi +import com.dvinc.base.notepad.presentation.model.NoteUi class NotepadAdapter : RecyclerView.Adapter() { diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadDiffUtilsCallback.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadDiffUtilsCallback.kt index a9d8f93..1ce3da3 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadDiffUtilsCallback.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadDiffUtilsCallback.kt @@ -6,7 +6,7 @@ package com.dvinc.notepad.presentation.adapter.notepad import androidx.recyclerview.widget.DiffUtil -import com.dvinc.notepad.presentation.model.NoteUi +import com.dvinc.base.notepad.presentation.model.NoteUi class NotepadDiffUtilsCallback( private val oldNotesList: List, diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadSwipeCallback.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadSwipeCallback.kt index 7be42e3..53c98a4 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadSwipeCallback.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadSwipeCallback.kt @@ -11,7 +11,7 @@ import android.graphics.drawable.ColorDrawable import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.RecyclerView import com.dvinc.notepad.R -import com.dvinc.notepad.presentation.model.NoteUi +import com.dvinc.base.notepad.presentation.model.NoteUi class NotepadSwipeCallback( private val notesAdapter: NotepadAdapter, diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewModel.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewModel.kt index 0a9e149..9350785 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewModel.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewModel.kt @@ -10,7 +10,7 @@ import com.dvinc.core.extension.update import com.dvinc.core.ui.BaseViewModel import com.dvinc.notepad.R import com.dvinc.notepad.domain.usecase.archive.ArchiveUseCase -import com.dvinc.notepad.presentation.mapper.NotePresentationMapper +import com.dvinc.base.notepad.presentation.mapper.NotePresentationMapper import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewState.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewState.kt index 864dc57..5acbd1b 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewState.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewState.kt @@ -6,7 +6,7 @@ package com.dvinc.notepad.presentation.ui.archive import com.dvinc.core.ui.ViewState -import com.dvinc.notepad.presentation.model.NoteUi +import com.dvinc.base.notepad.presentation.model.NoteUi data class ArchiveViewState( val archivedNotes: List = emptyList(), diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/note/NoteViewModel.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/note/NoteViewModel.kt index 8c880f5..d13e204 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/note/NoteViewModel.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/note/NoteViewModel.kt @@ -12,7 +12,7 @@ import com.dvinc.core.ui.BaseViewModel import com.dvinc.notepad.R import com.dvinc.notepad.common.DEFAULT_NOTE_ID import com.dvinc.notepad.domain.usecase.note.NoteUseCase -import com.dvinc.notepad.presentation.mapper.NotePresentationMapper +import com.dvinc.base.notepad.presentation.mapper.NotePresentationMapper import com.dvinc.notepad.presentation.ui.note.NoteViewState.ExistingNoteViewState import com.dvinc.notepad.presentation.ui.note.NoteViewState.NewNoteViewState import com.squareup.inject.assisted.Assisted diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/note/NoteViewState.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/note/NoteViewState.kt index 4ec96ad..74e2b28 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/note/NoteViewState.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/note/NoteViewState.kt @@ -6,7 +6,7 @@ package com.dvinc.notepad.presentation.ui.note import com.dvinc.core.ui.ViewState -import com.dvinc.notepad.domain.model.note.Note +import com.dvinc.base.notepad.domain.model.Note sealed class NoteViewState : ViewState { diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadFragment.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadFragment.kt index 3cb54cb..eb06b38 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadFragment.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadFragment.kt @@ -21,7 +21,7 @@ import com.dvinc.notepad.di.component.DaggerNotepadComponent import com.dvinc.notepad.presentation.adapter.notepad.NotepadAdapter import com.dvinc.notepad.presentation.adapter.notepad.NotepadSwipeCallback import com.dvinc.notepad.presentation.adapter.notepad.NotepadSwipeDirection -import com.dvinc.notepad.presentation.model.NoteUi +import com.dvinc.base.notepad.presentation.model.NoteUi import javax.inject.Inject import javax.inject.Provider import kotlinx.android.synthetic.main.fragment_notepad.fragment_notepad_bottom_app_bar as bottomBar diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModel.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModel.kt index 1f7aaa6..226b5fe 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModel.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModel.kt @@ -8,7 +8,7 @@ import com.dvinc.notepad.R import com.dvinc.notepad.common.DEFAULT_NOTE_ID import com.dvinc.notepad.domain.usecase.notepad.NotepadUseCase import com.dvinc.notepad.presentation.adapter.notepad.NotepadSwipeDirection -import com.dvinc.notepad.presentation.mapper.NotePresentationMapper +import com.dvinc.base.notepad.presentation.mapper.NotePresentationMapper import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewState.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewState.kt index a5776f3..6062987 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewState.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewState.kt @@ -6,7 +6,7 @@ package com.dvinc.notepad.presentation.ui.notepad import com.dvinc.core.ui.ViewState -import com.dvinc.notepad.presentation.model.NoteUi +import com.dvinc.base.notepad.presentation.model.NoteUi data class NotepadViewState( val notes: List = emptyList(), diff --git a/features/notepad/src/test/kotlin/com/dvinc/notepad/data/mapper/NoteDataMapperTest.kt b/features/notepad/src/test/kotlin/com/dvinc/notepad/data/mapper/NoteDataMapperTest.kt index ced4bd3..6d2bf67 100644 --- a/features/notepad/src/test/kotlin/com/dvinc/notepad/data/mapper/NoteDataMapperTest.kt +++ b/features/notepad/src/test/kotlin/com/dvinc/notepad/data/mapper/NoteDataMapperTest.kt @@ -2,7 +2,7 @@ package com.dvinc.notepad.data.mapper import com.dvinc.core.database.entity.note.NoteEntity import com.dvinc.notepad.data.mapper.note.NoteDataMapper -import com.dvinc.notepad.domain.model.note.Note +import com.dvinc.base.notepad.domain.model.Note import org.junit.Before import org.junit.Test diff --git a/features/notepad/src/test/kotlin/com/dvinc/notepad/data/repository/NoteDataRepositoryTest.kt b/features/notepad/src/test/kotlin/com/dvinc/notepad/data/repository/NoteDataRepositoryTest.kt index e8435cb..0b3e627 100644 --- a/features/notepad/src/test/kotlin/com/dvinc/notepad/data/repository/NoteDataRepositoryTest.kt +++ b/features/notepad/src/test/kotlin/com/dvinc/notepad/data/repository/NoteDataRepositoryTest.kt @@ -5,7 +5,7 @@ import com.dvinc.core.database.entity.note.NoteEntity import com.dvinc.notepad.BaseTest import com.dvinc.notepad.data.mapper.note.NoteDataMapper import com.dvinc.notepad.data.repository.note.NoteDataRepository -import com.dvinc.notepad.domain.model.note.Note +import com.dvinc.base.notepad.domain.model.Note import com.nhaarman.mockitokotlin2.mock import com.nhaarman.mockitokotlin2.verify import com.nhaarman.mockitokotlin2.whenever diff --git a/features/notepad/src/test/kotlin/com/dvinc/notepad/domain/usecase/NoteUseCaseTest.kt b/features/notepad/src/test/kotlin/com/dvinc/notepad/domain/usecase/NoteUseCaseTest.kt index 7134751..0045ad3 100644 --- a/features/notepad/src/test/kotlin/com/dvinc/notepad/domain/usecase/NoteUseCaseTest.kt +++ b/features/notepad/src/test/kotlin/com/dvinc/notepad/domain/usecase/NoteUseCaseTest.kt @@ -1,7 +1,7 @@ package com.dvinc.notepad.domain.usecase import com.dvinc.notepad.BaseTest -import com.dvinc.notepad.domain.model.note.Note +import com.dvinc.base.notepad.domain.model.Note import com.dvinc.notepad.domain.repository.note.NoteRepository import com.dvinc.notepad.domain.usecase.note.NoteUseCase import com.nhaarman.mockitokotlin2.mock diff --git a/features/notepad/src/test/kotlin/com/dvinc/notepad/domain/usecase/NotepadUseCaseTest.kt b/features/notepad/src/test/kotlin/com/dvinc/notepad/domain/usecase/NotepadUseCaseTest.kt index 878ea57..85b6505 100644 --- a/features/notepad/src/test/kotlin/com/dvinc/notepad/domain/usecase/NotepadUseCaseTest.kt +++ b/features/notepad/src/test/kotlin/com/dvinc/notepad/domain/usecase/NotepadUseCaseTest.kt @@ -1,7 +1,6 @@ package com.dvinc.notepad.domain.usecase import com.dvinc.notepad.BaseTest -import com.dvinc.notepad.domain.model.note.Note import com.dvinc.notepad.domain.repository.ArchiveRepository import com.dvinc.notepad.domain.repository.note.NoteRepository import com.dvinc.notepad.domain.usecase.notepad.NotepadUseCase diff --git a/features/notepad/src/test/kotlin/com/dvinc/notepad/presentation/ui/note/NoteViewModelTest.kt b/features/notepad/src/test/kotlin/com/dvinc/notepad/presentation/ui/note/NoteViewModelTest.kt index 5b01723..9aab74a 100644 --- a/features/notepad/src/test/kotlin/com/dvinc/notepad/presentation/ui/note/NoteViewModelTest.kt +++ b/features/notepad/src/test/kotlin/com/dvinc/notepad/presentation/ui/note/NoteViewModelTest.kt @@ -10,9 +10,9 @@ import com.dvinc.core.ui.NavigateUp import com.dvinc.core.ui.ShowErrorMessage import com.dvinc.notepad.BaseTest import com.dvinc.notepad.R -import com.dvinc.notepad.domain.model.note.Note +import com.dvinc.base.notepad.domain.model.Note import com.dvinc.notepad.domain.usecase.note.NoteUseCase -import com.dvinc.notepad.presentation.mapper.NotePresentationMapper +import com.dvinc.base.notepad.presentation.mapper.NotePresentationMapper import com.dvinc.notepad.presentation.ui.ViewCommandUtil import com.nhaarman.mockitokotlin2.mock import com.nhaarman.mockitokotlin2.whenever diff --git a/features/notepad/src/test/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModelTest.kt b/features/notepad/src/test/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModelTest.kt index afa8bfc..6a0701c 100644 --- a/features/notepad/src/test/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModelTest.kt +++ b/features/notepad/src/test/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModelTest.kt @@ -11,11 +11,11 @@ import com.dvinc.core.ui.ShowErrorMessage import com.dvinc.core.ui.ShowMessage import com.dvinc.notepad.BaseTest import com.dvinc.notepad.R -import com.dvinc.notepad.domain.model.note.Note +import com.dvinc.base.notepad.domain.model.Note import com.dvinc.notepad.domain.usecase.notepad.NotepadUseCase import com.dvinc.notepad.presentation.adapter.notepad.NotepadSwipeDirection -import com.dvinc.notepad.presentation.mapper.NotePresentationMapper -import com.dvinc.notepad.presentation.model.NoteUi +import com.dvinc.base.notepad.presentation.mapper.NotePresentationMapper +import com.dvinc.base.notepad.presentation.model.NoteUi import com.dvinc.notepad.presentation.ui.ViewCommandUtil import com.nhaarman.mockitokotlin2.doReturn import com.nhaarman.mockitokotlin2.mock @@ -35,7 +35,7 @@ class NotepadViewModelTest : BaseTest() { } private var notepadUseCase: NotepadUseCase = mock { - on { getNotes() } doReturn flow { emit(emptyList()) } + on { getNotes() } doReturn flow { emit(emptyList()) } } @Before @@ -46,7 +46,7 @@ class NotepadViewModelTest : BaseTest() { @Test fun `verify that Content state has empty list when empty notes list returned from repository`() = runBlocking { // Given - whenever(notepadUseCase.getNotes()).thenReturn(flow { emit(emptyList()) }) + whenever(notepadUseCase.getNotes()).thenReturn(flow { emit(emptyList()) }) val notepadViewModel = NotepadViewModel(notepadUseCase, noteMapper) // When From 78c82677980f7be8775a3a5e13336710da7ad174 Mon Sep 17 00:00:00 2001 From: Denis Verentsov Date: Thu, 7 Jan 2021 16:58:00 +0300 Subject: [PATCH 16/21] Moved notepad recycler classes to base module. --- base/notepad/build.gradle | 11 ++++++++++- .../presentation/adapter/notepad/NoteViewHolder.kt | 2 +- .../presentation/adapter/notepad/NotepadAdapter.kt | 2 +- .../adapter/notepad/NotepadDiffUtilsCallback.kt | 2 +- .../adapter/notepad/NotepadSwipeCallback.kt | 2 +- .../adapter/notepad/NotepadSwipeDirection.kt | 2 +- .../notepad/src/main/res/drawable/ic_delete.xml | 0 .../notepad/src/main/res/layout/item_note.xml | 0 .../dvinc/notepad/di/component/NotepadComponent.kt | 6 +++--- .../{presentation => }/ui/archive/ArchiveFragment.kt | 4 ++-- .../{presentation => }/ui/archive/ArchiveViewModel.kt | 2 +- .../{presentation => }/ui/archive/ArchiveViewState.kt | 2 +- .../{presentation => }/ui/note/NoteFragment.kt | 7 ++++--- .../{presentation => }/ui/note/NoteViewModel.kt | 6 +++--- .../{presentation => }/ui/note/NoteViewState.kt | 2 +- .../{presentation => }/ui/notepad/NotepadFragment.kt | 8 ++++---- .../{presentation => }/ui/notepad/NotepadViewModel.kt | 5 +++-- .../{presentation => }/ui/notepad/NotepadViewState.kt | 2 +- .../notepad/src/main/res/navigation/nav_graph.xml | 6 +++--- .../notepad/presentation/ui/note/NoteViewModelTest.kt | 2 ++ .../presentation/ui/notepad/NotepadViewModelTest.kt | 4 +++- 21 files changed, 46 insertions(+), 31 deletions(-) rename {features/notepad/src/main/kotlin/com/dvinc => base/notepad/src/main/kotlin/com/dvinc/base}/notepad/presentation/adapter/notepad/NoteViewHolder.kt (93%) rename {features/notepad/src/main/kotlin/com/dvinc => base/notepad/src/main/kotlin/com/dvinc/base}/notepad/presentation/adapter/notepad/NotepadAdapter.kt (96%) rename {features/notepad/src/main/kotlin/com/dvinc => base/notepad/src/main/kotlin/com/dvinc/base}/notepad/presentation/adapter/notepad/NotepadDiffUtilsCallback.kt (93%) rename {features/notepad/src/main/kotlin/com/dvinc => base/notepad/src/main/kotlin/com/dvinc/base}/notepad/presentation/adapter/notepad/NotepadSwipeCallback.kt (98%) rename {features/notepad/src/main/kotlin/com/dvinc => base/notepad/src/main/kotlin/com/dvinc/base}/notepad/presentation/adapter/notepad/NotepadSwipeDirection.kt (50%) rename {features => base}/notepad/src/main/res/drawable/ic_delete.xml (100%) rename {features => base}/notepad/src/main/res/layout/item_note.xml (100%) rename features/notepad/src/main/kotlin/com/dvinc/notepad/{presentation => }/ui/archive/ArchiveFragment.kt (94%) rename features/notepad/src/main/kotlin/com/dvinc/notepad/{presentation => }/ui/archive/ArchiveViewModel.kt (96%) rename features/notepad/src/main/kotlin/com/dvinc/notepad/{presentation => }/ui/archive/ArchiveViewState.kt (86%) rename features/notepad/src/main/kotlin/com/dvinc/notepad/{presentation => }/ui/note/NoteFragment.kt (93%) rename features/notepad/src/main/kotlin/com/dvinc/notepad/{presentation => }/ui/note/NoteViewModel.kt (91%) rename features/notepad/src/main/kotlin/com/dvinc/notepad/{presentation => }/ui/note/NoteViewState.kt (88%) rename features/notepad/src/main/kotlin/com/dvinc/notepad/{presentation => }/ui/notepad/NotepadFragment.kt (94%) rename features/notepad/src/main/kotlin/com/dvinc/notepad/{presentation => }/ui/notepad/NotepadViewModel.kt (94%) rename features/notepad/src/main/kotlin/com/dvinc/notepad/{presentation => }/ui/notepad/NotepadViewState.kt (86%) diff --git a/base/notepad/build.gradle b/base/notepad/build.gradle index 74efba1..423c1ff 100644 --- a/base/notepad/build.gradle +++ b/base/notepad/build.gradle @@ -2,6 +2,7 @@ plugins { id 'com.android.library' id 'kotlin-android' id 'kotlin-kapt' + id 'kotlin-android-extensions' } apply from: rootProject.file('dependencies.gradle') @@ -19,6 +20,8 @@ android { targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { + // Because of error More than one file was found with OS independent path 'META-INF/notepad_debug.kotlin_module'. + freeCompilerArgs = ["-module-name", project.path.substring(1).replace(':', '-')] jvmTarget = '1.8' } sourceSets { @@ -26,12 +29,18 @@ android { test.java.srcDirs += 'src/test/kotlin' androidTest.java.srcDirs += 'src/androidTest/kotlin' } + androidExtensions { + experimental = true + } } dependencies { + implementation project(":core") + implementation( deps.kotlin.stdlib, - deps.dagger.dagger + deps.dagger.dagger, + deps.material.material ) kapt( deps.dagger.processor diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NoteViewHolder.kt b/base/notepad/src/main/kotlin/com/dvinc/base/notepad/presentation/adapter/notepad/NoteViewHolder.kt similarity index 93% rename from features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NoteViewHolder.kt rename to base/notepad/src/main/kotlin/com/dvinc/base/notepad/presentation/adapter/notepad/NoteViewHolder.kt index b86272e..6b942a3 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NoteViewHolder.kt +++ b/base/notepad/src/main/kotlin/com/dvinc/base/notepad/presentation/adapter/notepad/NoteViewHolder.kt @@ -3,7 +3,7 @@ * All rights reserved. */ -package com.dvinc.notepad.presentation.adapter.notepad +package com.dvinc.base.notepad.presentation.adapter.notepad import android.view.View import com.dvinc.core.ui.BaseViewHolder diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadAdapter.kt b/base/notepad/src/main/kotlin/com/dvinc/base/notepad/presentation/adapter/notepad/NotepadAdapter.kt similarity index 96% rename from features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadAdapter.kt rename to base/notepad/src/main/kotlin/com/dvinc/base/notepad/presentation/adapter/notepad/NotepadAdapter.kt index 1676e28..0bef913 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadAdapter.kt +++ b/base/notepad/src/main/kotlin/com/dvinc/base/notepad/presentation/adapter/notepad/NotepadAdapter.kt @@ -3,7 +3,7 @@ * All rights reserved. */ -package com.dvinc.notepad.presentation.adapter.notepad +package com.dvinc.base.notepad.presentation.adapter.notepad import android.view.LayoutInflater import android.view.ViewGroup diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadDiffUtilsCallback.kt b/base/notepad/src/main/kotlin/com/dvinc/base/notepad/presentation/adapter/notepad/NotepadDiffUtilsCallback.kt similarity index 93% rename from features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadDiffUtilsCallback.kt rename to base/notepad/src/main/kotlin/com/dvinc/base/notepad/presentation/adapter/notepad/NotepadDiffUtilsCallback.kt index 1ce3da3..c1f66b3 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadDiffUtilsCallback.kt +++ b/base/notepad/src/main/kotlin/com/dvinc/base/notepad/presentation/adapter/notepad/NotepadDiffUtilsCallback.kt @@ -3,7 +3,7 @@ * All rights reserved. */ -package com.dvinc.notepad.presentation.adapter.notepad +package com.dvinc.base.notepad.presentation.adapter.notepad import androidx.recyclerview.widget.DiffUtil import com.dvinc.base.notepad.presentation.model.NoteUi diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadSwipeCallback.kt b/base/notepad/src/main/kotlin/com/dvinc/base/notepad/presentation/adapter/notepad/NotepadSwipeCallback.kt similarity index 98% rename from features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadSwipeCallback.kt rename to base/notepad/src/main/kotlin/com/dvinc/base/notepad/presentation/adapter/notepad/NotepadSwipeCallback.kt index 53c98a4..40d0490 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadSwipeCallback.kt +++ b/base/notepad/src/main/kotlin/com/dvinc/base/notepad/presentation/adapter/notepad/NotepadSwipeCallback.kt @@ -3,7 +3,7 @@ * All rights reserved. */ -package com.dvinc.notepad.presentation.adapter.notepad +package com.dvinc.base.notepad.presentation.adapter.notepad import android.graphics.Canvas import android.graphics.Color diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadSwipeDirection.kt b/base/notepad/src/main/kotlin/com/dvinc/base/notepad/presentation/adapter/notepad/NotepadSwipeDirection.kt similarity index 50% rename from features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadSwipeDirection.kt rename to base/notepad/src/main/kotlin/com/dvinc/base/notepad/presentation/adapter/notepad/NotepadSwipeDirection.kt index d08c762..b33aa13 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/adapter/notepad/NotepadSwipeDirection.kt +++ b/base/notepad/src/main/kotlin/com/dvinc/base/notepad/presentation/adapter/notepad/NotepadSwipeDirection.kt @@ -1,4 +1,4 @@ -package com.dvinc.notepad.presentation.adapter.notepad +package com.dvinc.base.notepad.presentation.adapter.notepad enum class NotepadSwipeDirection { diff --git a/features/notepad/src/main/res/drawable/ic_delete.xml b/base/notepad/src/main/res/drawable/ic_delete.xml similarity index 100% rename from features/notepad/src/main/res/drawable/ic_delete.xml rename to base/notepad/src/main/res/drawable/ic_delete.xml diff --git a/features/notepad/src/main/res/layout/item_note.xml b/base/notepad/src/main/res/layout/item_note.xml similarity index 100% rename from features/notepad/src/main/res/layout/item_note.xml rename to base/notepad/src/main/res/layout/item_note.xml diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/di/component/NotepadComponent.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/di/component/NotepadComponent.kt index 6a4c76a..2a57c87 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/di/component/NotepadComponent.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/di/component/NotepadComponent.kt @@ -8,9 +8,9 @@ package com.dvinc.notepad.di.component import com.dvinc.core.di.provider.ApplicationProvider import com.dvinc.notepad.di.module.AssistedInjectModule import com.dvinc.notepad.di.module.NotepadModule -import com.dvinc.notepad.presentation.ui.archive.ArchiveFragment -import com.dvinc.notepad.presentation.ui.note.NoteFragment -import com.dvinc.notepad.presentation.ui.notepad.NotepadFragment +import com.dvinc.notepad.ui.archive.ArchiveFragment +import com.dvinc.notepad.ui.note.NoteFragment +import com.dvinc.notepad.ui.notepad.NotepadFragment import dagger.Component @Component( diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveFragment.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/ui/archive/ArchiveFragment.kt similarity index 94% rename from features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveFragment.kt rename to features/notepad/src/main/kotlin/com/dvinc/notepad/ui/archive/ArchiveFragment.kt index 0f8fe5d..542f3d3 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveFragment.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/ui/archive/ArchiveFragment.kt @@ -3,7 +3,7 @@ * All rights reserved. */ -package com.dvinc.notepad.presentation.ui.archive +package com.dvinc.notepad.ui.archive import android.os.Bundle import android.view.View @@ -15,7 +15,7 @@ import com.dvinc.core.recycler.SpaceItemDecorator import com.dvinc.core.ui.BaseFragment import com.dvinc.notepad.R import com.dvinc.notepad.di.component.DaggerNotepadComponent -import com.dvinc.notepad.presentation.adapter.notepad.NotepadAdapter +import com.dvinc.base.notepad.presentation.adapter.notepad.NotepadAdapter import kotlinx.android.synthetic.main.fragment_archive.fragment_archive_recycler as archiveRecycle import kotlinx.android.synthetic.main.fragment_archive.fragment_archive_stub_text as stubContainer import javax.inject.Inject diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewModel.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/ui/archive/ArchiveViewModel.kt similarity index 96% rename from features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewModel.kt rename to features/notepad/src/main/kotlin/com/dvinc/notepad/ui/archive/ArchiveViewModel.kt index 9350785..e5e118a 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewModel.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/ui/archive/ArchiveViewModel.kt @@ -3,7 +3,7 @@ * All rights reserved. */ -package com.dvinc.notepad.presentation.ui.archive +package com.dvinc.notepad.ui.archive import androidx.lifecycle.viewModelScope import com.dvinc.core.extension.update diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewState.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/ui/archive/ArchiveViewState.kt similarity index 86% rename from features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewState.kt rename to features/notepad/src/main/kotlin/com/dvinc/notepad/ui/archive/ArchiveViewState.kt index 5acbd1b..61126c9 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/archive/ArchiveViewState.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/ui/archive/ArchiveViewState.kt @@ -3,7 +3,7 @@ * All rights reserved. */ -package com.dvinc.notepad.presentation.ui.archive +package com.dvinc.notepad.ui.archive import com.dvinc.core.ui.ViewState import com.dvinc.base.notepad.presentation.model.NoteUi diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/note/NoteFragment.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/ui/note/NoteFragment.kt similarity index 93% rename from features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/note/NoteFragment.kt rename to features/notepad/src/main/kotlin/com/dvinc/notepad/ui/note/NoteFragment.kt index 6ae2d5e..a0ed891 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/note/NoteFragment.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/ui/note/NoteFragment.kt @@ -3,7 +3,7 @@ * All rights reserved. */ -package com.dvinc.notepad.presentation.ui.note +package com.dvinc.notepad.ui.note import android.os.Bundle import android.view.View @@ -15,8 +15,9 @@ import com.dvinc.core.ui.ShowErrorMessage import com.dvinc.core.ui.ViewCommand import com.dvinc.notepad.R import com.dvinc.notepad.di.component.DaggerNotepadComponent -import com.dvinc.notepad.presentation.ui.note.NoteViewState.ExistingNoteViewState -import com.dvinc.notepad.presentation.ui.note.NoteViewState.NewNoteViewState +import com.dvinc.notepad.presentation.ui.note.NoteFragmentArgs +import com.dvinc.notepad.ui.note.NoteViewState.ExistingNoteViewState +import com.dvinc.notepad.ui.note.NoteViewState.NewNoteViewState import javax.inject.Inject import kotlinx.android.synthetic.main.fragment_note.fragment_note_content as noteContent import kotlinx.android.synthetic.main.fragment_note.fragment_note_name as noteName diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/note/NoteViewModel.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/ui/note/NoteViewModel.kt similarity index 91% rename from features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/note/NoteViewModel.kt rename to features/notepad/src/main/kotlin/com/dvinc/notepad/ui/note/NoteViewModel.kt index d13e204..8cf2ccb 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/note/NoteViewModel.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/ui/note/NoteViewModel.kt @@ -3,7 +3,7 @@ * All rights reserved. */ -package com.dvinc.notepad.presentation.ui.note +package com.dvinc.notepad.ui.note import androidx.lifecycle.viewModelScope import com.dvinc.core.extension.onNext @@ -13,8 +13,8 @@ import com.dvinc.notepad.R import com.dvinc.notepad.common.DEFAULT_NOTE_ID import com.dvinc.notepad.domain.usecase.note.NoteUseCase import com.dvinc.base.notepad.presentation.mapper.NotePresentationMapper -import com.dvinc.notepad.presentation.ui.note.NoteViewState.ExistingNoteViewState -import com.dvinc.notepad.presentation.ui.note.NoteViewState.NewNoteViewState +import com.dvinc.notepad.ui.note.NoteViewState.ExistingNoteViewState +import com.dvinc.notepad.ui.note.NoteViewState.NewNoteViewState import com.squareup.inject.assisted.Assisted import com.squareup.inject.assisted.AssistedInject import timber.log.Timber diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/note/NoteViewState.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/ui/note/NoteViewState.kt similarity index 88% rename from features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/note/NoteViewState.kt rename to features/notepad/src/main/kotlin/com/dvinc/notepad/ui/note/NoteViewState.kt index 74e2b28..fb00850 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/note/NoteViewState.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/ui/note/NoteViewState.kt @@ -3,7 +3,7 @@ * All rights reserved. */ -package com.dvinc.notepad.presentation.ui.note +package com.dvinc.notepad.ui.note import com.dvinc.core.ui.ViewState import com.dvinc.base.notepad.domain.model.Note diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadFragment.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/ui/notepad/NotepadFragment.kt similarity index 94% rename from features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadFragment.kt rename to features/notepad/src/main/kotlin/com/dvinc/notepad/ui/notepad/NotepadFragment.kt index eb06b38..2ba9216 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadFragment.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/ui/notepad/NotepadFragment.kt @@ -3,7 +3,7 @@ * All rights reserved. */ -package com.dvinc.notepad.presentation.ui.notepad +package com.dvinc.notepad.ui.notepad import android.os.Bundle import android.view.View @@ -18,9 +18,9 @@ import com.dvinc.core.ui.ShowMessage import com.dvinc.core.ui.ViewCommand import com.dvinc.notepad.R import com.dvinc.notepad.di.component.DaggerNotepadComponent -import com.dvinc.notepad.presentation.adapter.notepad.NotepadAdapter -import com.dvinc.notepad.presentation.adapter.notepad.NotepadSwipeCallback -import com.dvinc.notepad.presentation.adapter.notepad.NotepadSwipeDirection +import com.dvinc.base.notepad.presentation.adapter.notepad.NotepadAdapter +import com.dvinc.base.notepad.presentation.adapter.notepad.NotepadSwipeCallback +import com.dvinc.base.notepad.presentation.adapter.notepad.NotepadSwipeDirection import com.dvinc.base.notepad.presentation.model.NoteUi import javax.inject.Inject import javax.inject.Provider diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModel.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/ui/notepad/NotepadViewModel.kt similarity index 94% rename from features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModel.kt rename to features/notepad/src/main/kotlin/com/dvinc/notepad/ui/notepad/NotepadViewModel.kt index 226b5fe..c701add 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModel.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/ui/notepad/NotepadViewModel.kt @@ -1,4 +1,4 @@ -package com.dvinc.notepad.presentation.ui.notepad +package com.dvinc.notepad.ui.notepad import androidx.lifecycle.viewModelScope import com.dvinc.core.extension.safeLaunch @@ -7,8 +7,9 @@ import com.dvinc.core.ui.BaseViewModel import com.dvinc.notepad.R import com.dvinc.notepad.common.DEFAULT_NOTE_ID import com.dvinc.notepad.domain.usecase.notepad.NotepadUseCase -import com.dvinc.notepad.presentation.adapter.notepad.NotepadSwipeDirection +import com.dvinc.base.notepad.presentation.adapter.notepad.NotepadSwipeDirection import com.dvinc.base.notepad.presentation.mapper.NotePresentationMapper +import com.dvinc.notepad.presentation.ui.notepad.NotepadFragmentDirections import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewState.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/ui/notepad/NotepadViewState.kt similarity index 86% rename from features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewState.kt rename to features/notepad/src/main/kotlin/com/dvinc/notepad/ui/notepad/NotepadViewState.kt index 6062987..c97dced 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewState.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/ui/notepad/NotepadViewState.kt @@ -3,7 +3,7 @@ * All rights reserved. */ -package com.dvinc.notepad.presentation.ui.notepad +package com.dvinc.notepad.ui.notepad import com.dvinc.core.ui.ViewState import com.dvinc.base.notepad.presentation.model.NoteUi diff --git a/features/notepad/src/main/res/navigation/nav_graph.xml b/features/notepad/src/main/res/navigation/nav_graph.xml index ec3b3f8..a7cc792 100644 --- a/features/notepad/src/main/res/navigation/nav_graph.xml +++ b/features/notepad/src/main/res/navigation/nav_graph.xml @@ -6,7 +6,7 @@ @@ -35,7 +35,7 @@ diff --git a/features/notepad/src/test/kotlin/com/dvinc/notepad/presentation/ui/note/NoteViewModelTest.kt b/features/notepad/src/test/kotlin/com/dvinc/notepad/presentation/ui/note/NoteViewModelTest.kt index 9aab74a..3b697bb 100644 --- a/features/notepad/src/test/kotlin/com/dvinc/notepad/presentation/ui/note/NoteViewModelTest.kt +++ b/features/notepad/src/test/kotlin/com/dvinc/notepad/presentation/ui/note/NoteViewModelTest.kt @@ -14,6 +14,8 @@ import com.dvinc.base.notepad.domain.model.Note import com.dvinc.notepad.domain.usecase.note.NoteUseCase import com.dvinc.base.notepad.presentation.mapper.NotePresentationMapper import com.dvinc.notepad.presentation.ui.ViewCommandUtil +import com.dvinc.notepad.ui.note.NoteViewModel +import com.dvinc.notepad.ui.note.NoteViewState import com.nhaarman.mockitokotlin2.mock import com.nhaarman.mockitokotlin2.whenever import kotlinx.coroutines.runBlocking diff --git a/features/notepad/src/test/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModelTest.kt b/features/notepad/src/test/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModelTest.kt index 6a0701c..2b7b302 100644 --- a/features/notepad/src/test/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModelTest.kt +++ b/features/notepad/src/test/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModelTest.kt @@ -13,10 +13,12 @@ import com.dvinc.notepad.BaseTest import com.dvinc.notepad.R import com.dvinc.base.notepad.domain.model.Note import com.dvinc.notepad.domain.usecase.notepad.NotepadUseCase -import com.dvinc.notepad.presentation.adapter.notepad.NotepadSwipeDirection +import com.dvinc.base.notepad.presentation.adapter.notepad.NotepadSwipeDirection import com.dvinc.base.notepad.presentation.mapper.NotePresentationMapper import com.dvinc.base.notepad.presentation.model.NoteUi import com.dvinc.notepad.presentation.ui.ViewCommandUtil +import com.dvinc.notepad.ui.notepad.NotepadViewModel +import com.dvinc.notepad.ui.notepad.NotepadViewState import com.nhaarman.mockitokotlin2.doReturn import com.nhaarman.mockitokotlin2.mock import com.nhaarman.mockitokotlin2.whenever From 89a91d4419ad3cb8e73c207e9436a130e449a146 Mon Sep 17 00:00:00 2001 From: Denis Verentsov Date: Thu, 7 Jan 2021 17:41:01 +0300 Subject: [PATCH 17/21] Moved archive data and domain layer to archive module. --- .../data/mapper/note/NoteDataMapper.kt | 2 +- base/notepad/src/main/res/values/strings.xml | 8 ++++++ features/archive/build.gradle | 20 +++++++++++++- .../archive/ArchiveDataRepository.kt | 8 +++--- .../archive/di/component/ArchiveComponent.kt | 24 +++++++++++++++++ .../dvinc/archive/di/module/ArchiveModule.kt | 27 +++++++++++++++++++ .../domain/repository/ArchiveRepository.kt | 2 +- .../domain/usecase/archive/ArchiveUseCase.kt | 4 +-- .../archive}/ui/archive/ArchiveFragment.kt | 14 +++++----- .../archive}/ui/archive/ArchiveViewModel.kt | 4 +-- .../archive}/ui/archive/ArchiveViewState.kt | 2 +- .../src/main/res/layout/fragment_archive.xml | 0 .../archive/src/main/res/values/strings.xml | 4 +++ features/notepad/build.gradle | 2 +- .../repository/note/NoteDataRepository.kt | 2 +- .../notepad/di/component/NotepadComponent.kt | 3 --- .../dvinc/notepad/di/module/NotepadModule.kt | 13 ++------- .../domain/usecase/notepad/NotepadUseCase.kt | 7 +++-- .../com/dvinc/notepad/ui/note/NoteFragment.kt | 1 - .../notepad/ui/notepad/NotepadViewModel.kt | 1 - .../src/main/res/navigation/nav_graph.xml | 2 +- .../notepad/src/main/res/values/strings.xml | 11 -------- .../notepad/data/mapper/NoteDataMapperTest.kt | 2 +- .../data/repository/NoteDataRepositoryTest.kt | 2 +- .../domain/usecase/NotepadUseCaseTest.kt | 5 +--- 25 files changed, 111 insertions(+), 59 deletions(-) rename {features/notepad/src/main/kotlin/com/dvinc => base/notepad/src/main/kotlin/com/dvinc/base}/notepad/data/mapper/note/NoteDataMapper.kt (95%) create mode 100644 base/notepad/src/main/res/values/strings.xml rename features/{notepad/src/main/kotlin/com/dvinc/notepad => archive/src/main/kotlin/com/dvinc/archive}/data/repository/archive/ArchiveDataRepository.kt (80%) create mode 100644 features/archive/src/main/kotlin/com/dvinc/archive/di/component/ArchiveComponent.kt create mode 100644 features/archive/src/main/kotlin/com/dvinc/archive/di/module/ArchiveModule.kt rename features/{notepad/src/main/kotlin/com/dvinc/notepad => archive/src/main/kotlin/com/dvinc/archive}/domain/repository/ArchiveRepository.kt (87%) rename features/{notepad/src/main/kotlin/com/dvinc/notepad => archive/src/main/kotlin/com/dvinc/archive}/domain/usecase/archive/ArchiveUseCase.kt (78%) rename features/{notepad/src/main/kotlin/com/dvinc/notepad => archive/src/main/kotlin/com/dvinc/archive}/ui/archive/ArchiveFragment.kt (92%) rename features/{notepad/src/main/kotlin/com/dvinc/notepad => archive/src/main/kotlin/com/dvinc/archive}/ui/archive/ArchiveViewModel.kt (92%) rename features/{notepad/src/main/kotlin/com/dvinc/notepad => archive/src/main/kotlin/com/dvinc/archive}/ui/archive/ArchiveViewState.kt (89%) rename features/{notepad => archive}/src/main/res/layout/fragment_archive.xml (100%) create mode 100644 features/archive/src/main/res/values/strings.xml diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/data/mapper/note/NoteDataMapper.kt b/base/notepad/src/main/kotlin/com/dvinc/base/notepad/data/mapper/note/NoteDataMapper.kt similarity index 95% rename from features/notepad/src/main/kotlin/com/dvinc/notepad/data/mapper/note/NoteDataMapper.kt rename to base/notepad/src/main/kotlin/com/dvinc/base/notepad/data/mapper/note/NoteDataMapper.kt index 3b8e419..b882d28 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/data/mapper/note/NoteDataMapper.kt +++ b/base/notepad/src/main/kotlin/com/dvinc/base/notepad/data/mapper/note/NoteDataMapper.kt @@ -3,7 +3,7 @@ * All rights reserved. */ -package com.dvinc.notepad.data.mapper.note +package com.dvinc.base.notepad.data.mapper.note import com.dvinc.core.database.entity.note.NoteEntity import com.dvinc.base.notepad.domain.model.Note diff --git a/base/notepad/src/main/res/values/strings.xml b/base/notepad/src/main/res/values/strings.xml new file mode 100644 index 0000000..6dbbdca --- /dev/null +++ b/base/notepad/src/main/res/values/strings.xml @@ -0,0 +1,8 @@ + + + An error has occurred while loading from database + An error has occurred while deleting note + Cannot load note from database + Cannot add note + An error has occurred while archiving note + diff --git a/features/archive/build.gradle b/features/archive/build.gradle index 7669306..a4cc0fc 100644 --- a/features/archive/build.gradle +++ b/features/archive/build.gradle @@ -43,9 +43,27 @@ android { dependencies { implementation project(":core") + implementation project(":base:notepad") implementation( deps.kotlin.stdlib, - deps.kotlin.coroutines + deps.kotlin.coroutines, + + deps.dagger.dagger, + deps.dagger.assisted_inject, + + deps.material.material, + deps.lifecycle.view_model, + deps.lifecycle.extensions, + + deps.room.room, + deps.room.coroutines, + + deps.tools.timber + ) + + kapt( + deps.dagger.processor, + deps.dagger.assisted_inject_processor, ) } diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/archive/ArchiveDataRepository.kt b/features/archive/src/main/kotlin/com/dvinc/archive/data/repository/archive/ArchiveDataRepository.kt similarity index 80% rename from features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/archive/ArchiveDataRepository.kt rename to features/archive/src/main/kotlin/com/dvinc/archive/data/repository/archive/ArchiveDataRepository.kt index 3373df6..adf89d4 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/archive/ArchiveDataRepository.kt +++ b/features/archive/src/main/kotlin/com/dvinc/archive/data/repository/archive/ArchiveDataRepository.kt @@ -3,12 +3,12 @@ * All rights reserved. */ -package com.dvinc.notepad.data.repository.archive +package com.dvinc.archive.data.repository.archive -import com.dvinc.core.database.dao.note.NoteDao -import com.dvinc.notepad.data.mapper.note.NoteDataMapper +import com.dvinc.archive.domain.repository.ArchiveRepository +import com.dvinc.base.notepad.data.mapper.note.NoteDataMapper import com.dvinc.base.notepad.domain.model.Note -import com.dvinc.notepad.domain.repository.ArchiveRepository +import com.dvinc.core.database.dao.note.NoteDao import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map import javax.inject.Inject diff --git a/features/archive/src/main/kotlin/com/dvinc/archive/di/component/ArchiveComponent.kt b/features/archive/src/main/kotlin/com/dvinc/archive/di/component/ArchiveComponent.kt new file mode 100644 index 0000000..b706933 --- /dev/null +++ b/features/archive/src/main/kotlin/com/dvinc/archive/di/component/ArchiveComponent.kt @@ -0,0 +1,24 @@ +package com.dvinc.archive.di.component + +import com.dvinc.archive.di.module.ArchiveModule +import com.dvinc.core.di.provider.ApplicationProvider +import com.dvinc.archive.ui.archive.ArchiveFragment +import dagger.Component + +@Component( + modules = [ + ArchiveModule::class + ], + dependencies = [ + ApplicationProvider::class + ] +) +interface ArchiveComponent { + + fun inject(target: ArchiveFragment) + + @Component.Factory + interface Factory { + fun create(applicationProvider: ApplicationProvider): ArchiveComponent + } +} diff --git a/features/archive/src/main/kotlin/com/dvinc/archive/di/module/ArchiveModule.kt b/features/archive/src/main/kotlin/com/dvinc/archive/di/module/ArchiveModule.kt new file mode 100644 index 0000000..3de0e7e --- /dev/null +++ b/features/archive/src/main/kotlin/com/dvinc/archive/di/module/ArchiveModule.kt @@ -0,0 +1,27 @@ +package com.dvinc.archive.di.module + +import com.dvinc.archive.data.repository.archive.ArchiveDataRepository +import com.dvinc.archive.domain.repository.ArchiveRepository +import com.dvinc.base.notepad.data.mapper.note.NoteDataMapper +import com.dvinc.core.database.NotepadDatabase +import com.dvinc.core.database.dao.note.NoteDao +import dagger.Module +import dagger.Provides + +@Module +class ArchiveModule { + + // TODO(dv): create base DI component for this? + @Provides + fun provideNoteDao(notepadDatabase: NotepadDatabase): NoteDao { + return notepadDatabase.notesDao() + } + + @Provides + fun provideArchiveRepository( + noteDao: NoteDao, + noteDataMapper: NoteDataMapper + ): ArchiveRepository { + return ArchiveDataRepository(noteDao, noteDataMapper) + } +} diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/ArchiveRepository.kt b/features/archive/src/main/kotlin/com/dvinc/archive/domain/repository/ArchiveRepository.kt similarity index 87% rename from features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/ArchiveRepository.kt rename to features/archive/src/main/kotlin/com/dvinc/archive/domain/repository/ArchiveRepository.kt index 947dfe8..1ce371e 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/ArchiveRepository.kt +++ b/features/archive/src/main/kotlin/com/dvinc/archive/domain/repository/ArchiveRepository.kt @@ -3,7 +3,7 @@ * All rights reserved. */ -package com.dvinc.notepad.domain.repository +package com.dvinc.archive.domain.repository import com.dvinc.base.notepad.domain.model.Note import kotlinx.coroutines.flow.Flow diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/archive/ArchiveUseCase.kt b/features/archive/src/main/kotlin/com/dvinc/archive/domain/usecase/archive/ArchiveUseCase.kt similarity index 78% rename from features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/archive/ArchiveUseCase.kt rename to features/archive/src/main/kotlin/com/dvinc/archive/domain/usecase/archive/ArchiveUseCase.kt index 1ee0a94..6fa4279 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/archive/ArchiveUseCase.kt +++ b/features/archive/src/main/kotlin/com/dvinc/archive/domain/usecase/archive/ArchiveUseCase.kt @@ -3,10 +3,10 @@ * All rights reserved. */ -package com.dvinc.notepad.domain.usecase.archive +package com.dvinc.archive.domain.usecase.archive +import com.dvinc.archive.domain.repository.ArchiveRepository import com.dvinc.base.notepad.domain.model.Note -import com.dvinc.notepad.domain.repository.ArchiveRepository import kotlinx.coroutines.flow.Flow import javax.inject.Inject diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/ui/archive/ArchiveFragment.kt b/features/archive/src/main/kotlin/com/dvinc/archive/ui/archive/ArchiveFragment.kt similarity index 92% rename from features/notepad/src/main/kotlin/com/dvinc/notepad/ui/archive/ArchiveFragment.kt rename to features/archive/src/main/kotlin/com/dvinc/archive/ui/archive/ArchiveFragment.kt index 542f3d3..d71a6c6 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/ui/archive/ArchiveFragment.kt +++ b/features/archive/src/main/kotlin/com/dvinc/archive/ui/archive/ArchiveFragment.kt @@ -3,23 +3,23 @@ * All rights reserved. */ -package com.dvinc.notepad.ui.archive +package com.dvinc.archive.ui.archive import android.os.Bundle import android.view.View import androidx.recyclerview.widget.LinearLayoutManager +import com.dvinc.archive.R +import com.dvinc.archive.di.component.DaggerArchiveComponent +import com.dvinc.base.notepad.presentation.adapter.notepad.NotepadAdapter import com.dvinc.core.extension.observe import com.dvinc.core.extension.toggleGone import com.dvinc.core.extension.viewModels import com.dvinc.core.recycler.SpaceItemDecorator import com.dvinc.core.ui.BaseFragment -import com.dvinc.notepad.R -import com.dvinc.notepad.di.component.DaggerNotepadComponent -import com.dvinc.base.notepad.presentation.adapter.notepad.NotepadAdapter -import kotlinx.android.synthetic.main.fragment_archive.fragment_archive_recycler as archiveRecycle -import kotlinx.android.synthetic.main.fragment_archive.fragment_archive_stub_text as stubContainer import javax.inject.Inject import javax.inject.Provider +import kotlinx.android.synthetic.main.fragment_archive.fragment_archive_recycler as archiveRecycle +import kotlinx.android.synthetic.main.fragment_archive.fragment_archive_stub_text as stubContainer class ArchiveFragment : BaseFragment(layoutResId = R.layout.fragment_archive) { @@ -31,7 +31,7 @@ class ArchiveFragment : BaseFragment(layoutResId = R.layout.fragment_archive) { private val notesAdapter: NotepadAdapter by lazy { NotepadAdapter() } override fun injectDependencies() { - DaggerNotepadComponent.factory() + DaggerArchiveComponent.factory() .create(appComponent) .inject(this) } diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/ui/archive/ArchiveViewModel.kt b/features/archive/src/main/kotlin/com/dvinc/archive/ui/archive/ArchiveViewModel.kt similarity index 92% rename from features/notepad/src/main/kotlin/com/dvinc/notepad/ui/archive/ArchiveViewModel.kt rename to features/archive/src/main/kotlin/com/dvinc/archive/ui/archive/ArchiveViewModel.kt index e5e118a..dafbd77 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/ui/archive/ArchiveViewModel.kt +++ b/features/archive/src/main/kotlin/com/dvinc/archive/ui/archive/ArchiveViewModel.kt @@ -3,13 +3,13 @@ * All rights reserved. */ -package com.dvinc.notepad.ui.archive +package com.dvinc.archive.ui.archive import androidx.lifecycle.viewModelScope +import com.dvinc.archive.domain.usecase.archive.ArchiveUseCase import com.dvinc.core.extension.update import com.dvinc.core.ui.BaseViewModel import com.dvinc.notepad.R -import com.dvinc.notepad.domain.usecase.archive.ArchiveUseCase import com.dvinc.base.notepad.presentation.mapper.NotePresentationMapper import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.launchIn diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/ui/archive/ArchiveViewState.kt b/features/archive/src/main/kotlin/com/dvinc/archive/ui/archive/ArchiveViewState.kt similarity index 89% rename from features/notepad/src/main/kotlin/com/dvinc/notepad/ui/archive/ArchiveViewState.kt rename to features/archive/src/main/kotlin/com/dvinc/archive/ui/archive/ArchiveViewState.kt index 61126c9..acb0250 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/ui/archive/ArchiveViewState.kt +++ b/features/archive/src/main/kotlin/com/dvinc/archive/ui/archive/ArchiveViewState.kt @@ -3,7 +3,7 @@ * All rights reserved. */ -package com.dvinc.notepad.ui.archive +package com.dvinc.archive.ui.archive import com.dvinc.core.ui.ViewState import com.dvinc.base.notepad.presentation.model.NoteUi diff --git a/features/notepad/src/main/res/layout/fragment_archive.xml b/features/archive/src/main/res/layout/fragment_archive.xml similarity index 100% rename from features/notepad/src/main/res/layout/fragment_archive.xml rename to features/archive/src/main/res/layout/fragment_archive.xml diff --git a/features/archive/src/main/res/values/strings.xml b/features/archive/src/main/res/values/strings.xml new file mode 100644 index 0000000..b17db3f --- /dev/null +++ b/features/archive/src/main/res/values/strings.xml @@ -0,0 +1,4 @@ + + + Your archive is empty + diff --git a/features/notepad/build.gradle b/features/notepad/build.gradle index a8e97cf..a044748 100644 --- a/features/notepad/build.gradle +++ b/features/notepad/build.gradle @@ -68,7 +68,7 @@ dependencies { deps.lifecycle.view_model, deps.lifecycle.extensions, - deps.tools.timber, + deps.tools.timber ) kapt( diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/note/NoteDataRepository.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/note/NoteDataRepository.kt index 1bf2cc4..c06d408 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/note/NoteDataRepository.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/note/NoteDataRepository.kt @@ -6,7 +6,7 @@ package com.dvinc.notepad.data.repository.note import com.dvinc.core.database.dao.note.NoteDao -import com.dvinc.notepad.data.mapper.note.NoteDataMapper +import com.dvinc.base.notepad.data.mapper.note.NoteDataMapper import com.dvinc.base.notepad.domain.model.Note import com.dvinc.notepad.domain.repository.note.NoteRepository import kotlinx.coroutines.flow.Flow diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/di/component/NotepadComponent.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/di/component/NotepadComponent.kt index 2a57c87..7e7f0c8 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/di/component/NotepadComponent.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/di/component/NotepadComponent.kt @@ -8,7 +8,6 @@ package com.dvinc.notepad.di.component import com.dvinc.core.di.provider.ApplicationProvider import com.dvinc.notepad.di.module.AssistedInjectModule import com.dvinc.notepad.di.module.NotepadModule -import com.dvinc.notepad.ui.archive.ArchiveFragment import com.dvinc.notepad.ui.note.NoteFragment import com.dvinc.notepad.ui.notepad.NotepadFragment import dagger.Component @@ -28,8 +27,6 @@ interface NotepadComponent { fun inject(target: NoteFragment) - fun inject(target: ArchiveFragment) - @Component.Factory interface Factory { fun create(applicationProvider: ApplicationProvider): NotepadComponent diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/di/module/NotepadModule.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/di/module/NotepadModule.kt index 3583271..1e3e5d8 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/di/module/NotepadModule.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/di/module/NotepadModule.kt @@ -7,10 +7,8 @@ package com.dvinc.notepad.di.module import com.dvinc.core.database.NotepadDatabase import com.dvinc.core.database.dao.note.NoteDao -import com.dvinc.notepad.data.mapper.note.NoteDataMapper -import com.dvinc.notepad.data.repository.archive.ArchiveDataRepository +import com.dvinc.base.notepad.data.mapper.note.NoteDataMapper import com.dvinc.notepad.data.repository.note.NoteDataRepository -import com.dvinc.notepad.domain.repository.ArchiveRepository import com.dvinc.notepad.domain.repository.note.NoteRepository import dagger.Module import dagger.Provides @@ -18,6 +16,7 @@ import dagger.Provides @Module class NotepadModule { + // TODO(dv): create base DI component for this? @Provides fun provideNoteDao(notepadDatabase: NotepadDatabase): NoteDao { return notepadDatabase.notesDao() @@ -30,12 +29,4 @@ class NotepadModule { ): NoteRepository { return NoteDataRepository(noteDao, noteDataMapper) } - - @Provides - fun provideArchiveRepository( - noteDao: NoteDao, - noteDataMapper: NoteDataMapper - ): ArchiveRepository { - return ArchiveDataRepository(noteDao, noteDataMapper) - } } diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/notepad/NotepadUseCase.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/notepad/NotepadUseCase.kt index e074404..a4f8e16 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/notepad/NotepadUseCase.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/notepad/NotepadUseCase.kt @@ -8,14 +8,12 @@ package com.dvinc.notepad.domain.usecase.notepad import com.dvinc.base.notepad.domain.model.Note -import com.dvinc.notepad.domain.repository.ArchiveRepository import com.dvinc.notepad.domain.repository.note.NoteRepository import kotlinx.coroutines.flow.Flow import javax.inject.Inject class NotepadUseCase @Inject constructor( - private val noteRepository: NoteRepository, - private val archiveRepository: ArchiveRepository + private val noteRepository: NoteRepository ) { fun getNotes(): Flow> { @@ -27,6 +25,7 @@ class NotepadUseCase @Inject constructor( } suspend fun archiveNote(noteId: Long) { - archiveRepository.archiveNoteById(noteId) + // TODO(dv): fix it + throw NotImplementedError() } } diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/ui/note/NoteFragment.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/ui/note/NoteFragment.kt index a0ed891..a58c48e 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/ui/note/NoteFragment.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/ui/note/NoteFragment.kt @@ -15,7 +15,6 @@ import com.dvinc.core.ui.ShowErrorMessage import com.dvinc.core.ui.ViewCommand import com.dvinc.notepad.R import com.dvinc.notepad.di.component.DaggerNotepadComponent -import com.dvinc.notepad.presentation.ui.note.NoteFragmentArgs import com.dvinc.notepad.ui.note.NoteViewState.ExistingNoteViewState import com.dvinc.notepad.ui.note.NoteViewState.NewNoteViewState import javax.inject.Inject diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/ui/notepad/NotepadViewModel.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/ui/notepad/NotepadViewModel.kt index c701add..8dc1973 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/ui/notepad/NotepadViewModel.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/ui/notepad/NotepadViewModel.kt @@ -9,7 +9,6 @@ import com.dvinc.notepad.common.DEFAULT_NOTE_ID import com.dvinc.notepad.domain.usecase.notepad.NotepadUseCase import com.dvinc.base.notepad.presentation.adapter.notepad.NotepadSwipeDirection import com.dvinc.base.notepad.presentation.mapper.NotePresentationMapper -import com.dvinc.notepad.presentation.ui.notepad.NotepadFragmentDirections import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach diff --git a/features/notepad/src/main/res/navigation/nav_graph.xml b/features/notepad/src/main/res/navigation/nav_graph.xml index a7cc792..7076a00 100644 --- a/features/notepad/src/main/res/navigation/nav_graph.xml +++ b/features/notepad/src/main/res/navigation/nav_graph.xml @@ -35,7 +35,7 @@ diff --git a/features/notepad/src/main/res/values/strings.xml b/features/notepad/src/main/res/values/strings.xml index eef5d87..1eb415c 100644 --- a/features/notepad/src/main/res/values/strings.xml +++ b/features/notepad/src/main/res/values/strings.xml @@ -8,19 +8,8 @@ Note deleted Note archived - - An error has occurred while loading from database - An error has occurred while deleting note - Cannot load note from database - Cannot add note - An error has occurred while archiving note - Filter icon Your notepad is empty - - - Your archive is empty - diff --git a/features/notepad/src/test/kotlin/com/dvinc/notepad/data/mapper/NoteDataMapperTest.kt b/features/notepad/src/test/kotlin/com/dvinc/notepad/data/mapper/NoteDataMapperTest.kt index 6d2bf67..180d993 100644 --- a/features/notepad/src/test/kotlin/com/dvinc/notepad/data/mapper/NoteDataMapperTest.kt +++ b/features/notepad/src/test/kotlin/com/dvinc/notepad/data/mapper/NoteDataMapperTest.kt @@ -1,7 +1,7 @@ package com.dvinc.notepad.data.mapper import com.dvinc.core.database.entity.note.NoteEntity -import com.dvinc.notepad.data.mapper.note.NoteDataMapper +import com.dvinc.base.notepad.data.mapper.note.NoteDataMapper import com.dvinc.base.notepad.domain.model.Note import org.junit.Before import org.junit.Test diff --git a/features/notepad/src/test/kotlin/com/dvinc/notepad/data/repository/NoteDataRepositoryTest.kt b/features/notepad/src/test/kotlin/com/dvinc/notepad/data/repository/NoteDataRepositoryTest.kt index 0b3e627..57e2816 100644 --- a/features/notepad/src/test/kotlin/com/dvinc/notepad/data/repository/NoteDataRepositoryTest.kt +++ b/features/notepad/src/test/kotlin/com/dvinc/notepad/data/repository/NoteDataRepositoryTest.kt @@ -3,7 +3,7 @@ package com.dvinc.notepad.data.repository import com.dvinc.core.database.dao.note.NoteDao import com.dvinc.core.database.entity.note.NoteEntity import com.dvinc.notepad.BaseTest -import com.dvinc.notepad.data.mapper.note.NoteDataMapper +import com.dvinc.base.notepad.data.mapper.note.NoteDataMapper import com.dvinc.notepad.data.repository.note.NoteDataRepository import com.dvinc.base.notepad.domain.model.Note import com.nhaarman.mockitokotlin2.mock diff --git a/features/notepad/src/test/kotlin/com/dvinc/notepad/domain/usecase/NotepadUseCaseTest.kt b/features/notepad/src/test/kotlin/com/dvinc/notepad/domain/usecase/NotepadUseCaseTest.kt index 85b6505..05a88a3 100644 --- a/features/notepad/src/test/kotlin/com/dvinc/notepad/domain/usecase/NotepadUseCaseTest.kt +++ b/features/notepad/src/test/kotlin/com/dvinc/notepad/domain/usecase/NotepadUseCaseTest.kt @@ -1,7 +1,6 @@ package com.dvinc.notepad.domain.usecase import com.dvinc.notepad.BaseTest -import com.dvinc.notepad.domain.repository.ArchiveRepository import com.dvinc.notepad.domain.repository.note.NoteRepository import com.dvinc.notepad.domain.usecase.notepad.NotepadUseCase import com.nhaarman.mockitokotlin2.mock @@ -16,11 +15,9 @@ class NotepadUseCaseTest : BaseTest() { private var noteRepository: NoteRepository = mock() - private var acrhiveRepository: ArchiveRepository = mock() - @Before fun setUp() { - notepadUseCase = NotepadUseCase(noteRepository, acrhiveRepository) + notepadUseCase = NotepadUseCase(noteRepository) } @Test From 3d6623fdf1c1b473cb85ce751e2922a998db9d4c Mon Sep 17 00:00:00 2001 From: Denis Verentsov Date: Thu, 7 Jan 2021 17:58:18 +0300 Subject: [PATCH 18/21] Added ArchiveDao. --- .../com/dvinc/core/database/NotepadDatabase.kt | 10 +++++++++- .../core/database/dao/archive/ArchiveDao.kt | 16 ++++++++++++++++ .../com/dvinc/core/database/dao/note/NoteDao.kt | 6 ------ .../repository/archive/ArchiveDataRepository.kt | 8 ++++---- .../com/dvinc/archive/di/module/ArchiveModule.kt | 11 +++++------ .../NotepadDataRepository.kt} | 14 ++++++++++---- .../notepad/di/component/NotepadComponent.kt | 6 +++--- .../com/dvinc/notepad/di/module/NotepadModule.kt | 16 +++++++++++----- .../NotepadRepository.kt} | 6 ++++-- .../notepad/domain/usecase/note/NoteUseCase.kt | 8 ++++---- .../domain/usecase/notepad/NotepadUseCase.kt | 11 +++++------ ...itoryTest.kt => NotepadDataRepositoryTest.kt} | 16 ++++++++-------- .../notepad/domain/usecase/NoteUseCaseTest.kt | 12 ++++++------ .../notepad/domain/usecase/NotepadUseCaseTest.kt | 10 +++++----- 14 files changed, 90 insertions(+), 60 deletions(-) create mode 100644 core/src/main/kotlin/com/dvinc/core/database/dao/archive/ArchiveDao.kt rename features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/{note/NoteDataRepository.kt => notepad/NotepadDataRepository.kt} (71%) rename features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/{note/NoteRepository.kt => notepad/NotepadRepository.kt} (74%) rename features/notepad/src/test/kotlin/com/dvinc/notepad/data/repository/{NoteDataRepositoryTest.kt => NotepadDataRepositoryTest.kt} (82%) diff --git a/core/src/main/kotlin/com/dvinc/core/database/NotepadDatabase.kt b/core/src/main/kotlin/com/dvinc/core/database/NotepadDatabase.kt index f13d27d..a29e2ea 100644 --- a/core/src/main/kotlin/com/dvinc/core/database/NotepadDatabase.kt +++ b/core/src/main/kotlin/com/dvinc/core/database/NotepadDatabase.kt @@ -7,11 +7,19 @@ package com.dvinc.core.database import androidx.room.Database import androidx.room.RoomDatabase +import com.dvinc.core.database.dao.archive.ArchiveDao import com.dvinc.core.database.dao.note.NoteDao import com.dvinc.core.database.entity.note.NoteEntity -@Database(entities = [NoteEntity::class], version = 1) +@Database( + entities = [ + NoteEntity::class + ], + version = 1 +) abstract class NotepadDatabase : RoomDatabase() { abstract fun notesDao(): NoteDao + + abstract fun archiveDao(): ArchiveDao } diff --git a/core/src/main/kotlin/com/dvinc/core/database/dao/archive/ArchiveDao.kt b/core/src/main/kotlin/com/dvinc/core/database/dao/archive/ArchiveDao.kt new file mode 100644 index 0000000..64bad2a --- /dev/null +++ b/core/src/main/kotlin/com/dvinc/core/database/dao/archive/ArchiveDao.kt @@ -0,0 +1,16 @@ +package com.dvinc.core.database.dao.archive + +import androidx.room.Dao +import androidx.room.Query +import com.dvinc.core.database.entity.note.NoteEntity +import kotlinx.coroutines.flow.Flow + +@Dao +interface ArchiveDao { + + @Query("UPDATE Notes SET is_archived = 1 WHERE id =:noteId") + suspend fun markNoteAsArchived(noteId: Long) + + @Query("SELECT * FROM Notes WHERE is_archived = 1 ORDER BY id DESC") + fun getArchive(): Flow> +} diff --git a/core/src/main/kotlin/com/dvinc/core/database/dao/note/NoteDao.kt b/core/src/main/kotlin/com/dvinc/core/database/dao/note/NoteDao.kt index f506acf..dc84ffd 100644 --- a/core/src/main/kotlin/com/dvinc/core/database/dao/note/NoteDao.kt +++ b/core/src/main/kotlin/com/dvinc/core/database/dao/note/NoteDao.kt @@ -26,10 +26,4 @@ interface NoteDao { @Query("SELECT * FROM Notes WHERE id = :id") suspend fun getNoteById(id: Long): NoteEntity - - @Query("UPDATE Notes SET is_archived = 1 WHERE id =:noteId") - suspend fun markNoteAsArchived(noteId: Long) - - @Query("SELECT * FROM Notes WHERE is_archived = 1 ORDER BY id DESC") - fun getArchive(): Flow> } diff --git a/features/archive/src/main/kotlin/com/dvinc/archive/data/repository/archive/ArchiveDataRepository.kt b/features/archive/src/main/kotlin/com/dvinc/archive/data/repository/archive/ArchiveDataRepository.kt index adf89d4..9d92612 100644 --- a/features/archive/src/main/kotlin/com/dvinc/archive/data/repository/archive/ArchiveDataRepository.kt +++ b/features/archive/src/main/kotlin/com/dvinc/archive/data/repository/archive/ArchiveDataRepository.kt @@ -8,22 +8,22 @@ package com.dvinc.archive.data.repository.archive import com.dvinc.archive.domain.repository.ArchiveRepository import com.dvinc.base.notepad.data.mapper.note.NoteDataMapper import com.dvinc.base.notepad.domain.model.Note -import com.dvinc.core.database.dao.note.NoteDao +import com.dvinc.core.database.dao.archive.ArchiveDao import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map import javax.inject.Inject class ArchiveDataRepository @Inject constructor( - private val noteDao: NoteDao, + private val archiveDao: ArchiveDao, private val noteMapper: NoteDataMapper ) : ArchiveRepository { override suspend fun archiveNoteById(id: Long) { - noteDao.markNoteAsArchived(id) + archiveDao.markNoteAsArchived(id) } override fun getArchivedNotes(): Flow> { - return noteDao.getArchive() + return archiveDao.getArchive() .map { noteMapper.fromEntityToDomain(it) } } } diff --git a/features/archive/src/main/kotlin/com/dvinc/archive/di/module/ArchiveModule.kt b/features/archive/src/main/kotlin/com/dvinc/archive/di/module/ArchiveModule.kt index 3de0e7e..4b418a3 100644 --- a/features/archive/src/main/kotlin/com/dvinc/archive/di/module/ArchiveModule.kt +++ b/features/archive/src/main/kotlin/com/dvinc/archive/di/module/ArchiveModule.kt @@ -4,24 +4,23 @@ import com.dvinc.archive.data.repository.archive.ArchiveDataRepository import com.dvinc.archive.domain.repository.ArchiveRepository import com.dvinc.base.notepad.data.mapper.note.NoteDataMapper import com.dvinc.core.database.NotepadDatabase -import com.dvinc.core.database.dao.note.NoteDao +import com.dvinc.core.database.dao.archive.ArchiveDao import dagger.Module import dagger.Provides @Module class ArchiveModule { - // TODO(dv): create base DI component for this? @Provides - fun provideNoteDao(notepadDatabase: NotepadDatabase): NoteDao { - return notepadDatabase.notesDao() + fun provideArchiveDao(notepadDatabase: NotepadDatabase): ArchiveDao { + return notepadDatabase.archiveDao() } @Provides fun provideArchiveRepository( - noteDao: NoteDao, + archiveDao: ArchiveDao, noteDataMapper: NoteDataMapper ): ArchiveRepository { - return ArchiveDataRepository(noteDao, noteDataMapper) + return ArchiveDataRepository(archiveDao, noteDataMapper) } } diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/note/NoteDataRepository.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/notepad/NotepadDataRepository.kt similarity index 71% rename from features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/note/NoteDataRepository.kt rename to features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/notepad/NotepadDataRepository.kt index c06d408..31e1300 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/note/NoteDataRepository.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/data/repository/notepad/NotepadDataRepository.kt @@ -3,20 +3,22 @@ * All rights reserved. */ -package com.dvinc.notepad.data.repository.note +package com.dvinc.notepad.data.repository.notepad import com.dvinc.core.database.dao.note.NoteDao import com.dvinc.base.notepad.data.mapper.note.NoteDataMapper import com.dvinc.base.notepad.domain.model.Note -import com.dvinc.notepad.domain.repository.note.NoteRepository +import com.dvinc.core.database.dao.archive.ArchiveDao +import com.dvinc.notepad.domain.repository.notepad.NotepadRepository import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map import javax.inject.Inject -class NoteDataRepository @Inject constructor( +class NotepadDataRepository @Inject constructor( private val noteDao: NoteDao, + private val archiveDao: ArchiveDao, private val noteMapper: NoteDataMapper -) : NoteRepository { +) : NotepadRepository { override fun getNotes(): Flow> { return noteDao.getNotes() @@ -36,4 +38,8 @@ class NoteDataRepository @Inject constructor( val noteEntity = noteDao.getNoteById(id) return noteMapper.fromEntityToDomain(noteEntity) } + + override suspend fun archiveNoteById(id: Long) { + archiveDao.markNoteAsArchived(id) + } } diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/di/component/NotepadComponent.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/di/component/NotepadComponent.kt index 7e7f0c8..24fac72 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/di/component/NotepadComponent.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/di/component/NotepadComponent.kt @@ -13,12 +13,12 @@ import com.dvinc.notepad.ui.notepad.NotepadFragment import dagger.Component @Component( - dependencies = [ - ApplicationProvider::class - ], modules = [ NotepadModule::class, AssistedInjectModule::class + ], + dependencies = [ + ApplicationProvider::class ] ) interface NotepadComponent { diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/di/module/NotepadModule.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/di/module/NotepadModule.kt index 1e3e5d8..46e8dd1 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/di/module/NotepadModule.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/di/module/NotepadModule.kt @@ -8,25 +8,31 @@ package com.dvinc.notepad.di.module import com.dvinc.core.database.NotepadDatabase import com.dvinc.core.database.dao.note.NoteDao import com.dvinc.base.notepad.data.mapper.note.NoteDataMapper -import com.dvinc.notepad.data.repository.note.NoteDataRepository -import com.dvinc.notepad.domain.repository.note.NoteRepository +import com.dvinc.core.database.dao.archive.ArchiveDao +import com.dvinc.notepad.data.repository.notepad.NotepadDataRepository +import com.dvinc.notepad.domain.repository.notepad.NotepadRepository import dagger.Module import dagger.Provides @Module class NotepadModule { - // TODO(dv): create base DI component for this? @Provides fun provideNoteDao(notepadDatabase: NotepadDatabase): NoteDao { return notepadDatabase.notesDao() } + @Provides + fun provideArchiveDao(notepadDatabase: NotepadDatabase): ArchiveDao { + return notepadDatabase.archiveDao() + } + @Provides fun provideNoteRepository( noteDao: NoteDao, + archiveDao: ArchiveDao, noteDataMapper: NoteDataMapper - ): NoteRepository { - return NoteDataRepository(noteDao, noteDataMapper) + ): NotepadRepository { + return NotepadDataRepository(noteDao, archiveDao, noteDataMapper) } } diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/note/NoteRepository.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/notepad/NotepadRepository.kt similarity index 74% rename from features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/note/NoteRepository.kt rename to features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/notepad/NotepadRepository.kt index 969039e..5ff8f6d 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/note/NoteRepository.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/repository/notepad/NotepadRepository.kt @@ -5,12 +5,12 @@ * All rights reserved. */ -package com.dvinc.notepad.domain.repository.note +package com.dvinc.notepad.domain.repository.notepad import com.dvinc.base.notepad.domain.model.Note import kotlinx.coroutines.flow.Flow -interface NoteRepository { +interface NotepadRepository { fun getNotes(): Flow> @@ -19,4 +19,6 @@ interface NoteRepository { suspend fun deleteNoteById(id: Long) suspend fun getNoteById(id: Long): Note + + suspend fun archiveNoteById(id: Long) } diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/note/NoteUseCase.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/note/NoteUseCase.kt index 9694ff8..b6d6ae3 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/note/NoteUseCase.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/note/NoteUseCase.kt @@ -8,18 +8,18 @@ package com.dvinc.notepad.domain.usecase.note import com.dvinc.base.notepad.domain.model.Note -import com.dvinc.notepad.domain.repository.note.NoteRepository +import com.dvinc.notepad.domain.repository.notepad.NotepadRepository import javax.inject.Inject class NoteUseCase @Inject constructor( - private val noteRepository: NoteRepository + private val notepadRepository: NotepadRepository ) { suspend fun getNoteById(id: Long): Note { - return noteRepository.getNoteById(id) + return notepadRepository.getNoteById(id) } suspend fun saveNote(note: Note) { - noteRepository.addNote(note) + notepadRepository.addNote(note) } } diff --git a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/notepad/NotepadUseCase.kt b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/notepad/NotepadUseCase.kt index a4f8e16..114dbe9 100644 --- a/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/notepad/NotepadUseCase.kt +++ b/features/notepad/src/main/kotlin/com/dvinc/notepad/domain/usecase/notepad/NotepadUseCase.kt @@ -8,24 +8,23 @@ package com.dvinc.notepad.domain.usecase.notepad import com.dvinc.base.notepad.domain.model.Note -import com.dvinc.notepad.domain.repository.note.NoteRepository +import com.dvinc.notepad.domain.repository.notepad.NotepadRepository import kotlinx.coroutines.flow.Flow import javax.inject.Inject class NotepadUseCase @Inject constructor( - private val noteRepository: NoteRepository + private val notepadRepository: NotepadRepository ) { fun getNotes(): Flow> { - return noteRepository.getNotes() + return notepadRepository.getNotes() } suspend fun deleteNote(noteId: Long) { - noteRepository.deleteNoteById(noteId) + notepadRepository.deleteNoteById(noteId) } suspend fun archiveNote(noteId: Long) { - // TODO(dv): fix it - throw NotImplementedError() + notepadRepository.archiveNoteById(noteId) } } diff --git a/features/notepad/src/test/kotlin/com/dvinc/notepad/data/repository/NoteDataRepositoryTest.kt b/features/notepad/src/test/kotlin/com/dvinc/notepad/data/repository/NotepadDataRepositoryTest.kt similarity index 82% rename from features/notepad/src/test/kotlin/com/dvinc/notepad/data/repository/NoteDataRepositoryTest.kt rename to features/notepad/src/test/kotlin/com/dvinc/notepad/data/repository/NotepadDataRepositoryTest.kt index 57e2816..11af9a0 100644 --- a/features/notepad/src/test/kotlin/com/dvinc/notepad/data/repository/NoteDataRepositoryTest.kt +++ b/features/notepad/src/test/kotlin/com/dvinc/notepad/data/repository/NotepadDataRepositoryTest.kt @@ -4,7 +4,7 @@ import com.dvinc.core.database.dao.note.NoteDao import com.dvinc.core.database.entity.note.NoteEntity import com.dvinc.notepad.BaseTest import com.dvinc.base.notepad.data.mapper.note.NoteDataMapper -import com.dvinc.notepad.data.repository.note.NoteDataRepository +import com.dvinc.notepad.data.repository.notepad.NotepadDataRepository import com.dvinc.base.notepad.domain.model.Note import com.nhaarman.mockitokotlin2.mock import com.nhaarman.mockitokotlin2.verify @@ -15,9 +15,9 @@ import kotlinx.coroutines.runBlocking import org.junit.Before import org.junit.Test -class NoteDataRepositoryTest : BaseTest() { +class NotepadDataRepositoryTest : BaseTest() { - private lateinit var noteRepository: NoteDataRepository + private lateinit var notepadRepository: NotepadDataRepository private var noteEntity: NoteEntity = mock() @@ -33,7 +33,7 @@ class NoteDataRepositoryTest : BaseTest() { @Before fun setUp() { - noteRepository = NoteDataRepository(noteDao, noteMapper) + notepadRepository = NotepadDataRepository(noteDao, noteMapper) } @Test @@ -43,7 +43,7 @@ class NoteDataRepositoryTest : BaseTest() { whenever(noteMapper.fromEntityToDomain(entityList)).thenReturn(noteList) // When - val flow = noteRepository.getNotes() + val flow = notepadRepository.getNotes() // Then flow.collect { flowEmit -> @@ -57,7 +57,7 @@ class NoteDataRepositoryTest : BaseTest() { whenever(noteMapper.fromDomainToEntity(note)).thenReturn(noteEntity) // When - noteRepository.addNote(note) + notepadRepository.addNote(note) // Then verify(noteDao).addNote(noteEntity) @@ -69,7 +69,7 @@ class NoteDataRepositoryTest : BaseTest() { val noteId = 10L // When - noteRepository.deleteNoteById(noteId) + notepadRepository.deleteNoteById(noteId) // Then verify(noteDao).deleteNoteById(noteId) @@ -83,7 +83,7 @@ class NoteDataRepositoryTest : BaseTest() { whenever(noteMapper.fromEntityToDomain(noteEntity)).thenReturn(note) // When - val resultNote = noteRepository.getNoteById(noteId) + val resultNote = notepadRepository.getNoteById(noteId) // Then assert(resultNote == note) diff --git a/features/notepad/src/test/kotlin/com/dvinc/notepad/domain/usecase/NoteUseCaseTest.kt b/features/notepad/src/test/kotlin/com/dvinc/notepad/domain/usecase/NoteUseCaseTest.kt index 0045ad3..a046f0f 100644 --- a/features/notepad/src/test/kotlin/com/dvinc/notepad/domain/usecase/NoteUseCaseTest.kt +++ b/features/notepad/src/test/kotlin/com/dvinc/notepad/domain/usecase/NoteUseCaseTest.kt @@ -2,7 +2,7 @@ package com.dvinc.notepad.domain.usecase import com.dvinc.notepad.BaseTest import com.dvinc.base.notepad.domain.model.Note -import com.dvinc.notepad.domain.repository.note.NoteRepository +import com.dvinc.notepad.domain.repository.notepad.NotepadRepository import com.dvinc.notepad.domain.usecase.note.NoteUseCase import com.nhaarman.mockitokotlin2.mock import com.nhaarman.mockitokotlin2.verify @@ -18,24 +18,24 @@ class NoteUseCaseTest : BaseTest() { private var note: Note = mock() - private var noteRepository: NoteRepository = mock() + private var notepadRepository: NotepadRepository = mock() @Before fun setUp() { - noteUseCase = NoteUseCase(noteRepository) + noteUseCase = NoteUseCase(notepadRepository) } @Test fun `getNoteById test`() = runBlocking { // Given val noteId = 10L - whenever(noteRepository.getNoteById(noteId)).thenReturn(note) + whenever(notepadRepository.getNoteById(noteId)).thenReturn(note) // When noteUseCase.getNoteById(noteId) // Then - val resultNote = noteRepository.getNoteById(noteId) + val resultNote = notepadRepository.getNoteById(noteId) assertEquals(resultNote, note) } @@ -47,6 +47,6 @@ class NoteUseCaseTest : BaseTest() { noteUseCase.saveNote(note) // Then - verify(noteRepository).addNote(note) + verify(notepadRepository).addNote(note) } } diff --git a/features/notepad/src/test/kotlin/com/dvinc/notepad/domain/usecase/NotepadUseCaseTest.kt b/features/notepad/src/test/kotlin/com/dvinc/notepad/domain/usecase/NotepadUseCaseTest.kt index 05a88a3..cdb1e6a 100644 --- a/features/notepad/src/test/kotlin/com/dvinc/notepad/domain/usecase/NotepadUseCaseTest.kt +++ b/features/notepad/src/test/kotlin/com/dvinc/notepad/domain/usecase/NotepadUseCaseTest.kt @@ -1,7 +1,7 @@ package com.dvinc.notepad.domain.usecase import com.dvinc.notepad.BaseTest -import com.dvinc.notepad.domain.repository.note.NoteRepository +import com.dvinc.notepad.domain.repository.notepad.NotepadRepository import com.dvinc.notepad.domain.usecase.notepad.NotepadUseCase import com.nhaarman.mockitokotlin2.mock import com.nhaarman.mockitokotlin2.verify @@ -13,11 +13,11 @@ class NotepadUseCaseTest : BaseTest() { private lateinit var notepadUseCase: NotepadUseCase - private var noteRepository: NoteRepository = mock() + private var notepadRepository: NotepadRepository = mock() @Before fun setUp() { - notepadUseCase = NotepadUseCase(noteRepository) + notepadUseCase = NotepadUseCase(notepadRepository) } @Test @@ -28,7 +28,7 @@ class NotepadUseCaseTest : BaseTest() { notepadUseCase.getNotes() // Then - verify(noteRepository).getNotes() + verify(notepadRepository).getNotes() } @Test @@ -40,6 +40,6 @@ class NotepadUseCaseTest : BaseTest() { notepadUseCase.deleteNote(noteId) // Then - verify(noteRepository).deleteNoteById(noteId) + verify(notepadRepository).deleteNoteById(noteId) } } From 7edc79d2d4592960e1093709b662118e9721b2c1 Mon Sep 17 00:00:00 2001 From: Denis Verentsov Date: Thu, 7 Jan 2021 18:05:22 +0300 Subject: [PATCH 19/21] Fixed tests. Added base prefix for base notepad resources. --- base/notepad/src/main/AndroidManifest.xml | 2 +- .../notepad/presentation/adapter/notepad/NotepadAdapter.kt | 2 +- .../presentation/adapter/notepad/NotepadSwipeCallback.kt | 2 +- features/notepad/src/main/AndroidManifest.xml | 2 +- .../notepad/data/repository/NotepadDataRepositoryTest.kt | 5 ++++- .../notepad/presentation/ui/notepad/NotepadViewModelTest.kt | 3 ++- 6 files changed, 10 insertions(+), 6 deletions(-) diff --git a/base/notepad/src/main/AndroidManifest.xml b/base/notepad/src/main/AndroidManifest.xml index 5f62fa3..01b96fa 100644 --- a/base/notepad/src/main/AndroidManifest.xml +++ b/base/notepad/src/main/AndroidManifest.xml @@ -1 +1 @@ - + diff --git a/base/notepad/src/main/kotlin/com/dvinc/base/notepad/presentation/adapter/notepad/NotepadAdapter.kt b/base/notepad/src/main/kotlin/com/dvinc/base/notepad/presentation/adapter/notepad/NotepadAdapter.kt index 0bef913..7677fc6 100644 --- a/base/notepad/src/main/kotlin/com/dvinc/base/notepad/presentation/adapter/notepad/NotepadAdapter.kt +++ b/base/notepad/src/main/kotlin/com/dvinc/base/notepad/presentation/adapter/notepad/NotepadAdapter.kt @@ -9,7 +9,7 @@ import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView -import com.dvinc.notepad.R +import com.dvinc.base.notepad.R import com.dvinc.base.notepad.presentation.model.NoteUi class NotepadAdapter : RecyclerView.Adapter() { diff --git a/base/notepad/src/main/kotlin/com/dvinc/base/notepad/presentation/adapter/notepad/NotepadSwipeCallback.kt b/base/notepad/src/main/kotlin/com/dvinc/base/notepad/presentation/adapter/notepad/NotepadSwipeCallback.kt index 40d0490..d6649d4 100644 --- a/base/notepad/src/main/kotlin/com/dvinc/base/notepad/presentation/adapter/notepad/NotepadSwipeCallback.kt +++ b/base/notepad/src/main/kotlin/com/dvinc/base/notepad/presentation/adapter/notepad/NotepadSwipeCallback.kt @@ -10,7 +10,7 @@ import android.graphics.Color import android.graphics.drawable.ColorDrawable import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.RecyclerView -import com.dvinc.notepad.R +import com.dvinc.base.notepad.R import com.dvinc.base.notepad.presentation.model.NoteUi class NotepadSwipeCallback( diff --git a/features/notepad/src/main/AndroidManifest.xml b/features/notepad/src/main/AndroidManifest.xml index 822f00b..5f62fa3 100644 --- a/features/notepad/src/main/AndroidManifest.xml +++ b/features/notepad/src/main/AndroidManifest.xml @@ -1 +1 @@ - + diff --git a/features/notepad/src/test/kotlin/com/dvinc/notepad/data/repository/NotepadDataRepositoryTest.kt b/features/notepad/src/test/kotlin/com/dvinc/notepad/data/repository/NotepadDataRepositoryTest.kt index 11af9a0..9dd96f4 100644 --- a/features/notepad/src/test/kotlin/com/dvinc/notepad/data/repository/NotepadDataRepositoryTest.kt +++ b/features/notepad/src/test/kotlin/com/dvinc/notepad/data/repository/NotepadDataRepositoryTest.kt @@ -6,6 +6,7 @@ import com.dvinc.notepad.BaseTest import com.dvinc.base.notepad.data.mapper.note.NoteDataMapper import com.dvinc.notepad.data.repository.notepad.NotepadDataRepository import com.dvinc.base.notepad.domain.model.Note +import com.dvinc.core.database.dao.archive.ArchiveDao import com.nhaarman.mockitokotlin2.mock import com.nhaarman.mockitokotlin2.verify import com.nhaarman.mockitokotlin2.whenever @@ -31,9 +32,11 @@ class NotepadDataRepositoryTest : BaseTest() { private var noteMapper: NoteDataMapper = mock() + private var archiveDao: ArchiveDao = mock() + @Before fun setUp() { - notepadRepository = NotepadDataRepository(noteDao, noteMapper) + notepadRepository = NotepadDataRepository(noteDao, archiveDao, noteMapper) } @Test diff --git a/features/notepad/src/test/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModelTest.kt b/features/notepad/src/test/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModelTest.kt index 2b7b302..3608d2b 100644 --- a/features/notepad/src/test/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModelTest.kt +++ b/features/notepad/src/test/kotlin/com/dvinc/notepad/presentation/ui/notepad/NotepadViewModelTest.kt @@ -10,13 +10,14 @@ import com.dvinc.core.ui.NavigateTo import com.dvinc.core.ui.ShowErrorMessage import com.dvinc.core.ui.ShowMessage import com.dvinc.notepad.BaseTest -import com.dvinc.notepad.R import com.dvinc.base.notepad.domain.model.Note import com.dvinc.notepad.domain.usecase.notepad.NotepadUseCase import com.dvinc.base.notepad.presentation.adapter.notepad.NotepadSwipeDirection import com.dvinc.base.notepad.presentation.mapper.NotePresentationMapper import com.dvinc.base.notepad.presentation.model.NoteUi +import com.dvinc.notepad.R import com.dvinc.notepad.presentation.ui.ViewCommandUtil +import com.dvinc.notepad.ui.notepad.NotepadFragmentDirections import com.dvinc.notepad.ui.notepad.NotepadViewModel import com.dvinc.notepad.ui.notepad.NotepadViewState import com.nhaarman.mockitokotlin2.doReturn From c918a629e8ec0f45a90b180b38ed52cec107de8d Mon Sep 17 00:00:00 2001 From: Denis Verentsov Date: Thu, 7 Jan 2021 18:31:23 +0300 Subject: [PATCH 20/21] Fixed styles and colors for note item. Fixed other errors. --- .../notepad/src/main/res/drawable/bg_item_note.xml | 2 +- .../notepad/src/main/res/values-night/colors.xml | 4 ++-- {features => base}/notepad/src/main/res/values/colors.xml | 2 -- {features => base}/notepad/src/main/res/values/styles.xml | 2 -- core/src/main/res/values/colors.xml | 1 + features/archive/build.gradle | 2 ++ .../kotlin/com/dvinc/archive/ui/archive/ArchiveViewModel.kt | 2 +- 7 files changed, 7 insertions(+), 8 deletions(-) rename {features => base}/notepad/src/main/res/drawable/bg_item_note.xml (84%) rename {features => base}/notepad/src/main/res/values-night/colors.xml (89%) rename {features => base}/notepad/src/main/res/values/colors.xml (80%) rename {features => base}/notepad/src/main/res/values/styles.xml (99%) diff --git a/features/notepad/src/main/res/drawable/bg_item_note.xml b/base/notepad/src/main/res/drawable/bg_item_note.xml similarity index 84% rename from features/notepad/src/main/res/drawable/bg_item_note.xml rename to base/notepad/src/main/res/drawable/bg_item_note.xml index b453ba7..0990a11 100644 --- a/features/notepad/src/main/res/drawable/bg_item_note.xml +++ b/base/notepad/src/main/res/drawable/bg_item_note.xml @@ -3,7 +3,7 @@ - + diff --git a/features/notepad/src/main/res/values-night/colors.xml b/base/notepad/src/main/res/values-night/colors.xml similarity index 89% rename from features/notepad/src/main/res/values-night/colors.xml rename to base/notepad/src/main/res/values-night/colors.xml index e5fe5d4..1e76b6b 100644 --- a/features/notepad/src/main/res/values-night/colors.xml +++ b/base/notepad/src/main/res/values-night/colors.xml @@ -1,6 +1,6 @@ - @color/darkItemBackgroundColor + @color/darkItemBackground @color/darkTextColor @color/darkTextColor - + \ No newline at end of file diff --git a/features/notepad/src/main/res/values/colors.xml b/base/notepad/src/main/res/values/colors.xml similarity index 80% rename from features/notepad/src/main/res/values/colors.xml rename to base/notepad/src/main/res/values/colors.xml index 6441a64..09fcb91 100644 --- a/features/notepad/src/main/res/values/colors.xml +++ b/base/notepad/src/main/res/values/colors.xml @@ -1,7 +1,5 @@ - #1F1A24 - @color/white @color/black @color/gray diff --git a/features/notepad/src/main/res/values/styles.xml b/base/notepad/src/main/res/values/styles.xml similarity index 99% rename from features/notepad/src/main/res/values/styles.xml rename to base/notepad/src/main/res/values/styles.xml index 0b8ee82..2dad6f7 100644 --- a/features/notepad/src/main/res/values/styles.xml +++ b/base/notepad/src/main/res/values/styles.xml @@ -1,6 +1,5 @@ - - diff --git a/core/src/main/res/values/colors.xml b/core/src/main/res/values/colors.xml index 805fa90..8cc87c4 100644 --- a/core/src/main/res/values/colors.xml +++ b/core/src/main/res/values/colors.xml @@ -14,6 +14,7 @@ #121212 #888888 #AAAAAA + #1F1A24 @color/white @color/black diff --git a/features/archive/build.gradle b/features/archive/build.gradle index a4cc0fc..b4f0bb3 100644 --- a/features/archive/build.gradle +++ b/features/archive/build.gradle @@ -52,6 +52,8 @@ dependencies { deps.dagger.dagger, deps.dagger.assisted_inject, + deps.constraint.constraint, + deps.material.material, deps.lifecycle.view_model, deps.lifecycle.extensions, diff --git a/features/archive/src/main/kotlin/com/dvinc/archive/ui/archive/ArchiveViewModel.kt b/features/archive/src/main/kotlin/com/dvinc/archive/ui/archive/ArchiveViewModel.kt index dafbd77..d4f546d 100644 --- a/features/archive/src/main/kotlin/com/dvinc/archive/ui/archive/ArchiveViewModel.kt +++ b/features/archive/src/main/kotlin/com/dvinc/archive/ui/archive/ArchiveViewModel.kt @@ -6,10 +6,10 @@ package com.dvinc.archive.ui.archive import androidx.lifecycle.viewModelScope +import com.dvinc.archive.R import com.dvinc.archive.domain.usecase.archive.ArchiveUseCase import com.dvinc.core.extension.update import com.dvinc.core.ui.BaseViewModel -import com.dvinc.notepad.R import com.dvinc.base.notepad.presentation.mapper.NotePresentationMapper import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.launchIn From 04d759ec3f592b4f2ca805e20b1225ea4b108970 Mon Sep 17 00:00:00 2001 From: Denis Verentsov Date: Thu, 7 Jan 2021 18:38:26 +0300 Subject: [PATCH 21/21] Fixed dependency for base Notepad. --- base/notepad/build.gradle | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/base/notepad/build.gradle b/base/notepad/build.gradle index 423c1ff..6d1c39d 100644 --- a/base/notepad/build.gradle +++ b/base/notepad/build.gradle @@ -40,7 +40,8 @@ dependencies { implementation( deps.kotlin.stdlib, deps.dagger.dagger, - deps.material.material + deps.material.material, + deps.constraint.constraint ) kapt( deps.dagger.processor