Skip to content

Commit 1d8c456

Browse files
committed
move a couple helper function to extensions
1 parent 0770c95 commit 1d8c456

File tree

9 files changed

+59
-100
lines changed

9 files changed

+59
-100
lines changed
Lines changed: 4 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,9 @@
11
package com.simplemobiletools.filemanager
22

3-
import android.Manifest
43
import android.content.Context
5-
import android.content.pm.PackageManager
6-
import android.net.Uri
7-
import android.os.Build
8-
import android.support.v4.content.ContextCompat
9-
import android.support.v4.provider.DocumentFile
10-
import com.simplemobiletools.filemanager.extensions.isPathOnSD
11-
import com.simplemobiletools.filepicker.extensions.getSDCardPath
4+
import com.simplemobiletools.filepicker.extensions.getFileDocument
5+
import com.simplemobiletools.filepicker.extensions.needsStupidWritePermissions
126
import com.simplemobiletools.filepicker.extensions.toast
13-
import java.util.regex.Pattern
147

158
class Utils {
169
companion object {
@@ -26,34 +19,8 @@ class Utils {
2619
context.toast(resId)
2720
}
2821

29-
fun hasStoragePermission(cxt: Context): Boolean {
30-
return ContextCompat.checkSelfPermission(cxt, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
31-
}
32-
33-
fun isNameValid(name: String): Boolean {
34-
val pattern = Pattern.compile("^[-_.A-Za-z0-9()#& ]+$")
35-
val matcher = pattern.matcher(name)
36-
return matcher.matches()
37-
}
38-
39-
fun needsStupidWritePermissions(context: Context, path: String) = isPathOnSD(context, path) && isKitkat() && !context.getSDCardPath().isEmpty()
22+
fun needsStupidWritePermissions(context: Context, path: String) = context.needsStupidWritePermissions(path)
4023

41-
fun isPathOnSD(context: Context, path: String): Boolean {
42-
return context.isPathOnSD(path)
43-
}
44-
45-
fun isKitkat() = Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT
46-
47-
fun getFileDocument(context: Context, path: String): DocumentFile {
48-
val relativePath = path.substring(context.getSDCardPath().length + 1)
49-
var document = DocumentFile.fromTreeUri(context, Uri.parse(Config.newInstance(context).treeUri))
50-
val parts = relativePath.split("/")
51-
for (part in parts) {
52-
val currDocument = document.findFile(part)
53-
if (currDocument != null)
54-
document = currDocument
55-
}
56-
return document
57-
}
24+
fun getFileDocument(context: Context, path: String, treeUri: String) = context.getFileDocument(path, treeUri)
5825
}
5926
}

app/src/main/java/com/simplemobiletools/filemanager/asynctasks/CopyTask.kt

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@ import android.content.Context
44
import android.os.AsyncTask
55
import android.support.v4.util.Pair
66
import android.util.Log
7-
import com.simplemobiletools.filemanager.Utils
8-
import com.simplemobiletools.filemanager.extensions.rescanItem
7+
import com.simplemobiletools.filemanager.Config
98
import com.simplemobiletools.filemanager.fragments.ItemsFragment
9+
import com.simplemobiletools.filepicker.extensions.getFileDocument
10+
import com.simplemobiletools.filepicker.extensions.needsStupidWritePermissions
11+
import com.simplemobiletools.filepicker.extensions.rescanItem
1012
import java.io.*
1113
import java.lang.ref.WeakReference
1214
import java.util.*
@@ -15,10 +17,12 @@ class CopyTask(listener: CopyTask.CopyListener, val context: Context, val delete
1517
private val TAG = CopyTask::class.java.simpleName
1618
private var mListener: WeakReference<CopyListener>? = null
1719
private var mMovedFiles: ArrayList<File>
20+
private var mConfig: Config
1821

1922
init {
2023
mListener = WeakReference(listener)
2124
mMovedFiles = arrayListOf()
25+
mConfig = Config.newInstance(context)
2226
}
2327

2428
override fun doInBackground(vararg params: Pair<List<File>, File>): Boolean? {
@@ -39,8 +43,8 @@ class CopyTask(listener: CopyTask.CopyListener, val context: Context, val delete
3943

4044
if (deleteAfterCopy) {
4145
for (file in mMovedFiles) {
42-
if (Utils.needsStupidWritePermissions(context, file.absolutePath)) {
43-
Utils.getFileDocument(context, file.absolutePath).delete()
46+
if (context.needsStupidWritePermissions(file.absolutePath)) {
47+
context.getFileDocument(file.absolutePath, mConfig.treeUri)
4448
} else {
4549
file.delete()
4650
}
@@ -60,8 +64,8 @@ class CopyTask(listener: CopyTask.CopyListener, val context: Context, val delete
6064

6165
private fun copyDirectory(source: File, destination: File) {
6266
if (!destination.exists()) {
63-
if (Utils.needsStupidWritePermissions(context, destination.absolutePath)) {
64-
val document = Utils.getFileDocument(context, destination.absolutePath)
67+
if (context.needsStupidWritePermissions(destination.absolutePath)) {
68+
val document = context.getFileDocument(destination.absolutePath, mConfig.treeUri)
6569
document.createDirectory(destination.name)
6670
} else if (!destination.mkdirs()) {
6771
throw IOException("Could not create dir ${destination.absolutePath}")
@@ -71,11 +75,11 @@ class CopyTask(listener: CopyTask.CopyListener, val context: Context, val delete
7175
val children = source.list()
7276
for (child in children) {
7377
val newFile = File(source, child)
74-
if (Utils.needsStupidWritePermissions(context, destination.absolutePath)) {
78+
if (context.needsStupidWritePermissions(destination.absolutePath)) {
7579
if (newFile.isDirectory) {
7680
copyDirectory(newFile, File(destination, child))
7781
} else {
78-
var document = Utils.getFileDocument(context, destination.absolutePath)
82+
var document = context.getFileDocument(destination.absolutePath, mConfig.treeUri)
7983
document = document.createFile("", child)
8084

8185
val inputStream = FileInputStream(newFile)
@@ -98,9 +102,10 @@ class CopyTask(listener: CopyTask.CopyListener, val context: Context, val delete
98102

99103
val inputStream = FileInputStream(source)
100104
val out: OutputStream?
101-
if (Utils.needsStupidWritePermissions(context, destination.absolutePath)) {
102-
var document = Utils.getFileDocument(context, destination.absolutePath)
105+
if (context.needsStupidWritePermissions(destination.absolutePath)) {
106+
var document = context.getFileDocument(destination.absolutePath, mConfig.treeUri)
103107
document = document.createFile("", destination.name)
108+
104109
out = context.contentResolver.openOutputStream(document.uri)
105110
} else {
106111
out = FileOutputStream(destination)

app/src/main/java/com/simplemobiletools/filemanager/fragments/ItemsFragment.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -472,7 +472,7 @@ private void deleteItem(File item) {
472472
}
473473

474474
if (Utils.Companion.needsStupidWritePermissions(getContext(), item.getAbsolutePath())) {
475-
final DocumentFile document = Utils.Companion.getFileDocument(getContext(), item.getAbsolutePath());
475+
final DocumentFile document = Utils.Companion.getFileDocument(getContext(), item.getAbsolutePath(), mConfig.getTreeUri());
476476
document.delete();
477477
} else {
478478
item.delete();

app/src/main/kotlin/com/simplemobiletools/filemanager/activities/MainActivity.kt

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,10 @@ import android.view.Menu
1313
import android.view.MenuItem
1414
import com.simplemobiletools.filemanager.Constants
1515
import com.simplemobiletools.filemanager.R
16-
import com.simplemobiletools.filemanager.Utils
1716
import com.simplemobiletools.filemanager.dialogs.WritePermissionDialog
1817
import com.simplemobiletools.filemanager.fragments.ItemsFragment
1918
import com.simplemobiletools.filepicker.dialogs.StoragePickerDialog
20-
import com.simplemobiletools.filepicker.extensions.getInternalStoragePath
21-
import com.simplemobiletools.filepicker.extensions.getSDCardPath
19+
import com.simplemobiletools.filepicker.extensions.*
2220
import com.simplemobiletools.filepicker.models.FileDirItem
2321
import com.simplemobiletools.filepicker.views.Breadcrumbs
2422
import kotlinx.android.synthetic.main.activity_main.*
@@ -39,7 +37,7 @@ class MainActivity : SimpleActivity(), ItemsFragment.ItemInteractionListener, Br
3937
}
4038

4139
private fun tryInitFileManager() {
42-
if (Utils.hasStoragePermission(applicationContext)) {
40+
if (hasStoragePermission(applicationContext)) {
4341
initRootFileManager()
4442
} else {
4543
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), STORAGE_PERMISSION)
@@ -84,7 +82,7 @@ class MainActivity : SimpleActivity(), ItemsFragment.ItemInteractionListener, Br
8482
if (breadcrumbs.childCount <= 1) {
8583
if (!mWasBackJustPressed) {
8684
mWasBackJustPressed = true
87-
Utils.showToast(applicationContext, R.string.press_back_again)
85+
toast(R.string.press_back_again)
8886
Handler().postDelayed({ mWasBackJustPressed = false }, BACK_PRESS_TIMEOUT.toLong())
8987
} else {
9088
finish()
@@ -103,7 +101,7 @@ class MainActivity : SimpleActivity(), ItemsFragment.ItemInteractionListener, Br
103101
if (grantResults.size > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
104102
initRootFileManager()
105103
} else {
106-
Utils.showToast(applicationContext, R.string.no_permissions)
104+
toast(R.string.no_permissions)
107105
finish()
108106
}
109107
}
@@ -134,7 +132,7 @@ class MainActivity : SimpleActivity(), ItemsFragment.ItemInteractionListener, Br
134132
}
135133

136134
fun checkStupidAndroidFiveSDCardWritePermission(pickedPath: String): Boolean {
137-
return if (Utils.needsStupidWritePermissions(applicationContext, pickedPath) && mConfig.treeUri.isEmpty()) {
135+
return if (applicationContext.needsStupidWritePermissions(pickedPath) && mConfig.treeUri.isEmpty()) {
138136
WritePermissionDialog(this, object : WritePermissionDialog.OnWritePermissionListener {
139137
override fun onConfirmed() {
140138
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)

app/src/main/kotlin/com/simplemobiletools/filemanager/dialogs/CopyDialog.kt

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,10 @@ import android.view.LayoutInflater
88
import android.view.WindowManager
99
import com.simplemobiletools.filemanager.Config
1010
import com.simplemobiletools.filemanager.R
11-
import com.simplemobiletools.filemanager.Utils
1211
import com.simplemobiletools.filemanager.activities.MainActivity
1312
import com.simplemobiletools.filemanager.asynctasks.CopyTask
14-
import com.simplemobiletools.filemanager.extensions.isPathOnSD
15-
import com.simplemobiletools.filemanager.extensions.rescanItem
16-
import com.simplemobiletools.filemanager.extensions.toast
1713
import com.simplemobiletools.filepicker.dialogs.FilePickerDialog
18-
import com.simplemobiletools.filepicker.extensions.humanizePath
14+
import com.simplemobiletools.filepicker.extensions.*
1915
import kotlinx.android.synthetic.main.copy_item.view.*
2016
import java.io.File
2117

@@ -28,8 +24,8 @@ class CopyDialog(val activity: Activity, val files: List<File>, val copyListener
2824
var destinationPath = ""
2925
view.source.text = "${context.humanizePath(sourcePath)}/"
3026

27+
val config = Config.newInstance(context)
3128
view.destination.setOnClickListener {
32-
val config = Config.newInstance(context)
3329
FilePickerDialog(activity, destinationPath, false, config.showHidden, object : FilePickerDialog.OnFilePickerListener {
3430
override fun onFail(error: FilePickerDialog.FilePickerResult) {
3531
}
@@ -74,7 +70,7 @@ class CopyDialog(val activity: Activity, val files: List<File>, val copyListener
7470
}
7571
}
7672

77-
if (Utils.needsStupidWritePermissions(context, destinationPath) && Config.newInstance(context).treeUri.isEmpty()) {
73+
if (context.needsStupidWritePermissions(destinationPath) && config.treeUri.isEmpty()) {
7874
WritePermissionDialog(activity, object : WritePermissionDialog.OnWritePermissionListener {
7975
override fun onConfirmed() {
8076
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
@@ -96,8 +92,8 @@ class CopyDialog(val activity: Activity, val files: List<File>, val copyListener
9692
CopyTask(copyListener, context, true).execute(pair)
9793
dismiss()
9894
} else {
99-
for (f in files) {
100-
val destination = File(destinationDir, f.name)
95+
for (file in files) {
96+
val destination = File(destinationDir, file.name)
10197
context.rescanItem(destination)
10298
}
10399

app/src/main/kotlin/com/simplemobiletools/filemanager/dialogs/CreateNewItemDialog.kt

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,13 @@ import android.support.v7.app.AlertDialog
55
import android.view.LayoutInflater
66
import android.view.View
77
import android.view.WindowManager
8+
import com.simplemobiletools.filemanager.Config
89
import com.simplemobiletools.filemanager.R
9-
import com.simplemobiletools.filemanager.Utils
10-
import com.simplemobiletools.filemanager.extensions.toast
10+
import com.simplemobiletools.filemanager.extensions.isValidFilename
1111
import com.simplemobiletools.filemanager.extensions.value
12+
import com.simplemobiletools.filepicker.extensions.getFileDocument
13+
import com.simplemobiletools.filepicker.extensions.needsStupidWritePermissions
14+
import com.simplemobiletools.filepicker.extensions.toast
1215
import kotlinx.android.synthetic.main.create_new.view.*
1316
import java.io.File
1417
import java.io.IOException
@@ -29,7 +32,7 @@ class CreateNewItemDialog(val context: Context, val path: String, val listener:
2932
val name = view.item_name.value
3033
if (name.isEmpty()) {
3134
context.toast(R.string.empty_name)
32-
} else if (Utils.isNameValid(name)) {
35+
} else if (name.isValidFilename()) {
3336
val file = File(path, name)
3437
if (file.exists()) {
3538
context.toast(R.string.name_taken)
@@ -53,8 +56,8 @@ class CreateNewItemDialog(val context: Context, val path: String, val listener:
5356
}
5457

5558
private fun createDirectory(file: File, alertDialog: AlertDialog): Boolean {
56-
return if (Utils.needsStupidWritePermissions(context, path)) {
57-
val documentFile = Utils.getFileDocument(context, file.absolutePath)
59+
return if (context.needsStupidWritePermissions(path)) {
60+
val documentFile = context.getFileDocument(file.absolutePath, Config.newInstance(context).treeUri)
5861
documentFile.createDirectory(file.name)
5962
success(alertDialog)
6063
true
@@ -71,8 +74,8 @@ class CreateNewItemDialog(val context: Context, val path: String, val listener:
7174

7275
private fun createFile(file: File, alertDialog: AlertDialog): Boolean {
7376
try {
74-
if (Utils.needsStupidWritePermissions(context, path)) {
75-
val documentFile = Utils.getFileDocument(context, file.absolutePath)
77+
if (context.needsStupidWritePermissions(path)) {
78+
val documentFile = context.getFileDocument(file.absolutePath, Config.newInstance(context).treeUri)
7679
documentFile.createFile("", file.name)
7780
success(alertDialog)
7881
return true

app/src/main/kotlin/com/simplemobiletools/filemanager/dialogs/RenameItemDialog.kt

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
package com.simplemobiletools.filemanager.dialogs
22

33
import android.content.Context
4-
import android.media.MediaScannerConnection
54
import android.support.v7.app.AlertDialog
65
import android.view.LayoutInflater
76
import android.view.WindowManager
7+
import com.simplemobiletools.filemanager.Config
88
import com.simplemobiletools.filemanager.R
9-
import com.simplemobiletools.filemanager.Utils
10-
import com.simplemobiletools.filemanager.extensions.rescanItem
11-
import com.simplemobiletools.filemanager.extensions.toast
9+
import com.simplemobiletools.filemanager.extensions.isValidFilename
1210
import com.simplemobiletools.filemanager.extensions.value
11+
import com.simplemobiletools.filepicker.extensions.getFileDocument
12+
import com.simplemobiletools.filepicker.extensions.needsStupidWritePermissions
13+
import com.simplemobiletools.filepicker.extensions.rescanItem
14+
import com.simplemobiletools.filepicker.extensions.toast
1315
import com.simplemobiletools.filepicker.models.FileDirItem
1416
import kotlinx.android.synthetic.main.rename_item.view.*
1517
import java.io.File
@@ -30,7 +32,7 @@ class RenameItemDialog(val context: Context, val path: String, val item: FileDir
3032
show()
3133
getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener({
3234
val newName = view.item_name.value
33-
if (Utils.isNameValid(newName)) {
35+
if (newName.isValidFilename()) {
3436
val currFile = File(path, item.name)
3537
val newFile = File(path, newName)
3638

@@ -39,8 +41,8 @@ class RenameItemDialog(val context: Context, val path: String, val item: FileDir
3941
return@setOnClickListener
4042
}
4143

42-
if (Utils.needsStupidWritePermissions(context, path)) {
43-
val document = Utils.getFileDocument(context, currFile.absolutePath)
44+
if (context.needsStupidWritePermissions(path)) {
45+
val document = context.getFileDocument(currFile.absolutePath, Config.newInstance(context).treeUri)
4446
if (document.canWrite())
4547
document.renameTo(newName)
4648
sendSuccess(currFile, newFile)
@@ -61,8 +63,8 @@ class RenameItemDialog(val context: Context, val path: String, val item: FileDir
6163
}
6264

6365
private fun sendSuccess(currFile: File, newFile: File) {
66+
context.rescanItem(currFile)
6467
context.rescanItem(newFile)
65-
MediaScannerConnection.scanFile(context, arrayOf(currFile.absolutePath, newFile.absolutePath), null, null)
6668
listener.onSuccess()
6769
}
6870

app/src/main/kotlin/com/simplemobiletools/filemanager/extensions/context.kt

Lines changed: 0 additions & 21 deletions
This file was deleted.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.simplemobiletools.filemanager.extensions
2+
3+
import java.util.regex.Pattern
4+
5+
fun String.isValidFilename(): Boolean {
6+
val pattern = Pattern.compile("^[-_.A-Za-z0-9()#& ]+$")
7+
val matcher = pattern.matcher(this)
8+
return matcher.matches()
9+
}

0 commit comments

Comments
 (0)