mirror of
https://github.com/SimpleMobileTools/Simple-File-Manager.git
synced 2025-02-03 11:57:49 +01:00
reuse some third party intents from the Commons library
This commit is contained in:
parent
9b675ba6d4
commit
f7fc5c06c9
@ -37,7 +37,7 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compile 'com.simplemobiletools:commons:2.33.2'
|
compile 'com.simplemobiletools:commons:2.33.8'
|
||||||
compile 'com.bignerdranch.android:recyclerview-multiselect:0.2'
|
compile 'com.bignerdranch.android:recyclerview-multiselect:0.2'
|
||||||
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
||||||
|
|
||||||
|
@ -1,10 +1,8 @@
|
|||||||
package com.simplemobiletools.filemanager.adapters
|
package com.simplemobiletools.filemanager.adapters
|
||||||
|
|
||||||
import android.content.Intent
|
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.TransactionTooLargeException
|
|
||||||
import android.support.v7.view.ActionMode
|
import android.support.v7.view.ActionMode
|
||||||
import android.support.v7.widget.RecyclerView
|
import android.support.v7.widget.RecyclerView
|
||||||
import android.util.SparseArray
|
import android.util.SparseArray
|
||||||
@ -29,6 +27,7 @@ import com.simplemobiletools.filemanager.dialogs.CompressAsDialog
|
|||||||
import com.simplemobiletools.filemanager.extensions.config
|
import com.simplemobiletools.filemanager.extensions.config
|
||||||
import com.simplemobiletools.filemanager.extensions.isPathOnRoot
|
import com.simplemobiletools.filemanager.extensions.isPathOnRoot
|
||||||
import com.simplemobiletools.filemanager.extensions.isZipFile
|
import com.simplemobiletools.filemanager.extensions.isZipFile
|
||||||
|
import com.simplemobiletools.filemanager.extensions.shareUris
|
||||||
import com.stericson.RootTools.RootTools
|
import com.stericson.RootTools.RootTools
|
||||||
import kotlinx.android.synthetic.main.list_item.view.*
|
import kotlinx.android.synthetic.main.list_item.view.*
|
||||||
import java.io.Closeable
|
import java.io.Closeable
|
||||||
@ -171,35 +170,9 @@ class ItemsAdapter(val activity: SimpleActivity, var mItems: MutableList<FileDir
|
|||||||
val selectedItems = getSelectedMedia()
|
val selectedItems = getSelectedMedia()
|
||||||
val uris = ArrayList<Uri>(selectedItems.size)
|
val uris = ArrayList<Uri>(selectedItems.size)
|
||||||
selectedItems.forEach {
|
selectedItems.forEach {
|
||||||
val file = File(it.path)
|
addFileUris(File(it.path), uris)
|
||||||
addFileUris(file, uris)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (uris.isEmpty()) {
|
|
||||||
activity.toast(R.string.no_files_selected)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
val shareTitle = activity.resources.getString(R.string.share_via)
|
|
||||||
Intent().apply {
|
|
||||||
if (uris.size <= 1) {
|
|
||||||
action = Intent.ACTION_SEND
|
|
||||||
putExtra(Intent.EXTRA_STREAM, uris.first())
|
|
||||||
} else {
|
|
||||||
action = Intent.ACTION_SEND_MULTIPLE
|
|
||||||
putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris)
|
|
||||||
}
|
|
||||||
type = uris.getMimeType()
|
|
||||||
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
|
|
||||||
|
|
||||||
try {
|
|
||||||
activity.startActivity(Intent.createChooser(this, shareTitle))
|
|
||||||
} catch (e: TransactionTooLargeException) {
|
|
||||||
activity.toast(R.string.maximum_share_reached)
|
|
||||||
} catch (exception: Exception) {
|
|
||||||
activity.showErrorToast(exception.cause.toString())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
activity.shareUris(uris)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun addFileUris(file: File, uris: ArrayList<Uri>) {
|
private fun addFileUris(file: File, uris: ArrayList<Uri>) {
|
||||||
|
@ -0,0 +1,26 @@
|
|||||||
|
package com.simplemobiletools.filemanager.extensions
|
||||||
|
|
||||||
|
import android.app.Activity
|
||||||
|
import android.net.Uri
|
||||||
|
import com.simplemobiletools.commons.extensions.openFile
|
||||||
|
import com.simplemobiletools.commons.extensions.shareUri
|
||||||
|
import com.simplemobiletools.commons.extensions.shareUris
|
||||||
|
import com.simplemobiletools.filemanager.BuildConfig
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
|
||||||
|
fun Activity.shareUri(uri: Uri) {
|
||||||
|
shareUri(uri, BuildConfig.APPLICATION_ID)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Activity.shareUris(uris: ArrayList<Uri>) {
|
||||||
|
if (uris.size == 1) {
|
||||||
|
shareUri(uris.first())
|
||||||
|
} else {
|
||||||
|
shareUris(uris, BuildConfig.APPLICATION_ID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Activity.openFile(uri: Uri, forceChooser: Boolean) {
|
||||||
|
openFile(uri, forceChooser, BuildConfig.APPLICATION_ID)
|
||||||
|
}
|
@ -1,7 +1,5 @@
|
|||||||
package com.simplemobiletools.filemanager.fragments
|
package com.simplemobiletools.filemanager.fragments
|
||||||
|
|
||||||
import android.content.ActivityNotFoundException
|
|
||||||
import android.content.Intent
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
@ -12,12 +10,13 @@ import android.view.LayoutInflater
|
|||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import com.simplemobiletools.commons.dialogs.StoragePickerDialog
|
import com.simplemobiletools.commons.dialogs.StoragePickerDialog
|
||||||
import com.simplemobiletools.commons.extensions.*
|
import com.simplemobiletools.commons.extensions.deleteFiles
|
||||||
import com.simplemobiletools.commons.helpers.REAL_FILE_PATH
|
import com.simplemobiletools.commons.extensions.getFilenameFromPath
|
||||||
|
import com.simplemobiletools.commons.extensions.toast
|
||||||
|
import com.simplemobiletools.commons.extensions.updateTextColors
|
||||||
import com.simplemobiletools.commons.models.FileDirItem
|
import com.simplemobiletools.commons.models.FileDirItem
|
||||||
import com.simplemobiletools.commons.views.Breadcrumbs
|
import com.simplemobiletools.commons.views.Breadcrumbs
|
||||||
import com.simplemobiletools.commons.views.MyScalableRecyclerView
|
import com.simplemobiletools.commons.views.MyScalableRecyclerView
|
||||||
import com.simplemobiletools.filemanager.BuildConfig
|
|
||||||
import com.simplemobiletools.filemanager.R
|
import com.simplemobiletools.filemanager.R
|
||||||
import com.simplemobiletools.filemanager.activities.MainActivity
|
import com.simplemobiletools.filemanager.activities.MainActivity
|
||||||
import com.simplemobiletools.filemanager.activities.SimpleActivity
|
import com.simplemobiletools.filemanager.activities.SimpleActivity
|
||||||
@ -25,6 +24,7 @@ import com.simplemobiletools.filemanager.adapters.ItemsAdapter
|
|||||||
import com.simplemobiletools.filemanager.dialogs.CreateNewItemDialog
|
import com.simplemobiletools.filemanager.dialogs.CreateNewItemDialog
|
||||||
import com.simplemobiletools.filemanager.extensions.config
|
import com.simplemobiletools.filemanager.extensions.config
|
||||||
import com.simplemobiletools.filemanager.extensions.isPathOnRoot
|
import com.simplemobiletools.filemanager.extensions.isPathOnRoot
|
||||||
|
import com.simplemobiletools.filemanager.extensions.openFile
|
||||||
import com.simplemobiletools.filemanager.helpers.RootHelpers
|
import com.simplemobiletools.filemanager.helpers.RootHelpers
|
||||||
import com.stericson.RootTools.RootTools
|
import com.stericson.RootTools.RootTools
|
||||||
import kotlinx.android.synthetic.main.items_fragment.*
|
import kotlinx.android.synthetic.main.items_fragment.*
|
||||||
@ -224,48 +224,12 @@ class ItemsFragment : Fragment(), ItemsAdapter.ItemOperationsListener, Breadcrum
|
|||||||
if (isGetContentIntent) {
|
if (isGetContentIntent) {
|
||||||
(activity as MainActivity).pickedPath(path)
|
(activity as MainActivity).pickedPath(path)
|
||||||
} else {
|
} else {
|
||||||
fileClicked(path)
|
val file = File(path)
|
||||||
|
activity.openFile(Uri.fromFile(file), false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun fileClicked(path: String) {
|
|
||||||
val file = File(path)
|
|
||||||
val mimeType = path.getMimeTypeFromPath()
|
|
||||||
|
|
||||||
val uri = context.getFilePublicUri(file, BuildConfig.APPLICATION_ID)
|
|
||||||
Intent(Intent.ACTION_VIEW).apply {
|
|
||||||
setDataAndType(uri, mimeType)
|
|
||||||
flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
|
||||||
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
|
|
||||||
|
|
||||||
if (context.isNougatPlus()) {
|
|
||||||
putExtra(REAL_FILE_PATH, Uri.fromFile(file))
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
startActivity(this)
|
|
||||||
} catch (e: ActivityNotFoundException) {
|
|
||||||
if (!tryGenericMimeType(this, mimeType, file)) {
|
|
||||||
activity.toast(R.string.no_app_found)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun tryGenericMimeType(intent: Intent, mimeType: String, file: File): Boolean {
|
|
||||||
val uri = context.getFilePublicUri(file, BuildConfig.APPLICATION_ID)
|
|
||||||
val genericMimeType = getGenericMimeType(mimeType)
|
|
||||||
intent.setDataAndType(uri, genericMimeType)
|
|
||||||
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
|
|
||||||
return try {
|
|
||||||
startActivity(intent)
|
|
||||||
true
|
|
||||||
} catch (e: ActivityNotFoundException) {
|
|
||||||
false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun createNewItem() {
|
private fun createNewItem() {
|
||||||
CreateNewItemDialog(activity as SimpleActivity, currentPath) {
|
CreateNewItemDialog(activity as SimpleActivity, currentPath) {
|
||||||
if (it) {
|
if (it) {
|
||||||
@ -274,14 +238,6 @@ class ItemsFragment : Fragment(), ItemsAdapter.ItemOperationsListener, Breadcrum
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getGenericMimeType(mimeType: String): String {
|
|
||||||
if (!mimeType.contains("/"))
|
|
||||||
return mimeType
|
|
||||||
|
|
||||||
val type = mimeType.substring(0, mimeType.indexOf("/"))
|
|
||||||
return "$type/*"
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun breadcrumbClicked(id: Int) {
|
override fun breadcrumbClicked(id: Int) {
|
||||||
if (id == 0) {
|
if (id == 0) {
|
||||||
StoragePickerDialog(activity, currentPath) {
|
StoragePickerDialog(activity, currentPath) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user