From 554ec6478cee95c419bac4c6e153ff18312efcc5 Mon Sep 17 00:00:00 2001 From: denizk0461 Date: Wed, 8 Nov 2023 10:59:47 +0100 Subject: [PATCH] export is implemented, import is broken --- .../textbasic/fragment/SettingsNewFragment.kt | 92 ++++++++++++++++++- app/src/main/res/values-de/strings.xml | 1 + app/src/main/res/values/strings.xml | 3 + 3 files changed, 94 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/denizd/textbasic/fragment/SettingsNewFragment.kt b/app/src/main/java/com/denizd/textbasic/fragment/SettingsNewFragment.kt index 25b5d95..9806a29 100644 --- a/app/src/main/java/com/denizd/textbasic/fragment/SettingsNewFragment.kt +++ b/app/src/main/java/com/denizd/textbasic/fragment/SettingsNewFragment.kt @@ -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 + 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::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, 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) } } \ No newline at end of file diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 7a09cb9..0d96c26 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -72,6 +72,7 @@ Lizenzen App-Version + Zum Dokumenten-Ordner exportiert: %s Text bearbeiten Einträge diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 93b0e4a..6ade92c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -73,6 +73,9 @@ App Version + textbasic_export_%s.json + Exported to Documents folder: %s + Edit Text Entries Guide