export is implemented, import is broken

This commit is contained in:
denizk0461
2023-11-08 10:59:47 +01:00
parent c9698e5f93
commit 554ec6478c
3 changed files with 94 additions and 2 deletions
@@ -1,14 +1,21 @@
package com.denizd.textbasic.fragment
import android.annotation.SuppressLint
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.content.res.ColorStateList
import android.graphics.Color
import android.net.Uri
import android.os.Bundle
import android.os.Environment
import android.util.Log
import android.util.TypedValue
import android.view.View
import android.view.ViewGroup
import android.widget.ImageButton
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import androidx.annotation.ColorInt
import androidx.annotation.StringRes
import androidx.transition.TransitionManager
@@ -19,12 +26,23 @@ import com.denizd.textbasic.databinding.FragmentSettingsNewBinding
import com.denizd.textbasic.db.QuoteStorage
import com.denizd.textbasic.sheet.TextSheet
import com.denizd.textbasic.util.getConstrast
import com.denizd.textbasic.util.showSnackBar
import com.denizd.textbasic.util.viewBinding
import com.denizd.textbasic.widget.CanvasText
import com.google.gson.Gson
import com.skydoves.colorpickerview.ColorEnvelope
import com.skydoves.colorpickerview.ColorPickerDialog
import com.skydoves.colorpickerview.listeners.ColorEnvelopeListener
import java.io.BufferedWriter
import java.io.File
import java.io.FileReader
import java.io.FileWriter
import java.io.IOException
import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Date
import java.util.Locale
class SettingsNewFragment : BaseFragment(R.layout.fragment_settings_new) {
@@ -32,6 +50,8 @@ class SettingsNewFragment : BaseFragment(R.layout.fragment_settings_new) {
private val binding: FragmentSettingsNewBinding by viewBinding(FragmentSettingsNewBinding::bind)
private lateinit var resultIntent: ActivityResultLauncher<Intent>
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
@@ -236,6 +256,36 @@ class SettingsNewFragment : BaseFragment(R.layout.fragment_settings_new) {
}
}
binding.buttonImport.setOnClickListener {
importFile()
}
resultIntent = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
try {
if (result.resultCode == Activity.RESULT_OK) {
val data = result.data
data?.let {
it.data?.let { u ->
// val s = BufferedReader(FileReader(File(u.path ?: throw IllegalArgumentException()))).readLines().joinToString()
val a = Gson().fromJson(FileReader(getFile(getApplicationContext(), u)), Array<String>::class.java)
Log.d("TAGSARELOST", a[0])
}
}
}
} catch (e: IllegalArgumentException) {
}
}
binding.buttonExport.setOnClickListener {
val date = SimpleDateFormat("yyyyMMddHHmmss", Locale.ROOT).format(Date(System.currentTimeMillis())).run {
this.substring(0, 8) + "T" + this.substring(8)
}
val fileName = getString(R.string.export_file_name, date)
Log.d("TAGSARELOST", fileName)
createFile(fileName, "hello test")
}
// Set click listener for showing licences dialogue
binding.buttonLicences.setOnClickListener {
openBottomSheet(
@@ -262,6 +312,23 @@ class SettingsNewFragment : BaseFragment(R.layout.fragment_settings_new) {
updatePreview()
}
@Throws(IOException::class)
fun getFile(context: Context, uri: Uri): File {
val destinationFilename =
File(context.filesDir.path + File.separatorChar + queryName(context, uri))
try {
context.contentResolver.openInputStream(uri).use { ins ->
createFileFromStream(
ins,
destinationFilename
)
}
} catch (ex: Exception) {
ex.printStackTrace()
}
return destinationFilename
}
private fun setGravityButtons(buttons: List<ImageButton>, gravity: Int) {
val transparent = context.getColor(android.R.color.transparent)
@@ -374,10 +441,31 @@ class SettingsNewFragment : BaseFragment(R.layout.fragment_settings_new) {
.show()
}
private fun importFile() {
var intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
intent.addCategory(Intent.CATEGORY_OPENABLE)
intent.type = "application/json"
intent = Intent.createChooser(intent, "Choose file")
resultIntent.launch(intent)
}
private fun createFile(fileName: String, content: String) {
val path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS)
try {
val writer = BufferedWriter(FileWriter(File(path, fileName)))
writer.write(content)
writer.close()
context.theme.showSnackBar(
binding.coordinatorLayout,
getString(R.string.settings_fragment_export_successful, fileName),
)
} catch (e: IOException) {
e.printStackTrace()
}
}
private fun updatePreview() {
val bitmap = CanvasText.drawText(context, true)
binding.textPreview.setImageBitmap(bitmap)
}
}
+1
View File
@@ -72,6 +72,7 @@
<string name="sheet_licences_header">Lizenzen</string>
<string name="settings_misc_app_version">App-Version</string>
<string name="settings_fragment_export_successful">Zum Dokumenten-Ordner exportiert: %s</string>
<string name="edit">Text bearbeiten</string>
<string name="nav_items_entries">Einträge</string>
+3
View File
@@ -73,6 +73,9 @@
<string name="settings_misc_app_version">App Version</string>
<string name="export_file_name" translatable="false">textbasic_export_%s.json</string>
<string name="settings_fragment_export_successful">Exported to Documents folder: %s</string>
<string name="edit">Edit Text</string>
<string name="nav_items_entries">Entries</string>
<string name="guide">Guide</string>