use scoped storage at the text editor

This commit is contained in:
tibbi 2020-03-21 17:29:13 +01:00
parent c85f8834ca
commit d0808bb026
2 changed files with 59 additions and 25 deletions

View File

@ -1,7 +1,9 @@
package com.simplemobiletools.filemanager.pro.activities
import android.app.Activity
import android.app.SearchManager
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.print.PrintAttributes
@ -24,8 +26,11 @@ import com.simplemobiletools.filemanager.pro.extensions.config
import com.simplemobiletools.filemanager.pro.extensions.openPath
import kotlinx.android.synthetic.main.activity_read_text.*
import java.io.File
import java.io.OutputStream
class ReadTextActivity : SimpleActivity() {
private val SELECT_SAVE_FILE_INTENT = 1
private var filePath = ""
private var originalText = ""
private var isSearchOpen = false
@ -40,15 +45,8 @@ class ReadTextActivity : SimpleActivity() {
return
}
handlePermission(PERMISSION_WRITE_STORAGE) {
if (it) {
read_text_view.onGlobalLayout {
checkIntent()
}
} else {
toast(R.string.no_storage_permissions)
finish()
}
read_text_view.onGlobalLayout {
checkIntent()
}
}
@ -69,6 +67,14 @@ class ReadTextActivity : SimpleActivity() {
return true
}
override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
super.onActivityResult(requestCode, resultCode, resultData)
if (requestCode == SELECT_SAVE_FILE_INTENT && resultCode == Activity.RESULT_OK && resultData != null && resultData.data != null) {
val outputStream = contentResolver.openOutputStream(resultData.data!!)
saveTextContent(outputStream)
}
}
private fun setupSearch(menu: Menu) {
val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager
searchMenuItem = menu.findItem(R.id.menu_search)
@ -111,16 +117,37 @@ class ReadTextActivity : SimpleActivity() {
filePath = getRealPathFromURI(intent.data!!) ?: ""
}
SaveAsDialog(this, filePath) {
getFileOutputStream(FileDirItem(it, it.getFilenameFromPath())) {
if (it != null) {
it.bufferedWriter().use { it.write(read_text_view.text.toString()) }
toast(R.string.file_saved)
hideKeyboard()
} else {
toast(R.string.unknown_error_occurred)
if (filePath.isEmpty()) {
SaveAsDialog(this, filePath, true) { path, filename ->
Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
type = "text/plain"
putExtra(Intent.EXTRA_TITLE, filename)
addCategory(Intent.CATEGORY_OPENABLE)
startActivityForResult(this, SELECT_SAVE_FILE_INTENT)
}
}
} else {
SaveAsDialog(this, filePath, false) { path, filename ->
handlePermission(PERMISSION_WRITE_STORAGE) {
if (it) {
val file = File(path)
getFileOutputStream(file.toFileDirItem(this), true) {
saveTextContent(it)
}
}
}
}
}
}
private fun saveTextContent(outputStream: OutputStream?) {
if (outputStream != null) {
outputStream.bufferedWriter().use { it.write(read_text_view.text.toString()) }
toast(R.string.file_saved)
hideKeyboard()
} else {
toast(R.string.unknown_error_occurred)
}
}

View File

@ -8,7 +8,8 @@ import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.filemanager.pro.R
import kotlinx.android.synthetic.main.dialog_save_as.view.*
class SaveAsDialog(val activity: BaseSimpleActivity, var path: String, val callback: (savePath: String) -> Unit) {
class SaveAsDialog(val activity: BaseSimpleActivity, var path: String, val hidePath: Boolean,
val callback: (path: String, filename: String) -> Unit) {
init {
if (path.isEmpty()) {
@ -30,10 +31,16 @@ class SaveAsDialog(val activity: BaseSimpleActivity, var path: String, val callb
}
save_as_name.setText(name)
save_as_path.setOnClickListener {
FilePickerDialog(activity, realPath, false, false, true, true) {
save_as_path.text = activity.humanizePath(it)
realPath = it
if (hidePath) {
save_as_path_label.beGone()
save_as_path.beGone()
} else {
save_as_path.setOnClickListener {
FilePickerDialog(activity, realPath, false, false, true, true) {
save_as_path.text = activity.humanizePath(it)
realPath = it
}
}
}
}
@ -64,14 +71,14 @@ class SaveAsDialog(val activity: BaseSimpleActivity, var path: String, val callb
return@setOnClickListener
}
if (activity.getDoesFilePathExist(newPath)) {
if (!hidePath && activity.getDoesFilePathExist(newPath)) {
val title = String.format(activity.getString(R.string.file_already_exists_overwrite), newFilename)
ConfirmationDialog(activity, title) {
callback(newPath)
callback(newPath, newFilename)
dismiss()
}
} else {
callback(newPath)
callback(newPath, newFilename)
dismiss()
}
}