From ee9210ce14625aed2dd3173043d48a86127cf66c Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 16 Sep 2020 20:49:12 +0200 Subject: [PATCH] add handling for file saving from Send intent --- .../pro/activities/SaveAsActivity.kt | 39 ++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/SaveAsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/SaveAsActivity.kt index 76d5cb1f..073bd3f6 100644 --- a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/SaveAsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/SaveAsActivity.kt @@ -1,9 +1,14 @@ package com.simplemobiletools.filemanager.pro.activities import android.content.Intent +import android.net.Uri import android.os.Bundle -import com.simplemobiletools.commons.extensions.toast +import com.simplemobiletools.commons.dialogs.FilePickerDialog +import com.simplemobiletools.commons.extensions.* +import com.simplemobiletools.commons.helpers.ensureBackgroundThread import com.simplemobiletools.filemanager.pro.R +import com.simplemobiletools.filemanager.pro.extensions.config +import java.io.File class SaveAsActivity : SimpleActivity() { override fun onCreate(savedInstanceState: Bundle?) { @@ -11,7 +16,39 @@ class SaveAsActivity : SimpleActivity() { setContentView(R.layout.activity_save_as) if (intent.action == Intent.ACTION_SEND && intent.extras?.containsKey(Intent.EXTRA_STREAM) == true) { + FilePickerDialog(this, pickFile = false, showHidden = config.shouldShowHidden, showFAB = true) { + val destination = it + handleSAFDialog(destination) { + toast(R.string.saving) + ensureBackgroundThread { + try { + if (!getDoesFilePathExist(destination)) { + if (needsStupidWritePermissions(destination)) { + val document = getDocumentFile(destination) + document!!.createDirectory(destination.getFilenameFromPath()) + } else { + File(destination).mkdirs() + } + } + val source = intent.getParcelableExtra(Intent.EXTRA_STREAM) + val mimeType = source!!.toString().getMimeType() + val inputStream = contentResolver.openInputStream(source) + val filename = source.toString().getFilenameFromPath() + + val destinationPath = "$destination/$filename" + val outputStream = getFileOutputStreamSync(destinationPath, mimeType, null)!! + inputStream!!.copyTo(outputStream) + rescanPaths(arrayListOf(destinationPath)) + toast(R.string.file_saved) + finish() + } catch (e: Exception) { + showErrorToast(e) + finish() + } + } + } + } } else { toast(R.string.unknown_error_occurred) finish()