From 69db31ae237c8d683294b56d69d12002a96e846d Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 17 Nov 2022 21:25:34 +0100 Subject: [PATCH] improving the Create Document intent handling --- app/build.gradle | 2 +- .../pro/activities/MainActivity.kt | 14 ++++- .../pro/dialogs/InsertFilenameDialog.kt | 52 +++++++++++++++++++ .../res/layout/dialog_insert_filename.xml | 44 ++++++++++++++++ 4 files changed, 110 insertions(+), 2 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/filemanager/pro/dialogs/InsertFilenameDialog.kt create mode 100644 app/src/main/res/layout/dialog_insert_filename.xml diff --git a/app/build.gradle b/app/build.gradle index 2b0a1a57..a8953374 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -64,7 +64,7 @@ android { } dependencies { - implementation 'com.github.SimpleMobileTools:Simple-Commons:2e9ca234a7' + implementation 'com.github.SimpleMobileTools:Simple-Commons:f538687d6e' implementation 'com.github.tibbi:AndroidPdfViewer:da57ff410e' implementation 'com.github.Stericson:RootTools:df729dcb13' implementation 'com.github.Stericson:RootShell:1.6' diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/MainActivity.kt index 0052b320..dcde1f49 100644 --- a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/MainActivity.kt @@ -32,6 +32,7 @@ import com.simplemobiletools.filemanager.pro.R import com.simplemobiletools.filemanager.pro.adapters.ViewPagerAdapter import com.simplemobiletools.filemanager.pro.dialogs.ChangeSortingDialog import com.simplemobiletools.filemanager.pro.dialogs.ChangeViewTypeDialog +import com.simplemobiletools.filemanager.pro.dialogs.InsertFilenameDialog import com.simplemobiletools.filemanager.pro.extensions.config import com.simplemobiletools.filemanager.pro.extensions.tryOpenPathIntent import com.simplemobiletools.filemanager.pro.fragments.ItemsFragment @@ -709,9 +710,20 @@ class MainActivity : SimpleActivity() { finish() } + // used at apps that have no file access at all, but need to work with files. For example Simple Calendar uses this at exporting events into a file fun createDocumentConfirmed(path: String) { - val resultIntent = Intent() val filename = intent.getStringExtra(Intent.EXTRA_TITLE) ?: "" + if (filename.isEmpty()) { + InsertFilenameDialog(this, internalStoragePath) { newFilename -> + finishCreateDocumentIntent(path, newFilename) + } + } else { + finishCreateDocumentIntent(path, filename) + } + } + + private fun finishCreateDocumentIntent(path: String, filename: String) { + val resultIntent = Intent() val uri = getFilePublicUri(File(path, filename), BuildConfig.APPLICATION_ID) val type = path.getMimeType() resultIntent.setDataAndType(uri, type) diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/dialogs/InsertFilenameDialog.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/dialogs/InsertFilenameDialog.kt new file mode 100644 index 00000000..0b858ed9 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/dialogs/InsertFilenameDialog.kt @@ -0,0 +1,52 @@ +package com.simplemobiletools.filemanager.pro.dialogs + +import androidx.appcompat.app.AlertDialog +import com.simplemobiletools.commons.activities.BaseSimpleActivity +import com.simplemobiletools.commons.extensions.* +import com.simplemobiletools.filemanager.pro.R +import kotlinx.android.synthetic.main.dialog_insert_filename.view.* + +class InsertFilenameDialog( + val activity: BaseSimpleActivity, var path: String, val callback: (filename: String) -> Unit +) { + init { + val view = activity.layoutInflater.inflate(R.layout.dialog_insert_filename, null) + + activity.getAlertDialogBuilder() + .setPositiveButton(R.string.ok, null) + .setNegativeButton(R.string.cancel, null) + .apply { + activity.setupDialogStuff(view, this, R.string.filename) { alertDialog -> + alertDialog.showKeyboard(view.insert_filename_title) + alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener { + val filename = view.insert_filename_title.value + val extension = view.insert_filename_extension_title.value + + if (filename.isEmpty()) { + activity.toast(R.string.filename_cannot_be_empty) + return@setOnClickListener + } + + var newFilename = filename + if (extension.isNotEmpty()) { + newFilename += ".$extension" + } + + val newPath = "$path/$newFilename" + if (!newFilename.isAValidFilename()) { + activity.toast(R.string.filename_invalid_characters) + return@setOnClickListener + } + + if (activity.getDoesFilePathExist(newPath)) { + val msg = String.format(activity.getString(R.string.file_already_exists), newFilename) + activity.toast(msg) + } else { + callback(newFilename) + alertDialog.dismiss() + } + } + } + } + } +} diff --git a/app/src/main/res/layout/dialog_insert_filename.xml b/app/src/main/res/layout/dialog_insert_filename.xml new file mode 100644 index 00000000..fb0080dc --- /dev/null +++ b/app/src/main/res/layout/dialog_insert_filename.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + +