Skip to content

Commit 9bacfb1

Browse files
committed
Fix Export & Import notes
- Add allowMainThreadQueries to Room Database - Change ActivityResultContracts MIME type from "*/*" to "application/json" - Add SettingsEvent.InsertNotes
1 parent 59f4f0a commit 9bacfb1

File tree

7 files changed

+45
-23
lines changed

7 files changed

+45
-23
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: 20 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ android {
1313
applicationId = "com.vladshurakov.jetnotesapp"
1414
minSdk = 26
1515
targetSdk = 34
16-
versionCode = 6
17-
versionName = "1.2.0"
16+
versionCode = 5
17+
versionName = "1.1.2"
1818
resourceConfigurations += listOf("en")
1919

2020
vectorDrawables {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ import com.vladshurakov.jetnotesapp.feature_notes.domain.usecase.DeleteNote
99
import com.vladshurakov.jetnotesapp.feature_notes.domain.usecase.GetAllNotes
1010
import com.vladshurakov.jetnotesapp.feature_notes.domain.usecase.GetNote
1111
import com.vladshurakov.jetnotesapp.feature_notes.domain.usecase.GetNotes
12-
import com.vladshurakov.jetnotesapp.feature_notes.domain.usecase.InsertNotes
1312
import com.vladshurakov.jetnotesapp.feature_notes.domain.usecase.InsertNote
13+
import com.vladshurakov.jetnotesapp.feature_notes.domain.usecase.InsertNotes
1414
import com.vladshurakov.jetnotesapp.feature_notes.domain.usecase.MoveNoteToFolder
1515
import com.vladshurakov.jetnotesapp.feature_notes.domain.usecase.NotesUseCases
1616
import com.vladshurakov.jetnotesapp.feature_notes.domain.usecase.SearchNotes
@@ -38,7 +38,7 @@ object AppModule {
3838
context = context,
3939
klass = NoteDatabase::class.java,
4040
name = "notes-database"
41-
).build()
41+
).allowMainThreadQueries().build()
4242
}
4343

4444
@Provides

app/src/main/java/com/vladshurakov/jetnotesapp/feature_settings/presenter/screen/SettingsScreen.kt

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,12 @@ import com.vladshurakov.jetnotesapp.feature_settings.presenter.components.Settin
4242
import com.vladshurakov.jetnotesapp.feature_settings.presenter.components.SettingsThemeDialog
4343
import com.vladshurakov.jetnotesapp.feature_settings.presenter.components.SettingsTopBar
4444
import com.vladshurakov.jetnotesapp.feature_settings.presenter.components.SettingsView
45+
import com.vladshurakov.jetnotesapp.feature_settings.presenter.viewmodel.SettingsEvent
4546
import com.vladshurakov.jetnotesapp.feature_settings.presenter.viewmodel.SettingsViewModel
4647
import com.vladshurakov.jetnotesapp.theme.MainTheme
4748
import com.vladshurakov.jetnotesapp.theme.MainTheme.colors
4849
import com.vladshurakov.jetnotesapp.util.Screen
4950
import java.lang.reflect.Type
50-
import java.text.SimpleDateFormat
51-
import java.util.Date
52-
import java.util.Locale
5351

5452
@Composable
5553
fun SettingsScreen(
@@ -59,15 +57,14 @@ fun SettingsScreen(
5957
) {
6058

6159
val exportDataLauncher = rememberLauncherForActivityResult(
62-
ActivityResultContracts.CreateDocument()
60+
ActivityResultContracts.CreateDocument("application/json")
6361
) { uri ->
6462
if (uri == null) return@rememberLauncherForActivityResult
6563
val jsonString = Gson().toJson(settingsViewModel.getAll())
6664
navController.context.contentResolver.openOutputStream(uri).use {
6765
it?.bufferedWriter()?.apply {
6866
write(jsonString)
6967
flush()
70-
close()
7168
}
7269
}
7370
}
@@ -80,12 +77,11 @@ fun SettingsScreen(
8077
it?.bufferedReader()?.readText() ?: "[]"
8178
}
8279
val type: Type = object : TypeToken<List<Note>>() {}.type
83-
val notes: MutableList<Note> =
84-
Gson().fromJson<List<Note>?>(jsonString, type).toMutableList()
85-
notes.forEachIndexed { index, note ->
80+
val notes = Gson().fromJson<List<Note>>(jsonString, type).toMutableList()
81+
notes.onEachIndexed { index, note ->
8682
notes[index] = note.copy(id = null)
8783
}
88-
settingsViewModel.insert(notes)
84+
settingsViewModel.onEvent(SettingsEvent.InsertNotes(notes))
8985
}
9086

9187
val isStyleDialogOpen = remember {
@@ -261,11 +257,7 @@ fun SettingsScreen(
261257
)
262258

263259
TextButton(
264-
onClick = {
265-
val currentTime =
266-
SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(Date())
267-
exportDataLauncher.launch("JetNotesBackup-${currentTime}.json")
268-
},
260+
onClick = { exportDataLauncher.launch("JetNotesBackup") },
269261
shape = RectangleShape,
270262
contentPadding = PaddingValues(start = 18.dp),
271263
modifier = Modifier
@@ -285,7 +277,7 @@ fun SettingsScreen(
285277
}
286278

287279
TextButton(
288-
onClick = { importDataLauncher.launch(arrayOf("*/*")) },
280+
onClick = { importDataLauncher.launch(arrayOf("application/json")) },
289281
shape = RectangleShape,
290282
contentPadding = PaddingValues(start = 18.dp),
291283
modifier = Modifier
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package com.vladshurakov.jetnotesapp.feature_settings.presenter.viewmodel
22

3+
import com.vladshurakov.jetnotesapp.feature_notes.domain.models.Note
34
import com.vladshurakov.jetnotesapp.feature_settings.domain.models.SettingsBundle
45

56
/*
67
* Event for the Settings screen
78
*/
89
sealed interface SettingsEvent {
910
data class SaveSettings(val settingsBundle: SettingsBundle): SettingsEvent
11+
data class InsertNotes(val notes: List<Note>): SettingsEvent
1012
}

app/src/main/java/com/vladshurakov/jetnotesapp/feature_settings/presenter/viewmodel/SettingsViewModel.kt

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,11 @@ class SettingsViewModel @Inject constructor(
3030
fun onEvent(event: SettingsEvent) {
3131
when (event) {
3232
is SettingsEvent.SaveSettings -> {
33-
settingsUseCases.saveSettings.invoke(settingsBundle = event.settingsBundle)
34-
_settingsBundle.value = event.settingsBundle
33+
saveSettings(event.settingsBundle)
34+
}
35+
36+
is SettingsEvent.InsertNotes -> {
37+
insertNotes(event.notes)
3538
}
3639
}
3740
}
@@ -40,7 +43,12 @@ class SettingsViewModel @Inject constructor(
4043
return notesUseCases.getAllNotes.invoke()
4144
}
4245

43-
fun insert(notes: List<Note>) {
46+
private fun saveSettings(settingsBundle: SettingsBundle){
47+
settingsUseCases.saveSettings.invoke(settingsBundle = settingsBundle)
48+
_settingsBundle.value = settingsBundle
49+
}
50+
51+
private fun insertNotes(notes: List<Note>) {
4452
viewModelScope.launch {
4553
notesUseCases.insertNotes(notes)
4654
}

0 commit comments

Comments
 (0)