Skip to content

Commit 3c0cd4f

Browse files
committed
adding FileProvider intent handling
1 parent 2e16d02 commit 3c0cd4f

File tree

6 files changed

+39
-9
lines changed

6 files changed

+39
-9
lines changed

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ android {
3737
}
3838

3939
dependencies {
40-
compile 'com.simplemobiletools:commons:2.33.1'
40+
compile 'com.simplemobiletools:commons:2.33.2'
4141
compile 'com.bignerdranch.android:recyclerview-multiselect:0.2'
4242
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
4343

app/src/main/AndroidManifest.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,5 +73,15 @@
7373
android:name="com.simplemobiletools.commons.activities.CustomizationActivity"
7474
android:label="@string/customize_colors"
7575
android:parentActivityName=".activities.SettingsActivity"/>
76+
77+
<provider
78+
android:name="android.support.v4.content.FileProvider"
79+
android:authorities="${applicationId}.provider"
80+
android:exported="false"
81+
android:grantUriPermissions="true">
82+
<meta-data
83+
android:name="android.support.FILE_PROVIDER_PATHS"
84+
android:resource="@xml/provider_paths"/>
85+
</provider>
7686
</application>
7787
</manifest>

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package com.simplemobiletools.filemanager.activities
33
import android.app.Activity
44
import android.content.ClipData
55
import android.content.Intent
6-
import android.net.Uri
76
import android.os.Bundle
87
import android.os.Handler
98
import android.view.Menu
@@ -223,16 +222,16 @@ class MainActivity : SimpleActivity() {
223222

224223
fun pickedPath(path: String) {
225224
val resultIntent = Intent()
226-
val uri = Uri.fromFile(File(path))
225+
val uri = getFilePublicUri(File(path), BuildConfig.APPLICATION_ID)
227226
val type = path.getMimeTypeFromPath()
228227
resultIntent.setDataAndTypeAndNormalize(uri, type)
229-
resultIntent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION
228+
resultIntent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
230229
setResult(Activity.RESULT_OK, resultIntent)
231230
finish()
232231
}
233232

234233
fun pickedPaths(paths: ArrayList<String>) {
235-
val uris = paths.map { Uri.fromFile(File(it)) } as ArrayList
234+
val uris = paths.map { getFilePublicUri(File(it), BuildConfig.APPLICATION_ID) } as ArrayList
236235
val clipData = ClipData("Attachment", arrayOf(uris.getMimeType()), ClipData.Item(uris.removeAt(0)))
237236

238237
uris.forEach {

app/src/main/kotlin/com/simplemobiletools/filemanager/adapters/ItemsAdapter.kt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import android.content.Intent
44
import android.graphics.drawable.Drawable
55
import android.net.Uri
66
import android.os.Build
7+
import android.os.TransactionTooLargeException
78
import android.support.v7.view.ActionMode
89
import android.support.v7.widget.RecyclerView
910
import android.util.SparseArray
@@ -21,6 +22,7 @@ import com.simplemobiletools.commons.dialogs.PropertiesDialog
2122
import com.simplemobiletools.commons.dialogs.RenameItemDialog
2223
import com.simplemobiletools.commons.extensions.*
2324
import com.simplemobiletools.commons.models.FileDirItem
25+
import com.simplemobiletools.filemanager.BuildConfig
2426
import com.simplemobiletools.filemanager.R
2527
import com.simplemobiletools.filemanager.activities.SimpleActivity
2628
import com.simplemobiletools.filemanager.dialogs.CompressAsDialog
@@ -54,13 +56,14 @@ class ItemsAdapter(val activity: SimpleActivity, var mItems: MutableList<FileDir
5456
fun toggleItemSelection(select: Boolean, pos: Int) {
5557
if (select) {
5658
if (itemViews[pos] != null) {
57-
itemViews[pos].item_frame?.isSelected = select
5859
selectedPositions.add(pos)
5960
}
6061
} else {
6162
selectedPositions.remove(pos)
6263
}
6364

65+
itemViews[pos]?.item_frame?.isSelected = select
66+
6467
if (selectedPositions.isEmpty()) {
6568
actMode?.finish()
6669
return
@@ -191,6 +194,8 @@ class ItemsAdapter(val activity: SimpleActivity, var mItems: MutableList<FileDir
191194

192195
try {
193196
activity.startActivity(Intent.createChooser(this, shareTitle))
197+
} catch (e: TransactionTooLargeException) {
198+
activity.toast(R.string.maximum_share_reached)
194199
} catch (exception: Exception) {
195200
activity.showErrorToast(exception.cause.toString())
196201
}
@@ -203,7 +208,7 @@ class ItemsAdapter(val activity: SimpleActivity, var mItems: MutableList<FileDir
203208
addFileUris(it, uris)
204209
}
205210
} else {
206-
uris.add(Uri.fromFile(file))
211+
uris.add(activity.getFilePublicUri(file, BuildConfig.APPLICATION_ID))
207212
}
208213
}
209214

app/src/main/kotlin/com/simplemobiletools/filemanager/fragments/ItemsFragment.kt

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,11 @@ import android.view.View
1313
import android.view.ViewGroup
1414
import com.simplemobiletools.commons.dialogs.StoragePickerDialog
1515
import com.simplemobiletools.commons.extensions.*
16+
import com.simplemobiletools.commons.helpers.REAL_FILE_PATH
1617
import com.simplemobiletools.commons.models.FileDirItem
1718
import com.simplemobiletools.commons.views.Breadcrumbs
1819
import com.simplemobiletools.commons.views.MyScalableRecyclerView
20+
import com.simplemobiletools.filemanager.BuildConfig
1921
import com.simplemobiletools.filemanager.R
2022
import com.simplemobiletools.filemanager.activities.MainActivity
2123
import com.simplemobiletools.filemanager.activities.SimpleActivity
@@ -231,9 +233,16 @@ class ItemsFragment : Fragment(), ItemsAdapter.ItemOperationsListener, Breadcrum
231233
val file = File(path)
232234
val mimeType = path.getMimeTypeFromPath()
233235

236+
val uri = context.getFilePublicUri(file, BuildConfig.APPLICATION_ID)
234237
Intent(Intent.ACTION_VIEW).apply {
235-
setDataAndType(Uri.fromFile(file), mimeType)
238+
setDataAndType(uri, mimeType)
236239
flags = Intent.FLAG_ACTIVITY_NEW_TASK
240+
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
241+
242+
if (context.isNougatPlus()) {
243+
putExtra(REAL_FILE_PATH, Uri.fromFile(file))
244+
}
245+
237246
try {
238247
startActivity(this)
239248
} catch (e: ActivityNotFoundException) {
@@ -245,8 +254,10 @@ class ItemsFragment : Fragment(), ItemsAdapter.ItemOperationsListener, Breadcrum
245254
}
246255

247256
private fun tryGenericMimeType(intent: Intent, mimeType: String, file: File): Boolean {
257+
val uri = context.getFilePublicUri(file, BuildConfig.APPLICATION_ID)
248258
val genericMimeType = getGenericMimeType(mimeType)
249-
intent.setDataAndType(Uri.fromFile(file), genericMimeType)
259+
intent.setDataAndType(uri, genericMimeType)
260+
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
250261
return try {
251262
startActivity(intent)
252263
true
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<paths>
3+
<external-path name="external_files" path="."/>
4+
<root-path name="external_files" path="/storage/" />
5+
</paths>

0 commit comments

Comments
 (0)