From f8e855ec1513d0c27bd9bf097d2fa36375f4e3af Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 5 Nov 2016 19:14:28 +0100 Subject: [PATCH] fix copying files to sd card --- .../filemanager/asynctasks/CopyTask.kt | 20 ++++++++++++------- .../filemanager/dialogs/CopyDialog.kt | 2 +- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/simplemobiletools/filemanager/asynctasks/CopyTask.kt b/app/src/main/java/com/simplemobiletools/filemanager/asynctasks/CopyTask.kt index c7e64772..0bb48a2b 100644 --- a/app/src/main/java/com/simplemobiletools/filemanager/asynctasks/CopyTask.kt +++ b/app/src/main/java/com/simplemobiletools/filemanager/asynctasks/CopyTask.kt @@ -1,15 +1,14 @@ package com.simplemobiletools.filemanager.asynctasks +import android.content.Context import android.os.AsyncTask import android.support.v4.util.Pair import android.util.Log -import java.io.File -import java.io.FileInputStream -import java.io.FileOutputStream -import java.io.IOException +import com.simplemobiletools.filemanager.Utils +import java.io.* import java.lang.ref.WeakReference -class CopyTask(listener: CopyTask.CopyListener) : AsyncTask, File>, Void, Boolean>() { +class CopyTask(listener: CopyTask.CopyListener, val context: Context) : AsyncTask, File>, Void, Boolean>() { private val TAG = CopyTask::class.java.simpleName private var mListener: WeakReference? = null private var destinationDir: File? = null @@ -52,7 +51,14 @@ class CopyTask(listener: CopyTask.CopyListener) : AsyncTask, Fil } val inputStream = FileInputStream(source) - val out = FileOutputStream(destination) + var out: OutputStream? + if (Utils.needsStupidWritePermissions(context, destination.absolutePath)) { + var document = Utils.getFileDocument(context, destination.absolutePath) + document = document.createFile("", destination.name) + out = context.contentResolver.openOutputStream(document.uri) + } else { + out = FileOutputStream(destination) + } val buf = ByteArray(1024) var len: Int @@ -60,7 +66,7 @@ class CopyTask(listener: CopyTask.CopyListener) : AsyncTask, Fil len = inputStream.read(buf) if (len <= 0) break - out.write(buf, 0, len) + out!!.write(buf, 0, len) } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/dialogs/CopyDialog.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/dialogs/CopyDialog.kt index 5931d22f..76f3b78d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/filemanager/dialogs/CopyDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/dialogs/CopyDialog.kt @@ -58,7 +58,7 @@ class CopyDialog(val activity: Activity, val files: List, val path: String if (view.dialog_radio_group.checkedRadioButtonId == R.id.dialog_radio_copy) { Utils.showToast(context, R.string.copying) val pair = Pair, File>(files, destinationDir) - CopyTask(copyListener).execute(pair) + CopyTask(copyListener, mContext).execute(pair) dismiss() } else { for (f in files) {