From b6cd6e39ebbd8c49475ee444e1c16a35bbaf6f17 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 5 Nov 2016 16:33:32 +0100 Subject: [PATCH] fix file renaming on sd card --- .../filemanager/dialogs/RenameItemDialog.kt | 37 +++++++++++++++---- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/dialogs/RenameItemDialog.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/dialogs/RenameItemDialog.kt index 5444eb12..381100a6 100644 --- a/app/src/main/kotlin/com/simplemobiletools/filemanager/dialogs/RenameItemDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/dialogs/RenameItemDialog.kt @@ -2,14 +2,18 @@ package com.simplemobiletools.filemanager.dialogs import android.content.Context import android.media.MediaScannerConnection +import android.net.Uri +import android.support.v4.provider.DocumentFile import android.support.v7.app.AlertDialog import android.view.LayoutInflater import android.view.WindowManager +import com.simplemobiletools.filemanager.Config import com.simplemobiletools.filemanager.R import com.simplemobiletools.filemanager.Utils import com.simplemobiletools.filemanager.extensions.rescanItem import com.simplemobiletools.filemanager.extensions.toast import com.simplemobiletools.filemanager.extensions.value +import com.simplemobiletools.filepicker.extensions.getSDCardPath import com.simplemobiletools.filepicker.models.FileDirItem import kotlinx.android.synthetic.main.rename_item.view.* import java.io.File @@ -29,23 +33,34 @@ class RenameItemDialog(val context: Context, val path: String, val item: FileDir window!!.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE) show() getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener({ - val name = view.item_name.value - if (Utils.isNameValid(name)) { + val newName = view.item_name.value + if (Utils.isNameValid(newName)) { val currFile = File(path, item.name) - val newFile = File(path, name) + val newFile = File(path, newName) if (newFile.exists()) { context.toast(R.string.name_taken) return@setOnClickListener } - if (currFile.renameTo(newFile)) { - context.rescanItem(newFile) - MediaScannerConnection.scanFile(context, arrayOf(currFile.absolutePath, newFile.absolutePath), null, null) + if (Utils.needsStupidWritePermissions(context, path)) { + val relativePath = currFile.absolutePath.substring(context.getSDCardPath().length + 1) + var document = DocumentFile.fromTreeUri(context, Uri.parse(Config.newInstance(context).treeUri)) + val parts = relativePath.split("/") + for (part in parts) { + document = document.findFile(part) + } + if (document.canWrite()) + document.renameTo(newName) + sendSuccess(currFile, newFile) dismiss() - listener.onSuccess() } else { - context.toast(R.string.error_occurred) + if (currFile.renameTo(newFile)) { + sendSuccess(currFile, newFile) + dismiss() + } else { + context.toast(R.string.error_occurred) + } } } else { context.toast(R.string.invalid_name) @@ -54,6 +69,12 @@ class RenameItemDialog(val context: Context, val path: String, val item: FileDir } } + private fun sendSuccess(currFile: File, newFile: File) { + context.rescanItem(newFile) + MediaScannerConnection.scanFile(context, arrayOf(currFile.absolutePath, newFile.absolutePath), null, null) + listener.onSuccess() + } + interface OnRenameItemListener { fun onSuccess() }