Skip to content

Commit d6db507

Browse files
authored
Merge pull request #10 from VladShurakov/fix-issue-2
FIX ISSUE #2
2 parents 3050c4d + 428cbef commit d6db507

File tree

17 files changed

+367
-151
lines changed

17 files changed

+367
-151
lines changed

.idea/deploymentTargetDropDown.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/gradle.xml

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/build.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,9 @@ dependencies {
7171
// Pretty Time
7272
implementation ("org.ocpsoft.prettytime:prettytime:5.0.4.Final")
7373

74+
// Gson
75+
implementation("com.google.code.gson:gson:2.10.1")
76+
7477
implementation("androidx.core:core-ktx:1.12.0")
7578
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2")
7679
implementation("androidx.activity:activity-compose:1.8.1")

app/src/main/java/com/vladshurakov/jetnotesapp/MainActivity.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ import androidx.navigation.compose.composable
1818
import androidx.navigation.compose.rememberNavController
1919
import androidx.navigation.navArgument
2020
import com.google.accompanist.systemuicontroller.rememberSystemUiController
21-
import com.vladshurakov.jetnotesapp.feature_notes.presenter.screen.EditScreen
2221
import com.vladshurakov.jetnotesapp.feature_notes.presenter.screen.ArchivedScreen
2322
import com.vladshurakov.jetnotesapp.feature_notes.presenter.screen.DeletedScreen
23+
import com.vladshurakov.jetnotesapp.feature_notes.presenter.screen.EditScreen
2424
import com.vladshurakov.jetnotesapp.feature_notes.presenter.screen.NotesScreen
2525
import com.vladshurakov.jetnotesapp.feature_settings.presenter.screen.SettingsScreen
2626
import com.vladshurakov.jetnotesapp.feature_settings.presenter.viewmodel.SettingsEvent
@@ -92,7 +92,7 @@ class MainActivity : ComponentActivity() {
9292
composable(route = Screen.Settings.route) {
9393
SettingsScreen(
9494
navController = navController,
95-
settingsBundle = settingsBundle,
95+
settingsViewModel = settingsViewModel,
9696
onSettingsChanged = { newSettingsBundle ->
9797
settingsBundle = newSettingsBundle
9898
settingsViewModel.onEvent(SettingsEvent.SaveSettings(settingsBundle))

app/src/main/java/com/vladshurakov/jetnotesapp/di/AppModule.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@ import com.vladshurakov.jetnotesapp.feature_notes.data.data_source.NoteDatabase
66
import com.vladshurakov.jetnotesapp.feature_notes.data.repository.NotesRepositoryImpl
77
import com.vladshurakov.jetnotesapp.feature_notes.domain.repository.NotesRepository
88
import com.vladshurakov.jetnotesapp.feature_notes.domain.usecase.DeleteNote
9+
import com.vladshurakov.jetnotesapp.feature_notes.domain.usecase.GetAllNotes
910
import com.vladshurakov.jetnotesapp.feature_notes.domain.usecase.GetNote
1011
import com.vladshurakov.jetnotesapp.feature_notes.domain.usecase.GetNotes
1112
import com.vladshurakov.jetnotesapp.feature_notes.domain.usecase.InsertNote
13+
import com.vladshurakov.jetnotesapp.feature_notes.domain.usecase.InsertNotes
1214
import com.vladshurakov.jetnotesapp.feature_notes.domain.usecase.MoveNoteToFolder
1315
import com.vladshurakov.jetnotesapp.feature_notes.domain.usecase.NotesUseCases
1416
import com.vladshurakov.jetnotesapp.feature_notes.domain.usecase.SearchNotes
@@ -36,7 +38,7 @@ object AppModule {
3638
context = context,
3739
klass = NoteDatabase::class.java,
3840
name = "notes-database"
39-
).build()
41+
).allowMainThreadQueries().build()
4042
}
4143

4244
@Provides
@@ -50,6 +52,8 @@ object AppModule {
5052
fun provideNotesUseCases(notesRepository: NotesRepository): NotesUseCases {
5153
return NotesUseCases(
5254
insertNote = InsertNote(notesRepository),
55+
insertNotes = InsertNotes(notesRepository),
56+
getAllNotes = GetAllNotes(notesRepository),
5357
getNote = GetNote(notesRepository),
5458
deleteNote = DeleteNote(notesRepository),
5559
moveTo = MoveNoteToFolder(notesRepository),

app/src/main/java/com/vladshurakov/jetnotesapp/feature_notes/data/data_source/NoteDao.kt

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@ interface NoteDao {
1414
@Insert(onConflict = OnConflictStrategy.REPLACE)
1515
suspend fun insert(noteEntity: NoteEntity): Long
1616

17+
@Insert(onConflict = OnConflictStrategy.IGNORE)
18+
suspend fun insert(noteEntities: List<NoteEntity>): List<Long>
19+
20+
@Query("SELECT * FROM note")
21+
fun getAll(): List<NoteEntity>
22+
1723
@Query("SELECT * FROM note WHERE id = :id")
1824
suspend fun get(id: Long): NoteEntity?
1925

@@ -32,9 +38,17 @@ interface NoteDao {
3238
@Query("SELECT * FROM note WHERE folder = :folder ORDER BY pinned DESC, timestamp ASC")
3339
fun getAsc(folder: Folder): Flow<List<NoteEntity>>
3440

35-
@Query("SELECT * FROM note WHERE (title LIKE '%' || :query || '%' OR content LIKE '%' || :query || '%') ORDER BY pinned DESC, timestamp DESC")
41+
@Query(
42+
"SELECT * FROM note WHERE " +
43+
"(title LIKE '%' || :query || '%' OR content LIKE '%' || :query || '%') " +
44+
"AND folder = 'NOTES' ORDER BY pinned DESC, timestamp DESC"
45+
)
3646
fun getDesc(query: String): Flow<List<NoteEntity>>
3747

38-
@Query("SELECT * FROM note WHERE (title LIKE '%' || :query || '%' OR content LIKE '%' || :query || '%') ORDER BY pinned ASC, timestamp ASC")
48+
@Query(
49+
"SELECT * FROM note WHERE " +
50+
"(title LIKE '%' || :query || '%' OR content LIKE '%' || :query || '%') " +
51+
"AND folder = 'NOTES' ORDER BY pinned ASC, timestamp ASC"
52+
)
3953
fun getAsc(query: String): Flow<List<NoteEntity>>
4054
}

app/src/main/java/com/vladshurakov/jetnotesapp/feature_notes/data/repository/NotesRepositoryImpl.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,17 @@ import kotlinx.coroutines.flow.map
1111

1212
class NotesRepositoryImpl(private val noteDao: NoteDao) : NotesRepository {
1313
override suspend fun insert(note: Note): Long {
14-
1514
return noteDao.insert(note.toNoteEntity())
1615
}
1716

17+
override suspend fun insert(notes: List<Note>): List<Long> {
18+
return noteDao.insert(notes.map { it.toNoteEntity() })
19+
}
20+
21+
override fun getAll(): List<Note> {
22+
return noteDao.getAll().map { it.toNote() }
23+
}
24+
1825
override suspend fun get(id: Long): Note? {
1926
return noteDao.get(id)?.toNote()
2027
}

app/src/main/java/com/vladshurakov/jetnotesapp/feature_notes/domain/repository/NotesRepository.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import kotlinx.coroutines.flow.Flow
66

77
interface NotesRepository {
88
suspend fun insert(note: Note): Long?
9+
suspend fun insert(notes: List<Note>): List<Long?>
10+
fun getAll(): List<Note>
911
suspend fun get(id: Long): Note?
1012
suspend fun delete(note: Note)
1113
suspend fun moveTo(id: Long, folder: Folder)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.vladshurakov.jetnotesapp.feature_notes.domain.usecase
2+
3+
import com.vladshurakov.jetnotesapp.feature_notes.domain.models.Note
4+
import com.vladshurakov.jetnotesapp.feature_notes.domain.repository.NotesRepository
5+
6+
class GetAllNotes(private val repository: NotesRepository) {
7+
operator fun invoke(): List<Note> {
8+
return repository.getAll()
9+
}
10+
}

app/src/main/java/com/vladshurakov/jetnotesapp/feature_notes/domain/usecase/InsertNote.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ class InsertNote(private val repository: NotesRepository){
77

88
suspend operator fun invoke(note: Note): Long?{
99
if (note.title.isBlank() && (note.content.isBlank() || note.content.startsWith(' '))){
10-
return null
10+
return -1
1111
}
1212
if (note.title.isBlank() && note.content.isNotBlank()){
1313
note.title = "Title"

0 commit comments

Comments
 (0)