mirror of
https://github.com/SimpleMobileTools/Simple-Notes.git
synced 2025-03-20 02:20:06 +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
|
package com.simplemobiletools.notes.pro.activities
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
import android.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.util.Log
|
||||||
import android.view.Menu
|
import android.view.Menu
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
|
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
|
||||||
import com.simplemobiletools.commons.extensions.beVisibleIf
|
import com.simplemobiletools.commons.extensions.*
|
||||||
import com.simplemobiletools.commons.extensions.getProperPrimaryColor
|
|
||||||
import com.simplemobiletools.commons.extensions.updateTextColors
|
|
||||||
import com.simplemobiletools.commons.helpers.*
|
import com.simplemobiletools.commons.helpers.*
|
||||||
import com.simplemobiletools.commons.models.RadioItem
|
import com.simplemobiletools.commons.models.RadioItem
|
||||||
import com.simplemobiletools.notes.pro.R
|
import com.simplemobiletools.notes.pro.R
|
||||||
import com.simplemobiletools.notes.pro.extensions.config
|
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.updateWidgets
|
||||||
import com.simplemobiletools.notes.pro.extensions.widgetsDB
|
import com.simplemobiletools.notes.pro.extensions.widgetsDB
|
||||||
import com.simplemobiletools.notes.pro.helpers.*
|
import com.simplemobiletools.notes.pro.helpers.*
|
||||||
|
import com.simplemobiletools.notes.pro.models.Note
|
||||||
import com.simplemobiletools.notes.pro.models.Widget
|
import com.simplemobiletools.notes.pro.models.Widget
|
||||||
import kotlinx.android.synthetic.main.activity_settings.*
|
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
|
import kotlin.system.exitProcess
|
||||||
|
|
||||||
class SettingsActivity : SimpleActivity() {
|
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?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
isMaterialActivity = true
|
isMaterialActivity = true
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
@ -50,6 +79,8 @@ class SettingsActivity : SimpleActivity() {
|
|||||||
setupCursorPlacement()
|
setupCursorPlacement()
|
||||||
setupIncognitoMode()
|
setupIncognitoMode()
|
||||||
setupCustomizeWidgetColors()
|
setupCustomizeWidgetColors()
|
||||||
|
setupNotesExport()
|
||||||
|
setupNotesImport()
|
||||||
updateTextColors(settings_nested_scrollview)
|
updateTextColors(settings_nested_scrollview)
|
||||||
|
|
||||||
arrayOf(
|
arrayOf(
|
||||||
@ -257,4 +288,62 @@ class SettingsActivity : SimpleActivity() {
|
|||||||
config.useIncognitoMode = settings_use_incognito_mode.isChecked
|
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