Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit df689de9 authored by tibbi's avatar tibbi
Browse files

updating some third party intent handling

parent 41c13955
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@ buildscript {
        propMinSdkVersion = 16
        propTargetSdkVersion = propCompileSdkVersion
        propVersionCode = 1
        propVersionName = '3.11.52'
        propVersionName = '3.11.54'
        kotlin_version = '1.2.21'
        support_libs = '27.0.2'
    }
+1 −9
Original line number Diff line number Diff line
@@ -198,19 +198,11 @@ class FilePickerDialog(val activity: BaseSimpleActivity,
            val curPath = file.absolutePath
            val curName = curPath.getFilenameFromPath()
            val size = if (getProperFileSize) file.getProperSize(showHidden) else file.length()
            items.add(FileDirItem(curPath, curName, file.isDirectory, getChildren(file), size))
            items.add(FileDirItem(curPath, curName, file.isDirectory, file.getDirectChildrenCount(showHidden), size))
        }
        callback(items)
    }

    private fun getChildren(file: File): Int {
        return if (file.listFiles() == null || !file.isDirectory) {
            0
        } else {
            file.listFiles().filter { !it.isHidden || (it.isHidden && showHidden) }.size
        }
    }

    private fun containsDirectory(items: List<FileDirItem>) = items.any { it.isDirectory }

    override fun breadcrumbClicked(id: Int) {
+43 −25
Original line number Diff line number Diff line
@@ -126,13 +126,13 @@ fun Activity.launchViewIntent(url: String) {
    }.start()
}

fun Activity.shareUri(uri: Uri, applicationId: String) {
fun Activity.shareUriIntent(path: String, applicationId: String) {
    Thread {
        val newUri = ensurePublicUri(uri, applicationId)
        val newUri = getFinalUriFromPath(path, applicationId) ?: return@Thread
        Intent().apply {
            action = Intent.ACTION_SEND
            putExtra(Intent.EXTRA_STREAM, newUri)
            type = getUriMimeType(uri, newUri)
            type = getUriMimeType(path, newUri)
            addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
            if (resolveActivity(packageManager) != null) {
                try {
@@ -147,16 +147,23 @@ fun Activity.shareUri(uri: Uri, applicationId: String) {
    }.start()
}

fun Activity.shareUris(uris: ArrayList<Uri>, applicationId: String) {
fun Activity.sharePathsIntent(paths: ArrayList<String>, applicationId: String) {
    Thread {
        if (uris.size == 1) {
            shareUri(uris.first(), applicationId)
        if (paths.size == 1) {
            shareUriIntent(paths.first(), applicationId)
        } else {
            val newUris = uris.map { ensurePublicUri(it, applicationId) } as ArrayList<Uri>
            var mimeType = newUris.getMimeType()
            val uriPaths = ArrayList<String>()
            val newUris = paths.map {
                val uri = getFinalUriFromPath(it, applicationId) ?: return@Thread
                uriPaths.add(uri.path)
                uri
            } as ArrayList<Uri>

            var mimeType = uriPaths.getMimeType()
            if (mimeType.isEmpty() || mimeType == "*/*") {
                mimeType = uris.getMimeType()
                mimeType = paths.getMimeType()
            }

            Intent().apply {
                action = Intent.ACTION_SEND_MULTIPLE
                type = mimeType
@@ -177,12 +184,12 @@ fun Activity.shareUris(uris: ArrayList<Uri>, applicationId: String) {
    }.start()
}

fun Activity.setAs(uri: Uri, applicationId: String) {
fun Activity.setAsIntent(path: String, applicationId: String) {
    Thread {
        val newUri = ensurePublicUri(uri, applicationId)
        val newUri = getFinalUriFromPath(path, applicationId) ?: return@Thread
        Intent().apply {
            action = Intent.ACTION_ATTACH_DATA
            setDataAndType(newUri, getUriMimeType(uri, newUri))
            setDataAndType(newUri, getUriMimeType(path, newUri))
            addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
            val chooser = Intent.createChooser(this, getString(R.string.set_as))

@@ -195,14 +202,14 @@ fun Activity.setAs(uri: Uri, applicationId: String) {
    }.start()
}

fun Activity.openEditor(uri: Uri, applicationId: String) {
fun Activity.openEditorIntent(path: String, applicationId: String) {
    Thread {
        val newUri = ensurePublicUri(uri, applicationId)
        val newUri = getFinalUriFromPath(path, applicationId) ?: return@Thread
        Intent().apply {
            action = Intent.ACTION_EDIT
            setDataAndType(newUri, getUriMimeType(uri, newUri))
            setDataAndType(newUri, getUriMimeType(path, newUri))
            addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
            putExtra(MediaStore.EXTRA_OUTPUT, uri)
            putExtra(MediaStore.EXTRA_OUTPUT, newUri)

            if (resolveActivity(packageManager) != null) {
                startActivityForResult(this, REQUEST_EDIT_IMAGE)
@@ -213,15 +220,10 @@ fun Activity.openEditor(uri: Uri, applicationId: String) {
    }.start()
}

fun Activity.openFile(uri: Uri, forceChooser: Boolean, applicationId: String) {
fun Activity.openPathIntent(path: String, forceChooser: Boolean, applicationId: String) {
    Thread {
        val newUri = try {
            ensurePublicUri(uri, applicationId)
        } catch (e: Exception) {
            showErrorToast(e)
            return@Thread
        }
        val mimeType = getUriMimeType(uri, newUri)
        val newUri = getFinalUriFromPath(path, applicationId) ?: return@Thread
        val mimeType = getUriMimeType(path, newUri)
        Intent().apply {
            action = Intent.ACTION_VIEW
            setDataAndType(newUri, mimeType)
@@ -231,7 +233,7 @@ fun Activity.openFile(uri: Uri, forceChooser: Boolean, applicationId: String) {
                putExtra(IS_FROM_GALLERY, true)
            }

            putExtra(REAL_FILE_PATH, uri)
            putExtra(REAL_FILE_PATH, path)

            if (resolveActivity(packageManager) != null) {
                val chooser = Intent.createChooser(this, getString(R.string.open_with))
@@ -245,6 +247,22 @@ fun Activity.openFile(uri: Uri, forceChooser: Boolean, applicationId: String) {
    }.start()
}

fun Activity.getFinalUriFromPath(path: String, applicationId: String): Uri? {
    val uri = try {
        ensurePublicUri(path, applicationId)
    } catch (e: Exception) {
        showErrorToast(e)
        return null
    }

    if (uri == null) {
        toast(R.string.unknown_error_occurred)
        return null
    }

    return uri
}

fun Activity.tryGenericMimeType(intent: Intent, mimeType: String, uri: Uri): Boolean {
    var genericMimeType = mimeType.getGenericMimeType()
    if (genericMimeType.isEmpty()) {
+17 −3
Original line number Diff line number Diff line
@@ -255,7 +255,7 @@ fun Context.getFilenameFromUri(uri: Uri): String {
}

fun Context.getMimeTypeFromUri(uri: Uri): String {
    var mimetype = uri.path.getMimeTypeFromPath()
    var mimetype = uri.path.getMimeType()
    if (mimetype.isEmpty()) {
        try {
            mimetype = contentResolver.getType(uri)
@@ -265,6 +265,20 @@ fun Context.getMimeTypeFromUri(uri: Uri): String {
    return mimetype
}

fun Context.ensurePublicUri(path: String, applicationId: String): Uri? {
    return if (isPathOnOTG(path)) {
        getDocumentFile(path)?.uri
    } else {
        val uri = Uri.parse(path)
        if (uri.scheme == "content") {
            uri
        } else {
            val file = File(uri.path)
            getFilePublicUri(file, applicationId)
        }
    }
}

fun Context.ensurePublicUri(uri: Uri, applicationId: String): Uri {
    return if (uri.scheme == "content") {
        uri
@@ -329,8 +343,8 @@ fun Context.updateSDCardPath() {
    }.start()
}

fun Context.getUriMimeType(oldUri: Uri, newUri: Uri): String {
    var mimeType = getMimeTypeFromUri(oldUri)
fun Context.getUriMimeType(path: String, newUri: Uri): String {
    var mimeType = path.getMimeType()
    if (mimeType.isEmpty()) {
        mimeType = getMimeTypeFromUri(newUri)
    }
+1 −1
Original line number Diff line number Diff line
@@ -15,7 +15,7 @@ fun File.isImageSlow() = absolutePath.isImageFast() || getMimeType().startsWith(
fun File.isVideoSlow() = absolutePath.isVideoFast() || getMimeType().startsWith("video")
fun File.isAudioSlow() = absolutePath.isAudioFast() || getMimeType().startsWith("audio")

fun File.getMimeType() = absolutePath.getMimeTypeFromPath()
fun File.getMimeType() = absolutePath.getMimeType()

fun File.getCompressionFormat() = when (extension.toLowerCase()) {
    "png" -> Bitmap.CompressFormat.PNG
Loading