Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3b2f91ca authored by tibbi's avatar tibbi
Browse files

couple improvements around DocumentFile and copy/move handling

parent f4cd3815
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -184,7 +184,7 @@ open class BaseSimpleActivity : AppCompatActivity() {
        }

        val destinationFolder = File(destination)
        if (!destinationFolder.exists()) {
        if (!destinationFolder.exists() && getDocumentFile(destination) == null) {
            toast(R.string.invalid_destination)
            return
        }
+2 −4
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@ import com.simplemobiletools.commons.helpers.CONFLICT_SKIP
import com.simplemobiletools.commons.interfaces.CopyMoveListener
import com.simplemobiletools.commons.models.FileDirItem
import java.io.File
import java.io.FileInputStream
import java.io.InputStream
import java.io.OutputStream
import java.lang.ref.WeakReference
@@ -200,12 +199,11 @@ class CopyMoveTask(val activity: BaseSimpleActivity, val copyOnly: Boolean = fal
        var out: OutputStream? = null
        try {
            if (!mDocuments.containsKey(destination.parent) && activity.needsStupidWritePermissions(destination.absolutePath)) {
                mDocuments[destination.parent] = activity.getFileDocument(destination.parent)
                mDocuments[destination.parent] = activity.getDocumentFile(destination.parent)
            }

            out = activity.getFileOutputStreamSync(destination.absolutePath, source.path.getMimeType(), mDocuments[destination.parent])

            inputStream = FileInputStream(File(source.path))
            inputStream = activity.getFileInputStreamSync(source.path)!!

            val buffer = ByteArray(DEFAULT_BUFFER_SIZE)
            var bytes = inputStream.read(buffer)
+1 −1
Original line number Diff line number Diff line
@@ -45,7 +45,7 @@ class CreateNewFolderDialog(val activity: BaseSimpleActivity, val path: String,
            when {
                activity.needsStupidWritePermissions(path) -> activity.handleSAFDialog(path) {
                    try {
                        val documentFile = activity.getFileDocument(path)
                        val documentFile = activity.getDocumentFile(path)
                        documentFile?.createDirectory(path.getFilenameFromPath())
                        sendSuccess(alertDialog, path)
                    } catch (e: SecurityException) {
+1 −1
Original line number Diff line number Diff line
@@ -152,7 +152,7 @@ class FilePickerDialog(val activity: BaseSimpleActivity,
    private fun verifyPath() {
        val file = File(currPath)
        if (currPath.startsWith(OTG_PATH)) {
            val fileDocument = activity.getFileDocument(currPath) ?: return
            val fileDocument = activity.getDocumentFile(currPath) ?: return
            if ((pickFile && fileDocument.isFile) || (!pickFile && fileDocument.isDirectory)) {
                sendSuccess(fileDocument.uri.toString())
            }
+20 −13
Original line number Diff line number Diff line
@@ -35,10 +35,7 @@ import com.simplemobiletools.commons.models.Release
import com.simplemobiletools.commons.models.SharedTheme
import com.simplemobiletools.commons.views.MyTextView
import kotlinx.android.synthetic.main.dialog_title.view.*
import java.io.File
import java.io.FileNotFoundException
import java.io.FileOutputStream
import java.io.OutputStream
import java.io.*
import java.util.*

fun Activity.toast(id: Int, length: Int = Toast.LENGTH_SHORT) {
@@ -448,7 +445,7 @@ fun Activity.rescanPaths(paths: ArrayList<String>, callback: (() -> Unit)? = nul
fun BaseSimpleActivity.renameFile(oldPath: String, newPath: String, callback: ((success: Boolean) -> Unit)? = null) {
    if (needsStupidWritePermissions(newPath)) {
        handleSAFDialog(newPath) {
            val document = getFileDocument(oldPath)
            val document = getDocumentFile(oldPath)
            if (document == null || (File(oldPath).isDirectory != document.isDirectory)) {
                callback?.invoke(false)
                return@handleSAFDialog
@@ -512,7 +509,7 @@ fun Activity.hideKeyboard(view: View) {
fun BaseSimpleActivity.getFileOutputStream(fileDirItem: FileDirItem, callback: (outputStream: OutputStream?) -> Unit) {
    if (needsStupidWritePermissions(fileDirItem.path)) {
        handleSAFDialog(fileDirItem.path) {
            var document = getFileDocument(fileDirItem.path)
            var document = getDocumentFile(fileDirItem.path)
            if (document == null) {
                val error = String.format(getString(R.string.could_not_create_file), fileDirItem.path)
                showErrorToast(error)
@@ -542,24 +539,33 @@ fun BaseSimpleActivity.getFileOutputStream(fileDirItem: FileDirItem, callback: (
    }
}

fun BaseSimpleActivity.getFileOutputStreamSync(targetPath: String, mimeType: String, parentDocumentFile: DocumentFile? = null): OutputStream? {
    val targetFile = File(targetPath)
fun BaseSimpleActivity.getFileOutputStreamSync(path: String, mimeType: String, parentDocumentFile: DocumentFile? = null): OutputStream? {
    val targetFile = File(path)

    return if (needsStupidWritePermissions(targetPath)) {
        val documentFile = parentDocumentFile ?: getFileDocument(targetFile.parent)
    return if (needsStupidWritePermissions(path)) {
        val documentFile = parentDocumentFile ?: getDocumentFile(targetFile.parent)
        if (documentFile == null) {
            val error = String.format(getString(R.string.could_not_create_file), targetFile.parent)
            showErrorToast(error)
            return null
        }

        val newDocument = documentFile.createFile(mimeType, targetPath.getFilenameFromPath())
        val newDocument = documentFile.createFile(mimeType, path.getFilenameFromPath())
        applicationContext.contentResolver.openOutputStream(newDocument!!.uri)
    } else {
        FileOutputStream(targetFile)
    }
}

fun BaseSimpleActivity.getFileInputStreamSync(path: String): InputStream? {
    return if (needsStupidWritePermissions(path)) {
        val fileDocument = getSomeDocumentFile(path)
        applicationContext.contentResolver.openInputStream(fileDocument?.uri)
    } else {
        FileInputStream(File(path))
    }
}

fun Activity.handleHiddenFolderPasswordProtection(callback: () -> Unit) {
    if (baseConfig.isPasswordProtectionOn) {
        SecurityDialog(this, baseConfig.passwordHash, baseConfig.protectionType) { hash, type, success ->
@@ -583,11 +589,12 @@ fun Activity.handleAppPasswordProtection(callback: (success: Boolean) -> Unit) {
}

fun BaseSimpleActivity.createDirectorySync(directory: File): Boolean {
    if (directory.exists())
    if (directory.exists()) {
        return true
    }

    if (needsStupidWritePermissions(directory.absolutePath)) {
        val documentFile = getFileDocument(directory.absolutePath) ?: return false
        val documentFile = getDocumentFile(directory.absolutePath) ?: return false
        val newDir = documentFile.createDirectory(directory.name)
        return newDir != null
    }
Loading