mirror of
https://github.com/SimpleMobileTools/Simple-File-Manager.git
synced 2025-02-27 17:17:54 +01:00
move a couple helper function to extensions
This commit is contained in:
parent
0770c95791
commit
1d8c45643f
@ -1,16 +1,9 @@
|
||||
package com.simplemobiletools.filemanager
|
||||
|
||||
import android.Manifest
|
||||
import android.content.Context
|
||||
import android.content.pm.PackageManager
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.support.v4.content.ContextCompat
|
||||
import android.support.v4.provider.DocumentFile
|
||||
import com.simplemobiletools.filemanager.extensions.isPathOnSD
|
||||
import com.simplemobiletools.filepicker.extensions.getSDCardPath
|
||||
import com.simplemobiletools.filepicker.extensions.getFileDocument
|
||||
import com.simplemobiletools.filepicker.extensions.needsStupidWritePermissions
|
||||
import com.simplemobiletools.filepicker.extensions.toast
|
||||
import java.util.regex.Pattern
|
||||
|
||||
class Utils {
|
||||
companion object {
|
||||
@ -26,34 +19,8 @@ class Utils {
|
||||
context.toast(resId)
|
||||
}
|
||||
|
||||
fun hasStoragePermission(cxt: Context): Boolean {
|
||||
return ContextCompat.checkSelfPermission(cxt, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
|
||||
}
|
||||
fun needsStupidWritePermissions(context: Context, path: String) = context.needsStupidWritePermissions(path)
|
||||
|
||||
fun isNameValid(name: String): Boolean {
|
||||
val pattern = Pattern.compile("^[-_.A-Za-z0-9()#& ]+$")
|
||||
val matcher = pattern.matcher(name)
|
||||
return matcher.matches()
|
||||
}
|
||||
|
||||
fun needsStupidWritePermissions(context: Context, path: String) = isPathOnSD(context, path) && isKitkat() && !context.getSDCardPath().isEmpty()
|
||||
|
||||
fun isPathOnSD(context: Context, path: String): Boolean {
|
||||
return context.isPathOnSD(path)
|
||||
}
|
||||
|
||||
fun isKitkat() = Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT
|
||||
|
||||
fun getFileDocument(context: Context, path: String): DocumentFile {
|
||||
val relativePath = path.substring(context.getSDCardPath().length + 1)
|
||||
var document = DocumentFile.fromTreeUri(context, Uri.parse(Config.newInstance(context).treeUri))
|
||||
val parts = relativePath.split("/")
|
||||
for (part in parts) {
|
||||
val currDocument = document.findFile(part)
|
||||
if (currDocument != null)
|
||||
document = currDocument
|
||||
}
|
||||
return document
|
||||
}
|
||||
fun getFileDocument(context: Context, path: String, treeUri: String) = context.getFileDocument(path, treeUri)
|
||||
}
|
||||
}
|
||||
|
@ -4,9 +4,11 @@ import android.content.Context
|
||||
import android.os.AsyncTask
|
||||
import android.support.v4.util.Pair
|
||||
import android.util.Log
|
||||
import com.simplemobiletools.filemanager.Utils
|
||||
import com.simplemobiletools.filemanager.extensions.rescanItem
|
||||
import com.simplemobiletools.filemanager.Config
|
||||
import com.simplemobiletools.filemanager.fragments.ItemsFragment
|
||||
import com.simplemobiletools.filepicker.extensions.getFileDocument
|
||||
import com.simplemobiletools.filepicker.extensions.needsStupidWritePermissions
|
||||
import com.simplemobiletools.filepicker.extensions.rescanItem
|
||||
import java.io.*
|
||||
import java.lang.ref.WeakReference
|
||||
import java.util.*
|
||||
@ -15,10 +17,12 @@ class CopyTask(listener: CopyTask.CopyListener, val context: Context, val delete
|
||||
private val TAG = CopyTask::class.java.simpleName
|
||||
private var mListener: WeakReference<CopyListener>? = null
|
||||
private var mMovedFiles: ArrayList<File>
|
||||
private var mConfig: Config
|
||||
|
||||
init {
|
||||
mListener = WeakReference(listener)
|
||||
mMovedFiles = arrayListOf()
|
||||
mConfig = Config.newInstance(context)
|
||||
}
|
||||
|
||||
override fun doInBackground(vararg params: Pair<List<File>, File>): Boolean? {
|
||||
@ -39,8 +43,8 @@ class CopyTask(listener: CopyTask.CopyListener, val context: Context, val delete
|
||||
|
||||
if (deleteAfterCopy) {
|
||||
for (file in mMovedFiles) {
|
||||
if (Utils.needsStupidWritePermissions(context, file.absolutePath)) {
|
||||
Utils.getFileDocument(context, file.absolutePath).delete()
|
||||
if (context.needsStupidWritePermissions(file.absolutePath)) {
|
||||
context.getFileDocument(file.absolutePath, mConfig.treeUri)
|
||||
} else {
|
||||
file.delete()
|
||||
}
|
||||
@ -60,8 +64,8 @@ class CopyTask(listener: CopyTask.CopyListener, val context: Context, val delete
|
||||
|
||||
private fun copyDirectory(source: File, destination: File) {
|
||||
if (!destination.exists()) {
|
||||
if (Utils.needsStupidWritePermissions(context, destination.absolutePath)) {
|
||||
val document = Utils.getFileDocument(context, destination.absolutePath)
|
||||
if (context.needsStupidWritePermissions(destination.absolutePath)) {
|
||||
val document = context.getFileDocument(destination.absolutePath, mConfig.treeUri)
|
||||
document.createDirectory(destination.name)
|
||||
} else if (!destination.mkdirs()) {
|
||||
throw IOException("Could not create dir ${destination.absolutePath}")
|
||||
@ -71,11 +75,11 @@ class CopyTask(listener: CopyTask.CopyListener, val context: Context, val delete
|
||||
val children = source.list()
|
||||
for (child in children) {
|
||||
val newFile = File(source, child)
|
||||
if (Utils.needsStupidWritePermissions(context, destination.absolutePath)) {
|
||||
if (context.needsStupidWritePermissions(destination.absolutePath)) {
|
||||
if (newFile.isDirectory) {
|
||||
copyDirectory(newFile, File(destination, child))
|
||||
} else {
|
||||
var document = Utils.getFileDocument(context, destination.absolutePath)
|
||||
var document = context.getFileDocument(destination.absolutePath, mConfig.treeUri)
|
||||
document = document.createFile("", child)
|
||||
|
||||
val inputStream = FileInputStream(newFile)
|
||||
@ -98,9 +102,10 @@ class CopyTask(listener: CopyTask.CopyListener, val context: Context, val delete
|
||||
|
||||
val inputStream = FileInputStream(source)
|
||||
val out: OutputStream?
|
||||
if (Utils.needsStupidWritePermissions(context, destination.absolutePath)) {
|
||||
var document = Utils.getFileDocument(context, destination.absolutePath)
|
||||
if (context.needsStupidWritePermissions(destination.absolutePath)) {
|
||||
var document = context.getFileDocument(destination.absolutePath, mConfig.treeUri)
|
||||
document = document.createFile("", destination.name)
|
||||
|
||||
out = context.contentResolver.openOutputStream(document.uri)
|
||||
} else {
|
||||
out = FileOutputStream(destination)
|
||||
|
@ -472,7 +472,7 @@ public class ItemsFragment extends android.support.v4.app.Fragment
|
||||
}
|
||||
|
||||
if (Utils.Companion.needsStupidWritePermissions(getContext(), item.getAbsolutePath())) {
|
||||
final DocumentFile document = Utils.Companion.getFileDocument(getContext(), item.getAbsolutePath());
|
||||
final DocumentFile document = Utils.Companion.getFileDocument(getContext(), item.getAbsolutePath(), mConfig.getTreeUri());
|
||||
document.delete();
|
||||
} else {
|
||||
item.delete();
|
||||
|
@ -13,12 +13,10 @@ import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import com.simplemobiletools.filemanager.Constants
|
||||
import com.simplemobiletools.filemanager.R
|
||||
import com.simplemobiletools.filemanager.Utils
|
||||
import com.simplemobiletools.filemanager.dialogs.WritePermissionDialog
|
||||
import com.simplemobiletools.filemanager.fragments.ItemsFragment
|
||||
import com.simplemobiletools.filepicker.dialogs.StoragePickerDialog
|
||||
import com.simplemobiletools.filepicker.extensions.getInternalStoragePath
|
||||
import com.simplemobiletools.filepicker.extensions.getSDCardPath
|
||||
import com.simplemobiletools.filepicker.extensions.*
|
||||
import com.simplemobiletools.filepicker.models.FileDirItem
|
||||
import com.simplemobiletools.filepicker.views.Breadcrumbs
|
||||
import kotlinx.android.synthetic.main.activity_main.*
|
||||
@ -39,7 +37,7 @@ class MainActivity : SimpleActivity(), ItemsFragment.ItemInteractionListener, Br
|
||||
}
|
||||
|
||||
private fun tryInitFileManager() {
|
||||
if (Utils.hasStoragePermission(applicationContext)) {
|
||||
if (hasStoragePermission(applicationContext)) {
|
||||
initRootFileManager()
|
||||
} else {
|
||||
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), STORAGE_PERMISSION)
|
||||
@ -84,7 +82,7 @@ class MainActivity : SimpleActivity(), ItemsFragment.ItemInteractionListener, Br
|
||||
if (breadcrumbs.childCount <= 1) {
|
||||
if (!mWasBackJustPressed) {
|
||||
mWasBackJustPressed = true
|
||||
Utils.showToast(applicationContext, R.string.press_back_again)
|
||||
toast(R.string.press_back_again)
|
||||
Handler().postDelayed({ mWasBackJustPressed = false }, BACK_PRESS_TIMEOUT.toLong())
|
||||
} else {
|
||||
finish()
|
||||
@ -103,7 +101,7 @@ class MainActivity : SimpleActivity(), ItemsFragment.ItemInteractionListener, Br
|
||||
if (grantResults.size > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||
initRootFileManager()
|
||||
} else {
|
||||
Utils.showToast(applicationContext, R.string.no_permissions)
|
||||
toast(R.string.no_permissions)
|
||||
finish()
|
||||
}
|
||||
}
|
||||
@ -134,7 +132,7 @@ class MainActivity : SimpleActivity(), ItemsFragment.ItemInteractionListener, Br
|
||||
}
|
||||
|
||||
fun checkStupidAndroidFiveSDCardWritePermission(pickedPath: String): Boolean {
|
||||
return if (Utils.needsStupidWritePermissions(applicationContext, pickedPath) && mConfig.treeUri.isEmpty()) {
|
||||
return if (applicationContext.needsStupidWritePermissions(pickedPath) && mConfig.treeUri.isEmpty()) {
|
||||
WritePermissionDialog(this, object : WritePermissionDialog.OnWritePermissionListener {
|
||||
override fun onConfirmed() {
|
||||
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
|
||||
|
@ -8,14 +8,10 @@ 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.activities.MainActivity
|
||||
import com.simplemobiletools.filemanager.asynctasks.CopyTask
|
||||
import com.simplemobiletools.filemanager.extensions.isPathOnSD
|
||||
import com.simplemobiletools.filemanager.extensions.rescanItem
|
||||
import com.simplemobiletools.filemanager.extensions.toast
|
||||
import com.simplemobiletools.filepicker.dialogs.FilePickerDialog
|
||||
import com.simplemobiletools.filepicker.extensions.humanizePath
|
||||
import com.simplemobiletools.filepicker.extensions.*
|
||||
import kotlinx.android.synthetic.main.copy_item.view.*
|
||||
import java.io.File
|
||||
|
||||
@ -28,8 +24,8 @@ class CopyDialog(val activity: Activity, val files: List<File>, val copyListener
|
||||
var destinationPath = ""
|
||||
view.source.text = "${context.humanizePath(sourcePath)}/"
|
||||
|
||||
view.destination.setOnClickListener {
|
||||
val config = Config.newInstance(context)
|
||||
view.destination.setOnClickListener {
|
||||
FilePickerDialog(activity, destinationPath, false, config.showHidden, object : FilePickerDialog.OnFilePickerListener {
|
||||
override fun onFail(error: FilePickerDialog.FilePickerResult) {
|
||||
}
|
||||
@ -74,7 +70,7 @@ class CopyDialog(val activity: Activity, val files: List<File>, val copyListener
|
||||
}
|
||||
}
|
||||
|
||||
if (Utils.needsStupidWritePermissions(context, destinationPath) && Config.newInstance(context).treeUri.isEmpty()) {
|
||||
if (context.needsStupidWritePermissions(destinationPath) && config.treeUri.isEmpty()) {
|
||||
WritePermissionDialog(activity, object : WritePermissionDialog.OnWritePermissionListener {
|
||||
override fun onConfirmed() {
|
||||
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
|
||||
@ -96,8 +92,8 @@ class CopyDialog(val activity: Activity, val files: List<File>, val copyListener
|
||||
CopyTask(copyListener, context, true).execute(pair)
|
||||
dismiss()
|
||||
} else {
|
||||
for (f in files) {
|
||||
val destination = File(destinationDir, f.name)
|
||||
for (file in files) {
|
||||
val destination = File(destinationDir, file.name)
|
||||
context.rescanItem(destination)
|
||||
}
|
||||
|
||||
|
@ -5,10 +5,13 @@ import android.support.v7.app.AlertDialog
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.WindowManager
|
||||
import com.simplemobiletools.filemanager.Config
|
||||
import com.simplemobiletools.filemanager.R
|
||||
import com.simplemobiletools.filemanager.Utils
|
||||
import com.simplemobiletools.filemanager.extensions.toast
|
||||
import com.simplemobiletools.filemanager.extensions.isValidFilename
|
||||
import com.simplemobiletools.filemanager.extensions.value
|
||||
import com.simplemobiletools.filepicker.extensions.getFileDocument
|
||||
import com.simplemobiletools.filepicker.extensions.needsStupidWritePermissions
|
||||
import com.simplemobiletools.filepicker.extensions.toast
|
||||
import kotlinx.android.synthetic.main.create_new.view.*
|
||||
import java.io.File
|
||||
import java.io.IOException
|
||||
@ -29,7 +32,7 @@ class CreateNewItemDialog(val context: Context, val path: String, val listener:
|
||||
val name = view.item_name.value
|
||||
if (name.isEmpty()) {
|
||||
context.toast(R.string.empty_name)
|
||||
} else if (Utils.isNameValid(name)) {
|
||||
} else if (name.isValidFilename()) {
|
||||
val file = File(path, name)
|
||||
if (file.exists()) {
|
||||
context.toast(R.string.name_taken)
|
||||
@ -53,8 +56,8 @@ class CreateNewItemDialog(val context: Context, val path: String, val listener:
|
||||
}
|
||||
|
||||
private fun createDirectory(file: File, alertDialog: AlertDialog): Boolean {
|
||||
return if (Utils.needsStupidWritePermissions(context, path)) {
|
||||
val documentFile = Utils.getFileDocument(context, file.absolutePath)
|
||||
return if (context.needsStupidWritePermissions(path)) {
|
||||
val documentFile = context.getFileDocument(file.absolutePath, Config.newInstance(context).treeUri)
|
||||
documentFile.createDirectory(file.name)
|
||||
success(alertDialog)
|
||||
true
|
||||
@ -71,8 +74,8 @@ class CreateNewItemDialog(val context: Context, val path: String, val listener:
|
||||
|
||||
private fun createFile(file: File, alertDialog: AlertDialog): Boolean {
|
||||
try {
|
||||
if (Utils.needsStupidWritePermissions(context, path)) {
|
||||
val documentFile = Utils.getFileDocument(context, file.absolutePath)
|
||||
if (context.needsStupidWritePermissions(path)) {
|
||||
val documentFile = context.getFileDocument(file.absolutePath, Config.newInstance(context).treeUri)
|
||||
documentFile.createFile("", file.name)
|
||||
success(alertDialog)
|
||||
return true
|
||||
|
@ -1,15 +1,17 @@
|
||||
package com.simplemobiletools.filemanager.dialogs
|
||||
|
||||
import android.content.Context
|
||||
import android.media.MediaScannerConnection
|
||||
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.isValidFilename
|
||||
import com.simplemobiletools.filemanager.extensions.value
|
||||
import com.simplemobiletools.filepicker.extensions.getFileDocument
|
||||
import com.simplemobiletools.filepicker.extensions.needsStupidWritePermissions
|
||||
import com.simplemobiletools.filepicker.extensions.rescanItem
|
||||
import com.simplemobiletools.filepicker.extensions.toast
|
||||
import com.simplemobiletools.filepicker.models.FileDirItem
|
||||
import kotlinx.android.synthetic.main.rename_item.view.*
|
||||
import java.io.File
|
||||
@ -30,7 +32,7 @@ class RenameItemDialog(val context: Context, val path: String, val item: FileDir
|
||||
show()
|
||||
getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener({
|
||||
val newName = view.item_name.value
|
||||
if (Utils.isNameValid(newName)) {
|
||||
if (newName.isValidFilename()) {
|
||||
val currFile = File(path, item.name)
|
||||
val newFile = File(path, newName)
|
||||
|
||||
@ -39,8 +41,8 @@ class RenameItemDialog(val context: Context, val path: String, val item: FileDir
|
||||
return@setOnClickListener
|
||||
}
|
||||
|
||||
if (Utils.needsStupidWritePermissions(context, path)) {
|
||||
val document = Utils.getFileDocument(context, currFile.absolutePath)
|
||||
if (context.needsStupidWritePermissions(path)) {
|
||||
val document = context.getFileDocument(currFile.absolutePath, Config.newInstance(context).treeUri)
|
||||
if (document.canWrite())
|
||||
document.renameTo(newName)
|
||||
sendSuccess(currFile, newFile)
|
||||
@ -61,8 +63,8 @@ class RenameItemDialog(val context: Context, val path: String, val item: FileDir
|
||||
}
|
||||
|
||||
private fun sendSuccess(currFile: File, newFile: File) {
|
||||
context.rescanItem(currFile)
|
||||
context.rescanItem(newFile)
|
||||
MediaScannerConnection.scanFile(context, arrayOf(currFile.absolutePath, newFile.absolutePath), null, null)
|
||||
listener.onSuccess()
|
||||
}
|
||||
|
||||
|
@ -1,21 +0,0 @@
|
||||
package com.simplemobiletools.filemanager.extensions
|
||||
|
||||
import android.content.Context
|
||||
import android.media.MediaScannerConnection
|
||||
import android.widget.Toast
|
||||
import com.simplemobiletools.filepicker.extensions.getSDCardPath
|
||||
import java.io.File
|
||||
|
||||
fun Context.toast(id: Int) = Toast.makeText(this, resources.getString(id), Toast.LENGTH_SHORT).show()
|
||||
|
||||
fun Context.rescanItem(item: File) {
|
||||
if (item.isDirectory) {
|
||||
for (child in item.listFiles()) {
|
||||
rescanItem(child)
|
||||
}
|
||||
}
|
||||
|
||||
MediaScannerConnection.scanFile(this, arrayOf(item.absolutePath), null, null)
|
||||
}
|
||||
|
||||
fun Context.isPathOnSD(path: String) = path.startsWith(getSDCardPath())
|
@ -0,0 +1,9 @@
|
||||
package com.simplemobiletools.filemanager.extensions
|
||||
|
||||
import java.util.regex.Pattern
|
||||
|
||||
fun String.isValidFilename(): Boolean {
|
||||
val pattern = Pattern.compile("^[-_.A-Za-z0-9()#& ]+$")
|
||||
val matcher = pattern.matcher(this)
|
||||
return matcher.matches()
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user