From 8c9f7bf050a9ca468f35554db2e0e2194b2528f8 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 19 Jun 2017 21:16:31 +0200 Subject: [PATCH] fix #64, ask for SD card write permission at creating new items --- .../dialogs/CreateNewItemDialog.kt | 56 +++++++++++-------- .../filemanager/fragments/ItemsFragment.kt | 2 +- 2 files changed, 35 insertions(+), 23 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/dialogs/CreateNewItemDialog.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/dialogs/CreateNewItemDialog.kt index ef5771f5..19535e2d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/filemanager/dialogs/CreateNewItemDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/dialogs/CreateNewItemDialog.kt @@ -1,16 +1,16 @@ package com.simplemobiletools.filemanager.dialogs -import android.app.Activity import android.support.v7.app.AlertDialog import android.view.View import android.view.WindowManager import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.filemanager.R +import com.simplemobiletools.filemanager.activities.SimpleActivity import kotlinx.android.synthetic.main.dialog_create_new.view.* import java.io.File import java.io.IOException -class CreateNewItemDialog(val activity: Activity, val path: String, val callback: () -> Unit) { +class CreateNewItemDialog(val activity: SimpleActivity, val path: String, val callback: () -> Unit) { init { val view = activity.layoutInflater.inflate(R.layout.dialog_create_new, null) @@ -32,12 +32,16 @@ class CreateNewItemDialog(val activity: Activity, val path: String, val callback } if (view.dialog_radio_group.checkedRadioButtonId == R.id.dialog_radio_directory) { - if (!createDirectory(file, this)) { - errorOccurred() + createDirectory(file, this) { + if (!it) { + errorOccurred() + } } } else { - if (!createFile(file, this)) { - errorOccurred() + createFile(file, this) { + if (!it) { + errorOccurred() + } } } } else { @@ -47,39 +51,47 @@ class CreateNewItemDialog(val activity: Activity, val path: String, val callback } } - private fun createDirectory(file: File, alertDialog: AlertDialog): Boolean { - return if (activity.needsStupidWritePermissions(path)) { - val documentFile = activity.getFileDocument(file.absolutePath) ?: return false - documentFile.createDirectory(file.name) - success(alertDialog) - true + private fun createDirectory(file: File, alertDialog: AlertDialog, callback: (Boolean) -> Unit) { + if (activity.needsStupidWritePermissions(path)) { + activity.handleSAFDialog(file) { + val documentFile = activity.getFileDocument(file.absolutePath) + if (documentFile == null) { + callback(false) + return@handleSAFDialog + } + documentFile.createDirectory(file.name) + success(alertDialog) + } } else if (file.mkdirs()) { success(alertDialog) - true + callback(true) } else - false + callback(false) } private fun errorOccurred() { activity.toast(R.string.unknown_error_occurred) } - private fun createFile(file: File, alertDialog: AlertDialog): Boolean { + private fun createFile(file: File, alertDialog: AlertDialog, callback: (Boolean) -> Unit) { try { if (activity.needsStupidWritePermissions(path)) { - val documentFile = activity.getFileDocument(file.absolutePath) ?: return false - documentFile.createFile("", file.name) - success(alertDialog) - return true + activity.handleSAFDialog(file) { + val documentFile = activity.getFileDocument(file.absolutePath) + if (documentFile == null) { + callback(false) + return@handleSAFDialog + } + documentFile.createFile("", file.name) + success(alertDialog) + } } else if (file.createNewFile()) { success(alertDialog) - return true + callback(true) } } catch (ignored: IOException) { } - - return false } private fun success(alertDialog: AlertDialog) { diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/fragments/ItemsFragment.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/fragments/ItemsFragment.kt index 2d5c6153..d9ccce76 100644 --- a/app/src/main/kotlin/com/simplemobiletools/filemanager/fragments/ItemsFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/fragments/ItemsFragment.kt @@ -190,7 +190,7 @@ class ItemsFragment : android.support.v4.app.Fragment(), ItemsAdapter.ItemOperat } private fun createNewItem() { - CreateNewItemDialog(activity, mPath) { + CreateNewItemDialog(activity as SimpleActivity, mPath) { fillItems() } }