Skip to content

Commit 2057c14

Browse files
committed
check the new permission at copying to SD card
1 parent 62a6654 commit 2057c14

File tree

2 files changed

+30
-11
lines changed

2 files changed

+30
-11
lines changed

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

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import kotlinx.android.synthetic.main.activity_main.*
2525
import java.io.File
2626

2727
class MainActivity : SimpleActivity(), ItemsFragment.ItemInteractionListener, Breadcrumbs.BreadcrumbsListener {
28-
val OPEN_DOCUMENT_TREE = 1
2928
var mBasePath = getInternalStoragePath()
3029

3130
override fun onCreate(savedInstanceState: Bundle?) {
@@ -138,39 +137,47 @@ class MainActivity : SimpleActivity(), ItemsFragment.ItemInteractionListener, Br
138137
fun checkStupidAndroidFiveSDCardWritePermission(pickedPath: String): Boolean {
139138
val file = File(pickedPath)
140139
return if (!file.canWrite() && Utils.needsStupidWritePermissions(applicationContext, pickedPath) && mConfig.treeUri.isEmpty()) {
141-
WritePermissionDialog(this, object: WritePermissionDialog.OnWritePermissionListener {
140+
WritePermissionDialog(this, object : WritePermissionDialog.OnWritePermissionListener {
142141
override fun onConfirmed() {
143142
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
144-
startActivityForResult(intent, OPEN_DOCUMENT_TREE)
143+
startActivityForResult(intent, OPEN_DOCUMENT_TREE_AND_CHANGE_PATH)
145144
}
146145
})
147146
false
148147
} else
149148
true
150149
}
151150

152-
@TargetApi(Build.VERSION_CODES.KITKAT)
153151
public override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
154152
super.onActivityResult(requestCode, resultCode, resultData)
155-
if (requestCode == OPEN_DOCUMENT_TREE) {
153+
if (requestCode == OPEN_DOCUMENT_TREE_AND_CHANGE_PATH) {
156154
if (resultCode == Activity.RESULT_OK && resultData != null) {
157-
val treeUri = resultData.data
158-
mConfig.treeUri = resultData.data.toString()
159-
160-
val takeFlags = Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION
161-
contentResolver.takePersistableUriPermission(treeUri, takeFlags)
162-
155+
saveTreeUri(resultData)
163156
changePath(getSDCardPath())
164157
} else {
165158
changePath(getInternalStoragePath())
166159
}
160+
} else if (requestCode == OPEN_DOCUMENT_TREE && resultCode == Activity.RESULT_OK && resultData != null) {
161+
saveTreeUri(resultData)
167162
}
168163
}
169164

165+
@TargetApi(Build.VERSION_CODES.KITKAT)
166+
private fun saveTreeUri(resultData: Intent) {
167+
val treeUri = resultData.data
168+
mConfig.treeUri = resultData.data.toString()
169+
170+
val takeFlags = Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION
171+
contentResolver.takePersistableUriPermission(treeUri, takeFlags)
172+
}
173+
170174
companion object {
171175
private val STORAGE_PERMISSION = 1
172176
private val BACK_PRESS_TIMEOUT = 5000
173177

178+
val OPEN_DOCUMENT_TREE_AND_CHANGE_PATH = 1
179+
val OPEN_DOCUMENT_TREE = 2
180+
174181
private var mWasBackJustPressed: Boolean = false
175182
}
176183
}

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.simplemobiletools.filemanager.dialogs
22

33
import android.app.Activity
4+
import android.content.Intent
45
import android.support.v4.util.Pair
56
import android.support.v7.app.AlertDialog
67
import android.view.LayoutInflater
@@ -9,6 +10,7 @@ import android.widget.Toast
910
import com.simplemobiletools.filemanager.Config
1011
import com.simplemobiletools.filemanager.R
1112
import com.simplemobiletools.filemanager.Utils
13+
import com.simplemobiletools.filemanager.activities.MainActivity
1214
import com.simplemobiletools.filemanager.asynctasks.CopyTask
1315
import com.simplemobiletools.filemanager.extensions.rescanItem
1416
import com.simplemobiletools.filemanager.extensions.toast
@@ -70,6 +72,16 @@ class CopyDialog(val activity: Activity, val files: List<File>, val path: String
7072
}
7173
}
7274

75+
if (Utils.needsStupidWritePermissions(context, destinationPath) && Config.newInstance(context).treeUri.isEmpty()) {
76+
WritePermissionDialog(activity, object: WritePermissionDialog.OnWritePermissionListener {
77+
override fun onConfirmed() {
78+
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
79+
activity.startActivityForResult(intent, MainActivity.OPEN_DOCUMENT_TREE)
80+
}
81+
})
82+
return@setOnClickListener
83+
}
84+
7385
if (view.dialog_radio_group.checkedRadioButtonId == R.id.dialog_radio_copy) {
7486
context.toast(R.string.copying)
7587
val pair = Pair<List<File>, File>(files, destinationDir)

0 commit comments

Comments
 (0)