mirror of
https://github.com/SimpleMobileTools/Simple-Notes.git
synced 2025-03-19 10:00:16 +01:00
Implemented import/export for notes in SettingsActivity
This commit is contained in:
parent
4d2a756fe8
commit
9c2d0e5954
@ -1,26 +1,55 @@
|
||||
package com.simplemobiletools.notes.pro.activities
|
||||
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.Menu
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
|
||||
import com.simplemobiletools.commons.extensions.beVisibleIf
|
||||
import com.simplemobiletools.commons.extensions.getProperPrimaryColor
|
||||
import com.simplemobiletools.commons.extensions.updateTextColors
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.*
|
||||
import com.simplemobiletools.commons.models.RadioItem
|
||||
import com.simplemobiletools.notes.pro.R
|
||||
import com.simplemobiletools.notes.pro.extensions.config
|
||||
import com.simplemobiletools.notes.pro.extensions.requestUnlockNotes
|
||||
import com.simplemobiletools.notes.pro.extensions.updateWidgets
|
||||
import com.simplemobiletools.notes.pro.extensions.widgetsDB
|
||||
import com.simplemobiletools.notes.pro.helpers.*
|
||||
import com.simplemobiletools.notes.pro.models.Note
|
||||
import com.simplemobiletools.notes.pro.models.Widget
|
||||
import kotlinx.android.synthetic.main.activity_settings.*
|
||||
import java.util.*
|
||||
import kotlinx.serialization.SerializationException
|
||||
import kotlinx.serialization.decodeFromString
|
||||
import kotlinx.serialization.encodeToString
|
||||
import kotlinx.serialization.json.Json
|
||||
import java.util.Locale
|
||||
import kotlin.system.exitProcess
|
||||
|
||||
class SettingsActivity : SimpleActivity() {
|
||||
|
||||
private val notesFileType = "application/json"
|
||||
|
||||
private val getContent = registerForActivityResult(ActivityResultContracts.GetContent()) { uri ->
|
||||
if (uri != null) {
|
||||
toast(R.string.importing)
|
||||
importNotes(uri)
|
||||
}
|
||||
}
|
||||
|
||||
private val saveDocument = registerForActivityResult(ActivityResultContracts.CreateDocument(notesFileType)) { uri ->
|
||||
if (uri != null) {
|
||||
toast(R.string.exporting)
|
||||
NotesHelper(this).getNotes { notes ->
|
||||
requestUnlockNotes(notes) { unlockedNotes ->
|
||||
val notLockedNotes = notes.filterNot { it.isLocked() }
|
||||
val notesToExport = unlockedNotes + notLockedNotes
|
||||
exportNotes(notesToExport, uri)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
isMaterialActivity = true
|
||||
super.onCreate(savedInstanceState)
|
||||
@ -50,6 +79,8 @@ class SettingsActivity : SimpleActivity() {
|
||||
setupCursorPlacement()
|
||||
setupIncognitoMode()
|
||||
setupCustomizeWidgetColors()
|
||||
setupNotesExport()
|
||||
setupNotesImport()
|
||||
updateTextColors(settings_nested_scrollview)
|
||||
|
||||
arrayOf(
|
||||
@ -257,4 +288,62 @@ class SettingsActivity : SimpleActivity() {
|
||||
config.useIncognitoMode = settings_use_incognito_mode.isChecked
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupNotesExport() {
|
||||
settings_export_notes_holder.setOnClickListener {
|
||||
val fileName = "${getString(R.string.notes)}_${getCurrentFormattedDateTime()}"
|
||||
saveDocument.launch(fileName)
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupNotesImport() {
|
||||
settings_import_notes_holder.setOnClickListener {
|
||||
getContent.launch(notesFileType)
|
||||
}
|
||||
}
|
||||
|
||||
private fun exportNotes(notes: List<Note>, uri: Uri) {
|
||||
if (notes.isEmpty()) {
|
||||
toast(R.string.no_entries_for_exporting)
|
||||
} else {
|
||||
try {
|
||||
val outputStream = contentResolver.openOutputStream(uri)!!
|
||||
|
||||
val jsonString = Json.encodeToString(notes)
|
||||
outputStream.use {
|
||||
it.write(jsonString.toByteArray())
|
||||
}
|
||||
Log.e("EXPORTED", jsonString)
|
||||
toast(R.string.exporting_successful)
|
||||
} catch (e: Exception) {
|
||||
showErrorToast(e)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun importNotes(uri: Uri) {
|
||||
try {
|
||||
val jsonString = contentResolver.openInputStream(uri)!!.use { inputStream ->
|
||||
inputStream.bufferedReader().readText()
|
||||
}
|
||||
val objects = Json.decodeFromString<List<Note>>(jsonString)
|
||||
if (objects.isEmpty()) {
|
||||
toast(R.string.no_entries_for_importing)
|
||||
return
|
||||
}
|
||||
NotesHelper(this).importNotes(this, objects) { importResult ->
|
||||
when (importResult) {
|
||||
NotesHelper.ImportResult.IMPORT_OK -> toast(R.string.importing_successful)
|
||||
NotesHelper.ImportResult.IMPORT_PARTIAL -> toast(R.string.importing_some_entries_failed)
|
||||
else -> toast(R.string.importing_failed)
|
||||
}
|
||||
}
|
||||
} catch (_: SerializationException) {
|
||||
toast(R.string.invalid_file_format)
|
||||
} catch (_: IllegalArgumentException) {
|
||||
toast(R.string.invalid_file_format)
|
||||
} catch (e: Exception) {
|
||||
showErrorToast(e)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user