Loading build.gradle +1 −1 Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ buildscript { propMinSdkVersion = 16 propTargetSdkVersion = propCompileSdkVersion propVersionCode = 1 propVersionName = '3.11.15' propVersionName = '3.11.36' kotlin_version = '1.2.21' support_libs = '27.0.2' } Loading commons/src/main/kotlin/com/simplemobiletools/commons/activities/BaseSimpleActivity.kt +14 −14 Original line number Diff line number Diff line Loading @@ -166,8 +166,8 @@ open class BaseSimpleActivity : AppCompatActivity() { fun startCustomizationActivity() = startActivity(Intent(this, CustomizationActivity::class.java)) fun handleSAFDialog(file: File, callback: () -> Unit): Boolean { return if (isShowingSAFDialog(file, baseConfig.treeUri, OPEN_DOCUMENT_TREE)) { fun handleSAFDialog(path: String, callback: () -> Unit): Boolean { return if (isShowingSAFDialog(path, baseConfig.treeUri, OPEN_DOCUMENT_TREE)) { funAfterSAFPermission = callback true } else { Loading @@ -189,14 +189,14 @@ open class BaseSimpleActivity : AppCompatActivity() { return } handleSAFDialog(destinationFolder) { handleSAFDialog(destination) { copyMoveCallback = callback if (isCopyOperation) { startCopyMove(fileDirItems, destinationFolder, isCopyOperation, copyPhotoVideoOnly, copyHidden) startCopyMove(fileDirItems, FileDirItem(destination), isCopyOperation, copyPhotoVideoOnly, copyHidden) } else { if (isPathOnSD(source) || isPathOnSD(destination) || fileDirItems.first().isDirectory || isNougatPlus()) { handleSAFDialog(File(source)) { startCopyMove(fileDirItems, destinationFolder, isCopyOperation, copyPhotoVideoOnly, copyHidden) handleSAFDialog(source) { startCopyMove(fileDirItems, FileDirItem(destination), isCopyOperation, copyPhotoVideoOnly, copyHidden) } } else { toast(R.string.moving) Loading Loading @@ -228,15 +228,15 @@ open class BaseSimpleActivity : AppCompatActivity() { } } private fun startCopyMove(files: ArrayList<FileDirItem>, destinationFolder: File, isCopyOperation: Boolean, copyPhotoVideoOnly: Boolean, copyHidden: Boolean) { checkConflict(files, destinationFolder, 0, LinkedHashMap()) { private fun startCopyMove(files: ArrayList<FileDirItem>, destinationFileDirItem: FileDirItem, isCopyOperation: Boolean, copyPhotoVideoOnly: Boolean, copyHidden: Boolean) { checkConflict(files, destinationFileDirItem, 0, LinkedHashMap()) { toast(if (isCopyOperation) R.string.copying else R.string.moving) val pair = Pair(files, destinationFolder) val pair = Pair(files, destinationFileDirItem) CopyMoveTask(this, isCopyOperation, copyPhotoVideoOnly, it, copyMoveListener, copyHidden).execute(pair) } } private fun checkConflict(files: ArrayList<FileDirItem>, destinationFolder: File, index: Int, conflictResolutions: LinkedHashMap<String, Int>, private fun checkConflict(files: ArrayList<FileDirItem>, destinationFileDirItem: FileDirItem, index: Int, conflictResolutions: LinkedHashMap<String, Int>, callback: (resolutions: LinkedHashMap<String, Int>) -> Unit) { if (index == files.size) { callback(conflictResolutions) Loading @@ -244,20 +244,20 @@ open class BaseSimpleActivity : AppCompatActivity() { } val file = files[index] val newFile = File(destinationFolder, file.name) val newFile = File(destinationFileDirItem.path, file.name) if (newFile.exists()) { FileConflictDialog(this, newFile) { resolution, applyForAll -> if (applyForAll) { conflictResolutions.clear() conflictResolutions[""] = resolution checkConflict(files, destinationFolder, files.size, conflictResolutions, callback) checkConflict(files, destinationFileDirItem, files.size, conflictResolutions, callback) } else { conflictResolutions[newFile.absolutePath] = resolution checkConflict(files, destinationFolder, index + 1, conflictResolutions, callback) checkConflict(files, destinationFileDirItem, index + 1, conflictResolutions, callback) } } } else { checkConflict(files, destinationFolder, index + 1, conflictResolutions, callback) checkConflict(files, destinationFileDirItem, index + 1, conflictResolutions, callback) } } Loading commons/src/main/kotlin/com/simplemobiletools/commons/asynctasks/CopyMoveTask.kt +4 −4 Original line number Diff line number Diff line Loading @@ -25,7 +25,7 @@ import java.lang.ref.WeakReference import java.util.* class CopyMoveTask(val activity: BaseSimpleActivity, val copyOnly: Boolean = false, val copyMediaOnly: Boolean, val conflictResolutions: LinkedHashMap<String, Int>, listener: CopyMoveListener, val copyHidden: Boolean) : AsyncTask<Pair<ArrayList<FileDirItem>, File>, Void, Boolean>() { listener: CopyMoveListener, val copyHidden: Boolean) : AsyncTask<Pair<ArrayList<FileDirItem>, FileDirItem>, Void, Boolean>() { private val INITIAL_PROGRESS_DELAY = 3000L private val PROGRESS_RECHECK_INTERVAL = 500L Loading @@ -50,7 +50,7 @@ class CopyMoveTask(val activity: BaseSimpleActivity, val copyOnly: Boolean = fal mNotificationBuilder = NotificationCompat.Builder(activity) } override fun doInBackground(vararg params: Pair<ArrayList<FileDirItem>, File>): Boolean? { override fun doInBackground(vararg params: Pair<ArrayList<FileDirItem>, FileDirItem>): Boolean? { if (params.isEmpty()) { return false } Loading @@ -61,7 +61,7 @@ class CopyMoveTask(val activity: BaseSimpleActivity, val copyOnly: Boolean = fal mNotifId = (System.currentTimeMillis() / 1000).toInt() mMaxSize = 0 for (file in mFiles) { val newFile = File(pair.second, file.name) val newFile = File(pair.second!!.path, file.name) if (!newFile.exists() || getConflictResolution(newFile) != CONFLICT_SKIP) { mMaxSize += (File(file.path).getProperSize(copyHidden) / 1000).toInt() } Loading @@ -74,7 +74,7 @@ class CopyMoveTask(val activity: BaseSimpleActivity, val copyOnly: Boolean = fal for (file in mFiles) { try { val newFile = File(pair.second, file.name) val newFile = File(pair.second!!.path, file.name) if (newFile.exists()) { val resolution = getConflictResolution(newFile) if (resolution == CONFLICT_SKIP) { Loading commons/src/main/kotlin/com/simplemobiletools/commons/dialogs/CreateNewFolderDialog.kt +9 −9 Original line number Diff line number Diff line Loading @@ -31,7 +31,7 @@ class CreateNewFolderDialog(val activity: BaseSimpleActivity, val path: String, return@OnClickListener } createFolder(file, this) createFolder("$path/$name", this) } else -> activity.toast(R.string.invalid_name) } Loading @@ -40,19 +40,19 @@ class CreateNewFolderDialog(val activity: BaseSimpleActivity, val path: String, } } private fun createFolder(file: File, alertDialog: AlertDialog) { private fun createFolder(path: String, alertDialog: AlertDialog) { try { when { activity.needsStupidWritePermissions(file.absolutePath) -> activity.handleSAFDialog(file) { activity.needsStupidWritePermissions(path) -> activity.handleSAFDialog(path) { try { val documentFile = activity.getFileDocument(file.absolutePath) documentFile?.createDirectory(file.name) sendSuccess(alertDialog, file) val documentFile = activity.getFileDocument(path) documentFile?.createDirectory(path.getFilenameFromPath()) sendSuccess(alertDialog, path) } catch (e: SecurityException) { activity.showErrorToast(e) } } file.mkdirs() -> sendSuccess(alertDialog, file) File(path).mkdirs() -> sendSuccess(alertDialog, path) else -> activity.toast(R.string.unknown_error_occurred) } } catch (e: Exception) { Loading @@ -60,8 +60,8 @@ class CreateNewFolderDialog(val activity: BaseSimpleActivity, val path: String, } } private fun sendSuccess(alertDialog: AlertDialog, file: File) { callback(file.absolutePath.trimEnd('/')) private fun sendSuccess(alertDialog: AlertDialog, path: String) { callback(path.trimEnd('/')) alertDialog.dismiss() } } commons/src/main/kotlin/com/simplemobiletools/commons/dialogs/RenameItemDialog.kt +3 −2 Original line number Diff line number Diff line Loading @@ -52,8 +52,9 @@ class RenameItemDialog(val activity: BaseSimpleActivity, val path: String, val c val updatedFiles = ArrayList<File>() updatedFiles.add(file) if (!newExtension.isEmpty()) if (!newExtension.isEmpty()) { newName += ".$newExtension" } val newFile = File(file.parent, newName) if (newFile.exists()) { Loading @@ -62,7 +63,7 @@ class RenameItemDialog(val activity: BaseSimpleActivity, val path: String, val c } updatedFiles.add(newFile) activity.renameFile(file, newFile) { activity.renameFile(path, "${file.parent}/$newName") { if (it) { sendSuccess(updatedFiles) dismiss() Loading Loading
build.gradle +1 −1 Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ buildscript { propMinSdkVersion = 16 propTargetSdkVersion = propCompileSdkVersion propVersionCode = 1 propVersionName = '3.11.15' propVersionName = '3.11.36' kotlin_version = '1.2.21' support_libs = '27.0.2' } Loading
commons/src/main/kotlin/com/simplemobiletools/commons/activities/BaseSimpleActivity.kt +14 −14 Original line number Diff line number Diff line Loading @@ -166,8 +166,8 @@ open class BaseSimpleActivity : AppCompatActivity() { fun startCustomizationActivity() = startActivity(Intent(this, CustomizationActivity::class.java)) fun handleSAFDialog(file: File, callback: () -> Unit): Boolean { return if (isShowingSAFDialog(file, baseConfig.treeUri, OPEN_DOCUMENT_TREE)) { fun handleSAFDialog(path: String, callback: () -> Unit): Boolean { return if (isShowingSAFDialog(path, baseConfig.treeUri, OPEN_DOCUMENT_TREE)) { funAfterSAFPermission = callback true } else { Loading @@ -189,14 +189,14 @@ open class BaseSimpleActivity : AppCompatActivity() { return } handleSAFDialog(destinationFolder) { handleSAFDialog(destination) { copyMoveCallback = callback if (isCopyOperation) { startCopyMove(fileDirItems, destinationFolder, isCopyOperation, copyPhotoVideoOnly, copyHidden) startCopyMove(fileDirItems, FileDirItem(destination), isCopyOperation, copyPhotoVideoOnly, copyHidden) } else { if (isPathOnSD(source) || isPathOnSD(destination) || fileDirItems.first().isDirectory || isNougatPlus()) { handleSAFDialog(File(source)) { startCopyMove(fileDirItems, destinationFolder, isCopyOperation, copyPhotoVideoOnly, copyHidden) handleSAFDialog(source) { startCopyMove(fileDirItems, FileDirItem(destination), isCopyOperation, copyPhotoVideoOnly, copyHidden) } } else { toast(R.string.moving) Loading Loading @@ -228,15 +228,15 @@ open class BaseSimpleActivity : AppCompatActivity() { } } private fun startCopyMove(files: ArrayList<FileDirItem>, destinationFolder: File, isCopyOperation: Boolean, copyPhotoVideoOnly: Boolean, copyHidden: Boolean) { checkConflict(files, destinationFolder, 0, LinkedHashMap()) { private fun startCopyMove(files: ArrayList<FileDirItem>, destinationFileDirItem: FileDirItem, isCopyOperation: Boolean, copyPhotoVideoOnly: Boolean, copyHidden: Boolean) { checkConflict(files, destinationFileDirItem, 0, LinkedHashMap()) { toast(if (isCopyOperation) R.string.copying else R.string.moving) val pair = Pair(files, destinationFolder) val pair = Pair(files, destinationFileDirItem) CopyMoveTask(this, isCopyOperation, copyPhotoVideoOnly, it, copyMoveListener, copyHidden).execute(pair) } } private fun checkConflict(files: ArrayList<FileDirItem>, destinationFolder: File, index: Int, conflictResolutions: LinkedHashMap<String, Int>, private fun checkConflict(files: ArrayList<FileDirItem>, destinationFileDirItem: FileDirItem, index: Int, conflictResolutions: LinkedHashMap<String, Int>, callback: (resolutions: LinkedHashMap<String, Int>) -> Unit) { if (index == files.size) { callback(conflictResolutions) Loading @@ -244,20 +244,20 @@ open class BaseSimpleActivity : AppCompatActivity() { } val file = files[index] val newFile = File(destinationFolder, file.name) val newFile = File(destinationFileDirItem.path, file.name) if (newFile.exists()) { FileConflictDialog(this, newFile) { resolution, applyForAll -> if (applyForAll) { conflictResolutions.clear() conflictResolutions[""] = resolution checkConflict(files, destinationFolder, files.size, conflictResolutions, callback) checkConflict(files, destinationFileDirItem, files.size, conflictResolutions, callback) } else { conflictResolutions[newFile.absolutePath] = resolution checkConflict(files, destinationFolder, index + 1, conflictResolutions, callback) checkConflict(files, destinationFileDirItem, index + 1, conflictResolutions, callback) } } } else { checkConflict(files, destinationFolder, index + 1, conflictResolutions, callback) checkConflict(files, destinationFileDirItem, index + 1, conflictResolutions, callback) } } Loading
commons/src/main/kotlin/com/simplemobiletools/commons/asynctasks/CopyMoveTask.kt +4 −4 Original line number Diff line number Diff line Loading @@ -25,7 +25,7 @@ import java.lang.ref.WeakReference import java.util.* class CopyMoveTask(val activity: BaseSimpleActivity, val copyOnly: Boolean = false, val copyMediaOnly: Boolean, val conflictResolutions: LinkedHashMap<String, Int>, listener: CopyMoveListener, val copyHidden: Boolean) : AsyncTask<Pair<ArrayList<FileDirItem>, File>, Void, Boolean>() { listener: CopyMoveListener, val copyHidden: Boolean) : AsyncTask<Pair<ArrayList<FileDirItem>, FileDirItem>, Void, Boolean>() { private val INITIAL_PROGRESS_DELAY = 3000L private val PROGRESS_RECHECK_INTERVAL = 500L Loading @@ -50,7 +50,7 @@ class CopyMoveTask(val activity: BaseSimpleActivity, val copyOnly: Boolean = fal mNotificationBuilder = NotificationCompat.Builder(activity) } override fun doInBackground(vararg params: Pair<ArrayList<FileDirItem>, File>): Boolean? { override fun doInBackground(vararg params: Pair<ArrayList<FileDirItem>, FileDirItem>): Boolean? { if (params.isEmpty()) { return false } Loading @@ -61,7 +61,7 @@ class CopyMoveTask(val activity: BaseSimpleActivity, val copyOnly: Boolean = fal mNotifId = (System.currentTimeMillis() / 1000).toInt() mMaxSize = 0 for (file in mFiles) { val newFile = File(pair.second, file.name) val newFile = File(pair.second!!.path, file.name) if (!newFile.exists() || getConflictResolution(newFile) != CONFLICT_SKIP) { mMaxSize += (File(file.path).getProperSize(copyHidden) / 1000).toInt() } Loading @@ -74,7 +74,7 @@ class CopyMoveTask(val activity: BaseSimpleActivity, val copyOnly: Boolean = fal for (file in mFiles) { try { val newFile = File(pair.second, file.name) val newFile = File(pair.second!!.path, file.name) if (newFile.exists()) { val resolution = getConflictResolution(newFile) if (resolution == CONFLICT_SKIP) { Loading
commons/src/main/kotlin/com/simplemobiletools/commons/dialogs/CreateNewFolderDialog.kt +9 −9 Original line number Diff line number Diff line Loading @@ -31,7 +31,7 @@ class CreateNewFolderDialog(val activity: BaseSimpleActivity, val path: String, return@OnClickListener } createFolder(file, this) createFolder("$path/$name", this) } else -> activity.toast(R.string.invalid_name) } Loading @@ -40,19 +40,19 @@ class CreateNewFolderDialog(val activity: BaseSimpleActivity, val path: String, } } private fun createFolder(file: File, alertDialog: AlertDialog) { private fun createFolder(path: String, alertDialog: AlertDialog) { try { when { activity.needsStupidWritePermissions(file.absolutePath) -> activity.handleSAFDialog(file) { activity.needsStupidWritePermissions(path) -> activity.handleSAFDialog(path) { try { val documentFile = activity.getFileDocument(file.absolutePath) documentFile?.createDirectory(file.name) sendSuccess(alertDialog, file) val documentFile = activity.getFileDocument(path) documentFile?.createDirectory(path.getFilenameFromPath()) sendSuccess(alertDialog, path) } catch (e: SecurityException) { activity.showErrorToast(e) } } file.mkdirs() -> sendSuccess(alertDialog, file) File(path).mkdirs() -> sendSuccess(alertDialog, path) else -> activity.toast(R.string.unknown_error_occurred) } } catch (e: Exception) { Loading @@ -60,8 +60,8 @@ class CreateNewFolderDialog(val activity: BaseSimpleActivity, val path: String, } } private fun sendSuccess(alertDialog: AlertDialog, file: File) { callback(file.absolutePath.trimEnd('/')) private fun sendSuccess(alertDialog: AlertDialog, path: String) { callback(path.trimEnd('/')) alertDialog.dismiss() } }
commons/src/main/kotlin/com/simplemobiletools/commons/dialogs/RenameItemDialog.kt +3 −2 Original line number Diff line number Diff line Loading @@ -52,8 +52,9 @@ class RenameItemDialog(val activity: BaseSimpleActivity, val path: String, val c val updatedFiles = ArrayList<File>() updatedFiles.add(file) if (!newExtension.isEmpty()) if (!newExtension.isEmpty()) { newName += ".$newExtension" } val newFile = File(file.parent, newName) if (newFile.exists()) { Loading @@ -62,7 +63,7 @@ class RenameItemDialog(val activity: BaseSimpleActivity, val path: String, val c } updatedFiles.add(newFile) activity.renameFile(file, newFile) { activity.renameFile(path, "${file.parent}/$newName") { if (it) { sendSuccess(updatedFiles) dismiss() Loading